/*++ Copyright (c) 2023 Microsoft Corporation Module Name: euf_arith_plugin.h Abstract: plugin structure for arithmetic Author: Nikolaj Bjorner (nbjorner) 2023-11-11 --*/ #pragma once #include "ast/arith_decl_plugin.h" #include "ast/euf/euf_plugin.h" #include "ast/euf/euf_ac_plugin.h" namespace euf { class egraph; class arith_plugin : public plugin { enum undo_t { undo_add, undo_mul }; arith_util a; svector m_undo; ac_plugin m_add, m_mul; public: arith_plugin(egraph& g); theory_id get_id() const override { return a.get_family_id(); } void register_node(enode* n) override; void merge_eh(enode* n1, enode* n2) override; void diseq_eh(enode* eq) override {} void undo() override; void push_scope_eh() override { m_add.push_scope_eh(); m_mul.push_scope_eh(); } void propagate() override; std::ostream& display(std::ostream& out) const override; void collect_statistics(statistics& st) const override { m_add.collect_statistics(st); m_mul.collect_statistics(st); } }; }