![Page 1: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/1.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
A Well-typed Interpreter for aDependently Typed Language
Nils Anders Danielsson
Chalmers
February 21, 2007
![Page 2: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/2.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Introduction
I Well-typed representation ofdependently typed lambda calculus(no raw terms).
I Interpreter (= normalisation proof).
I Implemented in AgdaLight.
![Page 3: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/3.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Well-typed language
data Ty : ∗ whereNat ′ : TyBool ′ : Ty
data Op : Ty → ∗ whereplus : Op Nat ′
and : Op Bool ′
data Term : Ty → ∗ wherenat : Nat → Term Nat ′
bool : Bool → Term Bool ′
op : {σ : Ty } → Op σ→ Term σ → Term σ → Term σ
![Page 4: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/4.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Interpreter which cannot get stuck
Sem : Ty → ∗Sem Nat ′ = NatSem Bool ′ = Bool
J·K: Term σ → Sem σJnat nK = nJbool bK = bJop o t1 t2K= fun o Jt1KJt2K
wherefun : Op σ → (Sem σ → Sem σ → Sem σ)fun plus = (+)fun and = (∧)
![Page 5: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/5.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Object language
I Variant of Martin-Lof’s logical framework.
I Variables (de Bruijn indices).
I Explicit substitutions.
I All definitions are mutually recursive.
![Page 6: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/6.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Contexts
data Ctxt : ∗ whereε : Ctxt(.) : (Γ : Ctxt) → Ty Γ → Ctxt
ε contextΓ context Γ ` τ type
Γ . τ context
![Page 7: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/7.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Types
data Ty : Ctxt → ∗ where? : Ty ΓEl : Γ ` ? → Ty ΓΠ : (τ : Ty Γ) → Ty (Γ . τ) → Ty Γ
Γ ` ? typeΓ ` t : ?
Γ ` El t type
Γ ` τ1 type Γ . τ1 ` τ2 typeΓ ` Π τ1 τ2 type
![Page 8: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/8.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Types
data Ty : Ctxt → ∗ where? : Ty ΓEl : Γ ` ? → Ty ΓΠ : (τ : Ty Γ) → Ty (Γ . τ) → Ty Γ
(/) : Ty Γ → Γ ⇒ ∆ → Ty ∆? / ρ = ?El t / ρ = El (t / ρ)Π τ1 τ2 / ρ = Π (τ1 / ρ) (τ2 / ρ ↑ τ1)
![Page 9: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/9.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Terms
Γ ` v : τΓ ` var v : τ
Γ . τ1 ` t : τ2
Γ ` λ t : Π τ1 τ2
Γ ` t1 : Π τ1 τ2 Γ ` t2 : τ1
Γ ` t1@t2 : τ2 / sub t2
Γ ` t : τ1 eq : τ1 =? τ2
Γ ` t ::` eq : τ2
Γ ` t : τ ρ : Γ ⇒ ∆∆ ` t / ρ : τ / ρ
![Page 10: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/10.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Variables
(3) : (Γ : Ctxt) → Ty Γ → ∗vz : Γ . σ 3 σ/wk σ
Variable zero.σ is in Γ, not Γ . σ, so it needs to beweakened.
vs v The variable after v .
(::3) Conversion rule.
![Page 11: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/11.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Substitutions
(⇒) : Ctxt → Ctxt → ∗sub Single term substitutions ([vz := t ]).
wk Weakenings.
(↑) Lifting.
id Identity.
(�) Composition.
![Page 12: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/12.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Equality
I Congruence.
I β- and η-rules.
I Evaluation rules for (/ ).
I Casts (::) can be removed.
![Page 13: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/13.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Interpreter
A choice
I Use general recursion.I Relatively easy.I Partially correct.I No immediate guarantees about termination.
I Use structural recursion.I Harder.I Totally correct.
Here: structural recursion usingnormalisation by evaluation.
![Page 14: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/14.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Interpreter
A choice
I Use general recursion.I Relatively easy.I Partially correct.I No immediate guarantees about termination.
I Use structural recursion.I Harder.I Totally correct.
Here: structural recursion usingnormalisation by evaluation.
![Page 15: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/15.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Overview
Explicit
Implicit
tmToTm−
Values
J·K
Atomic Normal
reifyreflect
![Page 16: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/16.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Types ensure soundness
I Tm−, Val , Atom, NF : Γ ` τ → ∗I nf : NF t means that nf is a normal form
βη-equivalent to t.
tmToTm− : (t : Γ ` τ) → Tm− tJ·K : Tm− t → Env ρ → Val (t / ρ)reflect : Atom t → Val treify : Val t → NF t
![Page 17: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/17.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Interesting cases
I Π types are represented using functions thatperform application.
data Val : Γ ` τ → ∗ whereΠVal : {t1 : Γ ` Π τ1 τ2}
→ (f : (Γ′ : Ctxt+ Γ)→ {t2 : Γ ++ Γ′ ` τ1 / wk∗ Γ′}→ (v2 : Val t2)→ Val ((t1 / wk∗ Γ′)@t2))
→ Val t1
J·K : Tm− t → Env ρ → Val (t / ρ)Jλ− t−1 Kγ = ΠVal (\∆′ v2 →
Jt−1 K(wk?Env γ ∆′ �Env (v2 ::Val . . .)) ::Val . . . β . . .)
![Page 18: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/18.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Interesting cases
I Π types are represented using functions thatperform application.
data Val : Γ ` τ → ∗ whereΠVal : {t1 : Γ ` Π τ1 τ2}
→ (f : (Γ′ : Ctxt+ Γ)→ {t2 : Γ ++ Γ′ ` τ1 / wk∗ Γ′}→ (v2 : Val t2)→ Val ((t1 / wk∗ Γ′)@t2))
→ Val t1
J·K : Tm− t → Env ρ → Val (t / ρ)Jλ− t−1 Kγ = ΠVal (\∆′ v2 →
Jt−1 K(wk?Env γ ∆′ �Env (v2 ::Val . . . )) ::Val . . . β . . .)
![Page 19: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/19.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Interesting cases
reify : (τ : Ty Γ) → {t : Γ ` τ } → Val t → NF treify (Π τ1 τ2) (ΠVal f ) =
λNF (reify (τ2 / / )(f (ε+ .+ τ1)
(reflect (τ1 / ) (varAt vz) ::Val . . .)))::NF . . . η . . .
reflect : (τ : Ty Γ) → {t : Γ ` τ } → Atom t → Val treflect (Π τ1 τ2) at1 = ΠVal (\Γ′ v2 →
reflect (τ2 / / ) (wk∗At at1 Γ′ @At reify (τ1 / ) v2))
![Page 20: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/20.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Type checker
I What about parsing?
I Using the normaliser it is easy to define atype checker.
![Page 21: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/21.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Discussion
I Looks horribly complicated?Remember that the types used arevery precise:
I Hence guiding the programmer.I And limiting the amount of possible errors.
I But it’s not something you hack up in anafternoon.
![Page 22: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/22.jpg)
Simpleexample
Objectlanguage
Contexts
Types
Terms
Variables
Substitutions
Equality
Interpreter
Soundness
Interestingcases
Typechecker
Discussion
Finally. . .
I For more details, see paper:A Formalisation of a Dependently TypedLanguage as an Inductive-Recursive Family.
I Source code available to play with.
![Page 23: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/23.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
NormalisationAppendix
![Page 24: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/24.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Terms
data (`) : (Γ : Ctxt) → Ty Γ → ∗ wherevar : Γ 3 τ → Γ ` τλ : Γ . τ1 ` τ2 → Γ ` Π τ1 τ2
(@) : Γ ` Π τ1 τ2 → (t2 : Γ ` τ1) → Γ ` τ2 / sub t2(::`) : Γ ` τ1 → τ1 =? τ2 → Γ ` τ2
(/ ) : Γ ` τ → (ρ : Γ ⇒ ∆) → ∆ ` τ / ρ
![Page 25: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/25.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Variables
data (3) : (Γ : Ctxt) → Ty Γ → ∗ wherevz : Γ . σ 3 σ/wk σvs : Γ 3 τ → Γ . σ 3 τ /wk σ(::3) : Γ 3 τ1 → τ1 =? τ2 → Γ 3 τ2
![Page 26: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/26.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Substitutions
data (⇒) : Ctxt → Ctxt → ∗ wheresub : Γ ` τ → Γ . τ ⇒ Γwk : (σ : Ty Γ) → Γ ⇒ Γ . σid : Γ ⇒ Γ(�) : Γ ⇒ ∆ → ∆ ⇒ X → Γ ⇒ X(↑) : (ρ : Γ ⇒ ∆) → (σ : Ty Γ)
→ Γ . σ ⇒ ∆ . (σ / ρ)
![Page 27: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/27.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Term equality
data (=`) : Γ1 ` τ1 → Γ2 ` τ2 → ∗ where-- Equivalence.
refl` : (t : Γ ` τ) → t =` tsym` : t1 =` t2 → t2 =` t1trans` : t1 =` t2 → t2 =` t3 → t1 =` t3
-- Congruence.varCong : v1 =3 v2 → var v1 =` var v2
λCong : t1 =` t2 → λ t1 =` λ t2(@Cong ) : t1
1 =` t21 → t1
2 =` t22 → t1
1@t12 =` t2
1@t22
(/ Cong ) : t1 =` t2 → ρ1 =⇒ ρ2 → t1 / ρ1 =` t2 / ρ2
. . .
![Page 28: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/28.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Term equality
data (=`) : Γ1 ` τ1 → Γ2 ` τ2 → ∗ where-- Cast, beta and eta equality.
castEq` : (t ::` eq) =` tβ : (λ t1)@t2 =` t1 / sub t2η : (t : Γ ` Π τ1 τ2)
→ λ ((t / wk τ1)@var vz) =` t. . .
![Page 29: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/29.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Term equality
data (=`) : Γ1 ` τ1 → Γ2 ` τ2 → ∗ where-- Substitution application axioms.
λ t / ρ =` λ (t / ρ ↑ τ1)(t1@t2) / ρ =` (t1 / ρ)@(t2 / ρ)t / id =` tt / (ρ1 � ρ2) =` t / ρ1 / ρ2
var v / wk σ =` var (vs v)var vz / sub t =` tvar (vs v) / sub t =` var vvar vz / (ρ ↑ σ) =` var vzvar (vs v) / (ρ ↑ σ) =` var v / ρ / wk (σ / ρ)
![Page 30: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/30.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Implicit substitutions
data Tm− : Γ ` τ → ∗ wherevar− : (v : Γ 3 τ) → Tm− (var v)λ− : {t : Γ . τ1 ` τ2}
→ Ty− τ1 → Tm− t→ Tm− (λ t)
(@−) : Tm− t1 → Tm− t2 → Tm− (t1@t2)(:: − ) : Tm− t1 → t1 =` t2 → Tm− t2
tm−ToTm : {t : Γ ` τ } → Tm− t → Γ ` τtm−ToTmEq : (t− : Tm− t) → tm−ToTm t− =` ttmToTm− : (t : Γ ` τ) → Tm− t
![Page 31: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/31.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Normal forms
data Atom : Γ ` τ → ∗ wherevarAt : (v : Γ 3 τ) → Atom (var v)(@At) : Atom t1 → NF t2 → Atom (t1@t2)(::At) : Atom t1 → t1 =` t2 → Atom t2
data NF : Γ ` τ → ∗ whereatom?
NF : {t : Γ ` ?} → Atom t → NF tatomEl
NF : {t : Γ ` El t ′} → Atom t → NF tλNF : NF t → NF (λ t)(::NF ) : NF t1 → t1 =` t2 → NF t2
![Page 32: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/32.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Context extensions
data Ctxt+ (Γ : Ctxt) : ∗ whereε+ : Ctxt+ Γ(.+) : (Γ′ : Ctxt+ Γ) → Ty (Γ ++ Γ′) → Ctxt+ Γ
(++) : (Γ : Ctxt) → Ctxt+ Γ → CtxtΓ ++ ε+ = ΓΓ ++ (Γ′ .+ τ) = (Γ ++ Γ′) . τ
![Page 33: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/33.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Values
data Val : Γ ` τ → ∗ where(::Val) : Val t1 → t1 =` t2 → Val t2?Val : {t : Γ ` ?} → Atom t → Val tElVal : {t : Γ ` El t ′} → Atom t → Val tΠVal : {t1 : Γ ` Π τ1 τ2}
→ (f : (Γ′ : Ctxt+ Γ)→ {t2 : Γ ++ Γ′ ` τ1 / wk∗ Γ′}→ (v2 : Val t2)→ Val ((t1 / wk∗ Γ′)@t2))
→ Val t1
(@Val) : Val t1 → Val t2 → Val (t1@t2)wk?
Val : Val t → (Γ′ : Ctxt+ Γ) → Val (t / wk∗ Γ′)
![Page 34: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/34.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Environments
∅ : ε ⇒ ∆(�) : (ρ : Γ ⇒ ∆) → ∆ ` τ / ρ → Γ . τ ⇒ ∆
data Env : Γ ⇒ ∆ → ∗ where∅Env : Env ∅(�Env) : {ρ : Γ ⇒ ∆} → {t : ∆ ` σ / ρ}
→ Env ρ → Val t → Env (ρ � t)(::Env) : Env ρ1 → ρ1 =⇒ ρ2 → Env ρ2
lookup : (v : Γ 3 τ) → Env ρ → Val (var v / ρ)
![Page 35: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/35.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Evaluation
J·K : Tm− t → Env ρ → Val (t / ρ)Jvar− vKγ = lookup v γ
Jt−1 @− t−2 Kγ = (Jt−1 Kγ @Val Jt−2 Kγ) ::Val . . .Jt− :: − eqKγ = Jt−Kγ ::Val . . .
Jλ− t−1 Kγ = ΠVal (\∆′ v2 →Jt−1 K(wk?
Env γ ∆′ �Env (v2 ::Val . . .)) ::Val . . . β . . .)
![Page 36: A Well-typed Interpreter for a Dependently Typed Languagenad/publications/danielsson-fun-in-the-aftern… · ε :Ctxt (.):(Γ:Ctxt) → Ty Γ → Ctxt ε context Γ context Γ ‘](https://reader034.vdocument.in/reader034/viewer/2022050507/5f9894e9fcd3a1638d6ffbd3/html5/thumbnails/36.jpg)
Objectlanguage
Terms
Variables
Substitutions
Term equality
Interpreter
Implicitsubstitutions
Normal forms
Values
Environments
Evaluation
Normalisation
Normalisation
idEnv : (Γ : Ctxt) → Env (id Γ)
normalise : (t : Γ ` τ) → NF tnormalise t = reify (JtmToTm− tK idEnv ::Val . . .)
normaliseEq : (t : Γ ` τ) → nfToTm (normalise t) =` tnormaliseEq t = nfToTmEq (normalise t)