a82d54666a
Lean migration: Phase 7 (Sign + Constant analyses, executable)
...
- Spa.Showable: port of Showable.agda (quoted strings, map format) for
output parity
- Spa.Analysis.Utils: eval_combine₂
- Spa.Lattice.AboveBelow.le_cases: order of the flat lattice by cases
- Spa.Analysis.Sign / Spa.Analysis.Constant: the four monotonicity
POSTULATES from the Agda files are now proved theorems (via le_cases);
interpretations, evaluator validity, analyze_correct per analysis
- Main + lake exe spa: runs both analyses on the Agda test program;
constant analysis folds unknown=0, sign analysis gives unknown=⊤
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-09 20:52:08 -07:00
739fbb503c
Lean migration: Phase 6 (forward analysis framework)
...
- Spa.Analysis.Forward.Lattices: VariableValues/StateVariables (FiniteMap
instantiations), fixed heights, variablesAt, joinForKey/joinAll, interpV
and its sup/foldr lemmas
- Spa.Analysis.Forward.Evaluation: StmtEvaluator/ExprEvaluator + validity
(the Agda Valid* instance records become plain Props)
- Spa.Analysis.Forward.Adapters: expr-to-stmt evaluator adapter + validity
- Spa.Analysis.Forward: updateAll, analyze, result (least fixpoint via the
gas-based Fixedpoint), walkTrace, analyze_correct — the framework's main
soundness theorem
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-09 20:14:53 -07:00
2cfd0a2fb7
Lean migration: Phase 5 (language, CFGs, traces, Program)
...
- Spa.Language.Base: Expr/BasicStmt/Stmt + HasVar relations; StringSet
lifts to Finset String
- Spa.Language.Semantics: Value/Env/Env.Mem, big-step relations,
LatticeInterpretation (respects-≈ field drops out with =)
- Spa.Language.Graphs: Graph with nodes : Fin size → List BasicStmt
(Vec lookup lemmas lift to Fin.append_left/right), comp/link/loop/
skipto/singleton/wrap/buildCfg, predecessors via List.finRange
- Spa.Language.Traces: Trace + EndToEndTrace (Prop-valued)
- Spa.Language.Properties: trace embeddings, loop lemmas,
buildCfg_sufficient; the 80-line Fin-disjointness block reduces to
castAdd_ne_natAdd + mathlib list lemmas
- Spa.Language: Program (vars via Finset.sort — toList is noncomputable)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-09 19:30:42 -07:00
781d7947e0
Lean migration: Phase 4 (IterProd + FiniteMap lattices)
...
- Spa.Lattice.IterProd: k-fold product, recursive Lattice instance,
fixed height k*hA + hB, bot = build of bottoms
- Spa.Lattice.FiniteMap: spine-pinned assoc lists ({l // l.map fst = ks});
with = the 1100-line Map.agda collapses into positional 'combine'.
Same lemma inventory (membership, locate, updating, GeneralizedUpdate,
valuesAt, Provenance-union, le_of_mem_mem) — Nodup is now an explicit
hypothesis where the Agda Map carried it intrinsically. Fixed height
|ks|*hB still via transport along the IterProd isomorphism, which no
longer needs Unique ks (representation is canonical).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-09 19:12:39 -07:00
4c337afa9c
Lean migration: Phase 3 (Unit, Prod, AboveBelow lattices)
...
- Spa.Lattice.Unit: PUnit fixed height 0 (lattice lifted from mathlib)
- Spa.Lattice.Prod: chain unzip + FixedHeight (h1+h2) on products
(componentwise lattice lifted from mathlib's Prod.instLattice)
- Spa.Lattice.AboveBelow: flat lattice via Lattice.mk' (mirrors the Agda
semilattices+absorption construction), boundedness via rank into Nat,
Plain x ↦ plainFixedHeight x, height 2
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-09 18:48:02 -07:00
ae030386b4
Lean migration: Phases 0-2 (core lattice/chain, fixpoint, transport)
...
- lean/ lake project pinned to Lean v4.17.0 + mathlib v4.17.0
- Spa.Lattice: fold monotonicity, FixedHeight/BoundedChains (LTSeries-based),
FiniteHeightLattice, chain-bottom-is-least; the rest of Lattice.agda,
Chain.agda and Equivalence.agda lift into mathlib (see LEAN_MIGRATION.md)
- Spa.Fixedpoint: gas-based least-fixpoint computation (doStep/fix/aFix)
- Spa.Isomorphism: FixedHeight transport along monotone inverse pairs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-09 18:36:43 -07:00
1c2bcc2d92
Require bottom element to actually be bottom; finish proof
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 20:15:10 -08:00
da2b6dd5c6
Make code less brittle for when \McL changes
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 19:43:10 -08:00
c64504b819
Fix broken code by moving fins to utils
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 19:33:56 -08:00
4a9e7492f4
Prove the other direction for associativity
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 19:31:39 -08:00
ba57e2558d
Add more cases for associativity lemma
2026-02-16 17:43:07 -08:00
1c37141234
Add more properties about lattices
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 17:43:07 -08:00
9072da4ab6
Add some cases for associativity lemma
2026-02-16 17:42:59 -08:00
3f923c2d7d
Clean up some definitions
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 12:57:59 -08:00
01555ee203
Make progress on properties of the dependent product
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-16 01:08:34 -08:00
a083f2f4ae
Construct proofs of 'basic' lattices
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-14 14:40:15 -08:00
27f65c10f7
Prove absroption laws
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-14 14:22:27 -08:00
c6e525ad7c
Add associativity proofs
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-14 13:47:39 -08:00
ccc3c7d5c7
Add meet/join operation and some properties
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-12 20:16:02 -08:00
05c55498ce
Extend proofs to meet as well as join
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-12 17:12:01 -08:00
6b462f1a83
Prove that having a total join function is decidable
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-05 16:54:22 -08:00
7382c632bc
Add some proofs about predecessors
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2026-02-05 16:16:12 -08:00
aa32706120
Fix typo
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-12-23 14:07:45 -08:00
4b0541caf5
Use "top" instead of T
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-12-23 14:06:28 -08:00
299938d97e
Add decidability proofs for properties
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-12-07 22:25:47 -08:00
927030c337
Prove that having a top and bottom element is decidable
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-12-07 19:28:56 -08:00
ef3c351bb0
Add some utility proofs about uniqueness etc.
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-12-07 19:28:27 -08:00
84c4ea6936
Prove final postulate about cycles in graphs
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-29 22:46:49 -08:00
a277c8f969
Prove walk splitting
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-29 21:34:39 -08:00
d1700f23fa
Add some helpers
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-29 13:24:27 -08:00
eb2d64f3b5
Properly state all-paths property using simple walks
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 21:31:54 -08:00
14214ab5e7
Reorder definitions to be in the order the graph is built up
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 17:09:57 -08:00
baece236d3
Re-define 'interior'
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 17:09:14 -08:00
6f642d85e0
Put self-paths into the adjacency graph
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 17:08:56 -08:00
25fa0140f0
Switch to a path definition that allows trivial self-loops
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 16:30:10 -08:00
27621992ad
Rename a helper
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 16:25:46 -08:00
e409cceae5
Start on an initial implementation of DAG-based builder
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 16:24:48 -08:00
8cb082e3c5
Delete original builder (lol)
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 16:24:29 -08:00
c199e9616f
Factor some code out into Utils
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-11-28 16:22:17 -08:00
f5457d8841
Move proof of least element into FiniteHeightLattice
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-26 13:16:22 +02:00
d99d4a2893
[WIP] Demonstrate partial lattice construction
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 19:51:27 +02:00
fbb98de40f
Prove the other absorption law
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 19:26:03 +02:00
706b593d1d
Write a lemma to wrangle PartialAbsorb proofs
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 19:14:49 +02:00
45606679f5
Prove one of the absorption laws
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 18:32:23 +02:00
7e099a2561
Delete debugging code
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 17:18:31 +02:00
2808759338
Add instances of semilattice proofs
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 17:18:19 +02:00
42bb8f8792
Extend laws on Path' to Path versions
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 17:17:59 +02:00
05e693594d
Prove idempotence of meet and join
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 17:17:25 +02:00
90e0046707
Prove missing congruence law
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 17:17:01 +02:00
13eee93255
Remove whitespace errors
...
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com >
2025-07-25 15:26:41 +02:00