courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss...

66
CSE505: Graduate Programming Languages Lecture 10 — Type-Safety Proof Dan Grossman Winter 2012

Transcript of courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss...

Page 1: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

CSE505: Graduate Programming Languages

Lecture 10 — Type-Safety Proof

Dan GrossmanWinter 2012

Page 2: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Outline

I Type-safety proofI Also posted in non-slide form

I Discuss the proofI Consider lemma dependencies and what they representI Consider elegance of inverting static and dynamic derivations

I Next lecture: Add more constructs to our typed languageI Pairs, records, sums, recursion, ...I For each, sketch proof additions (follow a general approach)

I Further ahead: More flexible typing via polymorphism

Dan Grossman CSE505 Winter 2012, Lecture 10 2

Page 3: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Review: Lambda-Calculus with Constants

e ::= λx. e | x | e e | c v ::= λx. e | c

(λx. e) v → e[v/x]

e1 → e′1e1 e2 → e′1 e2

e2 → e′2v e2 → v e′2

x[e/x] = e

y 6= x

y[e/x] = y c[e/x] = c

e1[e/x]=e′1 y 6=x y 6∈FV (e)

(λy. e1)[e/x] = λy. e′1

e1[e/x] = e′1 e2[e/x] = e′2(e1 e2)[e/x] = e′1 e

′2

Stuck states: not values and no step applies...

Avoid stuck states to:

I Catch bugs (why would you want to get to such a state?)

I Ease implementation (no need to check for being stuck)

Dan Grossman CSE505 Winter 2012, Lecture 10 3

Page 4: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Review: Typing Judgment

Defined a type system to classify λ-terms

Some terms have types; some don’t

τ ::= int | τ → τ Γ ::= · | Γ, x : τ

Γ ` c : int Γ ` x : Γ(x)

Γ, x : τ1 ` e : τ2

Γ ` λx. e : τ1 → τ2

Γ ` e1 : τ2 → τ1 Γ ` e2 : τ2

Γ ` e1 e2 : τ1

Theorem: A program that typechecks under · won’t get stuck, i.e.,If · ` e : τ then e diverges or ∃v, n such that e→n v

Dan Grossman CSE505 Winter 2012, Lecture 10 4

Page 5: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation and Progress

Theorem (slightly restated): If · ` e : τ and e→n e′, then e′ isa value or there exists an e′′ such that e′ → e′′

Follows from two key lemmas:

I Lemma (Preservation): If · ` e : τ and e→ e′, then· ` e′ : τ .

I Lemma (Progress): If · ` e : τ , then e is a value or thereexists an e′ such that e→ e′.

Proof of theorem given lemmas:I “Preservation*”: If · ` e : τ and e→n e′, then · ` e′ : τ

I Trivial induction on n given Preservation

I So Progress ensures e′ is not stuck

Dan Grossman CSE505 Winter 2012, Lecture 10 5

Page 6: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation and Progress

Theorem (slightly restated): If · ` e : τ and e→n e′, then e′ isa value or there exists an e′′ such that e′ → e′′

Follows from two key lemmas:

I Lemma (Preservation): If · ` e : τ and e→ e′, then· ` e′ : τ .

I Lemma (Progress): If · ` e : τ , then e is a value or thereexists an e′ such that e→ e′.

Proof of theorem given lemmas:I “Preservation*”: If · ` e : τ and e→n e′, then · ` e′ : τ

I Trivial induction on n given Preservation

I So Progress ensures e′ is not stuck

Dan Grossman CSE505 Winter 2012, Lecture 10 5

Page 7: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation and Progress

Theorem (slightly restated): If · ` e : τ and e→n e′, then e′ isa value or there exists an e′′ such that e′ → e′′

Follows from two key lemmas:

I Lemma (Preservation): If · ` e : τ and e→ e′, then· ` e′ : τ .

I Lemma (Progress): If · ` e : τ , then e is a value or thereexists an e′ such that e→ e′.

Proof of theorem given lemmas:I “Preservation*”: If · ` e : τ and e→n e′, then · ` e′ : τ

I Trivial induction on n given Preservation

I So Progress ensures e′ is not stuck

Dan Grossman CSE505 Winter 2012, Lecture 10 5

Page 8: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress

Lemma: If · ` e : τ , then e is a value or there exists an e′ suchthat e→ e′

Proof: We first prove this lemma:

Lemma (Canonical Forms): If · ` v : τ , then:

I if τ is int, then v is some c

I if τ has the form τ1 → τ2 then v has the form λx. e

Proof: By inspection of the form of values and typing rules

I That is, by inversion, only one typing rule applies if τ = intand in that rule v is a constant, and similarly for τ1 → τ2

Now prove Progress by induction on the derivation of · ` e : τ ...

Dan Grossman CSE505 Winter 2012, Lecture 10 6

Page 9: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress

Lemma: If · ` e : τ , then e is a value or there exists an e′ suchthat e→ e′

Proof: We first prove this lemma:

Lemma (Canonical Forms): If · ` v : τ , then:

I if τ is int, then v is some c

I if τ has the form τ1 → τ2 then v has the form λx. e

Proof: By inspection of the form of values and typing rules

I That is, by inversion, only one typing rule applies if τ = intand in that rule v is a constant, and similarly for τ1 → τ2

Now prove Progress by induction on the derivation of · ` e : τ ...

Dan Grossman CSE505 Winter 2012, Lecture 10 6

Page 10: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress

Lemma: If · ` e : τ , then e is a value or there exists an e′ suchthat e→ e′

Proof: We first prove this lemma:

Lemma (Canonical Forms): If · ` v : τ , then:

I if τ is int, then v is some c

I if τ has the form τ1 → τ2 then v has the form λx. e

Proof: By inspection of the form of values and typing rules

I That is, by inversion, only one typing rule applies if τ = intand in that rule v is a constant, and similarly for τ1 → τ2

Now prove Progress by induction on the derivation of · ` e : τ ...

Dan Grossman CSE505 Winter 2012, Lecture 10 6

Page 11: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 12: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 13: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 14: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 15: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 16: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.

If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 17: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.

Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 18: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.

If it becomes e′2, then v1 e2 → v1 e′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 19: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 20: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.

· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 21: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.

So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 22: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 23: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Progress: Induction on derivation of · ` e : τ

Derivation must end with one of four rules:

I · ` x : τ — impossible because · ` e : τ

I · ` c : int — then e is a value

I · ` λx. e : τ — then e is a value

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

By induction e1 is some v1 or can become some e′1.If it can become e′1, then e1 e2 → e′1 e2.Else by induction e2 is some v2 or can become some e′2.If it becomes e′2, then v1 e2 → v1 e

′2.

Else e is v1 v2.· ` v1 : τ ′ → τ and Canonical Forms ensures v1 has theform λx. e′.So v1 v2 → e′[v2/x].

Note: If we add +, we need the other part of Canonical Forms

Dan Grossman CSE505 Winter 2012, Lecture 10 7

Page 24: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 25: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 26: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 27: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 28: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 29: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 30: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation

Lemma: If · ` e : τ and e→ e′, then · ` e′ : τ

Proof: By induction on the derivation of · ` e : τ . Bottom rulecould conclude:

I · ` x : τ — actually, it can’t; ·(x) is undefined

I · ` c : int — then e→ e′ is impossible, so lemma holdsvacuously

I · ` λx. e : τ — then e→ e′ is impossible, so lemma holdsvacuously

I · ` e1 e2 : τ where ∃τ ′. · ` e1 : τ ′ → τ and · ` e2 : τ ′

There are 3 ways e1 e2 → e′ could be derived.Subcase for each ...

Dan Grossman CSE505 Winter 2012, Lecture 10 8

Page 31: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 32: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:

So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 33: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .

So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .I e′ is e1 e

′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 34: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 35: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 36: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]

Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 37: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .

So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 38: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .

That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 39: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 40: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Preservation, e = e1 e2 case

We have: · ` e1 : τ ′ → τ , · ` e2 : τ ′, and e1 e2 → e′.We need: · ` e′ : τ .The derivation of e1 e2 → e′ ensures 1 of these:

I e′ is e′1 e2 and e1 → e′1:So with · ` e1 : τ ′ → τ and induction, · ` e′1 : τ ′ → τ .So with · ` e2 : τ ′ we can derive · ` e′1 e2 : τ .

I e′ is e1 e′2 and e2 → e′2:

So with · ` e2 : τ ′ and induction, · ` e′2 : τ ′.So with · ` e1 : τ ′ → τ we can derive · ` e1 e′2 : τ .

I e1 is some λx. e3 and e2 is some v and e′ is e3[v/x]Inverting · ` λx. e3 : τ ′ → τ gives ·, x:τ ′ ` e3 : τ .So it would suffice to know: If ·, x:τ ′ ` e3 : τ and· ` e2 : τ ′, then · ` e3[e2/x] : τ .That’s true but we need to prove it via a Substitution Lemma.

Lemma (Substitution): If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

Dan Grossman CSE505 Winter 2012, Lecture 10 9

Page 41: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Where are we

Almost done with Preservation, but in the case where(λx. e3) e2 → e3[e2/x], need:

If ·, x:τ ′ ` e3 : τ and · ` e2 : τ ′, then · ` e3[e2/x] : τ .

I Intuitive: Replace assumption that x : τ ′ with an expressionthat has type τ ′

I But we need an inductive proof because e3 can be arbitrarilybig and substitution is a subtle thing

Prove this lemma: If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, thenΓ ` e1[e2/x] : τ .

I “Renaming” e3 to e1 in our “helper lemma” (no big deal)I Strengthened induction hypothesis to work for any Γ

I Else the proof will fail

Dan Grossman CSE505 Winter 2012, Lecture 10 10

Page 42: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τ

Proof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 43: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 44: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 45: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).

Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 46: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.

If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 47: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.

If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 48: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 49: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .

Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 50: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.

So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 51: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.

So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 52: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .

And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 53: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 54: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Proving the Substitution Lemma

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

I Γ, x:τ ′ ` c : int. Then c[e2/x] = c and Γ ` c : int

I Γ, x:τ ′ ` y : (Γ, x:τ ′)(y).Either y = x or y 6= x.If y = x, then (Γ, x:τ ′)(x) is τ ′ (i.e., τ = τ ′) andx[e2/x] is e2. So Γ ` e2 : τ ′ satisfies the lemma.If y 6= x, then (Γ, x:τ ′)(y) is Γ(y) and y[e2/x] is y.So we can derive Γ ` y : Γ(y).

I Γ, x:τ ′ ` ea eb : τ .Then ∃τa, τb where Γ, x:τ ′ ` ea : τa and Γ, x:τ ′ ` eb : τb.So by induction Γ `ea[e2/x] : τa and Γ `eb[e2/x] : τb.So we can derive Γ ` ea[e2/x] eb[e2/x] : τ .And (ea eb)[e2/x] is ea[e2/x] eb[e2/x].

I Only the (nested) function case is left ...

Dan Grossman CSE505 Winter 2012, Lecture 10 11

Page 55: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 56: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 57: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.

By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 58: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.

By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 59: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.

So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 60: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 61: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.

And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 62: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Still Proving Substitution

If Γ, x:τ ′ ` e1 : τ and Γ ` e2 : τ ′, then Γ ` e1[e2/x] : τProof: By induction on derivation of Γ, x:τ ′ ` e1 : τ

The last case uses these two technical lemmas (easy inductions):I Exchange: If Γ, x:τ1, y:τ2 ` e : τ , then Γ, y:τ2, x:τ1 ` e : τ

I Weakening: If Γ ` e : τ and x 6∈ Dom(Γ), then Γ, x:τ ′ ` e : τ .

The last case:

I Γ, x:τ ′ ` λy. ea : τ . (can assume y 6= x and y 6∈ Dom(Γ))

Then ∃τa, τb where Γ, x:τ ′, y:τa ` ea : τb and τ = τa → τb.By Exchange Γ, y:τa, x:τ ′ ` ea : τb.By Weakening and Γ ` e2 : τ ′, we know Γ, y:τa ` e2 : τ ′.So by induction (using Γ, y:τa for Γ), Γ, y:τa ` ea[e2/x] : τb.

I (This is where we needed the stronger induction hypothesis)

So we can derive Γ ` λy. ea[e2/x] : τa → τb.And (λy. ea)[e2/x] is λy. (ea[e2/x]).

Dan Grossman CSE505 Winter 2012, Lecture 10 12

Page 63: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Lemma dependencies

Safety (evaluation never gets stuck)I Preservation (to stay well-typed)

I Substitution (β-reduction stays well-typed)I Weakening (substituting under nested λs well-typed)I Exchange (technical point)

I Progress (well-typed not stuck yet)I Canonical Forms (primitive reductions apply where needed)

Comments:

I Substitution strengthened to open terms for the proof

I When we add heaps, Preservation will use Weakening directly

Dan Grossman CSE505 Winter 2012, Lecture 10 13

Page 64: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Summary

What may seem a weird lemma pile is a powerful recipe:

Soundness: We don’t get stuck because our induction hypothesis(typing) holds (Preservation) and stuck terms aren’t well typed(contrapositive of Progress)

Preservation holds by induction on typing (replace subterms withsame type) and Substitution (for β-reduction). Substitution mustwork over open terms and requires Weakening and Exchange.

Progress holds by induction on expressions (or typing) becauseeither a subexpression progresses or we can make a primitivereduction (using Canonical Forms).

Dan Grossman CSE505 Winter 2012, Lecture 10 14

Page 65: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

Induction on derivations – Another Look

Application cases (e = e1 e2) are elegant and worth masteringI Other constructs with eager evaluation of subexpressions

would work analogously (e.g., e1 + e2 or (e1, e2))

For Preservation, lemma assumes · ` e1 e2 : τ .

Inverting the typing derivation ensures it has the form:

D1

· ` e1 : τ ′ → τ

D2

· ` e2 : τ ′

· ` e1 e2 : τ

One Preservation subcase: If e1 e2 → e′1 e2, inverting thatderivation means:

De1 → e′1

e1 e2 → e′1 e2

Dan Grossman CSE505 Winter 2012, Lecture 10 15

Page 66: courses.cs.washington.edu · Outline I Type-safety proof I Also posted in non-slide form I Discuss the proof I Consider lemma dependencies and what they represent I Consider elegance

continued. . .

The inductive hypothesis means there is a derivation of this form:

D3

· ` e′1 : τ ′ → τ

So a derivation of this form exists:

D3

· ` e′1 : τ ′ → τ

D2

· ` e2 : τ ′

· ` e′1 e2 : τ

(The app case of the Substitution Lemma is similar but we use induction

twice to get the new derivation)

Dan Grossman CSE505 Winter 2012, Lecture 10 16