GovDepsMatch
{-# OPTIONS --safe #-}
open import Ledger.Conway.Transaction
open import Ledger.Conway.Abstract
module Ledger.Conway.Ledger.Properties.GovDepsMatch
(txs : _) (open TransactionStructure txs)
(abs : AbstractFunctions txs) (open AbstractFunctions abs)
where
open import Ledger.Conway.Certs govStructure using (DepositPurpose)
open import Ledger.Conway.Ledger txs abs
open import Ledger.Conway.Ledger.Properties txs abs
open import Ledger.Prelude
open import Ledger.Conway.Utxo txs abs
open import Axiom.Set.Properties th
import Relation.Binary.Reasoning.Setoid as SetoidReasoning
open SetoidReasoning (≡ᵉ-Setoid{DepositPurpose})
- *Informally*. Suppose , are ledger states such that
`⇀⦇`{.AgdaDatatype} `,LEDGER⦈`{.AgdaDatatype} . Let and be their
respective `UTxOState`{.AgdaRecord}s and let and be their respective
`GovState`{.AgdaFunction}s. If the governance action deposits of are
equal those of , then the same holds for and . In other terms, if
`govDepsMatch`{.AgdaFunction} , then `govDepsMatch`{.AgdaFunction} .
- *Formally*.
LEDGER-govDepsMatch : LedgerInvariant _⊢_⇀⦇_,LEDGER⦈_ govDepsMatch
LEDGER-govDepsMatch (LEDGER-I⋯ refl (UTXOW-UTXOS (Scripts-No _))) aprioriMatch = aprioriMatch
LEDGER-govDepsMatch {Γ}{s}{tx}{s'}
utxosts@(LEDGER-V⋯ tx-valid (UTXOW-UTXOS (Scripts-Yes x)) _ GOV-sts) aprioriMatch =
let open Tx tx; open TxBody body
open LEnv Γ renaming (pparams to pp)
open PParams pp using (govActionDeposit)
open LState s
open LState s' renaming (govSt to govSt'; certState to certState')
open LEDGER-PROPS tx Γ s using (utxoDeps; updateGovStates; STS→GovSt≡)
open SetoidProperties tx Γ s using (|ᵒ-GAs-pres; props-dpMap-votes-invar; utxo-govst-connex; noGACerts)
in
begin
filterˢ isGADeposit (dom (updateDeposits pp body utxoDeps))
≈⟨ noGACerts txcerts (updateProposalDeposits txprop txid govActionDeposit utxoDeps) ⟩
filterˢ isGADeposit (dom (updateProposalDeposits txprop txid govActionDeposit utxoDeps))
≈⟨ utxo-govst-connex txprop aprioriMatch ⟩
fromList (dpMap (updateGovStates (map inj₂ txprop) 0 govSt))
≈˘⟨ props-dpMap-votes-invar txvote txprop ⟩
fromList (dpMap (updateGovStates (txgov body) 0 govSt ))
≈˘⟨ |ᵒ-GAs-pres 0 govSt certState' ⟩
fromList (dpMap (updateGovStates (txgov body) 0 (rmOrphanDRepVotes certState' govSt)))
≡˘⟨ cong (fromList ∘ dpMap ) (STS→GovSt≡ utxosts tx-valid) ⟩
fromList (dpMap govSt') ∎
LEDGER-govDepsMatch {s' = s'} utxosts@(LEDGER-V (() , UTXOW-UTXOS (Scripts-No (_ , refl)) , _ , GOV-sts)) aprioriMatch
- *Proof*. See the module in the [formal ledger repository](\repourl).