module Eval where open import Prelude open import Term private variable a b : Ty Γ : Context module Den (ξ : BaseTy → Set) where Value : Ty → Set Value (` α) = ξ α Value (a ⇒ b) = Value a → Value b data Env : Context → Set where [] : Env [] _∷_ : (v : Value a) (ρ : Env Γ) → Env (a ∷ Γ) lookup : Env Γ → a ∈ Γ → Value a lookup (v ∷ ρ) zero = v lookup (v ∷ ρ) (suc x) = lookup ρ x eval : Env Γ → Term Γ a → Value a eval ρ (var x) = lookup ρ x eval ρ (abs t) = λ v → eval (v ∷ ρ) t eval ρ (app t u) = eval ρ t (eval ρ u)