Instead of asserting theory axioms lazily we create them on the fly and allow propagation eagerly.
The approach uses a waterfall model as follows:
- terms are created: they are inserted into an index for (set.in x S) axiom creation.
- two terms are merged by an equality.
Loop over all new opportunities for axiom instantiation
New axioms are added to a queue of recently created axioms.
- an atomic formula was asserted by the SAT solver.
Update the watch list to find new propagations.
During propagation recently created axioms are either inserted into a propagation queue, or inserted into a watch list.
They are inserted into a propagation queue all or all but one literal is assigned to false.
They are inserted into a watch list if at least two literals are unassigned
They are dropped if the axiom contains a literal that is assigned to true
The propagation queue is processed by by asserting the theory axiom to the core.
Also add some elementary statistics.
A breaking change is to change the datatype for undo-trail in smt_context to not use a custom data-structure.
This can likely cause regressions. For example, the region allocator now comes from the stack_trail instead of being
owned within smt_context with a different declaration order. smt_context could crash during destruction or maybe even pop.
We take the risk as the change is overdue.
Add swap method to ref_vector.
* Initial plan
* Implement theory_finite_set header and implementation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Add theory registration to smt_setup
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Update theory_finite_set.cpp
* Refactor membership_atoms and add elements list
Renamed membership_atoms to membership_elements and added elements list.
* Change membership elements to use enode type
* Update theory_finite_set.cpp
* Fix typo in internalize_atom function
* Update theory_finite_set.cpp
* Refactor final_check_eh by removing comments
Removed redundant comments and cleaned up code.
* Add m_lemmas member to theory_finite_set class
* Improve clause management and instantiation logic
Refactor clause handling and instantiate logic in finite set theory.
* Add friend class declaration for testing
* Add placeholder methods for lemma instantiation
Added placeholder methods for lemma instantiation.
---------
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>
Add commands:
(prefer <formula>)
- will instruct case split queue to assign formula to true.
- prefer commands added within a scope are forgotten after leaving the scope.
(reset-preferences)
- resets asserted preferences. Has to be invoked at base level.
This provides functionality related to MathSAT and based on an ask by Tomáš Kolárik who is integrating the functionality with OpenSMT2
for equations x*y + z = 0,
with x, y, z integer, enforce that x divides z
It is (currently) enabled within Grobner completion
and applied partially to x a variable, z linear, and
only when |z| < |x|.
#7791 reports on using model values during lex optimization that break soft constraints.
This is an artifact of using optimization where optimal values can be arbitrarily close to a rational.
In a way it is by design, but we give the user now an option to control the starting point for epsilon when converting infinitesimals into rationals.
* Initial plan
* Add virtual translate method to solver_factory base class and all implementations
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Add documentation for the translate method in solver_factory
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>
* very basic setup
* very basic setup (#7741)
* add score access and reset
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* added notes
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* add bash files for test runs
* fix compilation
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* more notes
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* Update PARALLEL_PROJECT_NOTES.md
* add top-k fixed-sized min-heap priority queue for top scoring literals
* fixed-size min-heap for tracking top-k literals (#7752)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* debugging
* process cubes as lists of individual lits
* Parallel solving (#7756)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* allow for internalize implies
* disable pre-processing during cubing
* debugging
* process cubes as lists of individual lits
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
* snapshot
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* pair programming
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* pair programming
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* merge
* chipping away at the new code structure
* Parallel solving (#7758)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* allow for internalize implies
* disable pre-processing during cubing
* debugging
* remove default constructor
* remove a bunch of string copies
* Update euf_ac_plugin.cpp
include reduction rules in forward simplification
* Update euf_completion.cpp
try out restricting scope of equalities added by instantation
* Update smt_parallel.cpp
Drop non-relevant units from shared structures.
* process cubes as lists of individual lits
* merge
* Add support for Algebraic Datatypes in JavaScript/TypeScript bindings (#7734)
* Initial plan
* Add datatype type definitions to types.ts (work in progress)
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype type definitions with working TypeScript compilation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Implement core datatype functionality with TypeScript compilation success
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype implementation with full Context integration and tests
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>
* chipping away at the new code structure
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* updates
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* comments
* debug infinite recursion and split cubes on existing split atoms that aren't in the cube
* share lemmas, learn from unsat core, try to debug a couple of things, there was a subtle bug that i have a hard time repro'ing
* Parallel solving (#7759)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* allow for internalize implies
* disable pre-processing during cubing
* debugging
* remove default constructor
* remove a bunch of string copies
* Update euf_ac_plugin.cpp
include reduction rules in forward simplification
* Update euf_completion.cpp
try out restricting scope of equalities added by instantation
* Update smt_parallel.cpp
Drop non-relevant units from shared structures.
* process cubes as lists of individual lits
* merge
* Add support for Algebraic Datatypes in JavaScript/TypeScript bindings (#7734)
* Initial plan
* Add datatype type definitions to types.ts (work in progress)
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype type definitions with working TypeScript compilation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Implement core datatype functionality with TypeScript compilation success
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype implementation with full Context integration and tests
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>
* chipping away at the new code structure
* comments
* debug infinite recursion and split cubes on existing split atoms that aren't in the cube
* share lemmas, learn from unsat core, try to debug a couple of things, there was a subtle bug that i have a hard time repro'ing
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* updates
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* simplify output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* merge
* resolve bad bug about l2g and g2l translators using wrong global context. add some debug prints
* initial attempt at dynamically switching from greedy to frugal splitting strategy in return_cubes. need to test. also there is some bug where the threads take forever to cancel?
* Parallel solving (#7769)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* allow for internalize implies
* disable pre-processing during cubing
* debugging
* remove default constructor
* remove a bunch of string copies
* Update euf_ac_plugin.cpp
include reduction rules in forward simplification
* Update euf_completion.cpp
try out restricting scope of equalities added by instantation
* Update smt_parallel.cpp
Drop non-relevant units from shared structures.
* process cubes as lists of individual lits
* merge
* Add support for Algebraic Datatypes in JavaScript/TypeScript bindings (#7734)
* Initial plan
* Add datatype type definitions to types.ts (work in progress)
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype type definitions with working TypeScript compilation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Implement core datatype functionality with TypeScript compilation success
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype implementation with full Context integration and tests
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>
* chipping away at the new code structure
* comments
* debug infinite recursion and split cubes on existing split atoms that aren't in the cube
* share lemmas, learn from unsat core, try to debug a couple of things, there was a subtle bug that i have a hard time repro'ing
* merge
* resolve bad bug about l2g and g2l translators using wrong global context. add some debug prints
* initial attempt at dynamically switching from greedy to frugal splitting strategy in return_cubes. need to test. also there is some bug where the threads take forever to cancel?
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* resolve bug about not translating managers correctly for the second phase of the greedy cubing, and the frugal fallback
* Parallel solving (#7771)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* allow for internalize implies
* disable pre-processing during cubing
* debugging
* remove default constructor
* remove a bunch of string copies
* Update euf_ac_plugin.cpp
include reduction rules in forward simplification
* Update euf_completion.cpp
try out restricting scope of equalities added by instantation
* Update smt_parallel.cpp
Drop non-relevant units from shared structures.
* process cubes as lists of individual lits
* merge
* Add support for Algebraic Datatypes in JavaScript/TypeScript bindings (#7734)
* Initial plan
* Add datatype type definitions to types.ts (work in progress)
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype type definitions with working TypeScript compilation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Implement core datatype functionality with TypeScript compilation success
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype implementation with full Context integration and tests
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>
* chipping away at the new code structure
* comments
* debug infinite recursion and split cubes on existing split atoms that aren't in the cube
* share lemmas, learn from unsat core, try to debug a couple of things, there was a subtle bug that i have a hard time repro'ing
* merge
* fix#7603: race condition in Ctrl-C handling (#7755)
* fix#7603: race condition in Ctrl-C handling
* fix race in cancel_eh
* fix build
* add arithemtic saturation
* add an option to register callback on quantifier instantiation
Suppose a user propagator encodes axioms using quantifiers and uses E-matching for instantiation. If it wants to implement a custom priority scheme or drop some instances based on internal checks it can register a callback with quantifier instantiation
* missing new closure
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add Z3_solver_propagate_on_binding to ml callback declarations
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add python file
Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local>
* debug under defined calls
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* more untangle params
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* precalc parameters to define the eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* remove a printout
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* rename a Python file
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* add on_binding callbacks across APIs
update release notes,
add to Java, .Net, C++
* use jboolean in Native interface
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* register on_binding attribute
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix java build for java bindings
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* avoid interferring side-effects in function calls
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove theory_str and classes that are only used by it
* remove automata from python build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove ref to theory_str
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* get the finest factorizations before project
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* rename add_lcs to add_lc
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* resolve bad bug about l2g and g2l translators using wrong global context. add some debug prints
* initial attempt at dynamically switching from greedy to frugal splitting strategy in return_cubes. need to test. also there is some bug where the threads take forever to cancel?
* Update RELEASE_NOTES.md
* resolve bug about not translating managers correctly for the second phase of the greedy cubing, and the frugal fallback
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local>
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Lev Nachmanson <levnach@hotmail.com>
* code and notes
* add some debug prints and impelement internal polynomial fix
* add some comments and debug m_assumptions_used
* redo greedy->frugal strategy so we don't split on existing cubes in frugal at all (eliminate the incorrect/wasteful step by processing current batch first)
* set up initial scaffolding for sharing clauses between threads and batch manager. needs some reworking/debug still
* Parallel solving (#7774)
* very basic setup
* ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* respect smt configuration parameter in elim_unconstrained simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* indentation
* add bash files for test runs
* add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove verbose output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix#7745
axioms for len(substr(...)) escaped due to nested rewriting
* ensure atomic constraints are processed by arithmetic solver
* #7739 optimization
add simplification rule for at(x, offset) = ""
Introducing j just postpones some rewrites that prevent useful simplifications. Z3 already uses common sub-expressions.
The example highlights some opportunities for simplification, noteworthy at(..) = "".
The example is solved in both versions after adding this simplification.
* fix unsound len(substr) axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* FreshConst is_sort (#7748)
* #7750
add pre-processing simplification
* Add parameter validation for selected API functions
* updates to ac-plugin
fix incrementality bugs by allowing destructive updates during saturation at the cost of redoing saturation after a pop.
* enable passive, add check for bloom up-to-date
* add top-k fixed-sized min-heap priority queue for top scoring literals
* set up worker thread batch manager for multithreaded batch cubes paradigm, need to debug as I am getting segfault still
* fix bug in parallel solving batch setup
* fix bug
* allow for internalize implies
* disable pre-processing during cubing
* debugging
* remove default constructor
* remove a bunch of string copies
* Update euf_ac_plugin.cpp
include reduction rules in forward simplification
* Update euf_completion.cpp
try out restricting scope of equalities added by instantation
* Update smt_parallel.cpp
Drop non-relevant units from shared structures.
* process cubes as lists of individual lits
* merge
* Add support for Algebraic Datatypes in JavaScript/TypeScript bindings (#7734)
* Initial plan
* Add datatype type definitions to types.ts (work in progress)
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype type definitions with working TypeScript compilation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Implement core datatype functionality with TypeScript compilation success
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Complete datatype implementation with full Context integration and tests
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>
* chipping away at the new code structure
* comments
* debug infinite recursion and split cubes on existing split atoms that aren't in the cube
* share lemmas, learn from unsat core, try to debug a couple of things, there was a subtle bug that i have a hard time repro'ing
* merge
* fix#7603: race condition in Ctrl-C handling (#7755)
* fix#7603: race condition in Ctrl-C handling
* fix race in cancel_eh
* fix build
* add arithemtic saturation
* add an option to register callback on quantifier instantiation
Suppose a user propagator encodes axioms using quantifiers and uses E-matching for instantiation. If it wants to implement a custom priority scheme or drop some instances based on internal checks it can register a callback with quantifier instantiation
* missing new closure
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add Z3_solver_propagate_on_binding to ml callback declarations
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add python file
Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local>
* debug under defined calls
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* more untangle params
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* precalc parameters to define the eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* remove a printout
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* rename a Python file
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* add on_binding callbacks across APIs
update release notes,
add to Java, .Net, C++
* use jboolean in Native interface
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* register on_binding attribute
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fix java build for java bindings
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* avoid interferring side-effects in function calls
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove theory_str and classes that are only used by it
* remove automata from python build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* remove ref to theory_str
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* get the finest factorizations before project
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* rename add_lcs to add_lc
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* resolve bad bug about l2g and g2l translators using wrong global context. add some debug prints
* initial attempt at dynamically switching from greedy to frugal splitting strategy in return_cubes. need to test. also there is some bug where the threads take forever to cancel?
* Update RELEASE_NOTES.md
* resolve bug about not translating managers correctly for the second phase of the greedy cubing, and the frugal fallback
* remove unused square-free check
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* add some debug prints and impelement internal polynomial fix
* add some comments and debug m_assumptions_used
* redo greedy->frugal strategy so we don't split on existing cubes in frugal at all (eliminate the incorrect/wasteful step by processing current batch first)
* set up initial scaffolding for sharing clauses between threads and batch manager. needs some reworking/debug still
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local>
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Lev Nachmanson <levnach@hotmail.com>
* sign of life
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add notes on parameter tuning
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add notes on parameter tuning
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add notes on parameter tuning
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add notes on parameter tuning
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* turn off logging at level 0 for testing
* add max thread conflicts backoff
---------
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local>
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: humnrdble <83878671+humnrdble@users.noreply.github.com>
Co-authored-by: Nuno Lopes <nuno.lopes@tecnico.ulisboa.pt>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Lev Nachmanson <levnach@hotmail.com>
Suppose a user propagator encodes axioms using quantifiers and uses E-matching for instantiation. If it wants to implement a custom priority scheme or drop some instances based on internal checks it can register a callback with quantifier instantiation