1234567891011121314151617181920{-# OPTIONS --safe #-} open import Leios.Preludeopen import Leios.SpecStructure import Leios.Protocol module Leios.Traces {n} (⋯ : SpecStructure n) {u : Type} (let open Leios.Protocol ⋯ u) (_-⟦_/_⟧⇀_ : Maybe LeiosState → LeiosInput → LeiosOutput → LeiosState → Type) where _⇉_ : LeiosState → LeiosState → Types₁ ⇉ s₂ = Σ[ (i , o) ∈ LeiosInput × LeiosOutput ] (just s₁ -⟦ i / o ⟧⇀ s₂) _⇉[_]_ : LeiosState → ℕ → LeiosState → Types₁ ⇉[ zero ] s₂ = s₁ ≡ s₂s₁ ⇉[ suc m ] sₙ = Σ[ s₂ ∈ LeiosState ] (s₁ ⇉ s₂ × s₂ ⇉[ m ] sₙ) _⇉⋆_ : LeiosState → LeiosState → Types₁ ⇉⋆ sₙ = Σ[ n ∈ ℕ ] (s₁ ⇉[ n ] sₙ)