Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
432 commits
Select commit Hold shift + click to select a range
0852c1d
Paper 1: reframe SAT hardness claims acknowledging Beame-Liew upper b…
tautschnig May 10, 2026
c5e6819
Paper 1: cite Danner 2025 dissertation and Pollitt et al. 2026 factor…
tautschnig May 10, 2026
368b9c9
Paper 1: set final author list and affiliations
tautschnig May 10, 2026
2c5c3e1
Research plans N1/N3/N4 and multi-encoding implementation
tautschnig May 10, 2026
6ccb84e
Paper 1: sync notation and clarity fixes from co-authoring repo
tautschnig May 10, 2026
36be4ab
Paper 1: add Multi-Encoding Combinations subsection (N4 results)
tautschnig May 10, 2026
168e8b9
Convert both papers to British English spellings
tautschnig May 10, 2026
1009e99
Paper 1: sync senior-review fixes from co-authoring repo
tautschnig May 10, 2026
6305529
Paper 1: tighten main body and move detail tables to appendix
tautschnig May 10, 2026
fc5769f
Paper 1: mirror Figure 1 fix, ablation move, conclusion condensation
tautschnig May 10, 2026
4f35816
Paper 1: mirror six author-note fixes from multiplier-encodings.git
tautschnig May 11, 2026
8583e9a
Paper 1: mirror Wallace encoding addition
tautschnig May 11, 2026
cbb589b
Paper 1 and Paper 2: senior-reviewer pass 2
tautschnig May 11, 2026
f3f496b
Paper 1: mirror six wording tweaks plus intro taxonomy alignment
tautschnig May 11, 2026
66bf33b
Paper 1: mirror integration of Burch, Kumar, Dutertre citations
tautschnig May 11, 2026
a5e9946
Paper 1: mirror §6.4 narrative restoration
tautschnig May 11, 2026
f17af10
Save next-steps snapshot to research-plans/NEXT-STEPS.md
tautschnig May 11, 2026
6f330e7
N3 Phase 1 prototype: case-analysis DRAT proof for array multiplier c…
tautschnig May 11, 2026
c7cf122
N3 Phase 2 structural prototype + honest assessment
tautschnig May 11, 2026
3cf7057
N3 follow-up: trimmed-core comparison + RAT extension variable test
tautschnig May 11, 2026
9b94374
N3: add Beame-Liew 2017 arxiv preprint as reference material
tautschnig May 11, 2026
64d3bc0
N3 Phase 3 step 1: strip extraction validates Lemma 3.1 UNSATness
tautschnig May 11, 2026
77a61e5
N3 Phase 3 step 2 probe: measure strip BDD sizes, confirm Bryant expo…
tautschnig May 11, 2026
890c8f9
N3 Phase 3 step 2 prototype via per-strip CaDiCaL
tautschnig May 11, 2026
ea1cf10
N3 Phase 3 scaffolding: BP build attempt + UP-triviality check
tautschnig May 11, 2026
bbf6c1a
Update NEXT-STEPS.md with N3 Phase 3 session outcomes
tautschnig May 11, 2026
ce9a718
N3 Phase 3 step 2: BP construction with paper ordering + DRAT attempts
tautschnig May 11, 2026
50bbaac
N3 Phase 3: first VALIDATED BP-DRAT proof via Prop 2.1 post-order emi…
tautschnig May 12, 2026
655a75f
N3 Phase 3: Cut(j)-based state merging scaffolding
tautschnig May 12, 2026
640bb6e
N3 Phase 3: Cut(row)-merging BP reduces per-strip DRAT by 3-5x
tautschnig May 12, 2026
8e5a533
N3 Phase 3: update scaling data for v9 and cut_v2 BPs
tautschnig May 12, 2026
b2e2023
Update NEXT-STEPS with Phase 3 Cut(row)-merging status
tautschnig May 12, 2026
e35c863
N3 Phase 3: diagonal (column-ordered) BP gives 20-40% further reduction
tautschnig May 12, 2026
4d05032
N3 Phase 3: DAG-based emission attempt (fails due to weakening) + sum…
tautschnig May 12, 2026
c753b6f
N3 Phase 3: CSA multiplier implementation and honest negative result
tautschnig May 12, 2026
6f8deee
N3 Phase 3: fast unit propagation (clause-var index) - 3.6x speedup
tautschnig May 12, 2026
5894921
N3 Phase 3: post-drat-trim optimization + comprehensive final summary
tautschnig May 12, 2026
3e58f44
N3 Phase 3: implement paper's exact BP algorithm (row-by-row branchin…
tautschnig May 12, 2026
5e4abfa
N3 Phase 3 paper BP: dual-cut, state-DAG and weakened emissions
tautschnig May 12, 2026
8812a35
N3 Phase 3: symmetry substitution + DAG BP matches paper's polynomial…
tautschnig May 13, 2026
c858cdd
N3 Phase 3: resolution + conflict-analysis DAG DRAT attempts (documen…
tautschnig May 13, 2026
f331150
N3 Phase 3: document precise DAG DRAT emission barrier
tautschnig May 13, 2026
f57859e
N3 Phase 3: paper-true Prop 2.1 DAG DRAT emission (VERIFIED)
tautschnig May 13, 2026
d82f450
N3 Phase 3: full proof via paper-true DAG; summary updated
tautschnig May 13, 2026
9ff9b45
N3 Phase 3: optimized paper-true DAG with trace UP and per-level scoping
tautschnig May 13, 2026
f3dced1
N3 Phase 3: update FINAL-SUMMARY with optimization results
tautschnig May 13, 2026
8035e87
N3 Phase 3: attempt canonical UP + wrap cache, refactor state cache
tautschnig May 13, 2026
513884c
N3 Phase 3: add paper-ordered UP (opt-in via PAPER_UP_ORDER env)
tautschnig May 13, 2026
4962086
N3 Phase 3: update FINAL-SUMMARY with final optimized sizes
tautschnig May 13, 2026
fe83fb6
refine-arithmetic: prototype Beame-Liew Mode 4 (adaptive prefix)
tautschnig May 14, 2026
e407f5e
refine-arithmetic: detect algebraic pairs of multiplications
tautschnig May 14, 2026
6fd3ed1
refine-arithmetic: extend pair detection to associativity
tautschnig May 14, 2026
8d8167f
regression: add multiply-stored-pairs-refine
tautschnig May 14, 2026
a4c40cd
refine-arithmetic: use BV-level identity for leaf comparison
tautschnig May 14, 2026
340e8bc
doc: add real-world benchmark results for refine pair detection
tautschnig May 14, 2026
6b235d7
doc: empirical polynomial-vs-exponential scaling for pair detection
tautschnig May 14, 2026
650c01c
refine-arithmetic: detect distributivity in pair detection
tautschnig May 14, 2026
e0e3d2c
doc: document why strip-lemma injection isn't adopted
tautschnig May 14, 2026
ec6fa4b
doc: characterise hash_mul as future-work pattern
tautschnig May 15, 2026
4c1d19a
doc: comparison study vs CBMC variants and Bitwuzla
tautschnig May 15, 2026
106e693
doc: validate pair detection on accessible benchmark suites
tautschnig May 15, 2026
0b97aea
bench-multiplication: complete reproducibility scripts + data + paper…
tautschnig May 15, 2026
a46c668
Paper 2: reproduction status as of 2026-05-15
tautschnig May 15, 2026
c91c632
doc: three-approach comparison comba-cs / pair-detection / algebraic
tautschnig May 15, 2026
2ade6de
refine-arithmetic: skip Paper 2 algebraic when refinement is active
tautschnig May 15, 2026
6346096
smt2_solver: add --refine-arithmetic; equivalence-class pair detection
tautschnig May 15, 2026
6dcacc3
doc: update wide five-approach comparison with smt2_solver --refine-a…
tautschnig May 15, 2026
26da892
Wide comparison: extend to SMT-COMP 2024 real-world sample (66 benchm…
tautschnig May 15, 2026
780713e
Wide comparison: final tally across 3 pools, 179 benchmarks total
tautschnig May 15, 2026
2bdc3a1
Paper 2: analyse Martin's review notes (2026-05-15)
tautschnig May 16, 2026
c4713b6
Paper 2: note Martin's subpolynomial-encoding benchmarks for item 5
tautschnig May 16, 2026
c67bae9
Paper 2: address Martin's review notes (items 1-4)
tautschnig May 16, 2026
adce20a
Paper 2: run comparison on Martin's subpolynomial-encoding benchmarks
tautschnig May 16, 2026
3f57cba
Paper 2: incorporate Martin's benchmark results into evaluation
tautschnig May 16, 2026
d45a202
Paper 2: ZFP injection prototype and negative result (item 6)
tautschnig May 16, 2026
522a394
Paper 2: design documents for items 7 and 8 (research directions)
tautschnig May 16, 2026
ff975c5
Paper 2: re-run ZFP ablation on full 39-benchmark suite
tautschnig May 16, 2026
fea1025
Paper 2: item 7 prototype and empirical null result
tautschnig May 16, 2026
5862416
Paper 1: investigate pair_detect refinement-loop slowdown
tautschnig May 16, 2026
24d20aa
Paper 2: senior-reviewer report (2026-05-18)
tautschnig May 18, 2026
9147473
Paper 2: address review items #3, #4, #5
tautschnig May 26, 2026
b67daac
Paper 2: address review items #6, #9, #10
tautschnig May 26, 2026
db7aba1
Paper 2: address review items #11 and #15
tautschnig May 26, 2026
95d97a8
Paper 2: address remaining 8 review items (batched cleanup)
tautschnig May 26, 2026
1c11eab
Paper 2 wording fix, paper-bitblasting split-brain cleanup, Paper 1 l…
tautschnig May 26, 2026
44bab06
Paper 1: fix refinement-loop bypass when no algebraic equivalences
tautschnig May 26, 2026
604c851
Paper 1: senior-reviewer pass (2026-05-26)
tautschnig May 26, 2026
47fe59a
Paper 2: structural rewrite plan (2026-05-26)
tautschnig May 26, 2026
2728a8f
Paper 2: Bitwuzla and cvc5 on the 210-benchmark random-poly sample
tautschnig May 26, 2026
e1515e8
Paper 2: source-code verification of competitor algebraic-reasoning c…
tautschnig May 26, 2026
b978a9d
Paper 2: R1 — re-centre abstract and §1 on the verified (G) headline
tautschnig May 26, 2026
e7f3e21
Paper 2: R2+R4+R5 — §2/§3 framing (ideal-membership vs function-equiv…
tautschnig May 26, 2026
ae6fac9
Paper 2: R6 — reorganise §4 evaluation around the headline result
tautschnig May 26, 2026
7a2a5f9
Paper 2: R7 — rewrite §6 Related Work organised by taxonomy class
tautschnig May 26, 2026
17dc30c
Paper 2: R9 — trim §7 conclusion; future directions become §3.7
tautschnig May 26, 2026
81f8161
Paper 2: R10 — re-tighten §1 Empirical results paragraph
tautschnig May 26, 2026
951fb3b
Paper 2: R8 — hedging language pass
tautschnig May 26, 2026
87b4d7b
Paper 1: capture co-author feedback (translated from German) and Beam…
tautschnig May 26, 2026
1124d24
Paper 2: SABER Level A experiment + sanity checks for (3) and (4)
tautschnig May 26, 2026
b1e878e
Paper 2: track disjunctive-disequalities procedure-level extension
tautschnig May 26, 2026
c16e5cf
Paper 2: SABER generator extended with 2-level Karatsuba
tautschnig May 26, 2026
fed0508
Paper 2: integrate SABER into §4 (step A of 2026-05-26 plan)
tautschnig May 26, 2026
ca22f8d
Paper 2: §4.5 SMT-COMP — add Bitwuzla 0.9.0-dev row (step E)
tautschnig May 26, 2026
622f847
Paper 1: C7 fact-check — CryptoMiniSat does have inprocessing BVE
tautschnig May 26, 2026
7ee01e7
Paper 2: implement disjunctive-disequalities procedure-level extensio…
tautschnig May 26, 2026
42e20bf
Paper 2: §4.3 SABER section — drop the per-coefficient workaround caveat
tautschnig May 26, 2026
a5e791b
Paper 2: mark disjunctive-disequalities extension as IMPLEMENTED
tautschnig May 26, 2026
6e1e25a
Paper 2: add bvlshr extraction (C-narrow step 1; opt-in)
tautschnig May 26, 2026
85c8922
Paper 2: update SABER doc with bvlshr extension status
tautschnig May 26, 2026
1870e2d
Revert "Paper 2: add bvlshr extraction (C-narrow step 1; opt-in)"
tautschnig May 27, 2026
d1880a9
Revert "Paper 2: update SABER doc with bvlshr extension status"
tautschnig May 27, 2026
5cbb193
Paper 2: redirect Toom-4 SABER to Re 4 (bit-decomposition)
tautschnig May 27, 2026
e6c2a9e
Paper 2: master future-directions tracker (Re 4 = next push)
tautschnig May 27, 2026
439131f
Paper 2: Re 4 design doc (bit-decomposition MVP)
tautschnig May 27, 2026
c2d1e42
Paper 2: Re 4 MVP — bit-decomposition + sound bvlshr extraction
tautschnig May 27, 2026
fe26819
Paper 2: Re 4 — bitwise ops (bvand, bvor, bvxor, bvnot)
tautschnig May 27, 2026
a475c07
Paper 2: Re 4 — empirical tractability findings + roadmap update
tautschnig May 27, 2026
fc0a65f
Paper 2: Re 4 sub-goal 3 — Frobenius-aware reduction
tautschnig May 27, 2026
e401a31
Paper 2: Re 4 — structural bit-decomposition + polynomial-form host c…
tautschnig May 27, 2026
de0724b
Paper 2: Re 4 — sub-goal 3 progress + roadmap update
tautschnig May 27, 2026
72dc613
Paper 2: Re 4 — inline idempotency simplification in polynomial multi…
tautschnig May 27, 2026
55b4367
Paper 2: Re 4 — linear elimination of host variables
tautschnig May 27, 2026
e0fb021
Paper 2: Re 4 — sub-goal 3 essentially complete + roadmap update
tautschnig May 27, 2026
9b6e192
Paper 2: Re 4 sub-goal 4 — faithful Toom-Cook 4-way SABER
tautschnig May 27, 2026
1e06ff6
Paper 2: Re 4 sub-goal 5 — GRS benchmark results
tautschnig May 27, 2026
b5c0d85
Paper 2: extended-timeout findings — Q1 (GRS scope) + Q2 (30-min SABER)
tautschnig May 27, 2026
90d23cb
Paper 2: drop §4.6 (SMT-LIB community / GRS) — not Paper 2 content
tautschnig May 27, 2026
0b45b56
Paper 2: A+B — Re 4 paper subsection + §4.3 SABER context refresh
tautschnig May 27, 2026
ce106f1
Paper 2: update master future-directions tracker post A+B
tautschnig May 27, 2026
91415f4
Re 4 sub-goal 6: universal-relational class via bvult/bvule encoding
tautschnig May 27, 2026
d5d70f9
Paper 2: §4.6 update — add universal-relational extension subsection
tautschnig May 27, 2026
c0d1868
C: memory-efficient extraction via deferred bit-blasting
tautschnig May 27, 2026
e2a4ed5
Paper 2: §4.3 update — deferred bit-blasting pushes SABER ceiling to …
tautschnig May 27, 2026
986139f
Paper 2: tracker update — D and C done; revised post-Paper-1 sequencing
tautschnig May 27, 2026
a57a71d
P1: deferred bit-blasting on by default + correctness fix
tautschnig May 28, 2026
6ded47e
Paper 2: tracker update — P1 done
tautschnig May 28, 2026
5728e42
P2: bit-by-bit parity reasoning for shift identities
tautschnig May 28, 2026
bafc306
Paper 2: §4.6 update — toom-scaled bit-parity gap closed (P2)
tautschnig May 28, 2026
a4cdd46
P3: signed comparison support (bvslt / bvsle / bvsgt / bvsge)
tautschnig May 28, 2026
36a922d
Format poly_extract.h: clang-format whitespace fix
tautschnig May 28, 2026
4edbf7c
P3: symbol-symbol comparison support (bvult x y, bvule x y)
tautschnig May 28, 2026
a0dd41c
Paper 2: §4.6 update — close the bw=128 chain caveat, mention signed/…
tautschnig May 28, 2026
ada10c7
P4: hoist subst_map out of per-branch loop (cleanup)
tautschnig May 28, 2026
403f8a3
Paper 2: tracker — P1, P2, P3 done; P4 partially explored
tautschnig May 28, 2026
9fce7a9
Lean: Re4.lean — bit-decomposition soundness (Module 1 of 6)
tautschnig May 28, 2026
fa6e8d2
Lean: SubgoalSix.lean — universal-relational encoding (Module 2 of 6)
tautschnig May 28, 2026
49a55c1
Lean: BitAlignment / Vanishing / StrongGB / Defer (Modules 3-6 of 6)
tautschnig May 28, 2026
1d54f22
Bi-directional traceability: cross-references from C++ to Lean proofs
tautschnig May 28, 2026
5c11f82
Paper 2: §5 update — expanded Mechanised Soundness Proofs
tautschnig May 28, 2026
7c9065a
Lean: prove bvuge_2d_minus_2k_implies_high_bits_one (PARTIAL -> DONE)
tautschnig May 28, 2026
bbf33a3
Lean: prove BitAlignment scalar alignment theorems (PARTIAL -> DONE)
tautschnig May 28, 2026
39ef2a9
Lean: prove bvslt_via_xor_msb (PARTIAL -> DONE)
tautschnig May 28, 2026
9a0a38e
Lean: traceability + paper §5 update for completed PARTIAL proofs
tautschnig May 28, 2026
34890e0
Lean: prove chainLtBool_correctness (STATEMENT-ONLY -> DONE)
tautschnig May 28, 2026
c321889
Lean: prove defer_replay_equivalence axiomatically (STATEMENT-ONLY ->…
tautschnig May 28, 2026
e0bfe85
Lean: precise statement for two_trick_saturation_complete (scaffold)
tautschnig May 28, 2026
46295f2
Lean: traceability + paper §5 update reflecting STATEMENT-ONLY work
tautschnig May 28, 2026
25a01c9
Lean: StrongGB.lean — counterexample to naive completeness + refined …
tautschnig May 28, 2026
452040f
Lean: StrongGB.lean — d = 1 case sketch via maximal-ideal argument
tautschnig May 28, 2026
30bcc69
Lean: prove d_eq_one_completeness (STATEMENT-ONLY -> DONE)
tautschnig May 28, 2026
6cd66ae
Lean: prove IsLocalRing (ZMod (p^n)) — mathlib contribution candidate
tautschnig May 28, 2026
e066cb4
Lean: prove sq_eq_self_of_zmod_two_pow — mathlib contribution candidate
tautschnig May 28, 2026
d0b8b25
Lean: traceability + paper §5 update for StrongGB progress
tautschnig May 28, 2026
1fa5a1f
Lean: prove two_trick_saturation_complete (refined) is FALSE
tautschnig May 28, 2026
f5f3f09
Lean: record of mathlib contribution candidates
tautschnig May 28, 2026
311ba6b
Honest specification: implementation is sound-only, not complete
tautschnig May 28, 2026
5517541
Achieve full bi-directional Lean<->C++ traceability
tautschnig May 28, 2026
f6d48cf
Document algorithm-level coverage audit of src/solvers/algebraic/
tautschnig May 28, 2026
b32bb33
Lean: PolyRing.lean — cover inverse_mod_2d, grevlex order, normalize
tautschnig May 28, 2026
22994b0
Lean: cover nu2_factorial and smarandache_function; PROOF refs in C++
tautschnig May 28, 2026
1172197
Lean: ExtractCandidate.lean — extract_candidate local soundness
tautschnig May 28, 2026
f07b5f0
Lean: ZFP generator soundness and Stirling number recurrence
tautschnig May 28, 2026
aef5c69
Lean: Encoding.lean — to_polynomial / extract_equation faithfulness
tautschnig May 28, 2026
e2f2757
Update COVERAGE_AUDIT.md and TRACEABILITY.md for full coverage
tautschnig May 28, 2026
ab08846
Upgrade stable_implies_no_new and buchberger_unsat' to formal PROOF refs
tautschnig May 28, 2026
8284731
Paper: reflect coverage closure and proof-work insights in §5
tautschnig May 28, 2026
13f47b4
Document the three mathlib PR branches prepared
tautschnig May 28, 2026
742e856
Document implementation findings from formal proof work
tautschnig May 28, 2026
4ea6f78
Fix progress-tracking bug in strong-GB compute; add unit tests
tautschnig May 28, 2026
858aa1f
Optimisations from proof work: memoise smarandache_function and to_po…
tautschnig May 28, 2026
3ab7187
Use Legendre's formula closed-form in smarandache_function
tautschnig May 28, 2026
c6c878e
Close proof gaps for optimisations + retrofit explicit invariants
tautschnig May 28, 2026
56df34a
Update paper for second bug + methodology evolution; add Lean CI
tautschnig May 29, 2026
46cf9f2
Paper: fix stale conclusion, theorem count, and Mathlib PR claim
tautschnig May 29, 2026
6a62228
Paper: stop pitching bit-decomposition + deferred bit-blasting as 'fu…
tautschnig May 29, 2026
294464e
(E) Lock in 2-trick progress invariant in Lean
tautschnig May 29, 2026
8db11e7
(B) Extend Encoding.lean for typecast, zero_extend, extract_low
tautschnig May 29, 2026
7b0c9b3
Higher bitwidths: precise data, accurate framing of the 512-bit gap
tautschnig May 29, 2026
da0105c
smt2 parser: word-level rewrites for bvudiv/bvurem and friends
tautschnig May 29, 2026
42b8a61
Lean: prove soundness of bvudiv/bvurem rewrites; cite from C++
tautschnig May 29, 2026
e63caee
Expression-level normalisation: comprehensive null result on 315 benc…
tautschnig May 29, 2026
90d0324
(A) Word-level rewrite: (bvule|bvult) (bvurem A y) y at parse time
tautschnig May 29, 2026
6b3f6e8
(B) Property-based tests for the progress-tracking invariant
tautschnig May 29, 2026
e36958c
ite-distribution + constant-divisor folding + bvudiv-bvurem cancellation
tautschnig May 29, 2026
95a841b
(B) Eliminate StrongGB.lean axioms (11 -> 9 project axioms)
tautschnig May 29, 2026
68ef39f
(A) Eliminate Defer.lean axioms (9 -> 0): zero project axioms achieved
tautschnig May 29, 2026
57cb7a5
(5) Extend defer + algebraic collection to ID_notequal
tautschnig May 29, 2026
8ebd76a
(6) bvmul constant folding + ite-distribution
tautschnig May 29, 2026
09eadf4
Paper: theorem count 105 -> 109 reflecting bvmul rewrites in Division…
tautschnig May 29, 2026
a0b9742
Paper: capture all session updates (zero axioms, bw512_15 0.02s, etc.)
tautschnig May 29, 2026
3ee23d4
(Phase 1) Polynomial Karatsuba multiplication, plan, and empirical fi…
tautschnig May 29, 2026
15d82d7
(Phase 2) bvudiv/bvurem in the polynomial fragment + bvnot direct form
tautschnig May 29, 2026
92fb77b
If-condition propagation + push equal/notequal/relational through ite
tautschnig May 29, 2026
31fe4de
Phase 2.6: Tseitin-aware boolean propagation for buried polynomial di…
tautschnig May 30, 2026
2660cdf
Doc: clarify why extractbits with lo>0 returns nullopt
tautschnig May 30, 2026
31ca07f
Phase A.1: min-LCM-degree pair selection in Buchberger
tautschnig May 31, 2026
7c83b45
Phase A.2: bounded boolean tree walk + IF-rebuild + IF-case-elim
tautschnig May 31, 2026
53c1d05
Paper + plans: document Phase A.1+A.2 results
tautschnig May 31, 2026
993d436
Phase A.3: nonzero fast-path for bvult/bvule predicates + Plan B find…
tautschnig May 31, 2026
d3a7bce
Doc: add remaining-work.md with prioritised next-steps task list
tautschnig May 31, 2026
b80b4cb
F4: tail-reduction (interreduce_basis) + outer Buchberger restart
tautschnig May 31, 2026
74c69b0
Doc: mark Items 1, 8 complete in remaining-work.md (cohencu_2/3 + F4)
tautschnig May 31, 2026
c09e3b7
Paper: refresh tables and add Phase A.3 + F4 + Plan B narrative
tautschnig May 31, 2026
0f0ee67
Phase A.3 extension (Item 2): nonzero fast-path also detects x != ~0
tautschnig Jun 1, 2026
bcb4431
Doc: mark Items 2, 4, 5 complete in remaining-work.md
tautschnig Jun 1, 2026
ae5222c
Item 6: skip non-polynomial disequalities (high-half-extract pattern)
tautschnig Jun 1, 2026
c2cedcd
Item 9: tighten Defer.lean theorems to DONE status
tautschnig Jun 1, 2026
41fa0b7
Doc: mark Items 6 and 9 complete in remaining-work.md
tautschnig Jun 1, 2026
f935557
Doc: capture Armin's review (Konrad/Roole + Item 10 fragment characte…
tautschnig Jun 1, 2026
08ccd67
Doc: incorporate three additional Konrad papers (SBIF, DC-opt, modular)
tautschnig Jun 1, 2026
5d8b5d8
Doc: inventory external benchmark sources from Armin's review
tautschnig Jun 1, 2026
1b5f98f
Bench: widen corpus to SMT-LIB 2024 QF_BV; discover float-family domi…
tautschnig Jun 1, 2026
32b878a
Doc: re-prioritise remaining-work after corpus widening (Item 11)
tautschnig Jun 1, 2026
90a2cd1
Retract float-family win claim; add ablation re-audit (Item 12)
tautschnig Jun 1, 2026
60eb76b
Item 12 DONE: ablation audit validates genuine wins, FINDS 2 SOUNDNES…
tautschnig Jun 1, 2026
3e5ad14
Item 13: fix two algebraic soundness bugs (assoc, zero-divisor)
tautschnig Jun 1, 2026
de6cb68
Doc: broad SAT-scan reveals Item 13 unsoundness is SYSTEMIC (new Item…
tautschnig Jun 1, 2026
07d79b8
Doc: analysis of why soundness proofs coexisted with the bugs
tautschnig Jun 1, 2026
a60eb37
Item 14: sound disequality refutation over ZMod(2^d) (remove Rabinowi…
tautschnig Jun 2, 2026
6b51743
Doc: record Rabinowitsch provenance (Song et al. future-work) for pap…
tautschnig Jun 2, 2026
19335f4
Item 14: adopt Song et al.'s sound disequality encoding; fix predicat…
tautschnig Jun 2, 2026
bf9bb21
Add minimal reproducer for the predicate width-mismatch soundness bug
tautschnig Jun 2, 2026
5239962
Paper: adopt Song et al.'s 2^{d-1} disequality encoding (replace Rabi…
tautschnig Jun 2, 2026
5f27ff4
Doc: mark Item 14b (paper disequality-methodology rewrite) DONE
tautschnig Jun 2, 2026
4204d3c
Item 14 follow-up: make cohencu-style F4 regression sound (bw=32 -> b…
tautschnig Jun 2, 2026
5b98954
Remove unsound "adjacent equality implications" clause in bv_utils::e…
tautschnig Jun 3, 2026
a4ab02a
smt2_solver: encode deferred assertions in check-sat-assuming
tautschnig Jun 3, 2026
3cf8a1b
boolbv: replay deferred assertions before finalizing uninterpreted fu…
tautschnig Jun 3, 2026
c63707a
boolbv: reconstruct algebraic candidate-hint symbols with their real …
tautschnig Jun 3, 2026
8d98284
Doc: consolidated soundness-sweep findings + correct ablation-audit a…
tautschnig Jun 3, 2026
3b1f830
Paper: refresh evaluation against the fixed binary; full random-poly …
tautschnig Jun 8, 2026
6ea4d78
Paper: address senior-reviewer feedback (consistency, soundness narra…
tautschnig Jun 8, 2026
e18c242
Remove 18 stray tracked .orig backup files
tautschnig Jun 8, 2026
e9c24e3
gitignore: ignore build-*/, coverage output, and .orig backups
tautschnig Jun 8, 2026
befbb68
Doc: refresh REPRODUCE.md for the full-suite evaluation
tautschnig Jun 8, 2026
093f6fe
CI: add algebraic-solver checks (proof-traceability lint + soundness …
tautschnig Jun 8, 2026
4ccd898
boolbv: apply equality optimisation when replaying deferred assertions
tautschnig Jun 8, 2026
96aad08
Paper: record the deferred-bitblasting perf regression (union_large_a…
tautschnig Jun 8, 2026
a49edce
Paper: SMT-COMP table at the stated 6GB regime (algebraic 42/66, PAR-…
tautschnig Jun 8, 2026
00f468b
Paper: final consistency pass (SMT-COMP net +5 framing; bug-count wor…
tautschnig Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
67 changes: 67 additions & 0 deletions .github/workflows/algebraic-checks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Algebraic solver checks

# Lightweight guards for the algebraic pre-solver:
# 1. proof-traceability lint (no build) — every PROOF: reference resolves
# and every UNSAT conclusion in try_algebraic_solve is annotated;
# 2. a soundness smoke test that runs the algebraic regression queries and
# cross-checks each verdict against z3 (the wrong-verdict guard that the
# standard output-matching regression harness does not provide).

on:
pull_request:
branches:
- '**'
paths:
- 'src/solvers/algebraic/**'
- 'src/solvers/flattening/boolbv*'
- 'src/solvers/flattening/bv_utils*'
- 'src/solvers/smt2/**'
- 'formal-proofs/**'
- 'regression/smt2_solver/**'
- 'scripts/check_proof_traceability.py'
- 'scripts/algebraic_soundness_smoke.sh'
- '.github/workflows/algebraic-checks.yaml'
push:
branches:
- main
- develop

jobs:
proof-traceability:
name: Proof-traceability lint
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Run proof-traceability check
run: python3 scripts/check_proof_traceability.py

soundness-smoke:
name: Algebraic soundness smoke (vs z3)
runs-on: ubuntu-24.04
timeout-minutes: 40
steps:
- uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
run: |
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
clang-19 clang++-19 flex bison cmake ninja-build ccache z3
- name: Prepare ccache
uses: actions/cache@v5
with:
path: .ccache
key: ${{ runner.os }}-algcheck-${{ github.sha }}
restore-keys: ${{ runner.os }}-algcheck-
- name: ccache environment
run: echo "CCACHE_DIR=$PWD/.ccache" >> $GITHUB_ENV
- name: Build smt2_solver
run: |
cmake -S . -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=clang++-19 \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DWITH_JBMC=OFF
cmake --build build --target smt2_solver -- -j4
- name: Run soundness smoke test
run: scripts/algebraic_soundness_smoke.sh build/bin/smt2_solver
132 changes: 132 additions & 0 deletions .github/workflows/lean-proofs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Lean formal proofs

on:
pull_request:
branches:
- '**'
paths:
- 'formal-proofs/**'
- '.github/workflows/lean-proofs.yaml'
push:
branches:
- main
- develop
paths:
- 'formal-proofs/**'
- '.github/workflows/lean-proofs.yaml'

jobs:
lean-build:
name: Build and verify Lean proofs
runs-on: ubuntu-24.04
timeout-minutes: 60
defaults:
run:
working-directory: formal-proofs
steps:
- uses: actions/checkout@v6

- name: Install elan (Lean version manager)
run: |
set -o pipefail
curl -sSfL https://raw.githubusercontent.com/leanprover/elan/v4.0.1/elan-init.sh | sh -s -- -y --default-toolchain none
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"

- name: Show Lean toolchain
run: |
cat lean-toolchain
lean --version
lake --version

- name: Cache .lake (mathlib + build artifacts)
id: lake-cache
uses: actions/cache@v5
with:
path: formal-proofs/.lake
# Key on the lakefile + manifest + toolchain so that any
# dependency change invalidates the cache.
key: lake-${{ runner.os }}-${{ hashFiles('formal-proofs/lakefile.toml', 'formal-proofs/lake-manifest.json', 'formal-proofs/lean-toolchain') }}
restore-keys: |
lake-${{ runner.os }}-

- name: Fetch mathlib oleans from cache (if not in lake cache already)
run: |
# `lake exe cache get` downloads prebuilt mathlib oleans.
# This is much faster than building mathlib from source.
# Skip if the .lake cache already covers it.
if [ ! -f .lake/packages/mathlib/.lake/build/lib/lean/Mathlib.olean ]; then
lake exe cache get || true # tolerated: failure means we will build from source
fi

- name: Build all modules
run: lake build

- name: Verify zero sorry across project modules
run: |
set -e
fail=0
for f in *.lean; do
if [ "$f" = "Main.lean" ]; then continue; fi
count=$(grep -E "^[[:space:]]*sorry[[:space:]]*$" "$f" | wc -l)
if [ "$count" -gt 0 ]; then
echo "::error file=formal-proofs/$f::contains $count sorry"
fail=1
fi
done
if [ "$fail" -eq 1 ]; then
echo "Sorry-check failed."
exit 1
fi
echo "Sorry-check passed: zero sorry across all project modules."

- name: Verify project axioms are only the documented ones
run: |
set -e
# All project-internal axioms have been mechanised. Any
# module that introduces axioms requires explicit review.
fail=0
for f in *.lean; do
if [ "$f" = "Main.lean" ]; then continue; fi
count=$(grep -cE "^axiom " "$f" || true)
if [ "$count" -gt 0 ]; then
echo "::error file=formal-proofs/$f::introduces $count undocumented axioms"
fail=1
fi
done
if [ "$fail" -eq 1 ]; then
echo "Axiom check failed."
exit 1
fi
echo "Axiom check passed: zero project-internal axioms across all modules."

- name: Verify forward traceability (PROOF: refs resolve)
working-directory: .
run: |
set -e
fail=0
# Every PROOF: formal-proofs/<File>::<theorem> reference in src/
# must resolve to an existing theorem/lemma/instance in <File>.
grep -rh "PROOF: formal-proofs" src/ 2>/dev/null | sort -u | while read ref; do
file=$(echo "$ref" | sed "s|.*formal-proofs/\([^:]*\)::.*|\1|")
thm=$(echo "$ref" | sed "s|.*::\([a-zA-Z_][a-zA-Z0-9_'.]*\).*|\1|")
if [ -z "$thm" ] || [ "$thm" = "$ref" ]; then continue; fi
if [ ! -f "formal-proofs/$file" ]; then
echo "::error::missing file formal-proofs/$file (referenced as ::$thm)"
echo "fail" > /tmp/trace_fail
continue
fi
short=$(echo "$thm" | rev | cut -d. -f1 | rev)
if grep -qE "^(theorem|lemma|def|axiom|instance) +${thm}( |\$)" "formal-proofs/$file" 2>/dev/null; then
:
elif grep -qE "^(theorem|lemma|def|axiom|instance) +${short}( |\$)" "formal-proofs/$file" 2>/dev/null; then
:
else
echo "::error::unresolved PROOF: ref formal-proofs/$file::$thm"
echo "fail" > /tmp/trace_fail
fi
done
if [ -f /tmp/trace_fail ]; then
echo "Forward traceability check failed."
exit 1
fi
echo "Forward traceability check passed."
58 changes: 57 additions & 1 deletion .github/workflows/pull-request-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ jobs:
env:
# This is needed in addition to -yq to prevent apt-get from asking for
# user input
DEBIAN_FRONTEND: noninteractive
DEBIAN_FRONTEND: nonint eractive
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -yq cmake ninja-build gcc gdb g++ maven flex bison libxml2-utils dpkg-dev ccache doxygen graphviz z3
Expand Down Expand Up @@ -301,6 +301,62 @@ jobs:
with:
path: .ccache
key: ${{ steps.restore-ccache.outputs.cache-primary-key }}

# This job takes approximately 29 to 42 minutes
check-ubuntu-24_04-cmake-gcc-mergesat:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Fetch dependencies
env:
# This is needed in addition to -yq to prevent apt-get from asking for
# user input
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -yq cmake ninja-build gcc gdb g++ maven flex bison libxml2-utils dpkg-dev ccache doxygen z3
- name: Confirm z3 solver is available and log the version installed
run: z3 --version
- name: Download cvc-5 from the releases page and make sure it can be deployed
run: |
wget https://github.com/cvc5/cvc5/releases/download/cvc5-${{env.cvc5-version}}/cvc5-Linux-x86_64-static.zip
unzip -j -d /usr/local/bin cvc5-Linux-x86_64-static.zip cvc5-Linux-x86_64-static/bin/cvc5
rm cvc5-Linux-x86_64-static.zip
cvc5 --version
- name: Prepare ccache
uses: actions/cache@v4
with:
path: .ccache
key: ${{ runner.os }}-24.04-Release-mergesat-${{ github.ref }}-${{ github.sha }}-PR
restore-keys: |
${{ runner.os }}-24.04-Release-mergesat-${{ github.ref }}
${{ runner.os }}-24.04-Release-mergesat
- name: ccache environment
run: |
echo "CCACHE_BASEDIR=$PWD" >> $GITHUB_ENV
echo "CCACHE_DIR=$PWD/.ccache" >> $GITHUB_ENV
- name: Configure using CMake
run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -Dsat_impl="mergesat;cadical"
- name: Check that doc task works
run: ninja -C build doc
- name: Zero ccache stats and limit in size
run: ccache -z --max-size=500M
- name: Build with Ninja
run: ninja -C build -j${{env.linux-vcpus}}
- name: Print ccache stats
run: ccache -s
- name: Checking completeness of help output
run: scripts/check_help.sh /usr/bin/g++ build/bin
- name: Check if package building works
run: |
cd build
ninja package
ls *.deb
- name: Run tests
run: cd build; ctest . -V -L CORE -j${{env.linux-vcpus}}

# This job takes approximately 20 to 38 minutes
check-ubuntu-22_04-make-clang:
runs-on: ubuntu-22.04
Expand Down
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,11 @@ dist/

# auto generated documentation
doc/html/
scripts/adder-research/benchmarks/

# Stray artifacts that were accidentally committed in the past
# (build trees, coverage output, patch backups). See REPRODUCE.md.
build-*/
*.gcov
*.gcno
*.orig
32 changes: 32 additions & 0 deletions bench-multiplication/ablation-audit/ablation-cbmc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash
# cbmc ablation: ON vs DISABLE_ALGEBRAIC=1. result via VERIFICATION (SUCCESSFUL/FAILED)
# Usage: ablation-cbmc.sh <timeout> <out-tsv> -- "<label> <cbmc-args...>" ...
set -u
CBMC=/home/ubuntu/cbmc-github.git/build/bin/cbmc
TO="$1"; OUT="$2"; shift 2; shift # drop the --
: > "$OUT"
runv() { # $1=label-args
local args="$1" label v
label="${args%% *}"; local rest="${args#* }"
local s e ton toff von voff
s=$(date +%s.%N)
von=$( ulimit -v 12000000 2>/dev/null; timeout "$TO" $CBMC $rest --no-standard-checks 2>/dev/null \
| grep -aoE "VERIFICATION (SUCCESSFUL|FAILED)" | head -1)
e=$(date +%s.%N); ton=$(echo "$e-$s"|bc)
s=$(date +%s.%N)
voff=$( ulimit -v 12000000 2>/dev/null; DISABLE_ALGEBRAIC=1 timeout "$TO" $CBMC $rest --no-standard-checks 2>/dev/null \
| grep -aoE "VERIFICATION (SUCCESSFUL|FAILED)" | head -1)
e=$(date +%s.%N); toff=$(echo "$e-$s"|bc)
[ -z "$von" ] && von=TO; [ -z "$voff" ] && voff=TO
local sol_on=0 sol_off=0
[ "$von" = "VERIFICATION SUCCESSFUL" ] && sol_on=1
[ "$voff" = "VERIFICATION SUCCESSFUL" ] && sol_off=1
local cls
if [ $sol_on = 1 ] && [ $sol_off = 0 ]; then cls=NEEDS_ALGEBRA
elif [ $sol_on = 0 ] && [ $sol_off = 1 ]; then cls=ONLY_OFF
elif [ $sol_on = 0 ] && [ $sol_off = 0 ]; then cls=BOTH_TO
elif awk "BEGIN{exit !($toff>=3*$ton && $toff-$ton>=5)}"; then cls=ALGEBRA_FASTER
else cls=ARTIFACT; fi
printf '%s\t%s\t%.2f\t%s\t%.2f\t%s\n' "$label" "$von" "$ton" "$voff" "$toff" "$cls" | tee -a "$OUT"
}
for spec in "$@"; do runv "$spec"; done
38 changes: 38 additions & 0 deletions bench-multiplication/ablation-audit/ablation.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash
# Ablation audit: for each benchmark run algebra-ON vs DISABLE_ALGEBRAIC=1.
# Usage: ablation.sh <list-of-abs-paths> <timeout> <jobs> <out-tsv>
# Output columns: path v_on t_on v_off t_off class
# class: NEEDS_ALGEBRA (on solves, off TO)
# ALGEBRA_FASTER (both solve, on >=3x faster AND saves >=5s)
# ARTIFACT (both solve, comparable)
# BOTH_TO (neither solves)
# ONLY_OFF (off solves, on doesn't -- algebra harmful)
set -u
LIST="$1"; TO="$2"; JOBS="$3"; OUT="$4"
SOLVER=/home/ubuntu/cbmc-github.git/build/bin/smt2_solver

one() {
local f="$1" to="$2" von toff voff ton s e
s=$(date +%s.%N)
von=$( ulimit -v 8000000 2>/dev/null; timeout "$to" "$SOLVER" < "$f" 2>/dev/null | grep -aE '^(sat|unsat|unknown)$' | head -1 )
e=$(date +%s.%N); ton=$(echo "$e-$s"|bc)
s=$(date +%s.%N)
voff=$( ulimit -v 8000000 2>/dev/null; DISABLE_ALGEBRAIC=1 timeout "$to" "$SOLVER" < "$f" 2>/dev/null | grep -aE '^(sat|unsat|unknown)$' | head -1 )
e=$(date +%s.%N); toff=$(echo "$e-$s"|bc)
[ -z "$von" ] && von=TO; [ -z "$voff" ] && voff=TO
local cls
sol() { [ "$1" = sat ] || [ "$1" = unsat ]; }
if sol "$von" && ! sol "$voff"; then cls=NEEDS_ALGEBRA
elif ! sol "$von" && sol "$voff"; then cls=ONLY_OFF
elif ! sol "$von" && ! sol "$voff"; then cls=BOTH_TO
else
# both solve
if awk "BEGIN{exit !($toff>=3*$ton && $toff-$ton>=5)}"; then cls=ALGEBRA_FASTER
else cls=ARTIFACT; fi
fi
printf '%s\t%s\t%.2f\t%s\t%.2f\t%s\n' "$f" "$von" "$ton" "$voff" "$toff" "$cls"
}
export -f one; export SOLVER
: > "$OUT"
cat "$LIST" | xargs -P "$JOBS" -I {} bash -c 'one "$@"' _ {} "$TO" >> "$OUT"
echo "Done: $(wc -l <"$OUT") in $OUT"
4 changes: 4 additions & 0 deletions bench-multiplication/ablation-audit/brain-wins.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/tmp/martin-bench/seed-23/bitwidth-16-degree-13-seed-23-multiplication-reduced-native-encoding.smt2 unsat 0.26 TO 60.01 NEEDS_ALGEBRA
/tmp/martin-bench/seed-23/bitwidth-16-degree-23-seed-23-correctness-original-native-encoding-vs-reduced-native-encoding.smt2 unsat 0.34 TO 60.01 NEEDS_ALGEBRA
/tmp/martin-bench/seed-23/bitwidth-32-degree-27-seed-23-correctness-original-native-encoding-vs-reduced-native-encoding.smt2 unsat 2.53 TO 60.06 NEEDS_ALGEBRA
/tmp/martin-bench/seed-23/bitwidth-32-degree-19-seed-23-multiplication-reduced-native-encoding.smt2 unsat 3.10 TO 60.07 NEEDS_ALGEBRA
8 changes: 8 additions & 0 deletions bench-multiplication/ablation-audit/custom-c.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
mac_equiv VERIFICATION SUCCESSFUL 0.14 VERIFICATION SUCCESSFUL 45.80 ALGEBRA_FASTER
div_roundtrip VERIFICATION SUCCESSFUL 0.04 VERIFICATION SUCCESSFUL 0.91 ARTIFACT
comm_64 VERIFICATION SUCCESSFUL 0.03 TO 90.01 NEEDS_ALGEBRA
assoc VERIFICATION SUCCESSFUL 0.03 VERIFICATION FAILED 0.05 NEEDS_ALGEBRA
distrib VERIFICATION SUCCESSFUL 0.03 VERIFICATION SUCCESSFUL 0.03 ARTIFACT
mul_overflow VERIFICATION SUCCESSFUL 0.03 TO 90.01 NEEDS_ALGEBRA
matrix_mul VERIFICATION SUCCESSFUL 0.04 TO 90.01 NEEDS_ALGEBRA
hash_mul VERIFICATION SUCCESSFUL 0.05 TO 90.01 NEEDS_ALGEBRA
Loading
Loading