module NonDeterministic.Incorrect where
open import Data.Colist
open import Coinduction
open import NonDeterministic.Expr
infix 4 _HasTrace_
data _HasTrace_ : Semantics where
nop : ∀ {e ms} (s : ∞ (♭ e HasTrace ms)) → nop e HasTrace ms
tick : ∀ {e m ms} (s : ∞ (♭ e HasTrace ♭ ms)) → tick m e HasTrace user m ∷ ms
tock : ∀ {e m ms} (s : ∞ (e HasTrace ♭ ms)) → e HasTrace ext m ∷ ms
possible : nops HasTrace []
possible = nop (♯ possible)
should-be-impossible : ∀ {m ms} → nops HasTrace (user m ∷ ms)
should-be-impossible = nop (♯ should-be-impossible)
ok : ticks HasTrace scissors
ok = tick (♯ ok)