Skip to content

Commit 4b6470e

Browse files
committed
feat(Dijkstra/Ledger/PoV): prove SUBLEDGERS-utxo-coin
Proves by induction on the SUBLEDGERS transition that the UTxO-state coin total at the start of a sub-tx batch plus all outs + donations equals the UTxO coin total at the end plus all consumed spend inputs (compared against the batch-start snapshot `utxo₀`): ```agda getCoin (UTxOStateOf s₀) + Σ (cbalance (outs stx) + DonationsOf stx) ≡ getCoin (UTxOStateOf s₁) + Σ cbalance (utxo₀ ∣ SpendInputsOf stx) ``` Base case (`BS-base Id-nop`): both sides reduce to `x + 0`, so `refl`. Inductive case: `SUBLEDGER-I` is impossible under `isTopLevelValid ≡ true`; `SUBLEDGER-V` combines the per-step SUBUTXOW balance with the IH via an eight-step +-commutative-monoid rearrangement. Introduces `subutxow-step-coin` as a new module parameter: ```agda getCoin s₀ + cbalance (outs stx) + DonationsOf stx ≡ getCoin s₁ + cbalance (UTxOOf Γ ∣ SpendInputsOf stx) ``` + Rationale for keeping this as a parameter at the SUBLEDGERS level: proving it locally requires, beyond `balance-∪` and `split-balance`, two batch-wide invariants: 1. the running UTxO agrees with `utxo₀` on every sub-tx's spend inputs, and 2. freshness of each sub-tx's TxId relative to the running UTxO neither of which is a local SUBUTXO premise; both follow from batch-wide disjointness exposed by the outer UTXO rule and will be discharged in a follow-up PR dedicated to general Dijkstra PoV infrastructure. Statement parallels the existing `SUBLEDGERS-certs-pov`, uses `SubLedgerEnv.utxo₀ Γ` uniformly on the RHS (matching the shape of `batch-balance-coin`), and is the key lemma needed to derive `batch-utxo-accounting` internally in the next step of this PR.
1 parent e0d513e commit 4b6470e

4 files changed

Lines changed: 480 additions & 273 deletions

File tree

0 commit comments

Comments
 (0)