def
definition
computeBalance
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.Algebra.LedgerAlgebra on GitHub at line 89.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
formal source
86 balance : ℤ := events.foldl (fun acc e => acc + e.flow) 0
87
88/-- Compute the balance of a list of events. -/
89def computeBalance (events : List LedgerEvent) : ℤ :=
90 events.foldl (fun acc e => acc + e.flow) 0
91
92/-- A **balanced ledger page** has σ = 0. -/
93def IsBalanced (page : LedgerPage) : Prop :=
94 computeBalance page.events = 0
95
96/-- The empty page is balanced. -/
97theorem empty_balanced : IsBalanced ⟨[], 0⟩ := by
98 simp [IsBalanced, computeBalance]
99
100/-- **PROVED: Adding a paired event preserves balance.** -/
101theorem paired_preserves_balance (page : LedgerPage)
102 (h : IsBalanced page) (e : LedgerEvent) :
103 IsBalanced ⟨page.events ++ [e, e.conj], 0⟩ := by
104 rcases page with ⟨events, bal⟩
105 simp [IsBalanced, computeBalance, List.foldl_append, LedgerEvent.conj] at h ⊢
106 omega
107
108/-! ## §3. The Eight-Window Constraint -/
109
110/-- A **window** is a contiguous block of 8 events. -/
111structure Window8 where
112 /-- The 8 events in this window -/
113 events : Fin 8 → LedgerEvent
114
115/-- The sum over a window. -/
116def Window8.sum (w : Window8) : ℤ :=
117 (Finset.univ.sum fun i => (w.events i).flow)
118
119/-- A window is **neutral** if its sum is zero. -/