mirror of
https://github.com/Z3Prover/z3
synced 2025-08-02 09:20:22 +00:00
enable theory propagation of regex accept condition
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
be36a8fd80
commit
3b1149330d
4 changed files with 51 additions and 10 deletions
|
@ -36,11 +36,19 @@ namespace smt {
|
|||
m_lit(l), m_s(s), m_re(r), m_active(true) {}
|
||||
};
|
||||
|
||||
struct propagation_lit {
|
||||
literal m_lit;
|
||||
literal m_trigger;
|
||||
propagation_lit(literal lit, literal t): m_lit(lit), m_trigger(t) {}
|
||||
propagation_lit(literal lit): m_lit(lit), m_trigger(null_literal) {}
|
||||
propagation_lit(): m_lit(null_literal), m_trigger(null_literal) {}
|
||||
};
|
||||
|
||||
theory_seq& th;
|
||||
context& ctx;
|
||||
ast_manager& m;
|
||||
vector<s_in_re> m_s_in_re;
|
||||
scoped_vector<literal> m_to_propagate;
|
||||
scoped_vector<propagation_lit> m_to_propagate;
|
||||
|
||||
seq_util& u();
|
||||
class seq_util::re& re();
|
||||
|
@ -55,13 +63,13 @@ namespace smt {
|
|||
|
||||
bool coallesce_in_re(literal lit);
|
||||
|
||||
bool propagate(literal lit);
|
||||
bool propagate(literal lit, literal& trigger);
|
||||
|
||||
bool block_unfolding(literal lit, unsigned i);
|
||||
|
||||
void propagate_nullable(literal lit, expr* s, unsigned idx, expr* r);
|
||||
|
||||
bool propagate_derivative(literal lit, expr* e, expr* s, expr* i, unsigned idx, expr* r);
|
||||
bool propagate_derivative(literal lit, expr* e, expr* s, expr* i, unsigned idx, expr* r, literal& trigger);
|
||||
|
||||
expr_ref mk_first(expr* r);
|
||||
|
||||
|
@ -88,6 +96,8 @@ namespace smt {
|
|||
|
||||
void pop_scope(unsigned num_scopes) { m_to_propagate.pop_scope(num_scopes); }
|
||||
|
||||
bool can_propagate() const;
|
||||
|
||||
bool propagate();
|
||||
|
||||
void propagate_in_re(literal lit);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue