-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 ...