Professional Documents
Culture Documents
Philip Wadler
University of Glasgow
June 1989
1
The result that allows theorems to be derived from a function; this has already been explored to a certain
types will be referred to as the parametricity result, be- extent by Sheeran [She89]. So there is reason to believe
cause it depends in an essential way on parametric poly- that further research will further extend the applicabil-
morphism (types of the form 8X: T ). Parametricity is ity of this method.
just a reformulation of Reynolds' abstraction theorem:
terms evaluated in related environments yield related Many functional languages, including Standard ML
values [Rey83]. The key idea is that types may be read [Mil84, Mil87], Miranda1 [Tur85], and Haskell [HW88],
as relations. This result will be explained in Section 2 are based on the Hindley/Milner type system [Hin69,
and stated more formally in Section 6. Mil78, DM82]. This system is popular because types
Some further applications of parametricity are shown need not be given explicitly; instead, the principal (most
in Figure 1, which shows several types and the corre- general) type of a function can be inferred from its def-
sponding theorems. Each name was chosen, of course, inition. However, for the purposes of this paper it is
to suggest a particular function of the named type, but more convenient to use the Girard/Reynolds type sys-
the associated theorems hold for any function that has tem [Gir72, Gir86, Rey74, Rey83] (also known as the
the same type (so long as it can be dened as a term in polymorphic lambda calculus, the second order lambda
the pure polymorphic lambda calculus). For example, calculus, and System F). In the Girard/Reynolds sys-
the theorem given for head also holds for last , and the tem it is necessary to give the types of bound vari-
theorem given for sort also holds for nub (see Section 3). ables explicitly. Further, if a function has a polymorphic
The theorems are expressed using operations on func- type then type applications must be explicitly indicated.
tions that correspond to operations on types. Corre- This is done via subscripting; for example, the instance
sponding to the list type A is the map operation a of the function r : 8X: X ! X at the type A is written
that takes the function a : A ! A0 into the func- r A : A ! A .
0
tion a : A ! A . Similarly, corresponding to the Every program in the Hindley/Milner system can
product type A B is the operation a b that takes automatically be translated into one in the Gi-
the functions a : A ! A0 and b : B ! B 0 into the rard/Reynolds system. All that is required is a straight-
function a b : A B ! A0 B 0 ; it is dened by forward modication of the type inference algorithm to
(a b ) (x ; y ) = (a x ; b y ). As we shall see, it will be decorate programs with the appropriate type informa-
necessary to generalise to the case where a , b , a , and tion. On the other hand, the inverse translation is not
a b are relations. always possible, because the Girard/Reynolds system is
How useful are the theorems so generated? Only time more powerful than Hindley/Milner.
and experience will tell, but some initial results are en- Both the Hindley/Milner and the Girard/Reynolds
couraging: system satisfy the strong normalisation property: every
term has a normal form, and every reduction sequence
In general, the laws derived from types are of a leads to this normal form. As a corollary, it follows that
form useful for algebraic manipulation. For exam- the xpoint operator,
ple, many of the laws in Figure 1 allow one to \push
map through a function". x : 8X: (X ! X ) ! X
Three years ago, Barrett and I wrote a paper cannot be dened as a term in these systems. For many
on the derivation of an algorithm for compiling purposes, we can get along ne without the xpoint
pattern-matching in functional languages [BW86]. operator, because many useful functions (including all
The derivation used nine general theorems about those shown in Figure 1) may be dened in the Gi-
higher-order functions such as map and sort . Look- rard/Reynolds system without its use. Indeed, every
ing at the paper again now, it turns out that of recursive function that can be proved total in second-
the nine theorems, ve follow immediately from the order Peano arithmetic can be written as a term in
types. the Girard/Reynolds calculus [FLO83, Gir72, GLT89].
Sheeran has developed a formal approach to the This includes, for instance, Ackerman's function (see
design of VLSI circuits that makes heavy use of [Rey85]), but it excludes interpreters for most languages
mathematical laws. She has found that many of (including the Girard/Reynolds calculus itself).
the laws she needs can be generated from types If the power of unbounded recursion is truly required,
using the methods described here, and has already then x can be added as a primitive. However, adding
written a paper describing how to do so [She89]. xpoints weakens the power of the parametricity the-
orem. In particular, if xpoints are allowed then the
Not surprisingly, using a more specic type system al-
lows even more theorems to be derived from the type of 1 Miranda is a trademark of Research Software Limited.
2
Assume a : A ! A0 and b : B ! B 0 :
head : 8X: X ! X
a headA = headA0 a
tail : 8X: X ! X
a tailA = tailA0 a
(++) : 8X: X ! X ! X
a (xs ++A ys ) = (a xs ) ++A0 (a ys )
concat : 8X: X ! X
a concatA = concatA0 a
fst : 8X: 8Y: X Y ! X
a fstAB = fstA0 B 0 (a b )
snd : 8X: 8Y: X Y ! Y
b sndAB = sndA0 B 0 (a b )
zip : 8X: 8Y: (X Y ) ! (X Y )
(a b ) zipAB = zipA0 B 0 (a b )
lter : 8X: (X ! Bool ) ! X ! X
a lterA (p 0 a ) = lterA0 p 0 a
sort : 8X: (X ! X ! Bool ) ! X ! X
if for all x ; y 2 A; (x < y ) = (a x <0 a y ) then
a sortA (<) = sortA0 (<0 ) a
fold : 8X: 8Y: (X ! Y ! Y ) ! Y ! X ! Y
if for all x 2 A; y 2 B ; b (x y ) = (a x )
(b y ) and b u = u 0 then
b foldAB () u = foldA0 B 0 (
) u 0 a
I : 8X: X ! X
a IA = IA0 a
K : 8X: 8Y: X ! Y ! X
a (KAB x y ) = KA0 B 0 (a x ) (b y )
3
theorems in Figure 1 hold in general only when the presents the parametricity theorem, and Section 3 gives
functions a and b are strict (that is, when a ? = ? further applications. Sections 4{6 ll in the formali-
and b ? = ?)2 . For this reason, the bulk of this pa- ties: Section 4 describes the syntax of the polymor-
per assumes that xpoints are not provided; but the phic lambda calculus, Section 5 shows how its syntax
necessary adjustment to allow xpoints is described in can be given using frame models, and Section 6 gives
Section 7. the full statement of the parametricity theorem. Sec-
tion 7 shows how the parametricity theorem should be
The fundamental idea of parametricity is not new. adjusted to account for languages that use the xpoint
A restricted version of it appears in Reynolds' origi- operator.
nal paper on the polymorphic lambda calculus [Rey74],
where it is called the representation theorem, and a Acknowledgements. I am grateful to Harold Sim-
version similar to that used here appears in [Rey83], mons for helping to formulate and prove the result
where it is called the abstraction theorem. Other about map in Section 3.5, and to Samson Abramsky,
versions include the logical relations of Mitchell and Val Breazu-Tannen, Peter Freyd, John Hughes, John
Meyer [MM85, Mit86]; and the dinatural transforma- Launchbury, John Reynolds, Andre Scedrov, and Mary
tions of Bainbridge, Freyd, Girard, Scedrov, and Scott Sheeran for their comments on this work.
[BFSS87, FGSS88], from whom I have taken the name
\parametricity".
So far as I am aware, all uses of parametricity to date
have been \general": they say something about possible
2 Parametricity explained
implementations of the polymorphic lambda calculus The key to extracting theorems from types is to read
(e.g. that the implementation is correct independent of types as relations. This section outlines the essential
the representation used) or about its models (e.g. that ideas, using a naive model of the polymorphic lambda
models should only be allowed that satisfy parametric- calculus: types are sets, functions are set-theoretic func-
ity). The main contribution of this paper is to suggest tions, etc. The approach follows that in [Rey83].
that parametricity also has \specic" applications: it Cognoscenti will recognise a small problem here|
says interesting things about particular functions with there are no naive set-theoretic models of polymorphic
particular types3 . lambda calculus! (See [Rey84].) That's ok; the essen-
An updated statement and proof of the abstraction tial ideas adopt easily to frame models [BM84, MM85].
theorem is presented. The main reason for including This section sticks to the simple but naive view; the i's
these is to make the paper self-contained. In the pro- will be dotted and the t's crossed in Sections 4{6, which
cess, it is easy to repair a minor lacunae in Reynold's explain the same notions in the context of frame models.
original presentation [Rey83]. That version is expressed The usual way to read a type is as a set. The type
in terms of a \naive" set-theoretic model of the polymor- Bool corresponds to the set of booleans, and the type
phic lambda calculus; Reynolds later proved that such Int corresponds to the set of integers. If A and B are
models do not exist [Rey84]. There is nothing wrong types, then the type A B corresponds to a set of pairs
with the theorem or the proof itself, just the context drawn from A and B (the cartesian product), the type
in which it is set, and it is straightforward to transpose A corresponds to the set of lists with elements in A, and
it to another context. This paper uses the frame mod- the type A ! B corresponds to a set of functions from A
els of Bruce, Meyer, and Mitchell [BM84, MM85]. For to B . Further, if X is a type variable and A(X ) is a type
other models of the polymorphic lambda calculus, see depending on X , then the type 8X: A(X ) corresponds
[BTC88, Mes89, Pit87]. to a set of functions that take a set B and return an
The characterisation of parametricity given in this pa- element in A(B ).
per can be formulated more concisely in terms of cat- An alternative is to read a type as a relation. If A
egory theory, where it can be re-expressed in terms of and A0 are sets, we write A : A , A0 to indicate that
lax natural transformations. This will be the subject of A is a relation between A and A0 , that is, that A
a further paper. A A0. If x 2 A and x 0 2 A0, we write (x ; x 0 ) 2 A
The remainder of this paper is organised as follows. to indicate that x and x 0 are related by A. A special
Sections 2 and 3 present the main new results: Section 2 case of a relation is the identity relation IA : A , A,
dened by IA = f(x ; x ) j x 2 Ag. In other words, if
2 This is similar to the restriction to strict coercion functions
x ; x 0 2 A, then (x ; x 0 ) 2 IA i x = x 0 . More generally,
in [BCGS89], and is adopted for a similar reason. any function a : A ! A0 may also be read as a relation
3 Since this paper was written, I have learned that Peter de-
Bruin has recently discovered similar applications [deB89], and f(x ; a x ) j x 2 Ag. In other words, if x 2 A and x 0 2 A0,
that John Reynolds already knew of the applicationin Section 3.8. then (x ; x 0 ) 2 a i a x = x 0 .
4
To read types as relations, we give a relational equiva- Proposition. (Parametricity.) If t is a
lent for constant types and for each of the type construc- closed term of type T , then (t ; t ) 2 T , where
tors A B , A , A ! B , and 8X: A(X ). Constant types, T is the relation corresponding to the type T .
such as Bool and Int , may simply be read as identity
relations, IBool : Bool , Bool and IInt : Int , Int . A more formal statement of this result appears in Sec-
For any relations A : A , A0 and B : B , B 0 , the tion 6, where it is extended to types and terms contain-
relation A B : (A B ) , (A0 B 0 ) is dened by ing free variables.
((x ; y ); (x 0; y 0)) 2 A B
i 3 Parametricity applied
(x ; x 0 ) 2 A and (y ; y 0) 2 B:
This section rst explains in detail how parametricity
That is, pairs are related if their corresponding com- implies some of the theorems listed in the introduction
ponents are related. In the special case where a and and then presents some more general results.
b are function, then a b is the function dened by
(a b ) (x ; y ) = (a x ; b y ). 3.1 Rearrangements
For any relation A : A , A0, the relation A : A ,
0
A is dened by The result in the introduction is a simple consequence
of parametricity. Let r be a closed term of type
([x1 ; : : :; xn ]; [x10 ; : : :; xn0 ]) 2 A
i r : 8X: X ! X :
(x1 ; x10 ) 2 a and : : : and (xn ; xn0 ) 2 A:
Parametricity ensures that
That is, lists are related if they have the same length
and corresponding elements are related. In the special (r ; r ) 2 8X: X ! X :
case where a is a function, a is the familiar \map"
function dened by a [x1 ; : : :; xn ] = [a x1 ; : : :; a xn ]. By the denition of 8 on relations, this is equivalent to
For any relations A : A , A0 and B : B , B 0 , the
relation A ! B : (A ! B ) , (A0 ! B 0 ) is dened by for all A : A , A0;
(rA ; rA0 ) 2 A ! A
(f ; f 0) 2 A ! B
i By the denition of ! on relations, this in turn is equiv-
for all (x ; x 0 ) 2 A; (f x ; f 0 x 0 ) 2 B: alent to
for all A : A , A0 ;
That is, functions are related if they take related argu- for all (xs ; xs 0 ) 2 A ;
ments into related results. In the special case where a (rA xs ; rA0 xs 0 ) 2 A
and b are functions, the relation a ! b will not neces- This can be further expanded in terms of the denition
sarily be a function, but in this case (f ; f 0 ) 2 a ! b is of A . A more convenient version can be derived by
equivalent to f 0 a = b f . specialising to the case where the relation A is a function
Finally, we have to interpret 8 as an operation on re- a : A ! A0. The above then becomes
lations. Let F (X ) be a relation depending on X . Then
F corresponds to a function from relations to relations, for all a : A ! A0;
such that for every relation A : A , A0 there is a cor- for all xs ;
responding relation F (A) : F (A) , F 0(A0 ). Then the a xs = xs 0 implies a (rA xs ) = rA0 xs 0
relation 8X: F (X ) : 8X: F (X ) , 8X 0: F 0 (X 0) is dened
by or, equivalently,
(g ; g 0) 2 8X: F (X )
i for all a : A ! A0;
for all A : A , A0; (gA ; gA0 0 ) 2 F (A): a rA = rA0 a :
That is, polymorphic functions are related if they take This is the version given in the introduction.
related types into related results. (Note the similarities
in the denitions of A ! B and 8X: F (X ).)
Using the denitions above, any closed type T (one 3.2 Fold
containing no free variables) can be read as a relation The function fold has the type
T : T , T . The main result of this paper can now be
described as follows: fold : 8X: 8Y: (X ! Y ! Y ) ! Y ! X ! Y :
5
Parametricity implies that The function sort takes an ordering function and a list
and returns the list sorted in ascending order, and the
(fold ; fold ) 2 8X: 8Y: (X ! Y ! Y ) ! Y ! X ! Y : function nub takes an equality predicate and a list and
returns the list with adjacent duplicates removed.
Let a : A ! A0 and b : B ! B 0 be two functions. Ap- Applying parametricity to the type of s yields, for all
plying the denition of 8 on relations, twice, specialised a : A ! A0 ,
to functions, gives
if for all x ; y 2 A; (x y ) = (a x 0 a y ) then
(foldAB ; foldA0 B 0 ) 2 (a ! b ! b ) ! b ! a ! b a sA () = sA0 (0 ) a
Applying the denition of ! on relations, twice, gives (Recall that Bool as a relation is just the identity rela-
for all (; 0 ) 2 (a ! b ! b ); tion of booleans.) As a corollary, we have
for all (u ; u 0 ) 2 b ; if for all x ; y 2 A; (x < y ) = (a x <0 a y ) then
(foldAB () u ; foldA0 B 0 (0 ) u 0 ) 2 a ! b : sortA0 (<) a = a sortA (<0 )
Here () is just the name of a function of two argu- so maps commute with sort , when the function mapped
ments; by the usual convention, () x y may be written preserves ordering. (If < and <0 are linear orderings,
in the inx form x y . Further expansion shows that then the hypothesis is equivalent to requiring that a is
the condition (; 0) 2 (a ! b ! b ) is equivalent to monotonic.) As a second corollary, we have
for all x 2 A; x 0 2 A0; y 2 B ; y 0 2 B 0 ; if for all x ; y 2 A; (x y ) = (a x 0 a y ) then
a x = x 0 and b y = y 0 implies b (x y ) = x 0 0 y 0: nubA0 () a = a nubA (0 )
The result as a whole may then be rephrased, so maps commute with nub , when the function mapped
preserves equivalence. (If and 0 are equality on A
for all a : A ! A0 ; b : B ! B 0 ; and A0, then the hypothesis is equivalent to requiring
if for all x 2 A; y 2 B ; b (x y ) = (a x ) 0 (b y ); that a is one-to-one.)
and b u = u 0
then b foldAB () u = foldA0 B 0 (0 ) u 0 a : 3.4 Polymorphic equality
The theorems derived from types can often be given a The programming language Miranda [Tur85] provides a
reading with an algebraic
avour, and the result about polymorphic equality function, with type
fold provides an illustration of this. Let (A; B ; ; u )
and (A0 ; B 0; 0; u 0 ) be two algebraic structures. The (=) : 8X: X ! X ! Bool :
functions a and b form a homomorphism between
these if b (x y ) = (a x ) 0 (b y ) for all x and y , Applying parametricity to the type of (=) yields, for all
and if b u = u 0 . Similarly, let (A ; B ; foldAB () u ) a : A ! A0 ,
and (A0; B 0 ; foldA0B 0 (0 ) u 0 ) also be two algebraic
structures. The functions a and b form a homo- for all x ; y 2 A; (x =A y ) = (a x =A0 a y ):
morphism between these if b (foldAB () u xs ) = This is obviously false; it does not hold for all a , but
foldA0 B 0 (0 ) u 0 (a xs ). The result about fold only for functions a that are one-to-one.
states that if a and b form a homomorphism between This is not a contradiction to the parametricity theo-
(A; B ; c ; n ) and (A0 ; B 0; c 0 ; n 0), then a and b form rem; rather, it provides a proof that polymorphic equal-
a homomorphism between (A ; B ; foldAB () u ) and ity cannot be dened in the pure polymorphic lambda
(A0 ; B 0; foldA0 B 0 (0 ) u 0 ). calculus. Polymorphic equality can be added as a con-
stant, but then parametricity will not hold (for terms
3.3 Sorting containing the constant).
Let s be a closed term of the type This suggests that we need some way to tame the
power of the polymorphic equality operator. Exactly
s : 8X :(X ! X ! Bool) ! (X ! X ) such taming is provided by the eqtype variables of Stan-
dard ML [Mil87], or more generally by the type classes
Functions of this type include sort and nub : of Haskell [HW88, WB89]. In these languages, we can
think of polymorphic equality as having the type
sortInt (<Int )[3 ; 1 ; 4 ; 2 ; 5 ] = [1 ; 2 ; 3 ; 4 ; 5 ]
nubInt (=Int )[1 ; 1 ; 2 ; 2 ; 2 ; 1 ] = [1 ; 2 ; 1 ] (=) : 8(=) X : X ! X ! Bool :
6
Here 8(=) X : F (X ) is a new type former, where X ranges The proof is simple. As we have already seen, the
only over types for which equality is dened. Corre- parametricity condition for m is that
sponding to the type constructor 8(=) is a new relation
constructor: if f 0 a = b f then mA0 B 0 (f 0) a = b mAB (f )
(g ; g 0) 2 8(=) X : F (X ) Taking A0 = B 0 = B , b = f 0 = IB , a = f satises the
i hypotheses, giving as the conclusion
for all A : A , A0 respecting (=); (gA ; gA0 0 ) 2 F (A):
mBB (IB ) f = (IB ) mAB (f )
A relation A : A , A0 respects (=) if A relates equals
to equals; that is, if whenever x =A y and (x ; x 0) 2 A which gives us the second equality above, since (IB ) =
and (y ; y 0) 2 A then x 0 =A0 y 0 , where (=A ) is equality IB . The rst equality may be derived by commuting
on A and (=A0 ) is equality on A0 . In the case where A the permuting function with map; or may be derived
is a function a , this is equivalent to requiring that a be directly by a dierent substitution.
one-to-one.
With this denition, we can prove that the polymor- 3.6 A result about fold
phic equality operator, typed as above, satises the Analogous to the previous result about map is a similar
parametricity theorem. In our extended language we result about fold . Let f be a function with the type
can dene, for example, the function
nub : 8(=) X : X ! X f : 8X :8Y :(X ! Y ! Y ) ! Y ! X ! Y
7
See [BW88] for the denitions of these functions. we will abbreviate as A~ . The apparent isomorphism
For every such f we can dene a corresponding func- between A and A~ is expressed by the functions:
tion of type
i : A!A ~
g : 8X :(X Bool ) ! X i = x : A: X: g : A ! X: g x
such that f and g are related by the equation j : A~ ! A
~: hA (x : A: x )
j = h : A
fA (p ) = gA hIA ; p i ()
That is, i takes an element x of A to the element of A~
where hIA ; p i x = (x ; p x ). That is, fA is passed a pred- that maps a function g (of type A ! X ) to the value
icate p of type A ! Bool and a list of A, whereas gA is g x (of type X ). The inverse function j recovers the
passed a list of A Bool pairs, the second component original element by applying a value in A~ to the identity
of the pair being the result of applying p to the rst function.
component. Intuitively, this transformation is possible To prove that this truly is an isomorphism, we must
because the only values that p can be applied to are of verify that j i and i j are both identities. It is easy
type A, so it suces to pair each value of type A with enough to verify the former:
the result of applying p to it.
A little thought shows that a suitable denition of g j (i x )
is = j (X: g : A ! X: g x )
gA = fst fABool (snd ) = (g : A ! A: g x ) (x : A: x )
We can use parametricity to show that f and g sat- = (x : A: x ) x
isfy (), for all functions f of the given type. The = x
parametricity conditions for f tells us that for any
a : A ! A0 and any p : A ! Bool and p 0 : A0 ! Bool However, the inverse identity is problematic. We can
we have get as far as
if p 0 a = IBool p then fA0 (p 0 ) a = a fA(p ) i (j h )
= i (hA (x : A: x ))
Take A0 = A Bool and a = hIA ; p i and p 0 = snd . = X: g : A ! X: g (hA (x : A: x ))
Then the hypothesis becomes snd hIA ; p i = p , which
is satised, yielding the conclusion and now we are stuck. Here is where parametricity
helps. The parametricity condition for h : 8X: (A !
fABool (snd ) hIA ; p i = hIA ; p i fA (p ): X ) ! X is that, for all b : B ! B 0 and all f : A ! B ,
Compose both sides with fst , giving b (hB f ) = hB 0 (b f )
fst fABool (snd ) hIA ; p i = fst hIA ; p i fA (p ): Taking B = A, B 0 = X , b = g , and f = (x : A: x )
Then apply the denition of g , and observe that fst gives
hIA ; p i = IA , resulting in the equation
X: g : A ! X: g (hA (x : A: x ))
gA hIA ; p i = fA (p ) = X: g : A ! X: hX (g (x : A: x ))
= X: g : A ! X: hX g
as desired. = h
8
X ; x ; x : T ` x : T
!I X ; xX`; x;xx :: UU: v` :vU: V! V
!E X ; x ` t :XU; x!`Vt u :XV; x ` u : U
`t :T
8I X ; X ; Xx ;`xX: t : 8X: T
8E X X; x; x` `tUt :: T8X[U: T=X ]
4 Polymorphic lambda calculus Two terms are equivalent if one can be derived from
the other by renaming bound individual or type vari-
We now turn to a more formal development of the ables ( conversion). In addition, we have the familiar
parametricity theorem. We begin with a quick review reduction rules:
of the polymorphic lambda calculus.
We will use X ; Y ; Z to range over type variables, and ( ) (x : U: t ) u ) t [u =x ]
T ; U ; V to range over types. Types are formed from (X: t )U ) t [U =X ]
type variables, function types, and type abstraction: () x : U: t x ) t
X: tX ) t
T ::= X j T ! U j 8X: T
where in the rules x and X do not occur free in t .
We will use x ; y ; z to range over individual variables, As is well known, familiar types such as booleans,
and t ; u ; v to range over terms. Terms are formed from pairs, lists, and natural numbers can be dened as types
individual variables, abstraction and application of in- constructed from just ! and 8; see for example [Rey85]
dividuals, and abstraction and application of types: or [GLT89]. Alternatively, we could add suitable types
and individual constants to the pure language described
t ::= x j x : U: t j t u j X: t j tU above.
We write T [U =X ] to denote substitution of U for the
free occurrences of X in T , and t [u =x ] and t [U =X ] sim-
ilarly.
5 Semantics of polymorphic
A term is legal only if it is well typed. Typings are lambda calculus
expressed as assertions of the form
We will give a semantics using a version of the frame
X ; x ` t : T semantics outlined in [BM84] and [MM85]. We rst
discuss the semantics of types, and then discuss the se-
where X is a list of distinct type variables X1 ; : : :; Xm , mantics of terms.
and x is a list of distinct individual variables, with types,
x1 : T1 ; : : :; xn : Tn . This assertion may be read as
stating that t has type T in a context where each xi
5.1 Types
has type Ti . Each individual variable that appears free A type model consists of a universe U of type values,
in t should appear in x , and each type variable that and two operations, ! and 8 that construct types from
appears free in T of x should appear in X . The type other types. There is a distinguished set [U ! U] of
inference rules are shown in Figure 2. functions from U to U. If A and B are in U, then
9
A ! B must be in U, and if F is in [U ! U], then 8F
must be in U. [ x ] A a = a [ x ]
Let T be a type with its free variables in X . We say [ x : U: v ] A a = (a: [ v ] A a [a =x ])
that A is a type environment for X if it maps each type [ t u ] A a = a ) ([[u ] A a )
([[t ] A
variable in X into a type value in U. The corresponding [ X: v ] A a = (A: [ v ] A [A=X ] a)
value of T in the environment A is written [ T ] A and is [ tU ] A a = ([[t ] A a ) ([[U ] A )
dened as follows:
10
then we dene As mentioned previously, data types such as booleans,
pairs, lists, and natural numbers can be dened in terms
A ! B : (A ! B ) , (A0 ! B 0 ) of ! and 8.
As an example, consider the construction for pairs.
to be the relation The type X Y is dened as an abbreviation:
A ! B = f (f ; f 0) j (a ; a 0 ) 2 A implies X Y def
= 8Z: (X ! Y ! Z ) ! Z
( f a ; f 0 a 0 ) 2 B g
Every term of type X Y is equivalent to a term of the
In other words, functions are related if they map related form pairXY x y , where x : X and y : Y , and pair is
arguments into related results. dened by
A type abstraction may be regarded as a relation as
follows. Let F be a function from U to U, and F 0 be a = X: Y: x : X: y : Y:
pair def
function from U0 to U0, and for each A in U and A0 in Z: p : X ! Y ! Z: p x y
U0, let F be a function that takes a relation A : A , A0
and returns a relation F (A) : F (A) , F 0(A0 ). Then we The type of pair is, of course,
dene
8F : 8F , 8F 0 pair : 8X: 8Y: X ! Y ! X Y
to be the relation where X Y stands for the abbreviation above. It
follows from the parametricity theorem that if A : A !
8F = f (g ; g 0) j for all A, A0, and A : A , A0 , A0 and B : B ! B 0 , and (a ; a 0 ) 2 A and (b ; b 0) 2 B,
( (g )(A); (g 0 )(A0 )) 2 F (A) g then
In other words, type abstractions are related if they map ( [ pairXY x y ] [A=X ; B =Y ] [a =x ; b =y ];
related types into related results. [ pairXY x y ] [A0=X ; B 0=Y ] [a 0=x ; b 0=y ] )
A relation environment maps each type variable into 2 [ X Y ] [A=X ; B=Y ]:
a relation. Let A be a relation environment for X , and
let A ; A 0 be two type environments for X . We write That is, pairs are related if their corresponding compo-
A : A , A 0 if for each X in X we have A[ X ] : A [ X ] , nents are related, as we would expect.
A 0 [ X ] . It can be shown similarly, using the standard con-
Given a relation environment A we can interpret a struction for lists, that lists are related if they have the
type T as a relation [ T ] A as follows: same length and corresponding elements are related.
Alternatively, suitable type constructors and individ-
ual constants may be added to the pure polymorphic
lambda calculus. In this case, for each new type con-
[ X ] A = A[ X ] structor an appropriate corresponding relation must be
[ U ! V ] A = [ U ] A ! [ V ] A
dened; suitable denitions of relations for pair and list
[ 8X: V ] A = 8(A: [ V ] A[A=X ]) types were given in Section 2. Further, for each new
constant the parametricity condition must be veried:
if c is a constant of type T , we must check that j= c : T
Let A ; a respect X ; x and A 0 ; a 0 respect X ; x . We holds. It then follows that parametricity holds for any
say that A; A ; A 0; a ; a 0 respect X ; x if A : A , A 0 and terms built from the new type constructors and con-
(a [ xi ] ; a 0[ xi ] ) 2 [ Ti ] A for each xi : Ti in x . It is easy to stants.
see that if A; A ; A 0; a ; a 0 respect X ; x then A ; a respect
X ; x and A 0; a 0 respect X ; x .
We say that X ; x j= t : T i for every A; A ; A 0; a ; a 0 7 Fixpoints
that respect X ; x we have ([[t ] A a ; [ t ] A 0a 0 ) 2 [ T ] A. Every term in typed lambda calculus is strongly nor-
Proposition. (Parametricity.) For all X , malising, so if a xpoint operator is desired it must be
x , t, and T , if X ; x ` t : T then X ; x j= t : T . added as a primitive. This section mentions the addi-
tional requirements necessary to ensure that the xpoint
Proof. The proof is a straightforward induction over primitive satises the abstraction theorem.
the structure of type inferences. For each of the infer- Frame models associate with each type A a set DA.
ence rules in Figure 2, we replace ` by j= and show that In order to discuss xpoints, we require that each set
the resulting inference is valid. (End of proof.) have sucient additional structure to be a domain: it
11
must be provided with an ordering v such that each The desire to derive theorems from types therefore
domain has a least element, ?, and such that limits of suggests that it would be valuable to explore program-
directed sets exist. Obviously, we also require that all ming languages that prohibit recursion, or allow only
functions are continuous. its restricted use. In theory, this is well understood; we
What are the requirements on relations? The obvious have already noted that any computable function that is
requirement is that they, too, be continuous. That is, provably total in second-order Peano arithmetic can be
if A : A , A0, and xi is a chain in A, and xi0 is a dened in the pure polymorphic lambda calculus, with-
chain in
F A0 ,Fand (xi ; xi0) 2 A for every i , then we require out using the xpoint as a primitive. However, practical
that ( xi ; xi0 ) 2 A also. But in addition to this, we languages based on this notion remain terra incognita.
need a second requirement, namely that each relation
A is strict, that is, that (?A ; ?A0 ) 2 A. If we restrict References
relations in this way, then it is no longer true that every
function a : A ! A0 may be treated as a relation; only [BCGS89] V. Breazu-Tannen, T. Coquand, C. A.
strict functions may be treated as such. Gunter, and A. Scedrov, Inheritance and ex-
With this restricted view of relations, it is easy to plicit coercion. In 4'th Annual Symposium on
show that the xpoint operator satises the parametric- Logic in Computer Science, Asilomar, Cali-
ity theorem. As usual, for each type A dene xA as the fornia, June 1989.
function
x : 8X: (X ! X ) ! X [BFSS87] E. S. Bainbridge, P. J. Freyd, A. Scedrov, and
F P. J. Scott, Functorial polymorphism. In G.
such that xA f = f i ?A . Parametricity holds if Huet, editor, Logical Foundations of Func-
(x ; x ) 2 8A: (A ! A) ! A. This will be true if tional Programming, Austin, Texas, 1987.
for each A : A , A0 and each (f ; f 0) 2 A ! A we Addison-Wesley, to appear.
have (xA f ; xA0 f 0) 2 A. Recall that the condition on
f and f 0 means that if (x ; x 0 ) 2 A then (f x ; f 0 x 0 ) 2 [BM84] K. B. Bruce and A. R. Meyer, The seman-
A. Now, since all relations are strict, it follows that tics of second-order polymorphic lambda cal-
(?A ; ?A0 ) 2 A; hence (f ?A; f 0 ?A0 ) 2 A; and, in gen- culus. In Kahn, MacQueen, and Plotkin,
eral, (f i ?A ; f 0 i ?A0 ) 2FA. It follows, since all relations editors, Semantics of Data Types, Sophia-
F 0 i
are continuous, that ( f ?A ; f ?A0 ) 2 A, as re-
i Antipolis, France, 1984, pp. 131{144. LNCS
quired. 173, Springer-Verlag.
Note that the restriction to strict relations here is [BTC88] V. Breazu-Tannen and T. Coquand, Exten-
similar to the restriction to strict coercion functions in sional models for polymorphism. Theoretical
[BCGS89], and is adopted for similar reasons. Computer Science, 59:85{114, 1988.
The requirement that relations are strict is essen- [BW86] G. Barrett and P. Wadler, Derivation of a
tial. For a counterexample, take A to be the domain pattern-matching compiler. Manuscript, Pro-
f?; true ; false g, and take A : A ! A to be the constant gramming Research Group, Oxford, 1986.
relation such that (x ; true ) 2 A for all x . The relation
A is continuous but not strict. Let f be the constant [BW88] R. Bird and P. Wadler, Introduction to Func-
function f x = false and let f 0 be the identity function tional Programming. Prentice Hall, 1988.
f 0 x = x . Then A ! A relates f to f 0 , but A does not
relate xA f = false to xA f 0 = ?. [DM82] L. Damas and R. Milner, Principal type
The restriction to strict arrows is not to be taken schemes for functional programs. In Pro-
lightly. For instance, given a function r of type ceedings of the 9'th Annual Symposium on
Principles of Programming Languages, Albu-
r : 8A:A ! A querque, N.M., January 1982.
[deB89] P. J. deBruin, Naturalness of polymorphism.
parametricity implies that Submitted to Category Theory and Computer
Science, Manchester, 1989.
rA0 a = a rA
[FGSS88] P. J. Freyd, J. Y. Girard, A. Scedrov, and P.
for all functions a : A ! A0 . If the xpoint combinator J. Scott, Semantic parametricity in polymor-
appears in the denition of r , then we can only conclude phic lambda calculus. In 3'rd Annual Sym-
that the above holds for strict a , which is a signicant posium on Logic in Computer Science, Edin-
restriction. burgh, Scotland, June 1988.
12
[FLO83] S. Fortune, D. Leivant, and M. O'Donnell, [Pit87] A. M. Pitts, Polymorphism is set theoretic,
The expressiveness of simple and second- constructively. In D. H. Pitt, et al., editors,
order type structures. Journal of the ACM, Category Theory and Computer Science, Ed-
30(1):151{185, January 1983. inburgh, 1987. LNCS 283, Springer-Verlag.
[Gir72] J.-Y. Girard, Interpretation functionelle et [Rey74] J. C. Reynolds, Towards a theory of type
elimination des coupures dans l'arithmetique structure. In B. Robinet, editor, Proc. Col-
d'ordre superieure. Ph.D. thesis, Universite loque sur la Programmation, LNCS 19,
Paris VII, 1972. Springer-Verlag.
[Gir86] J.-Y. Girard, The system F of variable types, [Rey83] J. C. Reynolds, Types, abstraction, and para-
fteen years later. Theoretical Computer Sci- metric polymorphism. In R. E. A. Mason, ed-
ence, 45, pp. 159{192. itor, Information Processing 83, pp. 513{523.
North-Holland, Amsterdam.
[GLT89] J.-Y. Girard, Y. Lafont, and P. Taylor,
Proofs and Types. Cambridge University [Rey84] J. C. Reynolds, Polymorphism is not set the-
Press, 1989. oretic. In Kahn, MacQueen, and Plotkin,
editors, Semantics of Data Types, Sophia-
[Hin69] R. Hindley, The principal type scheme of Antipolis, France, 1984, pp. 145{156. LNCS
an object in combinatory logic. Trans. Am. 173, Springer-Verlag.
Math. Soc. 146, pp. 29{60, December 1969.
[Rey85] J. C. Reynolds, Three approaches to type
[HW88] P. Hudak and P. Wadler, editors, Report structure. In Mathematical Foundations of
on the Functional Programming Language Software Development, LNCS 185, Springer-
Haskell. Technical Report YALEU/DCS/ Verlag, 1985.
RR656, Yale University, Department of Com- [She89] M. Sheeran, Categories for the working hard-
puter Science, December 1988; also Technical ware designer. In Workshop on Hardware
Report, Glasgow University, Department of Specication, Verication, and Synthesis:
Computer Science, December 1988. Mathematical Aspects, Cornell, July 1989.
[Mes89] J. Meseguer, Relating models of polymor- [Tur85] D. A. Turner, Miranda: A non-strict func-
phism. In 16'th ACM Symposium on Prin- tional language with polymorphic types. In
ciples of Programming Languages, Austin, Proceedings of the 2'nd International Confer-
Texas, January 1989. ence on Functional Programming Languages
[Mil78] R. Milner, A theory of type polymorphism in and Computer Architecture, Nancy, France,
programming. J. Comput. Syst. Sci. 17, pp. September 1985. LNCS 201, Springer-Verlag,
348{375, 1978. 1985.
[Mil84] R. Milner, A proposal for Standard ML. In [WB89] P. Wadler and S. Blott, How to make ad-
ACM Symposium on Lisp and Functional hoc polymorphism less ad hoc. In 16'th ACM
Programming, Austin, Texas, August 1984. Symposium on Principles of Programming
Languages, Austin, Texas, January 1989.
[Mil87] R. Milner, Changes to the Standard ML
core language. Report ECS-LFCS-87-33, Ed-
inburgh University, Computer Science Dept.,
1987.
[Mit86] J. C. Mitchell, Representation independence
and data abstraction. In 13'th ACM Sym-
posium on Principles of Programming Lan-
guages, pp. 263{276.
[MM85] J. C. Mitchell and A. R. Meyer, Second-order
logical relations. In R. Parikh, editor, Log-
ics of Programs, Brooklyn, New York, 1985.
LNCS 193, Springer-Verlag.
13