Presentation is loading. Please wait.

Presentation is loading. Please wait.

Parametric Polymorphism COS 441 Princeton University Fall 2004.

Similar presentations


Presentation on theme: "Parametric Polymorphism COS 441 Princeton University Fall 2004."— Presentation transcript:

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


Download ppt "Parametric Polymorphism COS 441 Princeton University Fall 2004."

Similar presentations


Ads by Google