{-# OPTIONS --safe #-} open import Prelude open import Jolteon.Base open import Jolteon.Assumptions module Jolteon.Global.NoForging (⋯ : _) (open Assumptions ⋯) where open import Jolteon.Block ⋯ open import Jolteon.Message ⋯ open import Jolteon.Global.State ⋯ data 𝕌 : Type where BR RQ B : 𝕌 ⟦_⟧ : 𝕌 → Type ⟦_⟧ = λ where BR → BlockId × Round RQ → Round × QC B → Block data _-∈-QC-_ : Signed ⟦ BR ⟧ → QC → Type where ∈-QC : p ∈ qc .shares ─────────────────────────────────── (qc .payload signed-by p) -∈-QC- qc data _-∈-TE-_ : ∀ {u} → Signed ⟦ u ⟧ → TimeoutEvidence → Type _∶_-∈-TE-_ : ∀ u → Signed ⟦ u ⟧ → TimeoutEvidence → Type _∶_-∈-TE-_ u = _-∈-TE-_ {u = u} data _-∈-TE-_ where ∈-TE : ──────────── RQ ∶ te -∈-TE- te ∈-TE-QC : ∀ {sa} → sa -∈-QC- (te ∙qcTE) ──────────────────── BR ∶ sa -∈-TE- te private variable u : 𝕌 data _-∈-TC-_ : Signed ⟦ u ⟧ → TC → Type _∶_-∈-TC-_ : ∀ u → Signed ⟦ u ⟧ → TC → Type _∶_-∈-TC-_ u = _-∈-TC-_ {u = u} data _-∈-TC-_ where ∈-TC : ∀ {sa : Signed ⟦ u ⟧} → Any (u ∶ sa -∈-TE-_) (tc .tes) ────────────────────────── sa -∈-TC- tc data _-∈ᴹ-_ : Signed ⟦ u ⟧ → Message → Type _∶_-∈ᴹ-_ : ∀ u → Signed ⟦ u ⟧ → Message → Type _∶_-∈ᴹ-_ u su m = _-∈ᴹ-_ {u = u} su m data _-∈ᴹ-_ where ∈-Propose : ───────────── sb -∈ᴹ- Propose sb ∈-Propose-QC : ∀ {sa} → sa -∈-QC- (sb ∙qc) ─────────────────────── BR ∶ sa -∈ᴹ- Propose sb ∈-Propose-TC : ∀ {sa : Signed ⟦ u ⟧} → Any (sa -∈-TC-_) (sb ∙tc?) ────────────────────────── sa -∈ᴹ- Propose sb ∈-Vote : ∀ {vs : VoteShare} → ──────────────────── BR ∶ vs -∈ᴹ- Vote vs ∈-TCFormed : ∀ {sa : Signed ⟦ u ⟧} → sa -∈-TC- tc ─────────────────── sa -∈ᴹ- TCFormed tc ∈-Timeout-TE : ∀ {sa : Signed ⟦ u ⟧} → sa -∈-TE- te ────────────────────────── sa -∈ᴹ- Timeout (te , mtc) ∈-Timeout-TC : ∀ {sa : Signed ⟦ u ⟧} → Any (sa -∈-TC-_) mtc ────────────────────────── sa -∈ᴹ- Timeout (te , mtc) NoSignatureForging : Message → GlobalState → Type NoSignatureForging m s = ∀ {u} (sa : Signed ⟦ u ⟧) → sa -∈ᴹ- m → Honest (sa ∙pid) ─────────────────────────── Any (sa -∈ᴹ-_) (s .history)