Typage monomorphe Expressions à la Curry M ::= x Typage monomorphe à la Curry | cte | hM, M i | MM | λx.M | let x = M in M 2 Quelques exemples Règles du typage monomorphe à la Curry let x : int = 3 in x + 1 Γ ` x : Γ(x) s'écrit maintenant Γ ` cte : T C(cte) let x = 3 in x + 1 Γ`M :A→B Γ`N :A Γ`M N :B let x : int = 4 in (let y : int = x + 1 in x ∗ y)) Γ`M :A s'écrit maintenant Γ`N :B Γ ` hM, N i : A × B let x = 4 in (let y = x + 1 in x ∗ y)) 3 Γ, x : A ` M : B Γ ` λx.M : A → B Γ`M :A Γ, x : A ` N : B Γ ` let x = M in N : B 4 Propriétés ? L'unicité n'est plus vraie : ` λx.x : int → int Vers un algorithme de typage ` λx.x : bool → bool Mais les deux fonctions sont une instance d'une même fonction identité qui se comporte de la même façon : Polymorphisme Les substitutions Les unicateurs d'un système d'équations Algorithme d'unication d'un système d'équations La construction d'un système d'équations à partir d'un terme Algorithme de typage d'un terme à l'aide de l'unication 5 Types à la Curry : dicultés de l'algorithme de typage T ype(Γ, λx.M ) = A → B 6 Vers un algorithme de typage s'il existe A t.q. Soit M un terme à typer. Pour chaque variable x de M on introduit une variable de type αx et pour chaque sous-expression N de M on introduit une variable de type αN . On introduit un tableau de schémas de types pour les constantes, appelé ST C . Ainsi par exemple ST C(f st) = α × β → α. T ype((Γ, x : A), M ) = B T ype(Γ, let x = M in N ) = B s'il existe A t.q. T ype(Γ, M ) = A et T ype((Γ, x : A), N ) = B 7 8 On associe à M un système d'équations SE(M ) comme suit : Correction et complétude de l'algorithme de typage M SE(M ) . x {αM = αx } . cte {αM = ST C(cte)} . hN, Li {αM = αN × αL } ∪ SE(N ) ∪ SE(L) . NL {αN = αL → αM } ∪ SE(N ) ∪ SE(L) . λx.N {αM = αx → αN } ∪ SE(N ) let x = N in L {αM =. αL ; αx =. αN } ∪ SE(N ) ∪ SE(L) Théorème : (Correction) Si σ est une solution de SE(M ), alors ∆ ` M : τ (αM ), où ∆ = {x : τ (αx ) | x ∈ F V (M )} et τ est une instance de σ . Théorème : (Complétude) S'il existent ∆ et A t.q. ∆ ` M : A, alors SE(M ) admet une solution. 9 Principalité de l'algorithme de typage Théorème : (Principalité) Si M est typable, i.e., ∆ ` M : A, alors A est une instance du type principal σ(αM ), où σ est une solution principale du système SE(M ). 11 10