3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-06-19 15:16:29 +00:00

Add simplify_ite_rec and eval for two-phase derivative

- Add simplify_ite post-processing in operator() to simplify ITE conditions
- Add simplify_ite_rec(cond, sign, r) for propagating condition truth values
- Handles c == cond, x=ch1 vs x=ch2 with different constants
- Add eval(ele, d) for efficient two-phase: symbolic derivative + concrete eval
- mk_derivative uses two-phase pattern: m_derive(r) then m_derive.eval(ele, d)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Nikolaj Bjorner 2026-06-03 14:25:03 -07:00
parent 7dc25e73d5
commit f8925ca6fa
3 changed files with 150 additions and 1 deletions

View file

@ -2918,7 +2918,9 @@ expr_ref seq_rewriter::mk_derivative(expr* r) {
}
expr_ref seq_rewriter::mk_derivative(expr* ele, expr* r) {
return m_derive(ele, r);
// Compute symbolic derivative (cached per regex), then evaluate for concrete element
expr_ref d = m_derive(r);
return m_derive.eval(ele, d);
}