3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-02-20 07:24:40 +00:00
Commit graph

3527 commits

Author SHA1 Message Date
Nikolaj Bjorner
c832802183 disable tracking literals, they are not used
added trivial rewrites for set.size
2025-10-26 16:21:33 +01:00
Nikolaj Bjorner
a66cb88c78 fix build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-26 15:35:59 +01:00
Lev Nachmanson
0d285a9b41 add the "noexcept" keyword to value_score=(value_score&&) declaration 2025-10-26 15:35:24 +01:00
Nikolaj Bjorner
1477ce2a99 build fixes
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-26 15:35:24 +01:00
Copilot
0d85b86334 Update Z3_mk_datatype_sort API to accept array of sort parameters and add Z3_mk_polymorphic_datatype (#7966)
* Initial plan

* Update Z3_mk_datatype_sort API to accept array of parameters

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Update language bindings for parametric datatype sort API

- Python: Updated DatatypeSort() to accept optional params list
- OCaml: Added mk_sort_ref_p/mk_sort_ref_ps for parametric datatypes
- .NET: Added MkDatatypeSortRef() methods with optional params
- Java: Added mkDatatypeSortRef() methods with optional params
- All changes maintain backward compatibility

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix .NET build error - rename params to parameters

The 'params' keyword is reserved in C#, causing compilation errors.
Renamed parameter from 'params' to 'parameters' in MkDatatypeSortRef methods.

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Add unit test for parametric datatypes

Added test_parametric_datatype.cpp to demonstrate polymorphic datatypes.
The test creates two concrete instantiations of a generic pair concept:
- pair_int_real with fields (first:Int, second:Real)
- pair_real_int with fields (first:Real, second:Int)
Then verifies that accessors work correctly and type checking is enforced.

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Implement polymorphic type variables support for parametric datatypes

- Modified datatype_decl_plugin to allow type variables as parameters
- Updated mk_datatype_decl to extract type variables from field sorts
- Type variables are collected in order of first appearance
- Revised unit test to use Z3_mk_type_variable for polymorphic datatypes
- Test creates pair datatype with type variables alpha and beta
- Successfully instantiates with concrete types (pair Int Real) and (pair Real Int)
- Verifies accessor types match and equality terms are well-typed
- All tests pass

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Add Z3_mk_polymorphic_datatype API and refactor datatype creation

- Added new API Z3_mk_polymorphic_datatype to z3_api.h
- Renamed static mk_datatype_decl to api_datatype_decl in api_datatype.cpp
- Modified api_datatype_decl to accept explicit type parameters
- Updated all callers to use renamed function
- Added test_polymorphic_datatype_api demonstrating new API usage
- Both tests pass successfully

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Remove type variable collection logic from constructors

Removed the logic for collecting type variables from field sorts based on constructors.

* Update comments on parameter handling in api_datatype.cpp

Clarify usage of parameters in API documentation.

* Fix OCaml build error - use list instead of array for mk_datatype_sort

Changed mk_sort_ref to pass empty list [] instead of empty array [||].
Changed mk_sort_ref_p to pass params list directly instead of converting to array.
Z3native.mk_datatype_sort expects a list, not an array.

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Add polymorphic datatype example to C++ examples

Added polymorphic_datatype_example() demonstrating:
- Creating type variables alpha and beta with Z3_mk_type_variable
- Defining parametric Pair datatype with fields of type alpha and beta
- Instantiating with concrete types (Pair Int Real) and (Pair Real Int)
- Getting constructors and accessors from instantiated datatypes
- Creating constants and expressions using the polymorphic types
- Verifying type correctness with equality (= (first p1) (second p2))

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>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-26 15:32:21 +01:00
Lev Nachmanson
23ce6917c5 parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
6bca12d399 parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
e75da050d2 parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
4f93fc7b2a parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
5a3d33a615 parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
6146fe9ff8 parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
0a2328af1d parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:20 +01:00
Lev Nachmanson
0fbf4010a5 param eval order 2025-10-26 15:32:20 +01:00
Lev Nachmanson
b22f4d8802 param eval 2025-10-26 15:32:20 +01:00
Lev Nachmanson
e113d39aa8 parameter evaluation order 2025-10-26 15:32:20 +01:00
Lev Nachmanson
28c625a170 parameter eval order 2025-10-26 15:32:19 +01:00
Lev Nachmanson
1aaf2f8448 param order evaluation 2025-10-26 15:32:19 +01:00
Lev Nachmanson
97bb035416 param order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:19 +01:00
Lev Nachmanson
74c28532f4 param order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-10-26 15:32:19 +01:00
Nikolaj Bjorner
f8b2268424 base implementation for cardinality constraints
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-26 10:35:37 +01:00
Nikolaj Bjorner
4068460a0f fix bogus axioms
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-24 13:35:41 +02:00
Copilot
bfe6670b73
Fix finite_set sort cardinality computation for finite base sorts (#7997)
* Initial plan

* Implement cardinality computation for finite_set sorts

- Modified mk_sort in finite_set_decl_plugin.cpp to compute 2^|s| for finite base sorts
- If base sort size > 30, mark finite_set sort as very_big
- Added comprehensive tests to verify sort size calculations
- All tests pass successfully

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Update finite_set_decl_plugin.cpp

* Fix unit tests for infinite base sorts

Updated test to check is_infinite() instead of is_very_big() for FiniteSet(Int) since infinite element sorts now result in infinite FiniteSet sorts (not very_big). Also updated comment to clarify the behavior.

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>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-23 17:30:17 +02:00
Nikolaj Bjorner
4c67a7271e extend proof logging
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-23 09:48:43 +02:00
Nikolaj Bjorner
b96624727d remove ad-hoc membership axioms, enable boundary point saturatino
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-23 09:42:25 +02:00
Nikolaj Bjorner
2e4402c8f3 add interpretations when there are ranges
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-20 23:21:30 +02:00
Nikolaj Bjorner
65f38eac16 fixup proof log annotations of rules
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-19 10:04:18 +02:00
Nikolaj Bjorner
6485808b49 adding proof hint output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-18 19:26:19 +02:00
Copilot
eb10ab1633
Rename set.select to set.filter and OP_FINITE_SET_SELECT to OP_FINITE_SET_FILTER (#7989)
* Initial plan

* Rename set.select to set.filter and OP_FINITE_SET_SELECT to OP_FINITE_SET_FILTER

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>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-18 17:16:32 +02:00
Nikolaj Bjorner
ba5bc90d7c remove debug code
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-18 13:34:27 +02:00
Nikolaj Bjorner
7d585b5cfd fix build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-18 13:30:46 +02:00
Nikolaj Bjorner
d6908a3d4b support AC parsing
By tagging union and intersection as AC we allow parsing set union and intersection as n-ary functions.
The internal representation remains binary.
2025-10-17 14:49:43 +02:00
Nikolaj Bjorner
df62e5e9e6 add assume-eqs and extensionality
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-17 09:37:11 +02:00
Nikolaj Bjorner
981c7d27ea adding factory for model initialization 2025-10-16 22:43:20 +02:00
Nikolaj Bjorner
9e79fe0a51 merge comment
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-16 13:39:17 +02:00
Copilot
0371bbd192
Extend finite_set_decl_plugin::is_value to support unions of empty/singleton sets (#7980)
* Initial plan

* Initial state - all tests passing

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Implement is_value for unions of empty/singleton sets

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>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-16 13:36:55 +02:00
Nikolaj Bjorner
cc8bfd7890 add fintie_set_value_factory outline
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-16 13:27:26 +02:00
Nikolaj Bjorner
b53e87dcba updated with immediate axioms
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-16 09:20:46 +02:00
Copilot
2bb22c6489
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>
2025-10-15 21:47:32 +02:00
Nikolaj Bjorner
f22ef75d3e update header
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-15 20:51:40 +02:00
Nikolaj Bjorner
ce60a8c5c5 fix merge issues
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-15 18:50:59 +02:00
Copilot
2e7f80f597
Add comprehensive algebraic rewrite rules to finite_set_rewriter (#7975)
* Initial plan

* Add comprehensive rewrite rules for finite set operations

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Add comprehensive unit tests for finite set rewrite rules

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix order of checks in mk_in to handle singleton same element case first

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>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-15 18:46:10 +02:00
kper
7446112fbe
Implement more cases for finite_set_decl_plugin::are_distinct (#7978)
* Implement more cases for finite_set_decl_plugin::are_distinct

* Adapted distinctive checks for finite sets
2025-10-15 14:35:57 +02:00
kper
b24aec3c4c
Fixed tests by making methods public for finite sets (#7977) 2025-10-15 14:03:00 +02:00
Nikolaj Bjorner
f2260d959d test
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 18:01:41 +02:00
Nikolaj Bjorner
a1b831a3e1 fix build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 17:50:08 +02:00
Copilot
930ba5ebd6
Implement inverter functions for finite-set operators (#7974)
* Initial plan

* Add set operator inverters to array_expr_inverter

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Refactor expr_inverter to remove set operations

Removed handling for set operations like union, intersection, and difference in expr_inverter.cpp. Introduced finite_set_inverter class to manage set union operation.

* Remove OP_SET_COMPLEMENT case from expr_inverter

Removed handling for OP_SET_COMPLEMENT in expr_inverter.

* Change OP_SET_UNION to OP_FINITE_SET_UNION

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 17:48:40 +02:00
Nikolaj Bjorner
0efe3820fc build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 17:46:49 +02:00
Nikolaj Bjorner
5dacb270f8 add to spec
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 17:33:19 +02:00
Copilot
75bac9c0ce
Implement finite_set_axioms.cpp and fix empty set constructor bug (#7973)
* Initial plan

* Add finite_set_axioms.cpp implementation and update CMakeLists.txt

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix finite_set_decl_plugin bug and complete implementation

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Use array select instead of function application for map and select axioms

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Simplify range assignment in finite_set_decl_plugin

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 17:16:29 +02:00
Copilot
c526c20cfc
Implement finite_set_rewriter with basic algebraic simplification rules (#7972)
* Initial plan

* Add finite_set_rewriter implementation with basic rewrite rules

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix finite_set_decl_plugin bug and complete implementation

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Revert finite_set_decl_plugin changes and disable difference rule

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Re-enable difference rule using set_sort directly

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Update finite_set_rewriter.h

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-10-14 17:13:18 +02:00