def
definition
balanced_list
show as:
view math explainer →
open explainer
Generate a durable explainer page for this declaration.
open lean source
IndisputableMonolith.Foundation.LedgerForcing on GitHub at line 80.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
-
reciprocal -
of -
of -
A -
reciprocal -
RecognitionEvent -
RecognitionEvent -
is -
of -
is -
of -
is -
RecognitionEvent -
of -
A -
is -
A
used by
formal source
77/-! ## Ledger Structure -/
78
79/-- A list of events is balanced if every event is paired with its reciprocal. -/
80def balanced_list (l : List RecognitionEvent) : Prop :=
81 ∀ e, l.count e = l.count (reciprocal e)
82
83/-- A ledger is a collection of recognition events with double-entry constraint. -/
84structure Ledger where
85 events : List RecognitionEvent
86 double_entry : balanced_list events
87
88/-- The total cost of a ledger. -/
89noncomputable def ledger_cost (L : Ledger) : ℝ :=
90 L.events.foldl (fun acc e => acc + event_cost e) 0
91
92/-- A ledger is balanced if its event list is balanced. -/
93def balanced (L : Ledger) : Prop := balanced_list L.events
94
95/-- Every Ledger is balanced by construction. -/
96theorem ledger_balanced (L : Ledger) : balanced L := L.double_entry
97
98/-- The net flow at an agent. -/
99noncomputable def net_flow (L : Ledger) (agent : ℕ) : ℝ :=
100 L.events.foldl (fun acc e =>
101 if e.source = agent then acc + Real.log e.ratio
102 else if e.target = agent then acc + Real.log e.ratio
103 else acc) 0
104
105/-! ## The Empty Ledger -/
106
107/-- The empty ledger: no events. -/
108def empty_ledger : Ledger := {
109 events := []
110 double_entry := fun _ => by simp [List.count_nil]