mirror of
https://github.com/Z3Prover/z3
synced 2025-10-31 19:52:29 +00:00
test
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
a1b831a3e1
commit
f2260d959d
2 changed files with 24 additions and 6 deletions
|
|
@ -828,16 +828,28 @@ class finite_set_inverter : public iexpr_inverter {
|
|||
public:
|
||||
finite_set_inverter(ast_manager& m): iexpr_inverter(m), fs(m) {}
|
||||
|
||||
family_id get_fid() const override { return fs.get_family_id(); }
|
||||
|
||||
bool operator()(func_decl* f, unsigned num, expr* const* args, expr_ref& r) override {
|
||||
switch (f->get_decl_kind()) {
|
||||
case OP_FINITE_SET_UNION:
|
||||
// x union y -> fresh
|
||||
// x := fresh, y := empty
|
||||
// x union y -> x
|
||||
// y := x
|
||||
if (num == 2 && uncnstr(args[0]) && uncnstr(args[1])) {
|
||||
mk_fresh_uncnstr_var_for(f, r);
|
||||
r = args[0];
|
||||
if (m_mc) {
|
||||
add_def(args[0], r);
|
||||
add_def(args[1], fs.mk_empty(args[1]->get_sort()));
|
||||
add_def(args[1], r);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
case OP_FINITE_SET_INTERSECT:
|
||||
// x intersect y -> x
|
||||
// y := x
|
||||
if (num == 2 && uncnstr(args[0]) && uncnstr(args[1])) {
|
||||
r = args[0];
|
||||
if (m_mc) {
|
||||
add_def(args[1], r);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1001,6 +1013,7 @@ expr_inverter::expr_inverter(ast_manager& m): iexpr_inverter(m) {
|
|||
add(alloc(basic_expr_inverter, m, *this));
|
||||
add(alloc(seq_expr_inverter, m));
|
||||
//add(alloc(pb_expr_inverter, m));
|
||||
add(alloc(finite_set_inverter, m));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ Notes:
|
|||
#include "ast/rewriter/pb_rewriter.h"
|
||||
#include "ast/rewriter/recfun_rewriter.h"
|
||||
#include "ast/rewriter/seq_rewriter.h"
|
||||
#include "ast/rewriter/finite_set_rewriter.h"
|
||||
#include "ast/rewriter/rewriter_def.h"
|
||||
#include "ast/rewriter/var_subst.h"
|
||||
#include "ast/rewriter/der.h"
|
||||
|
|
@ -55,6 +56,7 @@ struct th_rewriter_cfg : public default_rewriter_cfg {
|
|||
seq_rewriter m_seq_rw;
|
||||
char_rewriter m_char_rw;
|
||||
recfun_rewriter m_rec_rw;
|
||||
finite_set_rewriter m_fs_rw;
|
||||
arith_util m_a_util;
|
||||
bv_util m_bv_util;
|
||||
der m_der;
|
||||
|
|
@ -229,6 +231,8 @@ struct th_rewriter_cfg : public default_rewriter_cfg {
|
|||
return m_char_rw.mk_app_core(f, num, args, result);
|
||||
if (fid == m_rec_rw.get_fid())
|
||||
return m_rec_rw.mk_app_core(f, num, args, result);
|
||||
if (fid == m_fs_rw.get_fid())
|
||||
return m_fs_rw.mk_app_core(f, num, args, result);
|
||||
return BR_FAILED;
|
||||
}
|
||||
|
||||
|
|
@ -883,6 +887,7 @@ struct th_rewriter_cfg : public default_rewriter_cfg {
|
|||
m_seq_rw(m, p),
|
||||
m_char_rw(m),
|
||||
m_rec_rw(m),
|
||||
m_fs_rw(m),
|
||||
m_a_util(m),
|
||||
m_bv_util(m),
|
||||
m_der(m),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue