Title: Parametric Polymorphism
1Parametric Polymorphism
- COS 441
- Princeton University
- Fall 2004
2Polymorphic Polymorphism
- Polymorphism has different meanings in different
contexts. - Cardelli and Wegner (1985) decompose it as
follows
3Varieties of Polymorphism
- Universal polymorphism is obtained when a
function works uniformly on a range of types - Ad-hoc polymorphism is obtained when a function
works, or appears to work, on several different
types and may behave in unrelated ways for each
type. - From On Understanding Types, Data Abstraction,
and Polymorphism, Luca Cardelli and Peter Wegner
Computing Surveys, (December, 1985)
4Forms of Universal Polymorphism
- parametric polymorphism (generics)
- ML-style, based on type parameters
- Focus of this lecture
- inclusion polymorphism (subtyping)
- OO-style based on subtype inclusion
- Will study this Friday
5Forms of Parametric Polymorphism
- Harper distinguishes between first-class and
second-class forms of parametric polymorphism - ML supports only second-class parametric
polymorphism because of limitations in
type-inference - Supporting first-class versions is easy if you
dont care about type-inference
6First vs Second Class
- First-class
- ? int ?1 ! ?2 t 8t(?)
- Example 8t(t ! t) ! 8t(t ! t)
- Second-class
- ? ? 8t(?)
- ? int ?1 ! ?2 t
- Example 8t(8t((t ! t) ! (t ! t)))
7Second Class Polymorphism
- Second-class or prenex polymorphism the 8 are
all at the front of the type - ? ? 8t(?) (polytypes)
- ? int ?1 ! ?2 t (monotypes)
- Polytypes ?, 8t(?), 8 t(8 t(?)), int
- Monotypes t, int, t ! int,
8PolyMinML
- Supports second-class parametric polymorphism
- Only instantiate polytypes with monotypes
9Dynamic Semantics
10Static Semantics
- Must modify judgment forms to account for free
type variables occurring in types during type
checking
11Static Semantics
- Must modify judgment forms to account for free
type variables occurring in types during type
checking
Typo should be ?
12Well-formed Type
13Well-Formed Expressions
- Remaining rules maintain/assume the following
invariant
14Example Polymorphic Compose
15Type Soundness
- Similar to Substitution Lemma
- Proofs are all similar to previous proofs just
with more tedium!
16First-Class Polymorphism
- Easy to obtain just relax distinction between
polytypes and monotypes - Zero changes to the proof or operational
semantics - Not supported for many reasons
- Interacts badly with type-inference
- Does not allow type-erasure in opsem
17Effects/Erasure and Polymorphism
- The expressions Fun and inst similar to roll and
unroll - No real need on a executing machine
- Just to make type checking and type-soundness
easier - In second-order system with value restriction can
be erased from program - ML compilers use type-erasure during compilation
18Value Restriction
- Consider v ?
- v must be of the form
- Fun t1 in Fun t2 in Fun tn in e
- Value restriction only allows type-abstraction
over values so with the value restriction we know
that e is also a value - If it is a value than it is safe to remove all
the Fun
19Example Value Restriction
- Consider program below
- the program is sound because there is a unique
reference created with each instantiation of r
20Example Value Restriction
- Consider erased version below
- the program is unsound because there is just one
reference created with each instantiation of r. - SML rejects the above
21Polymorphism and Abstraction
- Parametric polymorphism can be used to enforce
data abstraction - Parametricity theorem lets us infer information
about a value just by inspecting its type - Similar to a canonical forms lemmas
- Gives us a semantic description of a value based
on its type
22Example 8t(t ! t)
- Consider function f the type 8t(t ! t)
- assuming we only care about interesting
functions (those that terminate) how can
functions of that type behave? - All functions of that type must simply return
their argument. i.e. they all behave as the
identity function -
23Semantics vs. Syntax
- Note parametricity theorem states any function
must act like the identity function it may
look different - (fn x gt x)
- (fn x gt (((fn f gt f) (fn y gt y)) x))
- (fn x gt (12x))
- Compare to canonical forms lemmas which states
values must be a specific piece of syntax
24Other Theorems
- 8t(t)
- No interesting values of this type
- 8t(t list ! t list)
- Interesting functions only examine the spine
of the list
25A Simple Abstraction Theorem
- Consider N 8t(t ! (t ! t) ! t)
- Interesting functions of this form can only apply
their first and second arguments. - Fun t in fn zt is fn st! t is z
- Fun t in fn zt is fn st! t is s(z)
- Fun t in fn zt is fn st! t is s(s(z))
26Formal Definition of Parametricity
- Define a notion of equivalence of expressions
indexed by type
27Definition of Parametricity (cont.)
- Define a notion of equivalence of closed values
indexed by type
28Definition of Parametricity (cont.)
- Interesting case is definition of all
Almost arbitrary relation
29Parametricity Theorems
30Summary
- Many different forms of polymorphism
- Parametric polymorphism comes in both first-class
and second-class forms - Parametricity theorems basis for formal claims of
data-abstraction