mirror of
https://github.com/Z3Prover/z3
synced 2025-11-03 04:57:52 +00:00
Fix finite_set::is_fully_interp to check element sort interpretation (#7982)
* Initial plan * Implement finite_set is_fully_interp to check element sort Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Refine is_fully_interp implementation with SASSERT Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
parent
e781648499
commit
2bb22c6489
2 changed files with 36 additions and 1 deletions
|
|
@ -183,7 +183,9 @@ expr * finite_set_decl_plugin::get_some_value(sort * s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool finite_set_decl_plugin::is_fully_interp(sort * s) const {
|
bool finite_set_decl_plugin::is_fully_interp(sort * s) const {
|
||||||
return false;
|
SASSERT(is_finite_set(s));
|
||||||
|
sort* element_sort = get_element_sort(s);
|
||||||
|
return element_sort && m_manager->is_fully_interp(element_sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool finite_set_decl_plugin::is_value(app * e) const {
|
bool finite_set_decl_plugin::is_value(app * e) const {
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,40 @@ static void tst_finite_set_map_select() {
|
||||||
ENSURE(selected_set->get_sort() == finite_set_int.get());
|
ENSURE(selected_set->get_sort() == finite_set_int.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tst_finite_set_is_fully_interp() {
|
||||||
|
ast_manager m;
|
||||||
|
reg_decl_plugins(m);
|
||||||
|
|
||||||
|
finite_set_util fsets(m);
|
||||||
|
arith_util arith(m);
|
||||||
|
|
||||||
|
// Test with Int sort (should be fully interpreted)
|
||||||
|
sort_ref int_sort(arith.mk_int(), m);
|
||||||
|
parameter int_param(int_sort.get());
|
||||||
|
sort_ref finite_set_int(m.mk_sort(fsets.get_family_id(), FINITE_SET_SORT, 1, &int_param), m);
|
||||||
|
|
||||||
|
ENSURE(m.is_fully_interp(int_sort));
|
||||||
|
ENSURE(m.is_fully_interp(finite_set_int));
|
||||||
|
|
||||||
|
// Test with Bool sort (should be fully interpreted)
|
||||||
|
sort_ref bool_sort(m.mk_bool_sort(), m);
|
||||||
|
parameter bool_param(bool_sort.get());
|
||||||
|
sort_ref finite_set_bool(m.mk_sort(fsets.get_family_id(), FINITE_SET_SORT, 1, &bool_param), m);
|
||||||
|
|
||||||
|
ENSURE(m.is_fully_interp(bool_sort));
|
||||||
|
ENSURE(m.is_fully_interp(finite_set_bool));
|
||||||
|
|
||||||
|
// Test with uninterpreted sort (should not be fully interpreted)
|
||||||
|
sort_ref uninterp_sort(m.mk_uninterpreted_sort(symbol("U")), m);
|
||||||
|
parameter uninterp_param(uninterp_sort.get());
|
||||||
|
sort_ref finite_set_uninterp(m.mk_sort(fsets.get_family_id(), FINITE_SET_SORT, 1, &uninterp_param), m);
|
||||||
|
|
||||||
|
ENSURE(!m.is_fully_interp(uninterp_sort));
|
||||||
|
ENSURE(!m.is_fully_interp(finite_set_uninterp));
|
||||||
|
}
|
||||||
|
|
||||||
void tst_finite_set() {
|
void tst_finite_set() {
|
||||||
tst_finite_set_basic();
|
tst_finite_set_basic();
|
||||||
tst_finite_set_map_select();
|
tst_finite_set_map_select();
|
||||||
|
tst_finite_set_is_fully_interp();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue