“efficient” dependent type checker with grammatically-enforced partial correctness and an independence property. With liberty and justice for all. Wednesday, June 3, 15
• Only Expressions • directly to NF • passing through WHNF • Only Normal forms • via hereditary substitution • An environment machine (closure-based) • Expressions and dependent WHNFs • Independent WHNFs Wednesday, June 3, 15
Maybe (Exp γ) infer Γ (f `∙ a) = infer Γ a >>= λ A ! infer Γ f >>= λ { (`Π A' B) ! if A == A' then return (B ∙ a) else nothing ; _ ! nothing } Wednesday, June 3, 15
`Type = `Type norm (`Π A B) = `Π (norm A) `∣ norm B ∣ norm (`λ b) = `λ `∣ norm b ∣ norm (`var i) = `var i norm (f `∙ a) = norm f ∙ norm a _∙_ : ∀{γ} ! Exp γ ! Exp γ ! Exp γ `λ `∣ b ∣ ∙ a = norm (sub a b) f ∙ a = f `∙ a Wednesday, June 3, 15
`Type = `Type norm (`Π A B) = `Π (norm A) (normᴮ B) norm (`λ b) = `λ (normᴮ b) norm (`var i) = `var i norm (f `∙ a) = norm f ∙ norm a normᴮ : ∀{γ} ! Bind Exp γ ! Bind Exp γ normᴮ `∣ b ∣ = `∣ norm b ∣ _∙_ : ∀{γ} ! Exp γ ! Exp γ ! Exp γ `λ b ∙ a = b ∙ᴮ a f ∙ a = f `∙ a _∙ᴮ_ : ∀{γ} ! Bind Exp γ ! Exp γ ! Exp γ `∣ b ∣ ∙ᴮ a = norm (sub a b) Wednesday, June 3, 15
Nf γ ! Bind Nf φ hsubᴮ σ `∣ b ∣ = `∣ hsub (lift σ) b ∣ _∙_ : ∀{γ} ! Nf γ ! Nf γ ! Nf γ `λ b ∙ a = b ∙ᴷ a `[ f ] ∙ a = `[ f `∙ a ] f ∙ a = undefined _∙ᴷ_ : ∀{γ} ! Bind Nf γ ! Nf γ ! Nf γ `∣ b ∣ ∙ᴷ a = hsub (a ∷ idEnv) b Wednesday, June 3, 15
`Type = `Type wh-norm (`Π A B) = `Π (wh-norm A) (wh-normᴮ B) wh-norm (`λ b) = `λ (wh-normᴮ b) wh-norm (`var i) = `var i wh-norm (f `∙ a) = wh-norm f ∙ wh-norm a Wednesday, June 3, 15
γ wh-normᴮ b = b _∙_ : ∀{γ} ! Exp γ ! Exp γ ! Exp γ `λ b ∙ a = b ∙ᴮ a f ∙ a = f `∙ a _∙ᴮ_ : ∀{γ} ! Bind Exp γ ! Exp γ ! Exp γ `∣ b ∣ ∙ᴮ a = wh-norm (sub a b) Wednesday, June 3, 15
! Exp γ force `Type = `Type force (`Π A B) = `Π (force A) (forceᴮ B) force (`λ b) = `λ (forceᴮ b) force (`var i) = `var i force (f `∙ a) = force f `∙ force a forceᴮ : ∀{γ} ! Bind Exp γ ! Bind Exp γ forceᴮ `∣ b ∣ = `∣ force (wh-norm b) ∣ norm : ∀{γ} ! Exp γ ! Exp γ norm = force ∘ wh-norm Wednesday, June 3, 15
Wh γ `Π : (A : Wh γ) (B : Close Wh Exp γ) ! Wh γ `λ : (b : Close Wh Exp γ) ! Wh γ `[_] : Nu γ ! Wh γ data Nu (γ : ℕ) : Set where `var : (i : Var γ) ! Nu γ _`∙_ : (f : Nu γ) (a : Wh γ) ! Nu γ Wednesday, June 3, 15
Exp γ ! Close Wh Exp φ evalᴷ σ `∣ b ∣ = σ `/ b _∙_ : ∀{γ} ! Wh γ ! Wh γ ! Wh γ `λ b ∙ a = b ∙ᴷ a `[ f ] ∙ a = `[ f `∙ a ] f ∙ a = undefined _∙ᴷ_ : ∀{γ} ! Close Wh Exp γ ! Wh γ ! Wh γ (σ `/ b) ∙ᴷ a = eval (a ∷ σ) b Wednesday, June 3, 15
`Type = `Type force (`Π A B) = `Π (force A) (forceᴷ B) force (`λ b) = `λ (forceᴷ b) force `[ a ] = `[ forceᴺ a ] forceᴺ : ∀{γ} ! Nu γ ! Ne γ forceᴺ (`var i) = `var i forceᴺ (f `∙ a) = forceᴺ f `∙ force a Wednesday, June 3, 15
Wh γ `Π : (A : Wh γ) (B : Close Wh Wh γ) ! Wh γ `λ : (b : Close Wh Wh γ) ! Wh γ `[_] : Nu γ ! Wh γ data Nu (γ : ℕ) : Set where `var : (i : Var γ) ! Nu γ _`∙_ : (f : Nu γ) (a : Wh γ) ! Nu γ Wednesday, June 3, 15
= Vec (Wh φ) γ _`!_ : ∀{γ} (A B : Wh γ) ! Wh γ A `! B = `Π A ∣ wkn B ∣ ∣_∣ : ∀{γ} ! Wh (suc γ) ! Close Wh Wh γ ∣ a ∣ = idEnv `/ a Wednesday, June 3, 15
Wh Wh γ ! Close Wh Wh φ wh-hsubᴷ σ (ρ `/ b) = map (wh-hsub σ) ρ `/ b _∙_ : ∀{γ} ! Wh γ ! Wh γ ! Wh γ `λ b ∙ a = b ∙ᴷ a `[ f ] ∙ a = `[ f `∙ a ] f ∙ a = undefined _∙ᴷ_ : ∀{γ} ! Close Wh Wh γ ! Wh γ ! Wh γ (σ `/ b) ∙ᴷ a = wh-hsub (a ∷ σ) b Wednesday, June 3, 15
`Type = `Type force (`Π A B) = `Π (force A) (forceᴷ B) force (`λ b) = `λ (forceᴷ b) force `[ a ] = `[ forceᴺ a ] forceᴺ : ∀{γ} ! Nu γ ! Ne γ forceᴺ (`var i) = `var i forceᴺ (f `∙ a) = forceᴺ f `∙ force a Wednesday, June 3, 15
(`λ b) = `λ (wh-normᴮ b) wh-norm (`var i) = `[ `var i ] wh-norm (f `∙ a) = wh-norm f ∙ wh-norm a wh-normᴮ : ∀{γ} ! Bind Exp γ ! Close Wh Wh γ wh-normᴮ `∣ b ∣ = ∣ wh-norm b ∣ Wednesday, June 3, 15
Maybe (Wh γ) infer Γ (f `∙ a) = infer Γ a >>= λ A ! infer Γ f >>= λ { (`Π A' B) ! if A ≈ A' then return (B ∙ᴷ wh-norm a) else nothing ; _ ! nothing } Wednesday, June 3, 15
Realizability semantics for independent WHNFs • Termination proof for wh-hsub • Decidability proof for κ-conversion • Completed above for Gödel’s System T • Currently extending to MLTT Wednesday, June 3, 15