From 4ad33caf99de771239d01e147ea68d5360a70b15 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 09:25:30 +0000 Subject: [PATCH] Revert finite_set_decl_plugin changes and disable difference rule Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --- src/ast/finite_set_decl_plugin.cpp | 5 +---- src/ast/rewriter/finite_set_rewriter.cpp | 20 ++++---------------- src/ast/rewriter/finite_set_rewriter.h | 2 +- src/test/finite_set_rewriter.cpp | 5 +++-- 4 files changed, 9 insertions(+), 23 deletions(-) diff --git a/src/ast/finite_set_decl_plugin.cpp b/src/ast/finite_set_decl_plugin.cpp index 3c8c14042..3a3a96bce 100644 --- a/src/ast/finite_set_decl_plugin.cpp +++ b/src/ast/finite_set_decl_plugin.cpp @@ -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: diff --git a/src/ast/rewriter/finite_set_rewriter.cpp b/src/ast/rewriter/finite_set_rewriter.cpp index 66399747c..5a3f5cac2 100644 --- a/src/ast/rewriter/finite_set_rewriter.cpp +++ b/src/ast/rewriter/finite_set_rewriter.cpp @@ -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; } diff --git a/src/ast/rewriter/finite_set_rewriter.h b/src/ast/rewriter/finite_set_rewriter.h index 78203cc8e..e282d77aa 100644 --- a/src/ast/rewriter/finite_set_rewriter.h +++ b/src/ast/rewriter/finite_set_rewriter.h @@ -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. diff --git a/src/test/finite_set_rewriter.cpp b/src/test/finite_set_rewriter.cpp index 3aaf9ec83..2f762ffb4 100644 --- a/src/test/finite_set_rewriter.cpp +++ b/src/test/finite_set_rewriter.cpp @@ -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() {