inductive
definition
Side
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.LedgerPostingAdjacency on GitHub at line 68.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
-
ledgerJlogCost_post -
ledgerL1Cost_post -
legalAtomicTick_implies_PostingStep -
legalAtomicTick_of_post -
minCost_monotoneStep_implies_postingStep -
minJlogCost_monotoneStep_implies_postingStep -
parity_oneBitDiff_of_post -
phiVec_coordAtomicStep_of_post -
phiVec_post_credit -
phiVec_post_debit -
post -
PostingStep -
postingStep_of_monotone_and_ledgerJlogCost_le_Jlog1 -
PostInstr -
post_monotone -
stepAt -
stepAt_isPostingStep -
stepAt_oneBitDiff
formal source
65
66/-! ## Posting model -/
67
68inductive Side where
69 | debit
70 | credit
71deriving DecidableEq, Repr
72
73/-- Apply a single unit post (either debit or credit) at account `k`. -/
74noncomputable def post {d : Nat} (L : LedgerState d) (k : Fin d) (side : Side) : LedgerState d := by
75 classical
76 exact match side with
77 | Side.debit =>
78 { debit := fun i => if i = k then L.debit i + 1 else L.debit i
79 , credit := L.credit }
80 | Side.credit =>
81 { debit := L.debit
82 , credit := fun i => if i = k then L.credit i + 1 else L.credit i }
83
84@[simp] lemma phiVec_post_debit {d : Nat} (L : LedgerState d) (k : Fin d) (i : Fin d) :
85 phiVec (d := d) (post L k Side.debit) i =
86 (if i = k then phiVec (d := d) L i + 1 else phiVec (d := d) L i) := by
87 by_cases hik : i = k
88 · subst hik
89 simp [post, phiVec, Recognition.phi]
90 ring_nf
91 · simp [post, phiVec, Recognition.phi, hik]
92
93@[simp] lemma phiVec_post_credit {d : Nat} (L : LedgerState d) (k : Fin d) (i : Fin d) :
94 phiVec (d := d) (post L k Side.credit) i =
95 (if i = k then phiVec (d := d) L i - 1 else phiVec (d := d) L i) := by
96 by_cases hik : i = k
97 · subst hik
98 simp [post, phiVec, Recognition.phi]