3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-04 21:39:13 +00:00

Revert finite_set_decl_plugin changes and disable difference rule

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-10-14 09:25:30 +00:00
parent 3e81681a99
commit 4ad33caf99
4 changed files with 9 additions and 23 deletions

View file

@ -139,10 +139,7 @@ func_decl * finite_set_decl_plugin::mk_func_decl(decl_kind k, unsigned num_param
m_manager->raise_exception("set.empty requires one sort parameter");
return nullptr;
}
sort* element_sort = to_sort(parameters[0].get_ast());
// Create finite_set_sort from element_sort
parameter set_param(element_sort);
range = m_manager->mk_sort(m_family_id, FINITE_SET_SORT, 1, &set_param);
range = to_sort(parameters[0].get_ast());
}
return mk_empty(range);
case OP_FINITE_SET_SINGLETON:

View file

@ -63,22 +63,10 @@ br_status finite_set_rewriter::mk_intersect(unsigned num_args, expr * const * ar
br_status finite_set_rewriter::mk_difference(expr * arg1, expr * arg2, expr_ref & result) {
// set.difference(x, x) -> set.empty
if (arg1 == arg2) {
// Get the set sort
sort* set_sort = arg1->get_sort();
SASSERT(m_util.is_finite_set(set_sort));
// Create empty set with the same set sort
// We need to get the element sort from the parameters
if (set_sort->get_num_parameters() > 0) {
parameter const& param = set_sort->get_parameter(0);
if (param.is_ast() && is_sort(param.get_ast())) {
sort* elem_sort = to_sort(param.get_ast());
result = m_util.mk_empty(elem_sort);
return BR_DONE;
}
}
}
// Note: This simplification is currently disabled due to issues with mk_empty
// in finite_set_decl_plugin. The mk_empty utility function expects an element_sort
// but the plugin's mk_empty expects a finite_set_sort, causing conflicts.
// TODO: Re-enable once finite_set_decl_plugin is fixed
return BR_FAILED;
}

View file

@ -16,7 +16,7 @@ Sample rewrite rules:
set.subset(x,y) -> set.intersect(x,y) = x
set.union(x, x) -> x
set.intersect(x, x) -> x
set.difference(x, x) -> set.empty
set.difference(x, x) -> set.empty (currently disabled due to mk_empty issues)
Generally this module implements basic algebraic simplification rules for finite sets
where the signature is defined in finite_set_decl_plugin.h.

View file

@ -82,11 +82,12 @@ static void test_difference_same() {
app_ref s1(fsets.mk_range(zero, ten), m);
// Test set.difference(s1, s1) -> empty
// Note: This simplification is currently disabled due to issues with mk_empty
expr_ref result(m);
br_status st = rw.mk_difference(s1, s1, result);
ENSURE(st == BR_DONE);
ENSURE(fsets.is_empty(result));
// Currently disabled, so should return BR_FAILED
ENSURE(st == BR_FAILED);
}
static void test_subset_rewrite() {