module A201903.2-2-Semantics-SmallStep where
open import A201903.1-2-Syntax-Predicates public
open Binary public
module CBN where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
app₁ : ∀ {e₁ e₂ e₁′} →
e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
open DerivedEquipment _⇒_ public
module NO where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
lam : ∀ {s e e′} →
e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
NA e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public
module NO₂ where
data _⇒_ {n} : Rel₀ (Tm n) where
cbn-lam : ∀ {s e e′} →
¬ WHNF e → e CBN.⇒ e′ →
lam s e ⇒ lam s e′
lam : ∀ {s e e′} →
WHNF e → e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
NAXNF e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
cbn-app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → ¬ WHNF e₂ → e₂ CBN.⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → WHNF e₂ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public
module CBV where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
WNF e₂ →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
app₁ : ∀ {e₁ e₂ e₁′} →
e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
app₂ : ∀ {e₁ e₂ e₂′} →
WNF e₁ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public
module AO where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
NF e₁ → NF e₂ →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
lam : ∀ {s e e′} →
e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
app₂ : ∀ {e₁ e₂ e₂′} →
NF e₁ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public
module HAO where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
NF e₂ →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
lam : ∀ {s e e′} →
e ⇒ e′ →
lam s e ⇒ lam s e′
cbv-app₁ : ∀ {e₁ e₂ e₁′} →
e₁ CBV.⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
app₁ : ∀ {e₁ e₂ e₁′} →
NAWNF e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
app₂ₐ : ∀ {s e₁ e₂ e₂′} →
e₂ ⇒ e₂′ →
app (lam s e₁) e₂ ⇒ app (lam s e₁) e₂′
app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public
module HS where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
HNF e₁ →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
lam : ∀ {s e e′} →
e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
open DerivedEquipment _⇒_ public
module H where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
lam : ∀ {s e e′} →
e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
NA e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
open DerivedEquipment _⇒_ public
module H₂ where
data _⇒_ {n} : Rel₀ (Tm n) where
cbn-lam : ∀ {s e e′} →
¬ WHNF e → e CBN.⇒ e′ →
lam s e ⇒ lam s e′
lam : ∀ {s e e′} →
WHNF e → e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
NAXNF e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
open DerivedEquipment _⇒_ public
module HNO where
data _⇒_ {n} : Rel₀ (Tm n) where
applam : ∀ {s e₁ e₂} →
HNF e₁ →
app (lam s e₁) e₂ ⇒ e₁ [ e₂ ]
lam : ∀ {s e e′} →
e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ₐ : ∀ {s e₁ e₁′ e₂} →
¬ HNF e₁ → e₁ ⇒ e₁′ →
app (lam s e₁) e₂ ⇒ app (lam s e₁′) e₂
app₁ : ∀ {e₁ e₂ e₁′} →
NA e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public
module HNO₂ where
data _⇒_ {n} : Rel₀ (Tm n) where
lam : ∀ {s e e′} →
HNF e → e ⇒ e′ →
lam s e ⇒ lam s e′
app₁ : ∀ {e₁ e₂ e₁′} →
NAXNF e₁ → e₁ ⇒ e₁′ →
app e₁ e₂ ⇒ app e₁′ e₂
hs-app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → ¬ HNF e₂ → e₂ HS.⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
app₂ : ∀ {e₁ e₂ e₂′} →
NANF e₁ → HNF e₂ → e₂ ⇒ e₂′ →
app e₁ e₂ ⇒ app e₁ e₂′
open DerivedEquipment _⇒_ public