CSE-321 Programming Languages
Simply Typed -Calculus
POSTECH
March 28, 2007
박성우
2
-Calculus• Abstract syntax
• Operational semantics (call-by-value)
3
Simulating Base Types• Booleans
• Natural numbers
• Fixed point combinator
4
• The -calculus is expressive.– booleans, integers, lists, recursive functions, ...
• But it is highly inefficient to program in the -calculus.– Why not just use
instead of ?
• So we introduce a type system!
Motivation
5
Simply Typed -Calculus• An extension of the untyped -calculus with types
• Assumes a fixed set of base types– E.g.
• base type • primitive constructs
• A subset of Standard ML
6
Outline• Introduction V• The simply typed -calculus
– Abstract syntax– Operational semantics– Type system
• Type safety
7
Abstract Syntax
8
What if there is no base type?
No interesting expression!
9
Outline• Introduction V• The simply typed -calculus
– Abstract syntax V– Operational semantics– Type system
• Type safety
10
Simply Untyped -Calculus
11
Reduction Rules for Booleans
12
Capture-Avoiding Substitutions• Completely analogous
13
Free Variables• Completely analogous
14
Outline• Introduction V• The simply typed -calculus
– Abstract syntax V– Operational semantics V– Type system
• Type safety
What is the type of ?
Answer:
16
How to find the type of 1. Assume that the type of x is A.
• okay
2. Find the type of x.• A
3. Build a function type• A ! A
Need to make assumptions on types of variables!
17
Type System• Typing context
• Typing judgment
18
Typing Rules --- Top-down
19
Typing Rules --- Bottom-up
20
Typing Rules for Booleans
21
Typing Derivation
22
Typing Derivation
23
Outline• Introduction V• The simply typed -calculus V
– Abstract syntax V– Operational semantics V– Type system V
• Type safety
24
Unsafe Operations in C• Adding two pointers
• Subtracting an integer from a string– which is okay, but likely to be unintended
• Null-pointer dereferencing– Argh... segmentation fault!
• Using an integer as a destination address in a function call
• ...
25
Assignment 3+• Count the number of hours that you spend before
getting your Matrix program to typecheck.– Example:
• 0am: You start.• 10am: Your program compiles with no type
errors.
• Then count the number of extra hours that you spend before completing Assignment 3.
26
Type Safety• Slogan
"well-typed expressions never go wrong"
• Two theorems– Type preservation:
"A well-typed expression reduces to another expression of the same type."
– Progress:"A well-typed expression does not get stuck: either it is a value or
reduces to another expression."
27
Type Preservation + Progress• A well-typed expression e:
– If it is a value, we are finished.– If it is not,
• It reduces to another e' [Progress]• e' has the same type as e. [Type
preservation]
28
Type Safety• Type preservation
• Progress
29
Proof of Type Safety• Use the rule induction.• In the next lecture!