3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-04 06:16:09 +00:00

First step towards not-reusing variables

This commit is contained in:
CEisenhofer 2026-05-20 10:11:50 +02:00
parent 9bb0f7e337
commit dd00dd7362
6 changed files with 90 additions and 10 deletions

View file

@ -475,7 +475,7 @@ namespace seq {
// var may be s_var or s_power; sgraph::subst uses pointer identity matching
SASSERT(var->is_var() || var->is_power() || var->is_unit());
SASSERT(!var->is_unit() || repl->is_char_or_unit());
// SASSERT(!repl->collect_tokens().contains(var)); // for now - maybe we want to drop this later again
SASSERT(!repl->collect_tokens().contains(var)); // for now - maybe we want to drop this later again
}
// an eliminating substitution does not contain the variable in the replacement
@ -694,6 +694,8 @@ namespace seq {
backtrack_reason reason() const { return m_reason; }
void clear_reason() { m_reason = backtrack_reason::unevaluated; }
void set_child_conflict() {
SASSERT(m_reason == backtrack_reason::unevaluated);
SASSERT(!m_conflict_internal);
@ -1118,6 +1120,12 @@ namespace seq {
// stores it in projection_re iff SCC coverage has grown.
bool try_extract_partial_projection(euf::snode* root_re, euf::snode*& projection_re);
euf::snode* get_slice(euf::snode* v, expr* left, expr* right);
euf::snode* get_tail(euf::snode* v, expr* cnt, bool fwd = true);
euf::snode* get_tail(euf::snode* v, unsigned cnt, bool fwd = true);
// Apply the Parikh image filter to a node: generate modular length
// constraints from regex memberships and append them to the node's
// constraints. Also performs a lightweight feasibility pre-check;