mirror of
https://github.com/Z3Prover/z3
synced 2025-08-21 02:30:23 +00:00
seq
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
895d032996
commit
932a3a8387
2 changed files with 199 additions and 53 deletions
|
@ -28,6 +28,22 @@ Revision History:
|
|||
namespace smt {
|
||||
|
||||
class theory_seq : public theory {
|
||||
struct config {
|
||||
static const bool preserve_roots = true;
|
||||
static const unsigned max_trail_sz = 16;
|
||||
static const unsigned factor = 2;
|
||||
typedef small_object_allocator allocator;
|
||||
};
|
||||
typedef scoped_dependency_manager<enode_pair> enode_pair_dependency_manager;
|
||||
typedef enode_pair_dependency_manager::dependency enode_pair_dependency;
|
||||
struct enode_pair_dependency_array_config : public config {
|
||||
typedef enode_pair_dependency* value;
|
||||
typedef dummy_value_manager<value> value_manager;
|
||||
static const bool ref_count = false;
|
||||
};
|
||||
typedef parray_manager<enode_pair_dependency_array_config> enode_pair_dependency_array_manager;
|
||||
typedef enode_pair_dependency_array_manager::ref enode_pair_dependency_array;
|
||||
|
||||
typedef union_find<theory_seq> th_union_find;
|
||||
typedef trail_stack<theory_seq> th_trail_stack;
|
||||
struct stats {
|
||||
|
@ -35,17 +51,23 @@ namespace smt {
|
|||
void reset() { memset(this, 0, sizeof(stats)); }
|
||||
unsigned m_num_splits;
|
||||
};
|
||||
ast_manager& m;
|
||||
expr_ref_vector m_rep; // unification representative.
|
||||
vector<expr_array> m_lhs, m_rhs; // persistent sets of equalities.
|
||||
unsigned m_eqs_head; // index of unprocessed equation.
|
||||
enode_pair_vector m_deps; // TBD - convert to dependency structure.
|
||||
ast_manager& m;
|
||||
small_object_allocator m_alloc;
|
||||
enode_pair_dependency_array_config::value_manager m_dep_array_value_manager;
|
||||
enode_pair_dependency_manager m_dm;
|
||||
enode_pair_dependency_array_manager m_dam;
|
||||
expr_ref_vector m_rep; // unification representative.
|
||||
vector<expr_array> m_lhs, m_rhs; // persistent sets of equalities.
|
||||
vector<enode_pair_dependency_array> m_deps;
|
||||
|
||||
unsigned m_eqs_head; // index of unprocessed equation. deprecate
|
||||
|
||||
|
||||
|
||||
expr_ref_vector m_ineqs; // inequalities to check
|
||||
expr_ref_vector m_axioms;
|
||||
unsigned m_axioms_head;
|
||||
bool m_used; // deprecate
|
||||
bool m_incomplete;
|
||||
th_rewriter m_rewrite;
|
||||
seq_util m_util;
|
||||
arith_util m_autil;
|
||||
|
@ -69,18 +91,31 @@ namespace smt {
|
|||
virtual char const * get_name() const { return "seq"; }
|
||||
virtual theory_var mk_var(enode* n);
|
||||
|
||||
final_check_status check_ineqs();
|
||||
bool check_ineqs();
|
||||
bool pre_process_eqs(bool simplify_or_solve);
|
||||
bool simplify_eqs();
|
||||
bool simplify_eq(expr* l, expr* r, enode_pair_vector& deps);
|
||||
bool simplify_eq(expr* l, expr* r, enode_pair_dependency* deps);
|
||||
bool solve_unit_eq(expr* l, expr* r, enode_pair_dependency* deps);
|
||||
bool solve_basic_eqs();
|
||||
bool simplify_and_solve_eqs();
|
||||
bool occurs(expr* a, expr* b);
|
||||
bool is_var(expr* b);
|
||||
void add_solution(expr* l, expr* r, enode_pair_dependency* dep);
|
||||
|
||||
final_check_status add_axioms();
|
||||
|
||||
void assert_axiom(expr_ref& e);
|
||||
void create_axiom(expr_ref& e);
|
||||
expr_ref canonize(expr* e, enode_pair_vector& eqs);
|
||||
expr_ref expand(expr* e, enode_pair_vector& eqs);
|
||||
expr_ref canonize(expr* e, enode_pair_dependency*& eqs);
|
||||
expr_ref expand(expr* e, enode_pair_dependency*& eqs);
|
||||
void add_dependency(enode_pair_dependency*& dep, enode* a, enode* b);
|
||||
enode_pair_dependency* leaf(enode* a, enode* b);
|
||||
enode_pair_dependency* join(enode_pair_dependency* a, enode_pair_dependency* b);
|
||||
|
||||
void propagate_eq(bool_var v, expr* e1, expr* e2);
|
||||
expr_ref mk_skolem(char const* name, expr* e1, expr* e2);
|
||||
|
||||
void set_incomplete(app* term);
|
||||
public:
|
||||
theory_seq(ast_manager& m);
|
||||
virtual void init_model(model_generator & mg) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue