module Jolteon.Traces.Trace00 where

open import Prelude
open import Jolteon.Traces.Core

opaque
  unfolding blockPayload chainPayload

  trace00 : s₀ —↠ s₁
  trace00 =
    begin
      s₀
    —→⟨ 𝕃 :InitNoTC? ⟩
      record s₀
      { stateMap
      = record def {phase = Proposing; timer = just τ; roundAdvanced? = false}
      ∷ def
      ∷ def
      ∷ []
      }
    —→⟨ 𝕃 :ProposeBlock? [] ⟩
      record s₀
      { history = [ p₁ ]
      ; networkBuffer = [ 0 , 𝕃 , p₁ ⨾ 0 , 𝔸 , p₁ ⨾ 0 , 𝔹 , p₁ ]
      ; stateMap
      = record def {phase = Receiving; timer = just τ; roundAdvanced? = false}
      ∷ def
      ∷ def
      ∷ []
      }
    —→⟨ 𝔸 :InitNoTC? ⟩
      record
      { currentTime   = 0
      ; history       = [ p₁ ]
      ; networkBuffer = [ 0 , 𝕃 , p₁ ⨾ 0 , 𝔸 , p₁ ⨾ 0 , 𝔹 , p₁ ]
      ; stateMap      =
          ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ ⦅ 0 , 1 , qc₀ , nothing , Proposing , [] , [] , [] , just τ , false , false ⦆
        ∷ def
        ∷ []
      }
    —→⟨ 𝔸 :ProposeBlockNoOp? ⟩
      record
      { currentTime   = 0
      ; history       = [ p₁ ]
      ; networkBuffer = [ 0 , 𝕃 , p₁ ⨾ 0 , 𝔸 , p₁ ⨾ 0 , 𝔹 , p₁ ]
      ; stateMap      =
          ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ def
        ∷ []
      }
    —→⟨ 𝔹 :InitNoTC? ⟩
      record
      { currentTime   = 0
      ; history       = [ p₁ ]
      ; networkBuffer = [ 0 , 𝕃 , p₁ ⨾ 0 , 𝔸 , p₁ ⨾ 0 , 𝔹 , p₁ ]
      ; stateMap      =
          ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ ⦅ 0 , 1 , qc₀ , nothing , Proposing , [] , [] , [] , just τ , false , false ⦆
        ∷ []
      }
    —→⟨ 𝔹 :ProposeBlockNoOp? ⟩
      record
      { currentTime   = 0
      ; history       = [ p₁ ]
      ; networkBuffer = [ 0 , 𝕃 , p₁ ⨾ 0 , 𝔸 , p₁ ⨾ 0 , 𝔹 , p₁ ]
      ; stateMap      =
          ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [] , [] , just τ , false , false ⦆
        ∷ []
      }
    —→⟨ Deliver? (0 , 𝕃 , p₁) ⟩
      _
    —→⟨ Deliver? (0 , 𝔸 , p₁) ⟩
      _
    —→⟨ Deliver? (0 , 𝔹 , p₁) ⟩
      _
    —→⟨ WaitUntil? 3 ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [ p₁ ] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [ p₁ ] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , [] , [ p₁ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :RegisterProposal? ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , []  , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , []  , [ p₁ ] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , []  , [ p₁ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :RegisterProposal? ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , []  , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , []  , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Receiving , []  , [ p₁ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔹 :RegisterProposal? ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :AdvanceRoundNoOp? ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , Locking  , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :Lock? ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , Committing  , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :CommitNoOp? ⟩
      record
      { currentTime   = 3
      ; history       = [ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 0 , 1 , qc₀ , nothing , Voting   , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :VoteBlock? b₁ ⟩
      record
      { currentTime   = 3
      ; history       = [ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 3 , 𝕃 , v₁ 𝕃 ]
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :AdvanceRoundNoOp? ⟩
      record
      { currentTime   = 3
      ; history       = [ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 3 , 𝕃 , v₁ 𝕃 ]
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Locking , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :Lock? ⟩
      record
      { currentTime   = 3
      ; history       = [ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 3 , 𝕃 , v₁ 𝕃 ]
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Committing , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :CommitNoOp? ⟩
      record
      { currentTime   = 3
      ; history       = [ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 3 , 𝕃 , v₁ 𝕃 ]
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , Voting , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :VoteBlock? b₁ ⟩
      record
      { currentTime   = 3
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 3 , 𝕃 , v₁ 𝕃 ⨾  3 , 𝕃 , v₁ 𝔸 ]
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ Deliver? (3 , 𝕃 , v₁ 𝕃) ⟩
      _
    —→⟨ Deliver? (3 , 𝕃 , v₁ 𝔸) ⟩
      _
    —→⟨ WaitUntil? 8 ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [ v₁ 𝕃 ⨾ v₁ 𝔸 ] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :RegisterVote? b₁ ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , AdvancingRound , [ v₁ 𝕃 ⨾ p₁ ] , [ v₁ 𝔸 ] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :AdvanceRoundNoOp? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Locking , [ v₁ 𝕃 ⨾ p₁ ] , [ v₁ 𝔸 ] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :Lock? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Committing , [ v₁ 𝕃 ⨾ p₁ ] , [ v₁ 𝔸 ] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :CommitNoOp? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Voting , [ v₁ 𝕃 ⨾ p₁ ] , [ v₁ 𝔸 ] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :VoteBlockNoOp? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ v₁ 𝕃 ⨾ p₁ ] , [ v₁ 𝔸 ] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :RegisterVote? b₁ ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 1 , qc₀ , nothing , AdvancingRound , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :AdvanceRoundQC? qc₁ ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₀ , nothing , AdvancingRound , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , nothing , false , true ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :AdvanceRoundNoOp? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₀ , nothing , Locking , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , nothing , false , true ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :Lock? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Committing , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , nothing , false , true ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :CommitNoOp? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Voting , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , nothing , false , true ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :VoteBlockNoOp? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , EnteringRound , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , nothing , false , true ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :InitNoTC? ⟩
      record
      { currentTime   = 8
      ; history       = [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Proposing , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :ProposeBlock? [] ⟩
      record
      { currentTime   = 8
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 8 , 𝕃 , p₂ ⨾ 8 , 𝔸 , p₂ ⨾ 8 , 𝔹 , p₂ ]
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Receiving , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [] , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ Deliver? (8 , 𝕃 , p₂ ) ⟩
      _
    —→⟨ Deliver? (8 , 𝔸 , p₂ ) ⟩
      _
    —→⟨ Deliver? (8 , 𝔹 , p₂ ) ⟩
      _
    —→⟨ WaitUntil? 10 ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Receiving , [ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ] , [ p₂ ] , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :RegisterProposal? ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , AdvancingRound , p₂ ∷ _ , [] , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , Receiving , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :RegisterProposal? ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , AdvancingRound , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , AdvancingRound , p₂ ∷ _ , []  , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :AdvanceRoundNoOp? ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Locking , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 1 , qc₀ , nothing , AdvancingRound , p₂ ∷ _ , []  , [] , just τ , false , false ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :AdvanceRoundQC? qc₁ ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Locking , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 2 , qc₀ , nothing , AdvancingRound , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :AdvanceRoundNoOp? ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Locking  , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 2 , qc₀ , nothing , Locking  , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :Lock? ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Locking  , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 2 , qc₁ , nothing , Committing  , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :CommitNoOp? ⟩
      record
      { currentTime   = 10
      ; history       = [ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = []
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Locking  , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 1 , 2 , qc₁ , nothing , Voting   , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝔸 :VoteBlock? b₂ ⟩
      record
      { currentTime   = 10
      ; history       = [ v₂ 𝔸 ⨾ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 10 , 𝕃 , v₂ 𝔸 ]
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Locking  , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 2 , 2 , qc₁ , nothing , EnteringRound , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :Lock? ⟩
      record
      { currentTime   = 10
      ; history       = [ v₂ 𝔸 ⨾ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 10 , 𝕃 , v₂ 𝔸 ]
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Committing  , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 2 , 2 , qc₁ , nothing , EnteringRound , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :CommitNoOp? ⟩
      record
      { currentTime   = 10
      ; history       = [ v₂ 𝔸 ⨾ p₂ ⨾ v₁ 𝔸 ⨾ v₁ 𝕃 ⨾ p₁ ]
      ; networkBuffer = [ 10 , 𝕃 , v₂ 𝔸 ]
      ; stateMap      =
        ⦅ 1 , 2 , qc₁ , nothing , Voting   , p₂ ∷ _ , []  , [] , just 20 , false , false ⦆
      ∷ ⦅ 2 , 2 , qc₁ , nothing , EnteringRound , p₂ ∷ _ , []  , [] , nothing , false , true  ⦆
      ∷ ⦅ 0 , 1 , qc₀ , nothing , AdvancingRound , [ p₁ ] , [ p₂ ] , [] , just τ , false , false ⦆
      ∷ []
      }
    —→⟨ 𝕃 :VoteBlock? b₂ ⟩
      s₁
    ∎