3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-04-03 02:18:58 +00:00
Commit graph

18127 commits

Author SHA1 Message Date
Copilot
e0ca916e23
refactor: move nielsen graph display/to_dot routines into seq_nielsen_pp.cpp (#9090)
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/c2457bcf-85f0-4ad7-9ff1-d394f4315698

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-03-22 17:44:22 -07:00
Nikolaj Bjorner
00aac9a6a4 replace NYI by exceptions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-22 16:07:48 -07:00
Copilot
40485e69be
Simplify extract_var_bound via operator normalization (#9062)
* Initial plan

* simplify extract_var_bound in qe_lite_tactic.cpp via operator normalization

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

* Add defensive check for integer type in lhs

Added a defensive check for integer type in lhs before proceeding with inequality checks.

* Update qe_lite_tactic.cpp

* Fix utility function call for integer check

---------

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>
2026-03-22 16:01:12 -07:00
Nikolaj Bjorner
1863290b71 add deterministic solving for unit equations
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-22 15:34:16 -07:00
Copilot
6b5401ef68
Remove s_other from snode_kind; unify under s_var and is_var() (#9087)
* remove s_other, use s_var and is_var() instead

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/d56594ed-7f7e-436a-a4b2-e6dc986b18a8

* fix build: add reset() override to test dummy solver stubs

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/d437376d-55d8-4087-baf1-e89451d2d597

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-03-22 12:05:24 -07:00
Nikolaj Bjorner
aa210882c5 add review
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-21 10:14:34 -07:00
Nikolaj Bjorner
a39ff701c7 remove include of nielsen in sgraph
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-21 09:48:34 -07:00
Copilot
2ab53072e9
Implement ensure_digit_axiom in theory_nseq (#9075)
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/9b679ca3-dba7-469c-907a-9abd5edf1e1d

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-03-20 19:46:22 -07:00
Nikolaj Bjorner
ae12956545 updates based on discussion
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-20 11:20:29 -07:00
Mark DenHoed
43009600d4
Fix documentation for Z3_solver_to_dimacs_string (#9053)
Corrected the function name in the documentation comment.
2026-03-20 10:18:13 -07:00
CEisenhofer
2bd5283f6a Assertions 2026-03-20 15:11:51 +01:00
CEisenhofer
88ef8c7cda Another regex witness bug 2026-03-20 14:07:12 +01:00
CEisenhofer
737c5d44ed Simplify regex splits 2026-03-20 13:33:53 +01:00
CEisenhofer
5d912bdfa5 ... 2026-03-20 12:22:38 +01:00
CEisenhofer
fdb7f33552 ... one more 2026-03-20 12:20:16 +01:00
CEisenhofer
e3ed7f214b Removed debug lines 2026-03-20 12:19:53 +01:00
CEisenhofer
9aaf103ca0 Fix union problem (might not solve all bugs) 2026-03-20 12:17:44 +01:00
CEisenhofer
4f884e7d9a Bug 2026-03-20 12:11:18 +01:00
CEisenhofer
a873d5cdda Fixed output error 2026-03-20 11:51:37 +01:00
CEisenhofer
3662b89adc Missing range cases 2026-03-20 10:41:56 +01:00
Nikolaj Bjorner
d77e9d5c95 add code review comment
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-20 00:26:57 -07:00
Nikolaj Bjorner
1137d23725 fix bug reported in API coherence report
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-19 23:20:55 -07:00
Nikolaj Bjorner
0f4126f665 add filter for avoiding creating redundant disequality axioms
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-19 23:15:23 -07:00
Nikolaj Bjorner
1d928663de add reset method
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-19 22:57:59 -07:00
Lev Nachmanson
8cc75d444e fix box mode: reset bounds before each objective
update_lower_lex updates m_lower for subsequent objectives with saved
values from the current model. Reset m_lower[i] and m_upper[i] to
their initial values before optimizing each objective so earlier
objectives do not contaminate later ones.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 17:07:21 -10:00
Lev Nachmanson
fbbb582650 fix test: copy Z3_ast_to_string results before next call
Z3_ast_to_string returns a pointer to an internal buffer that is
overwritten on the next call. Store results in std::string immediately
to avoid reading a stale, garbled buffer.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 17:07:21 -10:00
Lev Nachmanson
1c70b9e6ee fix box mode: isolate m_lower/m_upper between objectives
geometric_lex's update_lower_lex updates m_lower for all subsequent
objectives with saved values from the current model. In box mode this
contaminates later objectives' starting bounds, causing platform-dependent
results. Save and restore m_lower/m_upper across iterations so each
objective starts from a clean state.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 17:07:21 -10:00
Lev Nachmanson
acd2e9475d fix #9030: box mode objectives are now optimized independently
In box mode (opt.priority=box), each objective should be optimized
independently. Previously, box() called geometric_opt() which optimizes
all objectives together using a shared disjunction of bounds. This caused
adding/removing an objective to change the optimal values of other
objectives.

Fix: Rewrite box() to optimize each objective in its own push/pop scope
using geometric_lex, ensuring complete isolation between objectives.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 17:07:21 -10:00
Nikolaj Bjorner
a895548b99 cleanup
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-19 16:39:41 -07:00
Nikolaj Bjorner
7a93e2296d coding nit
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-19 16:39:40 -07:00
Copilot
2ec305f206
port range regular expressions to snode from ZIPT (#9048)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-03-19 15:59:20 -07:00
Lev Nachmanson
e351266ecb remove dead code in nlsat_explain
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2026-03-19 12:02:21 -10:00
Copilot
59bc9b17ea
theory_nseq: remove seq_state, embed tracked entries directly in prop_queue (#9045)
* Remove seq_state: embed tracked_str_eq/tracked_str_mem directly in prop_queue

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

* theory_nseq: use type aliases for eq_item/mem_item instead of wrapper structs

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

* seq_model: validate_regex takes single tracked_str_mem, caller loops

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>
2026-03-19 14:45:53 -07:00
Lev Nachmanson
996dc72300 Fix assertion violation in isolate_roots for nested calls (#6871)
resultant vanishes during a nested isolate_roots call. The mathematical
invariant that the resultant cannot vanish again after recovery does not
hold in all cases, e.g. with certain nonlinear real arithmetic formulas.

The algebraic_exception propagates cleanly through the nlsat solver and
tactic layers which already catch z3_exception.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 11:30:49 -10:00
Lev Nachmanson
47cbc746b5 fix #9036: expand bounded integer quantifiers in qe-light
After qe-light's equation solver (eq_der) eliminates variables from
linear equations, remaining bounded integer quantifiers may still have
non-unit coefficients that prevent Fourier-Motzkin elimination.

Add a bounded quantifier expansion step: when the remaining quantified
integer variables all have explicit finite bounds and the product of
domain sizes is <= 10000, expand the quantifier into a finite
disjunction. This turns e.g. exists y0 in [0,10), y1 in [0,15): P(x,y0,y1)
into P(x,0,0) | P(x,0,1) | ... | P(x,9,14), which is 150 disjuncts.

The SMT solver handles the resulting quantifier-free formula instantly,
whereas the previous QSAT/MBP approach timed out due to weak integer
projections from the (|a|-1)*(|b|-1) slack in Fourier-Motzkin resolution
with non-unit coefficients.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 08:29:35 -10:00
Copilot
8795bf06fb
theory_nseq: dispatch assign_eh on all seq predicate cases via m_axioms, add enqueue/dequeue_axiom with variant prop_item (#9040)
* dispatch assign_eh cases via m_axioms: add prefix/suffix/contains true axioms

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

* fix build: remove stale snode_label_html declaration from seq_nielsen.h

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

* theory_nseq: add enqueue/dequeue_axiom + std::variant prop_item + relevant_eh

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>
2026-03-19 10:42:18 -07:00
Lev Nachmanson
20bcf67155 Print full child output for all tests in parallel mode
Always print each test's captured output, not just for failures.
This preserves backward compatibility:
- PASS appears on its own line per test, as before
- ASAN/UBSAN reports from any test appear in captured logs
- timeit output is preserved for all tests

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 06:37:22 -10:00
Lev Nachmanson
04d2e66aab Make parallel execution the default for test-z3
Parallel mode (/j) is now the default. Use /seq to force serial execution.
Child processes are invoked with /seq to prevent recursive parallelism.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 06:37:22 -10:00
Lev Nachmanson
9fea91d0eb Add parallel test execution to test-z3 (/j flag)
Refactor src/test/main.cpp to support parallel test execution:
- Add /j[:N] flag to run tests in parallel using N jobs (default: number of cores)
- Use process-based parallelism: each test runs as a child process,
  avoiding thread-safety issues with global state like enable_debug/enable_trace
- Output is captured per-test and printed atomically, so different tests never mix
- Provide summary with pass/fail counts, wall time, and failed test names
- Refactor test list into X-macros for single source of truth
- Fix pre-existing bug where serial /a mode ran each test argc times

Platform support:
- Unix (Linux/macOS/FreeBSD): popen/pclose with WEXITSTATUS
- Windows: _popen/_pclose
- Emscripten: parallel disabled (no threading support)
- Works with both SINGLE_THREAD and multi-threaded builds

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 06:37:22 -10:00
CEisenhofer
109ab7d098 Fixed regex witness 2026-03-19 17:16:29 +01:00
CEisenhofer
d31968f0ad Added problematic case as unit-test 2026-03-19 17:09:51 +01:00
CEisenhofer
51f3996464 Create dummy sat-node to avoid problems in case the preprocessor solves the problem entirely 2026-03-19 16:02:51 +01:00
CEisenhofer
9f4e823c8b ... and another one... 2026-03-19 15:44:15 +01:00
CEisenhofer
4271bdad55 Another minterm bug 2026-03-19 15:12:22 +01:00
CEisenhofer
149a087f65 Strengthened diseq axiom 2026-03-19 11:14:07 +01:00
Copilot
f837651434
seq_nielsen: replace mk_fresh_var() with mk_fresh_var(sort* s) (#9037)
* replace mk_fresh_var() with mk_fresh_var(sort* s) in seq_nielsen; fix snode_label_html linkage

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

* remove mk_var(symbol const&) from sgraph; update all callers to pass sort explicitly

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>
2026-03-18 20:41:41 -07:00
Nikolaj Bjorner
4b40969da6 added diseq
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-18 13:32:18 -07:00
Nikolaj Bjorner
a2352529f8 add diseq axiom
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-18 12:58:27 -07:00
CEisenhofer
777bda01a5 Subsolver was not reset properly 2026-03-18 20:22:08 +01:00
Nikolaj Bjorner
c43df60182 fix build of unit tests
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-03-18 10:29:41 -07:00