{-# OPTIONS --safe #-} open import Prelude open import Hash open import Jolteon.Assumptions module Jolteon.Properties.Steps.Now (⋯ : _) (open Assumptions ⋯) where open import Jolteon ⋯ open import Jolteon.Properties.Steps.Core ⋯ open import Jolteon.Properties.State ⋯ initsTCNow : ∀ {tc : TC} {s} ⦃ _ : Honest p ⦄ (Rs : Reachable s) → let ls = s @ p; t = s .currentTime in ∀ {st : p ⦂ s .currentTime ⊢ ls — menv —→ ls′} → let s′ = broadcast t menv (s @ p ≔ ls′) in StepInitsTC tc (_ ⊢ st) ─────────────────────────────── (ls .tc-last ≡ just tc) × (ls .r-cur ≡ 1 + tc ∙round) initsTCNow {p = p} {tc = tc} {s = s} Rs {st} st-initTC with st | st-initTC ... | InitTC {tc = .tc} ph≡ tc≡ | refl = tc≡ , r≡ where _ls = s @ p r≡ : _ls .r-cur ≡ 1 + tc ∙round r≡ = M.All.drop-just $ subst (All _) tc≡ (tc-last-r≡ Rs) proposesNow : ∀ {b : Block} {s} ⦃ _ : Honest p ⦄ (Rs : Reachable s) → let ls = s @ p; t = s .currentTime in ∀ {st : p ⦂ s .currentTime ⊢ ls — menv —→ ls′} → let s′ = broadcast t menv (s @ p ≔ ls′) in ∙ b ∙∉ s .history ∙ b ∙∈ s′ .history ─────────────────────── StepProposes b (_ ⊢ st) proposesNow {p = p} {s = s} Rs {st} b∉ b∈ with st ... | InitTC _ _ = b∉ b∈ ... | InitNoTC _ _ = b∉ b∈ ... | ProposeBlockNoOp _ _ = b∉ b∈ ... | RegisterProposal _ _ _ _ _ = b∉ b∈ ... | EnoughTimeouts _ _ _ _ = b∉ b∈ ... | RegisterTimeout _ _ _ _ = b∉ b∈ ... | RegisterTC _ _ _ _ = b∉ b∈ ... | TimerExpired _ _ = b∉ b∈ ... | RegisterVote _ _ _ _ _ _ = b∉ b∈ ... | AdvanceRoundQC _ _ _ = b∉ b∈ ... | AdvanceRoundTC _ _ _ = b∉ b∈ ... | AdvanceRoundNoOp _ _ _ = b∉ b∈ ... | Lock _ _ = b∉ b∈ ... | CommitNoOp _ _ = b∉ b∈ ... | VoteBlock _ _ _ = b∉ b∈ ... | VoteBlockNoOp _ _ = b∉ b∈ ... | Commit _ _ = b∉ b∈ ... | ProposeBlock {txn = txn} _ _ with b∈ ... | there b∈ = ⊥-elim $ b∉ b∈ ... | here b≡ = b≡