Download presentation
Presentation is loading. Please wait.
1
Parametric Polymorphism COS 441 Princeton University Fall 2004
2
Polymorphic Polymorphism Polymorphism has different meanings in different contexts. Cardelli and Wegner (1985) decompose it as follows
3
Varieties 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)
4
Forms 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
5
Forms 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 don’t care about type-inference
6
First vs Second Class First-class ::= int | 1 ! 2 | t | 8 t( Example: 8 t(t ! t) ! 8 t’(t’ ! t’) Second-class ::= | 8 t( ::= int | 1 ! 2 | t Example: 8 t( 8 t’((t ! t) ! (t’ ! t’)))
7
Second Class Polymorphism Second-class or “prenex” polymorphism the 8 are all at the front of the type ::= | 8 t( (polytypes) ::= int | 1 ! 2 | t (monotypes) Polytypes: , 8 t( , 8 t( 8 t’( , int Monotypes: t, int, t ! int,…
8
PolyMinML Supports second-class parametric polymorphism Only instantiate polytypes with monotypes
9
Dynamic Semantics
10
Static Semantics Must modify judgment forms to account for free type variables occurring in types during type checking
11
Static Semantics Must modify judgment forms to account for free type variables occurring in types during type checking Typo should be
12
Well-formed Type
13
Well-Formed Expressions Remaining rules maintain/assume the following invariant
14
Example: Polymorphic Compose
15
Type Soundness Similar to Substitution Lemma Proofs are all similar to previous proofs just with more tedium!
16
First-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
17
Effects/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
18
Value Restriction Consider v : v must be of the form Fun t 1 in Fun t 2 in … Fun t n 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
19
Example: Value Restriction Consider program below the program is sound because there is a unique reference created with each instantiation of r
20
Example: 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
21
Polymorphism and Abstraction Parametric polymorphism can be used to enforce data abstraction Parametricity theorem lets us infer information about a value just by inspecting it’s type –Similar to a canonical forms lemmas –Gives us a semantic description of a value based on it’s type
22
Example: 8 t(t ! t) Consider function f the type 8 t(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
23
Semantics vs. Syntax Note parametricity theorem states any function must “act like” the identity function it may “look” different (fn x => x) (fn x => (((fn f => f) (fn y => y)) x)) (fn x => (1+2;x)) Compare to canonical forms lemmas which states values must be a specific piece of syntax
24
Other Theorems 8 t(t) No interesting values of this type 8 t(t list ! t list) Interesting functions only examine the “spine” of the list
25
A Simple Abstraction Theorem Consider N: 8 t(t ! (t ! t) ! t) Interesting functions of this form can only apply their first and second arguments. Fun t in fn z : t is fn s : t ! t is z Fun t in fn z : t is fn s : t ! t is s(z) Fun t in fn z : t is fn s : t ! t is s(s(z))
26
Formal Definition of Parametricity Define a notion of equivalence of expressions indexed by type
27
Definition of Parametricity (cont.) Define a notion of equivalence of closed values indexed by type
28
Definition of Parametricity (cont.) Interesting case is definition of “ all ” Almost arbitrary relation
29
Parametricity Theorems
30
Summary 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
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.