Types
Motivations
Spécier partiellement un programme Éviter de programmes absurdes (1 +true) Éviter la violation de la mémoire
Ne pas écrire un programme ayant des comportements indénis Ne pas mélanger ou confondre les valeurs (1 + 1.2)
Éviter la sémantique qui dépend du modèle de la machine
2
Plan
Types monomorphes À la Church À la Curry
Unication
Inférence de types Types polymorphes
À la Church
À la Curry (inférence de types) Types existentiels
3
Typage monomorphe à la Church
Typage monomorphe Types :
A::=T |A×A|A→A
Exemple :
int→bool bool×bool bool→(bool→int)
bool×(bool→int) (bool→bool)→int
5
Expressions à la Church
M ::= x |
cte |
hM, Mi |
M M |
λx:A.M |
letx:A=M inM
6
Quelques exemples
letx:int= 3inx+ 1
letx:int= (if truethen1else2)inx+ 1
letx:int= 4in(lety :int=x+ 1inx∗y)
letf :int→int= (λx:int.x+ 1)inf (f x)
f ix(λf act:int→int.λx :int.if xthen1else(x∗f act(x−1))
7
Règles de réduction
(λx:A.M)N ⇒ M{x/N}
letx:A=N inM ⇒ M{x/N}
f ix M ⇒ M (f ix M)
f sthM, Ni ⇒ M
sndhM, Ni ⇒ N
if truethenM elseN ⇒ M if f alsethenM elseN ⇒ N if 0 thenM elseN ⇒ M
if nthenM elseN ⇒ N, n6= 0
8
Règles de typage monomorphe à la Church
Pour chaquecte il existe un type A, qu'on noteT C(cte) :A. Un environnement de typageΓ est un ensemble de la forme
x1:A1, . . . , xn:An. Dans ce cas on écrit Γ(xi)pour dénoter Ai. Γ`xi : Γ(xi) Γ`cte:T C(cte)
Γ`M :A→B Γ`N :A Γ`M N :B
Γ, x:A`M :B Γ`λx:A.M :A→B
Γ`M :A Γ`N :B Γ` hM, Ni:A×B
Γ` M :A Γ, x:A`N :B Γ`letx:A=M inN :B
9
Exemples de dérivations
x:int`+ :int×int→int
x:int`x:int x:int`1 :int x:int` hx,1i:int×int x:int`+hx,1i:int
∅ `λx:int.+hx,1i:int→int
Soit (∗) =f :int→int`f :int→int
(∗)
(∗) f :int→int`3 :int f :int→int`f 3 :int f :int→int`f (f 3) :int
10
∅ `λx:int.+hx,1i:int→int f :int→int`f (f 3) :int
∅ `letf :int→int= (λx:int.+hx,1i)inf (f 3) :int
11
Propriétés du typage
(Unicité) Si Γ` M :Aet Γ`M :B, alorsA≡B
(Aaiblissement) SoitΓ ={x:B|x∈F V(M)} et soitΓ⊆∆. Alors Γ`M :Assi ∆`M :A.
(Préservation) Si Γ`M :A etM ⇒M0, alorsΓ`M0:A
12
Algorithme de typage
T ype(Γ, cte) =T C(cte)
T ype(Γ, x) =A six:A∈Γ
T ype(Γ, λx:A.M) =A→B siT ype((Γ, x:A), M) =B T ype(Γ,hM, Ni) =A×B siT ype(Γ, M) =Aet
T ype(Γ, N) =B
T ype(Γ, M N) =B siT ype(Γ, M) =A→Bet
T ype(Γ, N) =A T ype(Γ,letx:A=M inN) =B siT ype(Γ, M) =Aet
T ype((Γ, x:A), N) =B
T ype(Γ, M) =erreur sinon
13
Propriétés de l'algorithme de typage
(Terminaison) Pour tout termeM et tout environnementΓ, l'appel T ype(Γ, M)termine.
(Correction) Si T ype(Γ, M) =A, alorsΓ`M :A. (Complétude) Si Γ`M :A, alorsT ype(Γ, M) =A.
Autrement dit,
Si T ype(Γ, M) =erreur, alorsM n'est pas typable dansΓ.
14