3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-02 21:36:09 +00:00
Commit graph

22740 commits

Author SHA1 Message Date
CEisenhofer
d20a27e1df Make dot output a bit more readable 2026-05-11 19:17:00 +02:00
Arie
4ea5ec0287
Throttle lia2card in QF_LIA preamble (mk_preamble_tactic) (#9489)
mk_preamble_tactic in qflia_tactic.cpp constructed lia2card with a
throttled params_ref but did not wrap the call in using_params, so
when the preamble is invoked standalone the throttle is silently
clobbered by and_then's ambient param propagation: each child gets
updt_params(outer_p) called on it, re-reading lia2card.max_range
from the outer params (default 101) and discarding the constructor
override.

mk_qflia_tactic masks the bug because it wraps the whole chain in
using_params(..., main_p) where main_p also carries
lia2card.max_range=1. But QF_UFNIA goals reach mk_preamble_tactic
through the fall-through tail in mk_default_tactic
(default_tactic.cpp:52) without that outer wrap: is_qfnia_probe
rejects goals containing UF, so QF_UFNIA does not route through
mk_qfnia_tactic and instead lands on the unguarded preamble. Any
integer variable with concrete range hi-lo <= 101 then gets
hot-encoded into ~hi-lo indicator Booleans plus a sum-of-ITEs,
inflating SAT search and bloating each NLA refutation that touches
the partition.

Fix: wrap the call with using_params(mk_lia2card_tactic(m),
lia2card_p) so the throttle survives ambient propagation.

Verified on a Certora QF_UFNIA VC with a 0..98 integer: metrics now
match running with explicit tactic.lia2card.max_range=0 (mk-bool-var,
decisions, nlsat-restarts all within run-to-run noise of the
workaround), confirming the built-in throttle is finally effective.

This mirrors the pattern from commit 87e45accd ("Throttle lia2card
in QF_NIA preamble", #9362) which fixed the same bug in
mk_qfnia_preamble but did not propagate the fix to the QF_LIA
preamble. The original throttle parameters (max_range=1,
max_ite_nesting=1) were introduced by Nikolaj's commit 99cbfa715
("Add a sharp throttle to lia2card tactic to control overhead in
default tactic mode") in Feb 2025; that commit set the params at
construction time, which works under mk_qflia_tactic's outer
using_params wrap but not under standalone invocation.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 12:03:09 -04:00
CEisenhofer
fb6b05aa83 Fixed the "partial automaton" after we push regex unwinding to ITE splitting 2026-05-11 17:57:06 +02:00
Copilot
601dccc947
Regenerate agentic workflow locks to fix AWF install failures (#9496)
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/368baffc-eb0e-40dd-ade5-1eb36d71d0c4

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-05-10 21:48:54 -04:00
Can Cebeci
2c7b256db2
Use the minimum generation number among matching enodes (#9405)
* Compute term generations based on minimal match

* Tidy up get_*_f_app

* Update euf_mam to the minimum generation number among matches

* Update euf_mam.cpp

* Move the UNREACHABLE() test to smt_mam.cpp

* Enforce stickiness of max-generation

* Add current generation tracking to bind structure

* Fix build error

---------

Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-07 18:32:31 -04:00
Nikolaj Bjorner
7ec3bf55ff merge
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-07 10:48:03 -04:00
CEisenhofer
50f471a95b For membership constraints just unwind 2026-05-07 16:20:04 +02:00
CEisenhofer
f7f2ee8f74 Using only one solver 2026-05-07 15:49:16 +02:00
Copilot
30c74fccee
Go bindings: extract CGo slice-conversion helpers to eliminate boilerplate (#9465)
* Initial plan

* simplify Go bindings: extract CGo slice conversion helpers in z3.go

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/eb6e05d8-f45a-40fb-b61f-17d4058bccb6

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-05-06 12:32:53 -07:00
CEisenhofer
712cd68e8c Don't add duplicate equations and membership constraints to Nielsen root 2026-05-06 16:38:26 +02:00
CEisenhofer
e62ba9b60b stoi lemmas might have been forgotten so we need to reassert 2026-05-06 15:46:53 +02:00
CEisenhofer
6fa354102a A new axiomatization for "stoi" 2026-05-06 15:30:09 +02:00
Nikolaj Bjorner
57692811fa reduce set of assumptions passed into m_core_solver 2026-05-06 03:58:29 -07:00
CEisenhofer
11ff3ccae7 Power unwinding was unsound 2026-05-06 10:22:39 +02:00
dependabot[bot]
c189d66145
Bump github/gh-aw-actions from 0.71.1 to 0.71.4 (#9461)
Bumps [github/gh-aw-actions](https://github.com/github/gh-aw-actions) from 0.71.1 to 0.71.4.
- [Release notes](https://github.com/github/gh-aw-actions/releases)
- [Changelog](https://github.com/github/gh-aw-actions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/gh-aw-actions/compare/v0.71.1...f8495a686e66770ae977f82732f34d7340ee42a4)

---
updated-dependencies:
- dependency-name: github/gh-aw-actions
  dependency-version: 0.71.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-05 11:19:06 -07:00
Nikolaj Bjorner
8c02ec087b fix crash with D:\\bench\\inputs\\QF_S\\20240318-omark\\cyclic-xy.smt2
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-05 10:53:12 -07:00
CEisenhofer
b65f22ef3b Bug fix 2026-05-05 14:58:42 +02:00
CEisenhofer
e7cc24d7ea Next step towards partial automata 2026-05-05 13:58:15 +02:00
CEisenhofer
bfa9d17408 We need new variables 2026-05-05 10:48:49 +02:00
Nikolaj Bjorner
e242257070 avoid disequalities from str.at axioms
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-04 16:33:12 -07:00
Nikolaj Bjorner
af2769dbc0 more logging for when arith_value fails
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-04 14:07:49 -07:00
Nikolaj Bjorner
a5c01dcddb move to new model construction instead of original
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-04 13:53:33 -07:00
CEisenhofer
e2e876c7a9 Removed legacy code 2026-05-04 20:16:13 +02:00
CEisenhofer
5b3d734ecb Fixed regex factorization again 2026-05-04 19:25:07 +02:00
CEisenhofer
adb9ca4305 Some steps towards partial automatons 2026-05-04 18:31:38 +02:00
Copilot
1c6943c2cb
fix issues 1-10: add missing API bindings across Go, Julia, TypeScript, OCaml, and Java (#9432)
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/b89f3b76-dfd7-47ec-97dd-8ae5e8e88a4a

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-05-04 09:29:47 -07:00
Nikolaj Bjorner
b199b0782a ignore ostrich files under tests 2026-05-03 13:59:37 -07:00
Nikolaj Bjorner
266008e81f update seq_model draft
redo seq_model to be compatible with model_generator
2026-05-03 13:57:56 -07:00
Nikolaj Bjorner
e1d3eb1a80 flag replace_all as unhandled
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-02 15:53:36 -07:00
Nikolaj Bjorner
2c45740986 iterate on seq_model redo draft
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-02 15:47:19 -07:00
Nikolaj Bjorner
3eaa5b7ab7 iterate on seq_model redo draft
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-02 15:37:39 -07:00
Nikolaj Bjorner
6abb2da6a1 update draft
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-02 10:40:53 -07:00
Nikolaj Bjorner
eefb644c93 add solve-eqs to the qfnia tactic
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-01 16:29:29 -07:00
Nikolaj Bjorner
e09964096e add continue as an option to breaking loop at level
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-01 16:15:46 -07:00
Nikolaj Bjorner
466bfea604 add draft for model construction
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-05-01 11:07:27 -07:00
Copilot
b9109f031e
Update RELEASE_NOTES.md with entries from discussion #9430 for Version 4.17.0 (#9433)
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/a1dbb69c-b535-444b-92cb-07f0eecd0a65

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-04-30 11:41:08 -07:00
Nikolaj Bjorner
c7ccca0873 fix bug exposed in ostrich substr_var_sat.smt2 crash. Add notes to seq_model.cpp to prepare for further fixes
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-04-30 10:25:15 -07:00
Nikolaj Bjorner
dee35fc1a5 really add fold-unfold as option
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-04-30 09:56:08 -07:00
Copilot
b9be33bb06
Reorder null check before side effect in linearise_multi_pattern (#9427)
* Initial plan

* Move null check before side effect in linearise_multi_pattern

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/cc69d451-b5a7-414d-9154-2cda3286fe40

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-04-29 17:18:45 -07:00
Copilot
7c4c709708
Fix static analysis issues: null dereferences, unsafe casts, branch clones, uninitialized members (#9424)
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/6e64242e-78e5-4807-8369-02baaf405a70

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
2026-04-29 13:37:11 -07:00
Copilot
09396b72dd
nla_grobner: remove dead code and fix indentation (#9423)
* Initial plan

* [code-simplifier] nla_grobner: remove dead code and fix indentation

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/1dc7dd96-d7d7-4fca-94b4-bde677fee842

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-04-29 11:12:45 -07:00
Copilot
42582c6835
euf_seq_plugin: fix identity elimination after merge, activate loop merging, integrate sgraph improvements (#9414)
* Initial plan

* Initial plan

* Fix identity elimination after merge and activate loop merging in euf_seq_plugin

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/053b94e4-645a-4cde-ae5d-cf6d61222f92

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

* Apply three ZIPT code review improvements to euf_seq_plugin

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/da8647c4-ddff-47ce-9364-2eee3810c38d

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

* Address code review: improve loop-merge defensive code and test variable names

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/053b94e4-645a-4cde-ae5d-cf6d61222f92

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

* Refactor: extract saturating_add helper, simplify hash-check condition

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/da8647c4-ddff-47ce-9364-2eee3810c38d

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-04-29 11:12:00 -07:00
Arie
6d38d5ed41
NLA tracing: emit varmap and grobner-linear-eq for trace analysis (#9415)
Two TRACE blocks under the existing nla_solver tag:

1. theory_lra::false_case_of_check_nla emits a "varmap:" line for each
   NLA lemma, listing j-var → SMT-name mappings for variables in the
   lemma's collect_vars set. Lets lemur nla resolve the LP-internal
   j-numbering back to the original SMT term names when displaying
   lemmas. Without this, lemma-level analysis has to either guess at
   variable identities (and j-numbers are reused across nlsat
   invocations under backtracking — see j-vars-unstable note) or use a
   different trace tag entirely (-tr:nra) for stable algebraic-number
   IDs.

2. nla_grobner emits a "grobner-linear-eq:" line at each call to
   add_term + update_column_type_and_bound that produces a Linear
   Propagation row from completion. Lets us count Gröbner's effective
   contribution to the LP tableau independently of the lemma stream.
   Useful when investigating Gröbner-deficit hypotheses in NLA cascade
   diagnosis.

Both are pure trace emission, behind TRACE(nla_solver, ...). Zero
runtime cost when tracing is off; no semantic change.
2026-04-28 17:31:11 -07:00
Arie
dbb91de64b
Add adaptive growth knobs for Gröbner under arith.nl.grobner_adaptive (#9390)
* Add adaptive growth knobs for Gröbner under arith.nl.grobner_adaptive

When enabled, the per-call growth budget (m_eqs_growth, m_expr_size_growth,
m_expr_degree_growth, m_max_simplified) is scaled by m_growth_boost:
- two consecutive productive runs bump the boost by 3/2 (cap 4x)
- a miss resets the streak and decays the boost toward 1.0x by 1/4 of excess

Default is off; the existing miss-frequency throttle (m_quota / m_delay_base)
is unchanged, so this only affects per-call power, not call frequency.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Update src/params/smt_params_helper.pyg

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Arie Gurfinkel <arie.gurfinkel@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-28 08:50:38 -07:00
Lev Nachmanson
c40f8a200e
smt: reset give-up state when escalating final_check level (#9408)
theory_lra reports num_final_check_levels()==2: full nlsat (m_nra.check)
only runs at level >= 2. When a level-1 round-trip ends with FC_GIVEUP
and the loop escalates to level 2, the previously accumulated 'result',
'f', and 'm_incomplete_theories' were retained, so a subsequent
successful (FC_DONE) round at level 2 was still reported as
(incomplete (theory arithmetic)). Reset that state on each level
escalation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-28 03:33:28 +02:00
Nikolaj Bjorner
6cbc504f0b upgrade workflows
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-04-27 13:59:30 -07:00
Nikolaj Bjorner
63003b5795 convert z3_exception to tactic exception in try_for
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-04-26 16:37:39 -07:00
Nikolaj Bjorner
7461103802 making try-for tactic exception resilient on cancelation
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-04-26 15:58:24 -07:00
Copilot
245c117aba
simplify: replace ad-hoc reset_unsafe RAII with on_scope_exit in solve_eqs::reduce() (#9383)
* Initial plan

* simplify: replace reset_unsafe RAII struct with on_scope_exit in solve_eqs::reduce()

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/ff5650aa-02db-4a71-976f-845debd7222f

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-04-26 22:21:02 +02:00
Nikolaj Bjorner
0e07b218bc exception protection for nlsat_tactic
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2026-04-26 13:12:08 -07:00