Reduction.agda 1.1 KB

123456789101112131415161718192021222324252627282930
  1. module Reduction where
  2. open import Prelude
  3. open import Lambda
  4. open import Subst
  5. open import Trans
  6. infix 10 _⟶β_
  7. data _⟶β_ : forall {Γ τ} -> (t u : Term Γ τ) -> Set where
  8. β : forall {Γ σ τ}{t : Term (Γ , σ) τ} Δ {u : Term (Γ ++ Δ) σ} ->
  9. (ƛ t) ↑ Δ • u ⟶β t ↑ Δ / [ Δ ⟵ u ]
  10. wk⟶ : forall {Γ σ τ}{t₁ t₂ : Term Γ τ} ->
  11. t₁ ⟶β t₂ -> wk {σ = σ} t₁ ⟶β wk t₂
  12. •⟶L : forall {Γ σ τ}{t₁ t₂ : Term Γ (σ ⟶ τ)}{u : Term Γ σ} ->
  13. t₁ ⟶β t₂ -> t₁ • u ⟶β t₂ • u
  14. •⟶R : forall {Γ σ τ}{t : Term Γ (σ ⟶ τ)}{u₁ u₂ : Term Γ σ} ->
  15. u₁ ⟶β u₂ -> t • u₁ ⟶β t • u₂
  16. ƛ⟶ : forall {Γ σ τ}{t₁ t₂ : Term (Γ , σ) τ} ->
  17. t₁ ⟶β t₂ -> ƛ t₁ ⟶β ƛ t₂
  18. _⟶β*_ : {Γ : Ctx}{τ : Type}(x y : Term Γ τ) -> Set
  19. x ⟶β* y = [ _⟶β_ ]* x y
  20. ↑⟶β : {Γ : Ctx}(Δ : Ctx){τ : Type}{t u : Term Γ τ} ->
  21. t ⟶β u -> t ↑ Δ ⟶β u ↑ Δ
  22. ↑⟶β ε r = r
  23. ↑⟶β (Δ , σ) r = wk⟶ (↑⟶β Δ r)