3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-05-05 09:55:15 +00:00

allow literals to be false in model validation - we can't enforce lack of propagation after internalizing literals, especially if literals are repeated (modulo permutation of equality)

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2026-04-02 12:51:47 -07:00
parent 3629cd9447
commit e59ee306e9
2 changed files with 7 additions and 11 deletions

View file

@ -697,9 +697,10 @@ namespace seq {
return nullptr; return nullptr;
euf::snode* rebuilt = nullptr; euf::snode* rebuilt = nullptr;
for (unsigned k = 0; k < result.size(); ++k) for (auto tok : result)
rebuilt = (k == 0) ? result[k] : sg.mk_concat(rebuilt, result[k]); rebuilt = rebuilt ? sg.mk_concat(rebuilt, tok) : tok;
if (!rebuilt) rebuilt = sg.mk_empty_seq(side->get_sort()); if (!rebuilt)
rebuilt = sg.mk_empty_seq(side->get_sort());
return rebuilt; return rebuilt;
} }

View file

@ -702,16 +702,11 @@ namespace smt {
break; break;
case l_false: case l_false:
// this should not happen because nielsen checks for this before returning a satisfying path. // this should not happen because nielsen checks for this before returning a satisfying path.
IF_VERBOSE(0, verbose_stream() IF_VERBOSE(1, verbose_stream()
<< "nseq final_check: nielsen assumption " << c.fml << " is false\n";); << "nseq final_check: nielsen assumption " << c.fml << " is false\n";);
ctx.force_phase(lit); ctx.force_phase(lit);
if (!was_internalized) { has_undef = true;
has_undef = true; ctx.force_phase(lit);
ctx.force_phase(lit);
break;
}
TRACE(seq, tout << "assigned to false: " << c.fml << "\n");
UNREACHABLE();
break; break;
} }
} }