cours sur les inférence de type
42 pages
Français

cours sur les inférence de type

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
42 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

-1-INF 554 Luc MarangetInf´erence de typeLuc.Maranget@inria.frhttp://www.enseignement.polytechnique.fr/profs/informatique/Luc.Maranget/TLP/-2-A Typage implicite.B Inf´erence de type.C Unification.-3-Types implicitesIl est tr`es p´enible de devoir ´ecrireFun (x:Nat) -> x+1 Fun (x:Nat) -> Fun (y:Nat) -> x+yAlors que les types sont ici « ´evidents ». Si on ´ecritFun x -> x+1 Fun x -> Fun y -> x+yIl est clair que l’on peut facilement deviner que x et y doivent ˆetrede type Nat.On peut ensuite v´erifier le typage comme il y a quinze jours.-4-Typage implicite (`a la Curry)On pr´ef`ere deviner et v´erifier en mˆeme temps.Les r`egles,E⊕[x :A]⊢t :B E⊕[x :A]⊢t :AE ⊢ (Fun (x :A) -> t) :A -> B E ⊢ (Fix (x :A) -> t) :AdeviennentE⊕[x :A]⊢t :B E⊕[x :A]⊢t :AE ⊢ (Fun x -> t) :A -> B E ⊢ (Fix x -> t) :AEt c’est tout !-5-Pour ˆetre completVoici les autres r`egles qui ne changent pas.E(x) =A E ⊢t :Nat E ⊢t :Nat1 2E ⊢ n :NatE ⊢x :A E ⊢t op t :Nat1 2E ⊢t :Nat E ⊢t :A E ⊢t :A1 2 3E ⊢Ifz t Then t Else t :A1 2 3E ⊢t :A -> B E ⊢t :A1 2E ⊢t t :B1 2E ⊢t :A E⊕[x :A]⊢t :B1 2E ⊢Let x = t In t :B1 2En effet, il n’y a rien a` deviner ici (cf. le Let).6-6-Une vraie relationContrairement au typage explicite (a` la Church).On peut avoir E ⊢t :A et E ⊢t :A pour A =A .1 2 1 2Par ex.[x :Nat]⊢ x :Nat⊢ (Fun x -> x) :Nat -> NatEt[x :Nat -> Nat]⊢ x :Nat -> Nat⊢ (Fun x -> x) : (Nat -> Nat) -> Nat -> NatEt `a vrai dire, pour tout type A, on a facilement[x ...

Informations

Publié par
Nombre de lectures 16
Langue Français

Extrait

-1-
INF
554
Infe´rence
de
Luc Maranget
type
Luc.Maranget@inria.fr http://www.enseignement.polytechnique.fr/profs/ informatique/Luc.Maranget/TLP/
-2-
A
B
C
Typage
implicite.
Inf´erence
de
Unification.
type.
-3-
Types implicites
Ilesttre`spe´niblededevoire´crire
Fun(x:Nat) -> x+1Fun(x:Nat) ->Fun(y:Nat) -> x+y
Alors que les types sont ici«snt´edevi»io.S´nceirt
Funx -> x+1Funx ->Funy -> x+y
Il est clair que l’on peut facilement deviner quexetyodvietreentˆ de typeNat.
Onpeutensuiteve´rierletypagecommeilyaquinzejours.
-4-
Typageimplicite(`alaCurry)
Onpr´ef`eredevineretve´rierenmeˆmetemps.
Lesr`egles,
E[x:A]t:B E(Fun(x:A)->t) :A->B
deviennent
E[x:A]t:B E(Funx->t) :A->B
Et c’est tout !
E[x:A]t:A E(Fix(x:A)->t) :A
E[x:A]t:A E(Fixx->t) :A
-5-
P ˆtre complet our e
Voicilesautresre`glesquinechangentpas.
E(x) =A Et1:NatEt2:Nat En:Nat Ex:A Et1opt2:Nat
Et1:NatEt2:A Et3:A EIfzt1Thent2Elset3:A
Et1:A->B Et2:A Et1t2:B
Et1:A E[x:A]t2:B ELetx=t1Int2:B
Eneet,ilnyariena`devinerici(cf.leLet).
-6-
Une vraie relation
Contrairementautypageexplicite(`alaChurch).
On peut avoirEt:A1etEt:A2pourA16=A2.
Par ex.
Et
[x:Nat]x:Nat (Funx -> x) :Nat->Nat
[x:Nat->Nat]x:Nat->Nat (Funx -> x) : (Nat->Nat)->Nat->Nat
Et`avraidire,pourtouttypeA, on a facilement
[x:A]x:A (Funx -> x) :A->A
-7-
Exemple
Funx -> x+1est bien de typeNat->Nat.
[x:Nat]x:Nat[x:Nat]1:Nat
[x:Nat]x+1:Nat
(Funx -> x+1) :Nat->Nat
ehcnOonafrlpety`aherc.ntcoi
On devine le bon type pourx(Nat).
pyreOnche`aterchx+1.
On type les arguments de l’addition.
ire´vnOeladdition.
construit le type de la fonction.On
Maisilyaencoreunee´tapemagique:deviner[x:
Nat].
-8-
Variable de type
Funx -> x+1est de type ?X ->Nat, avec
Nat, avec [X=Nat].
[x:X]x:X[x:X]1:Nat
[x:X]x+1:Nat[X=Nat]
(Funx -> x+1) :X ->Nat[X=Nat]
no.alofcnite`atyperOncherch
On pose que le type dexestX
n.itioaddperlehcryta`Oehcn
Premier argument, second argument.
Pour typer d’addition il faut [X=Nat].
On type la fonction.
-9-
Id´eeg´en´eraledelinference(synthe`se)detype ´
roPrea`´cdeasdinusericev´en,enatio
Introduisant des variables,
E[x:X]t:A
E(Funx->t) :X->A
edtnasoptEons.s´equati
Et1:A1Et2:A2 Et1+t2:Nat[A1=Nat A2=Nat]
` nalano,Aoitauqe´.snriabesvatdesleseepocnuytnadttnne
-10-
Retoursurlav´erication
Lestypessontdoncchang´es,ilspeuventcontenirdesvariables.
Nat∈ T
X∈ T
Avec les nouveaux types on a :
[x:X]x:X
A1∈ TA2∈ T A1->A2∈ T
(Funx -> x) :X -> X
Quelsensdonner`aunteltype?
id:X -> Xveut dire queid:A->Apour tout typeA.
Eteneetonpeutdonnerlestypessuivants`aFunx -> x.
Nat->Nat, (Nat->Nat)->Nat->Nat, etc.
Et meme (Y -> Z)-> Y -> Z, mais pasY ->Nat. ˆ
Etˆeme(Y -> Z)-> Y -> Z, mais pasY -> m
-11-
S´emantique:
Variables dans les types
SiXatıˆarappnsdaA, type det, alors [X7→B]Aest aussi un type detpour tout typeB.
Note :[X7→B] est une nouvelle notation pour la substitution, cettefoisapplique´eauxtypes.
Rappels/Remarques.
Substitution : fonction des variables dans les termes.
esrmteux:´,tnemelaeudneteicaFσ(A->B) =σ(A)->σ(B).
Substitutions de support fini{X|σ(X)6=X}.
Pdeasobpreml`seedactpruieic.
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents