Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
624 commits
Select commit Hold shift + click to select a range
77b88bf
saw-core-lean: centralize adaptation in adaptTo (Slice 2a)
septract Jul 9, 2026
fea6b73
saw-core-lean: delete emitted-AST shape inspection (Slice 2b)
septract Jul 9, 2026
a77b1f6
saw-core-lean: thread expected position through the recursion (Slice …
septract Jul 9, 2026
90323c1
saw-core-lean: refresh stale arithmetic/stream driver goldens
septract Jul 9, 2026
99eb770
saw-core-lean: position-directed value lambdas (Slice 3a)
septract Jul 9, 2026
131caea
saw-core-lean: dependent binders join the convention path (Slice 3b)
septract Jul 9, 2026
3d5b23c
saw-core-lean: recursor motives at declared conventions (Slice 3c)
septract Jul 9, 2026
667210d
saw-core-lean: thread demanded position through let sharing (Slice 3d)
septract Jul 9, 2026
9ca56b2
saw-core-lean: sweep and refresh pre-July-3 driver goldens
septract Jul 10, 2026
700a847
saw-core-lean: refresh remaining elaborating bounds-overhaul goldens
septract Jul 10, 2026
8db2ff4
saw-core-lean: restructure plan Slice 4 into sub-slices 4a-4c
septract Jul 10, 2026
0ca4b63
saw-core-lean: checked-application conventions fix wrapped indices (S…
septract Jul 10, 2026
493fa9f
saw-core-lean: lift wrapped partial-op contracts to ArgMode (Slice 4b…
septract Jul 10, 2026
54b5daa
saw-core-lean: record 4b-remainder design notes in TODO
septract Jul 10, 2026
ab45def
saw-core-lean: inert conventions oracle for the phase-beta path (4b s…
septract Jul 10, 2026
6d82173
saw-core-lean: refresh bounds-class module goldens; record prelude-em…
septract Jul 10, 2026
60fdd6d
saw-core-lean: convention-driven bind plan on the full-application pa…
septract Jul 10, 2026
4f9c3ce
saw-core-lean: mark 4b steps 2-3 complete in TODO
septract Jul 10, 2026
87bfb78
saw-core-lean: delete the legacy bind plan; conventions drive all pat…
septract Jul 10, 2026
aef75de
saw-core-lean: close Slice 4b in TODO; dependent fixture reclassified…
septract Jul 10, 2026
d3e90ef
saw-core-lean: 4c survey and step order in plan doc
septract Jul 10, 2026
7d1ab09
saw-core-lean: inert oracle for the function-value convention (4c ste…
septract Jul 10, 2026
5b3d0bb
saw-core-lean: swap function-value conventions in; track emission deb…
septract Jul 10, 2026
03ba1ad
saw-core-lean: proof-primitive contracts declare true slot roles (4c …
septract Jul 10, 2026
2a00f86
saw-core-lean: CalleeTransitional count is zero - by deletion (4c ste…
septract Jul 10, 2026
c1170b9
saw-core-lean: close Slice 4 - conventions govern every application path
septract Jul 10, 2026
4d8a814
saw-core-lean: Slice 5a - equality subject rep is a declared convention
septract Jul 10, 2026
6a23541
saw-core-lean: Slice 5b - the full Eq.rec convention field set
septract Jul 10, 2026
2eb6574
saw-core-lean: Slice 5c - the function-carrier equality decision
septract Jul 10, 2026
5ea49c7
saw-core-lean: unsafeAssert's rho_eq follows the operands' domain
septract Jul 10, 2026
7c554f4
saw-core-lean: reorder - the debts slice runs before Slice 6
septract Jul 10, 2026
4cf6e81
saw-core-lean: bind-iff-wrapped for RawValueArg (debts slice, part 1)
septract Jul 11, 2026
7a566af
saw-core-lean: instantiation-directed modes for var-headed formals (d…
septract Jul 11, 2026
a899c6c
saw-core-lean: truthful raw-mode records; collapse the raw-mode guard…
septract Jul 11, 2026
e0ea53e
saw-core-lean: close the debts-slice books (TODO + plan doc)
septract Jul 11, 2026
2000c77
saw-core-lean: recursor convention derives from the declared motive r…
septract Jul 11, 2026
133f2cd
saw-core-lean: Lean-checked constructor-order assertions for emitted …
septract Jul 11, 2026
e3cc62f
saw-core-lean: close the Slice 6 books (TODO + plan doc)
septract Jul 11, 2026
c461975
saw-core-lean: centralize the value-domain result rule; anti-regressi…
septract Jul 11, 2026
f327658
saw-core-lean: close four proof gaps via the completed-outline workfl…
septract Jul 12, 2026
3363e3c
saw-core-lean: pin the Either@core polymorphic-comprehension module r…
septract Jul 12, 2026
62554b0
saw-core-lean: refresh polynomial_literal_rejection golden missed by …
septract Jul 12, 2026
19e81bd
saw-core-lean: obligation-placement design doc, audited; new operativ…
septract Jul 12, 2026
7a7af91
saw-core-lean: Slice OP-1 — checked evidence chains for derivable sid…
septract Jul 13, 2026
6d0819e
saw-core-lean: OP-2 decision-rule amendment, adversarially audited
septract Jul 13, 2026
1af1db5
saw-core-lean: Slice OP-2 — runtime-checked at-access for evidence-le…
septract Jul 13, 2026
87cc7dd
saw-core-lean: record the OP-3 entry decision (structural-first)
septract Jul 13, 2026
00f02ee
saw-core-lean: OP-3 first structural draft, audited and REFUTED — rec…
septract Jul 13, 2026
c39d45e
saw-core-lean: emission-only offline_lean; reserve offline_lean_repla…
septract Jul 15, 2026
c6eb7fd
saw-core-lean: Stream@core pair reclassified as expected rejection (r…
septract Jul 15, 2026
4437f43
saw-core-lean: close the two filed loud emission gaps (release 0.01 w…
septract Jul 15, 2026
99b96eb
saw-core-lean: audited reachable-raw-error disposition — constant-err…
septract Jul 15, 2026
b1a707d
saw-core-lean: release-gate checkpoint — op2-baseline cut, docs synce…
septract Jul 15, 2026
0c7e9a0
saw-core-lean: release 0.01 comprehensive audit — drift & removal can…
septract Jul 15, 2026
f64150f
saw-core-lean: audit cleanup slice 1 — doc drift fixes + fossil-guard…
septract Jul 15, 2026
c678a51
saw-core-lean: audit cleanup slice 2 — dead-code removal (emission-in…
septract Jul 15, 2026
e958a58
saw-core-lean: audit cleanup slice 3 — support-library slim-down (71 …
septract Jul 15, 2026
3ef61de
saw-core-lean: example corpus to honest state; tiered gap census in S…
septract Jul 15, 2026
77ec99b
saw-core-lean: release plan gains the worked-example slate (workstrea…
septract Jul 15, 2026
fb0935e
saw-core-lean: wave-2 audit stragglers + comment-shift golden refresh
septract Jul 15, 2026
ae5b29e
saw-core-lean: wave-2 audit fixes — revive the in-repo CI demo, journ…
septract Jul 15, 2026
77a3c99
saw-core-lean: snapshot oracle scan excludes .snapshots/ wholesale; o…
septract Jul 15, 2026
11c2c36
saw-core-lean: test-tree restructure — workflows/ split, attacks/ ren…
septract Jul 15, 2026
6839b45
saw-core-lean: legacy litmus disposition + tree-exercise cleanup + .g…
septract Jul 15, 2026
66bbcef
saw-core-lean: bump STATUS last-updated for the restructure
septract Jul 15, 2026
22de836
saw-core-lean: salsa20 becomes a mixed-solver workflow; chacha20 gap …
septract Jul 15, 2026
44e138a
saw-core-lean: mixed-solver flagship complete (point); eq_u128 charac…
septract Jul 15, 2026
68a5434
saw-core-lean: commit the 0.02 plan (user-confirmed)
septract Jul 15, 2026
6119d05
saw-core-lean: OP-3 successor design draft (pre-audit) — bounded-iter…
septract Jul 15, 2026
53f484f
saw-core-lean: OP-3 successor design AUDITED — implementable with ame…
septract Jul 15, 2026
412cd60
saw-core-lean: swap memory-safety workflow (Case Study F) with discha…
septract Jul 15, 2026
c941f6e
saw-core-lean: OP-3 implementation slice plan (R0-R4, amendments bind…
septract Jul 15, 2026
807caf2
saw-core-lean: Z n arithmetic workflow with three discharged properti…
septract Jul 15, 2026
df15848
saw-core-lean: sequence-surgery workflow — all four WithProof helpers…
septract Jul 15, 2026
f009d65
saw-core-lean: slate batch closed — full suite exit 0, baseline re-cu…
septract Jul 15, 2026
9ba756f
saw-core-lean: tuple-swap workflow — multi-field struct postcondition…
septract Jul 16, 2026
b656945
saw-core-lean: double llvm_extract row — term-level goal delivery dis…
septract Jul 16, 2026
3823220
saw-core-lean: per-goal solver routing row — Lean inside one proof sc…
septract Jul 16, 2026
2d38778
saw-core-lean: in-ITP decomposition pilot lands — rowround composed i…
septract Jul 16, 2026
72e790f
saw-core-lean: wave 3 closed — full suite exit 0, baseline re-cut at 307
septract Jul 16, 2026
93fb036
saw-core-lean: Slice R0 — inert fix-shape recognizer (OP-3 successor)
septract Jul 16, 2026
9cecda1
saw-core-lean: columnround + doubleround in-ITP rows (wave-3 extension)
septract Jul 16, 2026
42fa237
saw-core-lean: track gap-row discharge sources via .gitignore unignore
septract Jul 16, 2026
2b05ac8
saw-core-lean: record in-ITP extension result in release plan
septract Jul 16, 2026
5ac4057
saw-core-lean: Slice R1 — saw_fix_bounded library + faithfulness core
septract Jul 16, 2026
4108de0
saw-core-lean: Slice R2 — Class-F emission flip; running_sum discharg…
septract Jul 16, 2026
77e22a2
saw-core-lean: R3 pre-slice concretization (Class S corpus facts + plan)
septract Jul 16, 2026
2ad3cf9
saw-core-lean: R2 ladder — popcount32 + E6 discharge; llvm_popcount r…
septract Jul 16, 2026
9318b6b
saw-core-lean: Slice R3a — hardened Class-S recognizer (fifth audit a…
septract Jul 16, 2026
e1ab2a4
saw-core-lean: R3b library — saw_stream_unfold + faithfulness core
septract Jul 16, 2026
f2db4ae
saw-core-lean: harden zip-slot scan discipline (sixth-audit Finding 0)
septract Jul 16, 2026
8171788
saw-core-lean: Slice R3b — Class S-single realization; paired-stream …
septract Jul 16, 2026
d3aa531
saw-core-lean: Slice R4 — retire the wrapped unique-fixed-point contract
septract Jul 16, 2026
c6ae24f
saw-core-lean: W1 program records (audits five/six, semantics scoping…
septract Jul 16, 2026
230eeec
saw-core-lean: differential batch — Zone-1 exposures + fix/error eval…
septract Jul 16, 2026
36a8625
saw-core-lean: 0.02-W2 opener — byte_add three-act workflow row
septract Jul 16, 2026
b919c13
saw-core-lean: W2 — byte_add discharged; byte-split/carry lemma seed set
septract Jul 17, 2026
597aa6a
saw-core-lean: W2 — eq_u128 discharged; width-general window lemma; e…
septract Jul 17, 2026
e093038
saw-core-lean: offline_lean_replay design + seventh-audit amendments
septract Jul 17, 2026
bf329fa
saw-core-lean: offline_lean_replay — SAW admits goals on Lean's autho…
septract Jul 17, 2026
f4392c1
saw-core-lean: neutralize security-flavored vocabulary; rename attack…
septract Jul 17, 2026
2208e92
saw-core-lean: close the offline_lean_replay task in TODO.md
septract Jul 18, 2026
89a5616
saw-core-lean: SWE-quality review — keep CryptolToLean, record findings
septract Jul 18, 2026
d9fcfa5
saw-core-lean: move trust kernel into product tree; retire shape-test…
septract Jul 18, 2026
e4941a9
saw-core-lean: rename support-proofs/ to support-lemmas/
septract Jul 18, 2026
20be71e
saw-core-lean: split Term.hs; hlint/shellcheck clean sweep
septract Jul 18, 2026
c351dc8
saw-core-lean: aggressive doc archive sweep; split TODO.md; refresh S…
septract Jul 18, 2026
27547fb
saw-core-lean: Either/Stream recursor-convention design + two audits
septract Jul 18, 2026
cd6532b
saw-core-lean: D1 — classifyDomain, the single domain authority
septract Jul 18, 2026
73d11e9
saw-core-lean: D2/D3 — kind-directed domain map lands; Either/Stream …
septract Jul 18, 2026
744ab91
saw-core-lean: canonical domain-map section in the calculus doc + coh…
septract Jul 18, 2026
34dbbb3
saw-core-lean: exception hunt — definition-convention authority; gate…
septract Jul 18, 2026
4f339c2
saw-core-lean: design — under-applied partial-op runtime wrappers (in…
septract Jul 18, 2026
a9eb9c3
saw-core-lean: wrapper design audited — SAFE-WITH-CONDITIONS; total-l…
septract Jul 18, 2026
5df73f6
saw-core-lean: under-applied partial ops lower to runtime wrappers
septract Jul 18, 2026
313fa7e
saw-core-lean: qualify division semantic-equality claims at the zero …
septract Jul 18, 2026
8204169
saw-core-lean: design note — total-op eta adaptation (rev.cry last bl…
septract Jul 18, 2026
5f6513b
saw-core-lean: eta-adaptation design — implementation points located
septract Jul 18, 2026
f16800e
saw-core-lean: eta adaptation parts 1-2 — instantiation-derived conve…
septract Jul 19, 2026
31004ad
saw-core-lean: eta part 3a — raw-formal gate fixes double adaptation
septract Jul 19, 2026
43b4456
saw-core-lean: eta part 3b — honest zero-arg stamp; convention-aware …
septract Jul 19, 2026
1676d4f
saw-core-lean: eta 3b survivor root-caused — RawValueMode transport d…
septract Jul 19, 2026
72e809c
saw-core-lean: transport-carrier design scoping (last rev.cry blocker…
septract Jul 19, 2026
325769b
saw-core-lean: transport audit — always-loud proven; design restructured
septract Jul 19, 2026
23bcdd6
saw-core-lean: rev.cry differential row GREEN — alias-typed global eta
septract Jul 19, 2026
a2b60e2
examples/saw-lean: demo refreshed to the 2026-07-18 backend
septract Jul 19, 2026
785023d
examples/saw-lean: replay wired into the demo — goals genuinely solved
septract Jul 19, 2026
2f897f6
saw-core-lean: replay hardening — shared axiom audit; binder-type tel…
septract Jul 19, 2026
cf6619d
saw-core-lean: smoketest lint — wrapExcept is the sole carrier authority
septract Jul 19, 2026
cf2fae9
saw-core-lean: chacha transport grounding — the refl site localized
septract Jul 19, 2026
abe97ef
saw-core-lean: mode-uniform type-subject equality spines (chacha tran…
septract Jul 19, 2026
ddbd9fb
saw-core-lean: force fully-qualified names in axiom-audit probes
septract Jul 19, 2026
098fc61
saw-core-lean: land calculus residuals B-3/B-4 + wrappedHelper declar…
septract Jul 19, 2026
03a5f91
saw-core-lean: type-image obligations for the vector-lemma axiom family
septract Jul 20, 2026
4e0f404
saw-core-lean: realize proveLeNat/natCompareLe as canonical decision …
septract Jul 20, 2026
adb19d2
saw-core-lean: file the constant-headed Prop domain rule; land its en…
septract Jul 20, 2026
8f2a62d
saw-core-lean: vacuity guards — the axiom audit and the category cens…
septract Jul 20, 2026
0aa9cd7
saw-core-lean: realize intAbs/intMin/intMax and EmptyVec
septract Jul 20, 2026
b1a8b3c
saw-core-lean: two-tier trust policy (native-eval) + quarterround dis…
septract Jul 22, 2026
deefbef
saw-core-lean: harden trust-tier forgery defenses (pre-audit fix)
septract Jul 22, 2026
96c7090
saw-core-lean: skeptical soundness review doc + language precision pass
septract Jul 22, 2026
ed78824
saw-core-lean: fix F1 — lexer-based proof-source lint (soundness-revi…
septract Jul 22, 2026
641533a
saw-core-lean: park chacha20-core qround direct discharge (measured w…
septract Jul 22, 2026
7051122
saw-core-lean: land all 8 chacha20-core qround rows via spec-spelling…
septract Jul 22, 2026
0c4779c
saw-core-lean: prove doubleround compositionally over replay-admitted…
septract Jul 23, 2026
b7ed9bf
saw-core-lean: discharge llvm_popcount_eq — the 0.02 BV package tail …
septract Jul 23, 2026
dac7d6f
saw-core-lean: pin the s20_hash rung — composition scales, recognizer…
septract Jul 23, 2026
4d8b2d8
saw-core-lean: bump Lean toolchain v4.29.1 -> v4.32.0
septract Jul 23, 2026
89e4715
saw-core-lean: 0.02 punchcard tail — W2(d) hardening, census pass, do…
septract Jul 23, 2026
52cd852
saw-core-lean: SOUNDNESS FIX — bvToInt was signed; SAW's is unsigned
septract Jul 23, 2026
5af7a36
saw-core-lean: 200-case differential edge-case matrix + Z 0 boundary …
septract Jul 23, 2026
8f624e7
saw-core-lean: strict IntMod modulus gate — reject Z 0 and non-litera…
septract Jul 23, 2026
b9c3a6f
saw-core-lean: relocatable packaging — ship Lean assets as Cabal data…
septract Jul 24, 2026
0126174
saw-core-lean: doc-faithfulness pass, part 1 — fix drift found by review
septract Jul 24, 2026
cae461b
saw-core-lean: doc-faithfulness pass, part 2 — dated docs + matrix re…
septract Jul 24, 2026
aabb520
saw-core-lean: doc-faithfulness pass, part 3 — TODO restructure + arc…
septract Jul 24, 2026
cf050bf
saw-core-lean: re-cut the emitted-Lean snapshot baseline (372 artifac…
septract Jul 24, 2026
a83b6e8
saw-core-lean: fix R-1 — replay completed-outline goal binding (CRITI…
septract Jul 24, 2026
e499561
saw-core-lean: audit batch — V-H1 (probes were already vacuous), V-H2…
septract Jul 24, 2026
186701a
saw-core-lean: second pre-release soundness audit — 3 release blockers
septract Jul 24, 2026
75c2acf
saw-core-lean: close three defect CATEGORIES from the second audit (C…
septract Jul 25, 2026
28f5fd7
saw-core-lean: close C4 — every trust-kernel guard now has a mutation…
septract Jul 25, 2026
fa84234
saw-core-lean: close A-1/A-6/A-7 — the source lint's three evasions
septract Jul 25, 2026
389a55e
saw-core-lean: close A-5 and RK-5 — the binding is now kernel-checked
septract Jul 25, 2026
8dda903
saw-core-lean: mark the audit-2 findings closed by this session's work
septract Jul 25, 2026
05153ef
saw-core-lean: close S-1 — the fix/stream productivity obligations ar…
septract Jul 25, 2026
c7f5ef5
saw-core-lean: close LIB-2 and S-2 — withdraw two unsound surfaces
septract Jul 26, 2026
ac8716c
saw-core-lean: close A-2/A-9/F-5 and F-2 — goal sorts and the Float/D…
septract Jul 26, 2026
98e1c41
saw-core-lean: close F-8, F-9, LIB-4 (Lean half), A-10 and the low-se…
septract Jul 26, 2026
e0ae5a1
saw-core-lean: close F-6 and F-7 — name hygiene stops being accidental
septract Jul 26, 2026
5d6bc64
saw-core-lean: preserve the LIB-1 prototype and record handoff state
septract Jul 27, 2026
b2cff0f
saw-core-lean: land the S-2/Ascription smoketest companion edits
septract Jul 28, 2026
c41214b
saw-core-lean: land the LIB-1 differential row — the collapse is now …
septract Jul 28, 2026
3ffc8be
saw-core-lean: hoist the per-row lake build to one shared sweep prebuild
septract Jul 28, 2026
8d65083
saw-core-lean: normalize counterexample values in the golden-log compare
septract Jul 28, 2026
98886a6
saw-core-lean: record the 2026-07-28 baseline re-cut and green sweep
septract Jul 28, 2026
a7eaaaa
saw-core-lean: per-row wall-clock profile in the sweep orchestrator
septract Jul 28, 2026
2a2c3a4
saw-core-lean: LIB-1 scope measurement — option (b) is not viable as …
septract Jul 28, 2026
5c3c57d
saw-core-lean: (b-evidence) design scrutiny — refuted, with the bugs …
septract Jul 28, 2026
3e7ee32
saw-core-lean: disposition LIB-1 — ship documented, remedy scheduled …
septract Jul 28, 2026
9f42bbf
saw-core-lean: close the owed-pins ledger — two new pins, four stale …
septract Jul 28, 2026
ac14827
saw-core-lean: F-1 loudness pinned; docs batch closed to its residue
septract Jul 28, 2026
c2efb40
saw-core-lean: S-3 analysis — the item is two halves, one a provable …
septract Jul 28, 2026
bafafee
saw-core-lean: name the three defect families and sequence the pre-au…
septract Jul 28, 2026
9ea87ac
saw-core-lean: close S-3 — Class-F rec admission is now structural
septract Jul 28, 2026
973c043
saw-core-lean: fix the S-1 pin — it was doubly vacuous (session audit…
septract Jul 29, 2026
305c5b6
saw-core-lean: close the remaining 15 session-audit findings
septract Jul 29, 2026
585ebf6
saw-core-lean: split Term.hs and name the annotation invariant (Famil…
septract Jul 29, 2026
64fb007
saw-core-lean: the three Family-3 instances (F-1, F-2 core, printer)
septract Jul 29, 2026
09e3693
saw-core-lean: the 0.02 release-gate audit report — DO NOT RELEASE
septract Jul 29, 2026
49fe5dc
saw-core-lean: track the 0.02 audit findings as a checkable ledger
septract Jul 29, 2026
e25ce01
Merge remote-tracking branch 'origin/saw-core-lean' into saw-core-lean
septract Jul 29, 2026
faf1e36
saw-core-lean: close both release blockers, plus F4/F5/F7
septract Jul 29, 2026
e53f2a1
saw-core-lean: close F3, F6, F8 — the remaining HIGH audit findings
septract Jul 29, 2026
69ee95c
saw-core-lean: close the MEDIUM/LOW audit batch (F9-F13)
septract Jul 29, 2026
40c528d
saw-core-lean: wave-2 audit report and findings ledger
septract Jul 29, 2026
aff7fad
saw-core-lean: seal IntMod and complete the emitter bare-name set
septract Jul 29, 2026
1706955
saw-core-lean: close L-1, harden the two swept classes, log wave-3 scope
septract Jul 29, 2026
b0c3de2
saw-core-lean: convert the three cheap hand enumerations to derived (…
septract Jul 29, 2026
e031d83
saw-core-lean: adopt the closure-claim rule, scope §7.2, fix the rott…
septract Jul 29, 2026
fd1201f
saw-core-lean: land the pre-wave-3 halves of proposal §7.2
septract Jul 29, 2026
5f5a754
saw-core-lean: wave-3 audit report, ledger, and the refuted scorecard
septract Jul 30, 2026
0135b7d
saw-core-lean: gate Except-carried goal binders (W2-UNRUN-1), plus th…
septract Jul 30, 2026
fbea16b
saw-core-lean: capture the threat model — error, not adversarial acti…
septract Jul 30, 2026
3b4da90
saw-core-lean: score the convergence proposal's prediction (task #23)
septract Jul 30, 2026
e1daa4c
saw-core-lean: reconcile the wave-3 ledger with the down-scope (task …
septract Jul 30, 2026
2ff9b91
saw-core-lean: strengthen gate 3's KNOWN LIMIT 2 with the unbound-car…
septract Jul 30, 2026
c0862d5
saw-core-lean: drift probes become kernel-checked declarations (D3, t…
septract Jul 30, 2026
6c3557c
saw-core-lean: narrow the lint to its one closed check; deletion-awar…
septract Jul 30, 2026
0c94514
saw-core-lean: close both fix-audit residue sets (tasks #28, #29)
septract Jul 30, 2026
b5c75fd
saw-core-lean: record the gate-verified down-scope state; row-retirem…
septract Jul 30, 2026
c40620b
saw-core-lean: wave-4 release-gate audit — no blocker; items 1+2 stay…
septract Jul 30, 2026
6d33eb3
saw-core-lean: W5-1 reject-side H_prod pin — kernel-checked refutations
septract Jul 30, 2026
3d4c777
saw-core-lean: W5-2 remedy — restore the demo's CI gate; ship replay …
septract Jul 30, 2026
07169da
saw-core-lean: W5-1 witnesses corrected per fix audit — in-image, ref…
septract Jul 30, 2026
4d3b433
saw-core-lean: DC-1..5 delta-composition residues — truthful lint tok…
septract Jul 30, 2026
8b4f89b
saw-core-lean: wave-4 doc batch — demo truthfulness, FXC-3 spec comme…
septract Jul 30, 2026
0b3658a
saw-core-lean: DC-batch fix-audit response — axiom-first precedence, …
septract Jul 30, 2026
7c2a6a0
saw-core-lean: SHIP-4 staging race fix; FXC-1 recognizer pin; fix_err…
septract Jul 30, 2026
a88d1d8
saw-core-lean: ledger dispositions for the 2026-07-30 fix arc; in_mod…
septract Jul 30, 2026
e5a0d59
saw-core-lean: second-round audit residues — same-line precedence tru…
septract Jul 30, 2026
98e9085
saw-core-lean: convergence close-out plan for the 0.02 release arc
septract Jul 30, 2026
183bfd6
saw-core-lean: close-out step 1 — observation pins, toolchain converg…
septract Jul 30, 2026
789267b
saw-core-lean: close-out step 2 (partial) — triviality gate fails clo…
septract Jul 30, 2026
aa7c06f
saw-core-lean: close-out step 2 complete — W3-REF-1 derived simp set;…
septract Jul 30, 2026
e78a936
saw-core-lean: step 1+2 fix-audit responses — give-up fail-closed; :(…
septract Jul 30, 2026
e2d6b38
saw-core-lean: third-round triviality tightening — give-up denylist o…
septract Jul 30, 2026
237310f
saw-core-lean: record close-out steps 1-2 complete, gate-swept at e2d…
septract Jul 30, 2026
d8e0f86
saw-core-lean: wave-5 verdict + remediation steps 1-2 — S-2/LIB-2 pro…
septract Jul 30, 2026
1cb4bdf
saw-core-lean: record wave-5 outcome and §5 state at the candidate re…
septract Jul 30, 2026
95db754
saw-core-lean: kernel design review — re-accretion measured, triviali…
septract Jul 31, 2026
3b1e900
saw-core-lean: delete the anti-trivialization gate (design review Opt…
septract Jul 31, 2026
6128e86
saw-core-lean: fix §3.2e collision — new residual renumbered to §3.2f
septract Jul 31, 2026
8f125bf
saw-core-lean: deletion-audit residues — D5 decision-log entry, §3.2f…
septract Jul 31, 2026
de22b6a
saw-core-lean: fast path — OBL-1 differentiated and pinned; F8b close…
septract Jul 31, 2026
d4d4c43
saw-core-lean: CRITICAL — named hypothesis binder escaped gate 3; fix…
septract Jul 31, 2026
e14de61
saw-core-lean: record the CRITICAL interruption and the wave-6 charge…
septract Jul 31, 2026
e37a51c
saw-core-lean: gate 3 third cut — DELETE the anonymity test; a binder…
septract Jul 31, 2026
8d9bdba
saw-core-lean: gate 3 fourth cut — exempting a binder must not abando…
septract Jul 31, 2026
d4573e1
saw-core-lean: D6 — ship 0.02 on gate 3's fourth cut; residual catalo…
septract Jul 31, 2026
3f5c68a
Merge the 0.02 convergence close-out arc
septract Jul 31, 2026
5e3b673
Trim backend footprint outside saw-core-lean/ to short pointers
septract Jul 31, 2026
66124d8
saw-core-lean: docs pass — make the backend usable by a newcomer
septract Jul 31, 2026
7f573bf
ci: run on pushes to the saw-core-lean integration branch
septract Jul 31, 2026
4fe99a7
saw-core-lean: refresh STATUS.md and link it from the README
septract Jul 31, 2026
2d68ed8
docs: completed.lean workflow, user-first ordering, and a root pointer
septract Jul 31, 2026
89071f5
saw-core-lean: survey the unused-binder defect — reach is wider than …
septract Jul 31, 2026
470b280
intTests: resync builtin-listing goldens with the Lean primitives
septract Jul 31, 2026
ff891c9
saw-core-lean: record the W5-2 determination and file W5-2b
septract Jul 31, 2026
33b8494
saw-core-lean: don't shadow a goal binder the body never uses
septract Aug 1, 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
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .github/ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,15 @@ bundle_files() {
cp intTests/jars/galois.jar dist/lib
cp -r deps/cryptol/lib/* dist/lib
cp -r examples/* dist/examples

# saw-core-lean replay assets. The bindist binary's compiled-in
# Cabal datadir is never installed, so these trees must ship for
# `offline_lean_replay` to work from the tarball; shipping them
# checkout-shaped makes the unpacked root a valid SAW_LEAN_ROOT,
# which must be writable (replay builds inside it). Derived from
# git, not a hand list. Details: saw-core-lean/README.md.
git archive --format=tar HEAD -- saw-core-lean/lean saw-core-lean/replay \
| (cd dist && tar x)
}

sign() {
Expand Down
61 changes: 60 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ on:
tags:
- "v?[0-9]+.[0-9]+"
- "v?[0-9]+.[0-9]+.[0-9]+"
branches: [master, "release-**"]
# saw-core-lean is the Lean backend's integration branch: it is
# long-lived and merged into rather than PR'd per change, so it
# needs a push trigger of its own to get CI coverage.
branches: [master, "release-**", saw-core-lean]
pull_request:
schedule:
- cron: "0 10 * * *" # 10am UTC -> 2/3am PST
Expand Down Expand Up @@ -202,6 +205,8 @@ jobs:
cryptol-saw-core-tests
crux-mir-comp-tests
saw-core-rocq-tests
saw-core-lean-smoketest
saw-core-lean-tests
dest: dist-tests

# In the next 2 steps, we upload to different names depending on whether
Expand Down Expand Up @@ -751,6 +756,38 @@ jobs:
java-version: "8"
java-package: jdk

- name: Install Lean toolchain for lake-driven tests
if: "(matrix.suite == 'integration-tests' || matrix.suite == 'saw-core-lean-tests') && runner.os != 'Windows'"
shell: bash
run: |
# Install elan + the toolchain pinned in saw-core-lean/lean/lean-toolchain.
# This puts 'lake' / 'lean' on PATH for both Lean-using test paths:
#
# - integration-tests: legacy otherTests/saw-core-lean/{negative,saw-boundary,proofs}/ harnesses
# (lean-negative-test.sh, lean-proof-test.sh, test-lean.sh).
#
# - saw-core-lean-tests: otherTests/saw-core-lean/test.sh, which
# drives drivers/*, differential/*, obligations/*, saw-boundary/*,
# proofs/*, and negative/* through the support harnesses.
#
# Phase A audit (2026-05-04): the Lean test harnesses FAIL LOUDLY
# when lake is missing, instead of silently skipping. So this
# install step is mandatory for both suites — without it the
# tests are red. Windows currently lacks the install (handled
# via `continue-on-error: true` for integration-tests on Windows,
# and saw-core-lean-tests is ubuntu-only by default); see #134
# for the follow-up to install elan on Windows or filter
# test_lean_* tests off Windows deliberately.
# Audit H-1 (2026-05-06): `saw-core-lean-tests` was previously
# gated only on integration-tests, leaving the suite either red
# on every CI push or silently inheriting elan from elsewhere.
curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh \
| sh -s -- -y --default-toolchain none
echo "$HOME/.elan/bin" >> $GITHUB_PATH
export PATH="$HOME/.elan/bin:$PATH"
# Trigger toolchain download by reading the lean-toolchain file.
( cd saw-core-lean/lean && lake env lean --version )

- uses: actions/cache/restore@v4
name: Restore SMT solver result cache
if: "matrix.suite == 'integration-tests'"
Expand All @@ -774,6 +811,28 @@ jobs:
export PATH="$PWD/bin:$PWD/dist/bin:$PATH"
dist-tests/${{ matrix.suite }}

# Verify the saw-lean-example demo end-to-end: rerun saw on
# demo.saw, then lake-build the proof/ project that consumes
# its emitted output. The example is a release demo
# (examples/saw-lean/), so silent rot here would be visible
# to users following the documentation. Only runs in the
# saw-core-lean-tests matrix because earlier jobs may not
# have elan/saw on PATH together.
- name: saw-lean-example demo
if: "matrix.suite == 'saw-core-lean-tests' && runner.os != 'Windows'"
shell: bash
run: |
export PATH="$PWD/bin:$PWD/dist/bin:$HOME/.elan/bin:$PATH"
# demo.saw's replay steps need the asset root: the
# extracted binary's compiled-in datadir is never installed.
export SAW_LEAN_ROOT="$PWD"
cd examples/saw-lean
saw demo.saw
# Build the committed Emitted copies. Refreshing them
# from out/ is tracked in saw-core-lean/TODO.md.
cd proof
lake build

- uses: actions/cache/save@v4
name: Save SMT solver result cache
if: "matrix.suite == 'integration-tests'"
Expand Down
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,20 @@ stack.yaml
.ghc.environment*
dist-newstyle
cabal.project.freeze
build.log
*~
*#
.#*
saw-core-rocq/rocq/.Makefile.rocq.d

# Lean backend (saw-core-lean): build artifacts, per-test staging
# (tests clean their own intTestsProbe/ subdirs), and local
# AI-session bookkeeping. Deliberately NO blanket scratch-dir rules
# (.tmp-*/ etc.) — scratch should show up in git status and get
# dealt with, not accumulate invisibly.
.lake/
*.olean
*.ilean
saw-core-lean/lean/intTestsProbe/
otherTests/saw-core-lean/.tier-selftest/
.claude/
13 changes: 13 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,19 @@ This release supports [version

## New Features

* `offline_lean` is now emission-only: it writes the Lean proof
obligation and leaves the goal UNSOLVED, so SAW never claims a goal
on the strength of an export (wrap in `fails` if the script should
continue). The new `offline_lean_replay` command is the discharge
path: it re-emits the goal, checks a user-completed Lean proof
against it, and on success admits the goal with recorded
`LeanReplayEvidence`. Setup, known limitations, and the trust model
are in `saw-core-lean/README.md`. As part of this, LLVM verification now runs every
verification condition's proof tactic before failing on unfinished
proofs, so multi-obligation `llvm_verify` runs with offline
exporters emit all obligation files in one pass (invalid proofs with
counterexamples still abort immediately).

* Add new SAWScript commands `timeout_handle` and `timeout` for adding
time limits to scripts.

Expand Down
59 changes: 59 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,62 @@ tmp/TAGS: | tmp

tmp:
mkdir -p tmp

# saw-core-lean comprehensive validation — the single CI gate.
#
# Required for ANY change touching the Lean backend (translator,
# support library, soundness lockdowns, drivers, proofs, etc.).
# Exits non-zero on the first failure.
#
# Coverage:
# (1) Tests — Haskell-side translator invariants
# (L-1..L-17 lockdowns) via the smoketest.
# (2) Synthesis — SAW emission for every driver in
# otherTests/saw-core-lean/drivers/ and
# saw-boundary/, diffed against pinned .good.
# (3) Proofs — Lean discharges every goal in
# otherTests/saw-core-lean/proofs/, including
# llvm_verify-emitted obligations.
# (4) Assurance — Hand-rolled negative-attack probes pinning
# axiom signatures (shape/), and the
# CryptolToLean Lean support library compiles.
# (5) SAW broad — General SAW integration tests (intTests/) to
# catch regressions in non-Lean SAW
# infrastructure that could affect the Lean
# backend transitively (e.g. Cryptol parser,
# scNormalize, Crucible).
.PHONY: test-saw-core-lean
test-saw-core-lean:
@echo "=== 1/5: build SAW with current translator ==="
cabal build exe:saw
@echo "=== 2/5: build CryptolToLean support library ==="
( cd saw-core-lean/lean && lake build )
@echo "=== 3/5: Haskell-side translator invariants (smoketest) ==="
cabal test saw-core-lean-smoketest
@echo "=== 4/5: Lean-side driver/proof/shape/saw-boundary ==="
cabal test saw-core-lean-tests
@echo "=== 5/5: SAW general integration tests ==="
cabal test integration-tests
@echo
@echo "=== ALL SAW-CORE-LEAN VALIDATIONS PASSED ==="

# saw-core-lean focused semantic conformance gate.
#
# This is intentionally namespaced rather than a generic `conformance`
# target: it is a SAW-Lean backend suite, not a whole-repository
# conformance statement.
.PHONY: test-saw-core-lean-conformance
test-saw-core-lean-conformance:
@echo "=== build SAW with current translator ==="
cabal build exe:saw
@echo "=== saw-core-lean differential conformance ==="
$(MAKE) -C otherTests/saw-core-lean conformance

# saw-core-lean proof/stress gap inventory.
#
# This is intentionally separate from the conformance gate: it reports
# preserved proof gaps and stress probes that are not accepted proof-discharge
# examples. It does not require a built saw binary.
.PHONY: test-saw-core-lean-gaps
test-saw-core-lean-gaps:
$(MAKE) -C otherTests/saw-core-lean gaps
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ There is also a longer
[manual](https://github.com/GaloisInc/saw-script/blob/master/doc/pdfs/saw-user-manual.pdf)
that describes the breadth of SAW's features.

There is an experimental backend that discharges SAW proof
obligations in the Lean 4 kernel instead of an SMT solver; it has its
own documentation, including known soundness limitations you should
read before relying on it. See
[`saw-core-lean/README.md`](saw-core-lean/README.md).

## Precompiled Binaries

Precompiled SAW binaries for a variety of platforms are available
Expand Down
4 changes: 3 additions & 1 deletion build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,9 @@ tgt_build() {
test-suite:integration-tests test-suite:saw-core-tests \
test-suite:crux-mir-comp-tests \
test-suite:cryptol-saw-core-tests \
test-suite:saw-core-rocq-tests
test-suite:saw-core-rocq-tests \
test-suite:saw-core-lean-smoketest \
test-suite:saw-core-lean-tests

echo "rm -rf bin && mkdir bin"
rm -rf bin && mkdir bin
Expand Down
7 changes: 7 additions & 0 deletions doc/developer/developer.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,13 @@ The following can be run with `cabal test`:
- `saw-core-tests`
- `cryptol-saw-core-tests`
- `saw-core-rocq-tests`
- `saw-core-lean-smoketest` (unit/regression tests for the Lean 4
backend; needs no `saw` binary)
- `saw-core-lean-tests` (end-to-end SAW→Lean tests under
`otherTests/saw-core-lean`). Some Lean-backend soundness tests
also run as `intTests/test_lean_soundness_*` under
`integration-tests`. See `saw-core-lean/doc/contributing.md` for
what these cover and how to add to them.
- `crux-mir-comp-tests`

There is one other set of tests:
Expand Down
1 change: 1 addition & 0 deletions examples/saw-lean/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
out/
Loading