• Aucun résultat trouvé

R´esolution des contraintes atomiques

10.2 R´esolution des contraintes

10.2.4 R´esolution des contraintes atomiques

Associ´e aux r´esultats pr´ec´edents (th´eor`emes10.15, 10.17et 10.29), cet ´enonc´e montre que les proc´edures d’unification, puis d’expansion et de d´ecomposition permettent de ramener la satisfia-bilit´e d’une contrainte arbitraire `a celle d’une contrainte atomique. En d’autres termes, il me suffit maintenant de donner un algorithme d´ecidant la satisfiabilit´e des contraintes atomiques, ce que je fais dans la prochaine sous-section.

10.2.4 R´esolution des contraintes atomiques

La r´esolution des contraintes atomiques est un probl`eme bien connu : en 1992, Tiuryn [Tiu92] a propos´e un algorithme lin´eaire pour d´eterminer la satisfiabilit´e d’in´egalit´es dans le cas relativement g´en´eral o`u l’ensemble des atomes forme une union disjointe de treillis, comme l’ensemble des types brutsT. La proc´edure que je pr´esente ici en est directement d´eriv´ee ; elle est cependant l´eg`erement

´etendue de mani`ere `a traiter les gardes en plus des in´egalit´es.

Consid´erons une contrainte atomiqueI. Sa satisfiabilit´e peut ˆetre d´etermin´ee en consid´erant le graphe d´efini sur les variables de type par les in´egalit´es et les gardes, en v´erifiant que tout chemin dans ce graphe entre deux (variables unifi´ees `a des) constantes atomiques est valide pour l’ordre du treillis atomique≤L. Rappelons que toutes les variables d’une contrainte atomique ne sont pas n´ecessairement de sorteAtom: les chemins qui peuvent comporter des arcs≤etlsont formalis´es par les r`egles de la figure 10.5. Elles d´efinissent des jugements α ≤β ∈ I et αlβ ∈ I, dont l’interpr´etation s´emantique est donn´ee par le lemme suivant.

Lemme 10.32 SoitI une contrainte atomique. Si α≤β∈ I alors Iα≤β. Siαlβ ∈I alors

I αlβ.

p Preuve. Par induction sur la d´erivation du jugement donn´e en hypoth`ese. y Th´eor`eme 10.33 Soit I une contrainte atomique, unifi´ee et bien marqu´ee. I est satisfiable si et seulement si, pour tous atomes`1et`2et toutes variables α1 etα2 de sorteAtom, siα1=`1∈I,

α2=`2∈I etα1≤α2I alors `1L`2.

p Preuve. Soit I une contrainte atomique et unifi´ee. On veut montrer l’´equivalence entre les propri´et´esI est satisfiable(P1)et pour tous atomes`1 et`2 et toutes variablesα1 etα2de sorte Atom, si α1=`1∈I,α2=`2∈I etα1≤α2∈I alors`1L`2(P2).

Supposons tout d’abord la propri´et´e (P1) v´erifi´ee : soitϕ une solution deI (1). Soient`1, `2

deux atomes, et α1, α2 deux variables de sorteAtom tels que α1 =`1 ∈I (2),α2 =`2 ∈ I (3)

10.2·R´esolution des contraintes 193

et α1 ≤α2 I (4). Grˆace `a l’hypoth`ese (1), (4) implique, par le lemme 10.32,ϕ(α1) ≤ϕ(α2) (5); et (2) et (3) donnent respectivementϕ(α1) =`1etϕ(α2) =`2. On en d´eduit`1≤`2(6). En d´echargeant les hypoth`eses (2), (3) et (4) sur (6), on obtient (P2).

Inversement, supposons maintenant queI v´erifie la propri´et´e (P2). ´Etant donn´ee une variable de typeα, je d´efinis sa borne inf´erieure dansI (not´ee : lbI(α)) par :

lbsI(α) = {`| ∃β β=`∈I et (β ≤α∈I ouβlα∈I)} lbI(α) = tlbsI(α)

Montrons tout d’abord que si α ≤ α0 I ou αlα0 I alors lbI(α) ≤lbI0) (P3). Soient α et α0 deux variables telles que α≤ α0 I (7) ou αlα0 I (8). Soit ` ∈ lbsI(α) (9); il existe β telle que β = ` ∈ I (10)et soit β ≤ α ∈ I (11)soit βlα ∈ I (12). En utilisant l’une des r`eglesatm-leq,atm-gd,atm-leq-gdouatm-gd-leq, on d´eduit de (7) ou (8) et (11) ou (12)β ≤α0 I ouβ lα0 I. Grˆace `a (10), `∈ lbsI0) s’ensuit. En d´echargeant (9), on en d´eduit que lbsI(α)⊆lbsI0), puis lbI(α)≤lbI0). En d´echargeant (7) ou (8), on obtient la propri´et´e (P3).

Je d´efinis l’affectationϕI comme suit : siαest une variable de sorteκalorsϕI(α) = Λκ(lbI(α)) (propri´et´e 10.3, page 173). Pour conclure, il me suffit de montrer que ϕI est une solution de I.

Puisque cette contrainte est atomique, il me suffit de v´erifier les propri´et´es suivantes :

◦ Si α≤ α0 ∈ I alors ϕI(α)≤ ϕI0) (P4). Consid´erons deux variables α et α0 de sorte κ, telles queα≤α0 ∈ I (1). Par atm-leq, on aα≤α0 I. En utilisant (P3), on en d´eduit que lbI(α) ≤lbI0). Grˆace `a la propri´et´e10.3(page 173), on en conclut Λκ(lbI(α)) ≤Λκ(lbI0)), i.e.ϕI(α)≤ϕI0).

◦ Si αlα0 ∈ I alors ϕI(α) ≤ ϕI0) (P5). Consid´erons deux variables α et α0 de sortes respectivesκet κ0, telles queαlα0 ∈I (1). Paratm-gd, on aαlα0I. En utilisant (P3), on en d´eduit que lbI(α)≤lbI0). Grˆace `a la propri´et´e10.3(page173), on en conclut que Λκ(lbI(α))l Λκ0(lbI0)),i.e.ϕI(α)lϕI0).

◦ Si α= α0 ∈ I alors ϕI(α) = ϕI0) (P6). Consid´erons deux variables α et α0 de sorte κ, telles que α=α0 ∈ I. Par atm-eq, on a α≤ α0 I et α0 ≤α∈ I. En utilisant (P3), on en d´eduit que lbI(α) = lbI0), ce qui donne Λκ(lbI(α)) = Λκ(lbI0)), puisϕI(α) =ϕI0).

◦ Si α = ` ∈ I alors ϕI(α) = ` (P7). Consid´erons une variable α de sorte Atom, telle que α=`∈I (1). Puisque I est bien marqu´ee, on a α=α∈I donc, paratm-eq,α≤α∈ I (2).

On d´eduit de (1) et (2) que`∈lbsI(α), et donc que`≤lbI(α)(3). Inversement, soit`0∈lbsI(α) (4). Il existe une variableβ de sorteAtomtelle queβ =`0∈I (5)etβ≤α∈I (6)ouβlα∈I (7). Puisque α et β sont de sortes Atom, par atm-atom-gd, (7) implique (6). En appliquant l’hypoth`ese (P2) `a (5), (6) et (1), on obtient`0L `. En d´echargeant l’hypoth`ese (4), on conclut que ∀`0 ∈ lbsI(α) `0 ≤ `, d’o`u lbI(α) ≤ ` (8). En combinant (3) et (8), on obtient finalement lbI(α) =`, c’est-`a-dire, puisqueαest de sorteAtom,ϕI(α) =`. y La d´emonstration de ce th´eor`eme permet d’obtenir un algorithme pour d´eterminer la satisfia-bilit´e d’une contrainte atomique, en temps lin´eaire vis `a vis sa taille. Il suffit pour cela de faire deux observations `a propos de la solutionϕI construite pour la preuve. Tout d’abord, puisque nous avons montr´e que siI v´erifie l’hypoth`ese (P2) alors ϕI est une solution deI, il est imm´ediat que la contrainteI est satisfiablesi et seulement si elle est satisfaite parϕI,i.e. si et seulement siϕI

v´erifie les propri´et´es (P4) `a (P7). De plus, seule la preuve de (P7) utilise l’hypoth`ese (P2), autre-ment dit les propri´et´es (P4), (P5) et (P6) sont vraies par construction deϕI. En conclusion, pour d´eterminer si la contrainteI est satisfiable, il suffit de construire l’affectationϕI et de d´eterminer si elle v´erifie la propri´et´e (P7). Ce dernier test ´etant imm´ediat, il me reste `a expliquer comment calculer, en temps lin´eaire, la valeur deϕI pour chaque variable de type libre dansI.

Pour cela, on consid`ere le graphe G dont les nœuds sont les variables de type libres dans I, et les arcs donn´es par les in´egalit´es et gardes dansI (i.e. un arc deαvers β existe dans Gsi et

194 Chapitre 10·R´esolution et simplification des contraintes de sous-typage structurel

seulement siα≤β∈ I ouαlβ ∈I). On d´etermine ensuite les composantes fortement connexes du grapheG, puis on construit le graphe quotient G0, dont chaque nœud ¯αest une composante fortement connexe deG. ´Etant donn´e deux composantes ¯αet ¯β, un arc de ¯αvers ¯βest pr´esent dans G0 si et seulement si il existeα∈α¯et β∈β¯tels qu’il y ait un arc deαversβ dansG. Le graphe G0 est acyclique, on peut donc effectuer son tri topologique. Cela permet de calculer pour chaque composante ¯αla borne inf´erieure commune `a tous ses membres en utilisant l’´egalit´e suivante :

lbI(¯α) =F {`| ∃α∈α α¯ =`∈I} ∪ {lbI( ¯β)|β¯pr´ed´ecesseur de ¯αdansG0}

dans un parcours du graphe G0 dans l’ordre exhib´e par le tri topologique. Ce calcul peut ˆetre r´ealis´ee en temps lin´eaire, `a condition que les op´erations d’union et de comparaison de deux atomes s’effectuent en temps constant.

10.2.5 ´ Etude de la complexit´e

Il est int´eressant de faire un parall`ele entre la strat´egie de r´esolution des contraintes que j’ai adopt´ee, et l’algorithme de Heintze et McAllester pour l’analyse de flots de contrˆole (CFA) [HM97].

Tandis que, dans l’approche standard pour l’analyse de flots, un clˆoture transitive est dynamique-ment entrelac´ee avec la g´en´eration des contraintes, Heintze et McAllester ont propos´e une proc´edure qui commence par construire un certain graphe, puis effectue dans un deuxi`eme temps une clˆoture transitive«`a la demande». Cela donne un algorithme en tempslin´eaire sous l’hypoth`ese de types de taille born´ee [McA96]. De la mˆeme mani`ere, l’algorithme que j’ai d´ecrit ci-avant pour le sous-typage structurel retarde la clˆoture autant que possible en commen¸cant par expanser la structure des types et en d´ecomposant les in´egalit´es jusqu’`a obtenir un probl`eme atomique. L’hypoth`ese des types de taille born´ee peut ˆetre discut´ee [SHO98], mais elle capture l’intuition que, dans les exemples de programme concrets, les fonctions ont g´en´eralement un nombre d’arguments et un ordre restreint. Cette observation a ´et´e particuli`erement utile pour comprendre le comportement lin´eaire observ´e pour l’inf´erence de type de ML [Hen93,McA03].

Je montre maintenant de mani`ere informelle que la complexit´e en temps du corps de l’algorithme de r´esolution estquasi-lin´eaire. Pour simplifier les choses, j’exclus les rang´ees de mon propos : leur analyse est en effet assez d´elicate [Pot03]. L’entr´ee de l’algorithme, une contrainteI, est mesur´ee par sa taille n qui est la somme des tailles de tous ses types. Je note I0 un r´esultat produit par l’algorithme pour l’entr´ee I. Comme je l’ai expliqu´e, je fais l’hypoth`ese que la taille des types est born´ee : soit h la hauteur de la plus haute structure exhib´ee par le test d’occurrence,i.e. la longueur du plus long chemin dans le graphe d´efini par≺I0. Je note ´egalemental’arit´e maximale des constructeurs de type.

La premi`ere ´etape de l’algorithme est la combinaison de deux algorithmes d’unification, qui peuvent ˆetre mis en œuvre s´epar´ement en consid´erant d’abord les squelettes puis les

multi-´equations. Ainsi, en utilisant un algorithme de « recherche-union» (union-find en anglais), leur coˆut est unO(nα(n)), o`uαest une fonction reli´ee `a l’inverse de la fonction d’Ackermann [Tar75].

Le test d’occurrence est ´equivalent `a un tri topologique du graphe induit par les descripteurs sur les multi-squelettes, de telle sorte qu’il peut ˆetre r´ealis´e en temps lin´eaire vis-`a-vis de leur nombre, qui est unO(n). Ensuite, sous l’hypoth`ese de types de hauteur born´ee, l’expansion g´en`ere au plus ah nouvelles variables de type pour chaque multi-´equation pr´esente dans le probl`eme initial. La d´ecomposition d’une in´egalit´e ou d’une garde est born´ee de mani`ere similaire. On en d´eduit que le coˆut de ces deux ´etapes est unO(ahn). Enfin, comme je l’ai expliqu´e `a la section10.2.4(page192), le test de satisfiabilit´e d’une contrainte atomique peut ˆetre r´ealis´e en temps lin´eaire en la taille de cette contrainte. Or, apr`es l’expansion et la d´ecomposition, la taille de la partie atomique de la contrainte manipul´ee par l’algorithme est ´egalement un O(ahn). On en d´eduit finalement que la coˆut de la proc´edure de r´esolution est un O(ahn), c’est-`a-direO(n) sous l’hypoth`ese de types de hauteur born´ee.