3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-10-31 11:42:28 +00:00

add assume-eqs and extensionality

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2025-10-17 09:37:11 +02:00
parent 981c7d27ea
commit df62e5e9e6
6 changed files with 98 additions and 22 deletions

View file

@ -298,4 +298,19 @@ void finite_set_axioms::subset_axiom(expr* a) {
clause2.push_back(a);
clause2.push_back(m.mk_not(eq));
m_add_clause(clause2);
}
void finite_set_axioms::extensionality_axiom(expr *a, expr* b) {
// a != b => set.in (set.diff(a, b) a) != set.in (set.diff(a, b) b)
expr_ref diff_ab(u.mk_difference(a, b), m);
expr_ref a_eq_b(m.mk_eq(a, b), m);
expr_ref diff_in_a(u.mk_in(diff_ab, a), m);
expr_ref diff_in_b(u.mk_in(diff_ab, b), m);
// (a != b) => (x in diff_ab != x in diff_ba)
expr_ref_vector clause(m);
clause.push_back(a_eq_b);
clause.push_back(m.mk_not(m.mk_iff(diff_in_a, diff_in_b)));
m_add_clause(clause);
}