Précédent Index Suivant

2.4   Polymorphisme

Le système des types simples ne donne pas le vrai polymorphisme malgré son ensemble de variables de type. En effet le terme (l f.ff)(l x.x) n'est pas typable car la variable f prend deux valeurs : a®a et (a®a)®a®a. Ce qui est impossible car une variable ne possède qu'un seul type.

Pour cela on étend le système de type. Soit P un ensemble de variables de types, T l'ensemble des types simples construit à partir de T et S l'ensemble des schémas de types construit à partir de P et T.

On obtient ainsi de nouvelles règles de typage :



(Var)
(x1:s1),...,(xn:sn) |- xi:t [ti/ai] si="a1,...,an.t

(App)
C|- M:t®t C|- N:t C|- MN:t

(Abs)
(x:t),C|- M:t C|-l x.M:t®t

(Let)
C|- N:t a1,...,an=V(t)-V(C) (x:"a1,...,an.t) C|- M:t C|- let x = N in M:t
Ce qui nous permet de typer let f = l x.x in ff :

VAR f:"b.b®b |- f:(a®a)®a®a VAR f:"b.b®b|- f:a®a |- l x.x:b®b b=V(b®b)-V(Ø) f:"b.b®b|- ff:a®a |- let f = l x.x in f f:a®a


Précédent Index Suivant