{-# OPTIONS --safe #-}
open import Prelude
open import Hash
open import Jolteon.Assumptions
module Jolteon.Properties.State.Messages (⋯ : _) (open Assumptions ⋯) where
open import Jolteon ⋯
open import Jolteon.Decidability.Core ⋯
open import Jolteon.Properties.Core ⋯
open L.Mem
receiveMsg-ls≡ : ∀ ⦃ _ : Honest p ⦄ {s} mhm →
let s' = receiveMsg s mhm in
(s' @ᵐ p) ≡ record (s @ᵐ p) {inbox = (s' @ᵐ p) .inbox}
receiveMsg-ls≡ nothing = refl
receiveMsg-ls≡ {p} ⦃ hp ⦄ {s} (just ((p′ ,· hp′) , m))
with p ≟ p′
... | yes refl
rewrite pLookup∘updateAt p {receiveMessage m} s
= refl
... | no p≢
rewrite pLookup∘updateAt′ p p′ ⦃ toRelevant hp′ ⦄ {receiveMessage m} (p≢ ∘ ↑-injective) s
= refl
module _ {p} ⦃ _ : Honest p ⦄ {s} mhm (let ls≡ = receiveMsg-ls≡ {p}{s} mhm) where
receiveMsg-db = cong db ls≡
receiveMsg-tcLast = cong tc-last ls≡
receiveMsg-rCur = cong r-cur ls≡
receiveMsg-qcHigh = cong qc-high ls≡
receiveMsg-phase = cong phase ls≡
receiveMsg-roundA = cong roundAdvanced? ls≡
receiveMsg-final = cong finalChain ls≡
expandBroadcasts-message :
(t′ , p , m) ∈ expandBroadcasts t env
─────────────────────────────────────
m ≡ env ∙message
expandBroadcasts-message {t = t}{[ _m ⟩} tpm∈
with _ , _ , refl ← ∈-map⁻ (λ p → (t , p , _m)) tpm∈
= refl
expandBroadcasts-message {env = [ _ ∣ _m ⟩} (here refl) = refl