• Aucun résultat trouvé

10.3 Heuristiques de simplification des contraintes

10.3.1 Polarit´es

Unepolarit´e (not´ee :π) est une partie (possiblement vide) de{−,+}. (Les variances forment donc un sous-ensemble des polarit´es.) Les quatre polarit´es sont not´ees∅ (lire :apolaire), + (po-sitive), − (n´egative) et ±(bipolaire). Une polarisation (not´ee : Π) est une fonction totale des variables de type vers les polarit´es. Par abus de notation, j’´ecris Π(¯α) pourS

α∈¯αΠ(α). L’op´erateur de composition des variances⊗est ´etendu aux polarit´es comme indiqu´e par la figure 10.6. ´Etant donn´es deux types brutst1 ett2de mˆeme sorte et une polarit´eπ, je d´efinist1πt2 par :

t1πt2

+∈π ⇒ t1≤t2

− ∈π ⇒ t2≤t1

En d’autres termes,≤ d´esigne la relation toujours vraie,≤+ correspond `a≤,≤ `a≥et ≤± `a

=. J’´etends cette notation aux affectations et aux polarisations en d´efinissant ϕ1Π ϕ2 comme

´equivalent `a∀α∈ V ϕ1(α)≤Π(α)ϕ2(α).

La plupart des techniques de simplification pr´esent´ees dans les sections suivantes n´ecessitent de prendre en compte le contexte C dans lequel apparaˆıt la contrainte trait´ee I. En effet, la connaissance de ce dernier permet d’utiliser des strat´egies de simplification plus puissantes : pour que la simplification de I en I0 soit logiquement valide, il suffit de respecter C[I] ≡ C[I0], et non plus n´ecessairementI ≡I0. De mani`ere `a la rendre exploitable pour guider les heuristiques de simplification, l’information port´ee par le contexte est approxim´ee en introduisant une polarit´e pour chaque variable de type, grˆace `a une polarisation Π. Une variable de type αtelle que + ∈Π(α) est dite positive. Intuitivement, il s’agit d’une variable sur laquelle le contexte peut poser des bornessup´erieures(comme, par exemple, une in´egalit´eα≤β). On est donc int´eress´e par sa borne inf´erieure `a l’int´erieur du contexte. Inversement, si + 6∈ Π(α), on dit que α est non-positive : dans ce cas, le contexte courant ne peut donner de borne sup´erieure `aα, de telle sorte que les contraintes portant sur sa borne inf´erieure `a l’int´erieur du contexte peuvent ˆetre ´elimin´ees. De mani`ere sym´etrique, une variable de typeαtelle que− ∈Π(α) est dite n´egative et ne peut recevoir de contrainte sur sa borne inf´erieure dans le contexte ; une variableαtelle que− 6∈estnon-n´egative.

On peut voir les polarit´es des variables de types dans un contexte comme un raffinement orient´e de la notion d’accessibilit´e : une variable apparaissant `a l’int´erieur d’un contexte est accessible depuis l’ext´erieur si et seulement si elle n’est pas apolaire.

Les polarisations permettent d’introduire des formes relax´ees des notions d’implication et d’´equivalence logique entre contraintes.

D´efinition 10.34 (Implication et ´equivalence modulo) SoientC1 et C2 deux contraintes,Π une polarisation. C1 impliqueC2 moduloΠ (not´e : C1C2 mod Π) si et seulement si, pour tous ϕ1etX tels queϕ1, X`C1, il existeϕ2tel queϕ2, X`C2 etϕ2Πϕ1. On dit queC1etC2 sont

´

equivalentes moduloΠ (not´e : C1≡C2 mod Π) si et seulementC1C2 mod Π etC2C1

mod Π.

Intuitivement, la contrainte C1 implique C2 modulo Π si et seulement si, pour toute solution

10.3· Heuristiques de simplification des contraintes 197

de la premi`ere, on peut construire une solution de la seconde, en augmentant (resp. diminuant)

´eventuellement l’affectation des variables de type non-positives (resp. non-n´egatives).

Les polarit´es des variables de types dans un contexte peuvent ˆetre d´etermin´ees grˆace aux r`egles de la figure 10.7: on dit que la polarisation Π est valide dans le contexteCsi et seulement si le jugement Π`Cest d´erivable. Je commente maintenant ces r`egles, en donnant pour chacune d’elles un lemme qui formule sa correction en termes d’implication de contraintes modulo. La premi`ere r`egle,pol-empty, exprime le fait que, dans un contexte vide, toutes les variables de types sont accessibles par leurs deux bornes. Elles doivent donc ˆetre consid´er´ees comme bipolaires.

Lemme 10.35 Supposons∀α∈ V Π(α) =±. SiC1C2 mod Πalors C1C2. Les autres r`egles examinent les contextes non vides en commen¸cant par leur extr´emit´e (i.e.leur trou). La r`eglepol-ands’applique `a un contexte se terminant par une conjonction : la contrainte C ´etant arbitraire, ses variables libres doivent ˆetre consid´er´ees comme bipolaires. La polarit´e des autres variables de type doit ˆetre fix´ee d’une mani`ere valide pour la partie sup´erieure du contexte, C.

Lemme 10.36 Supposons ∀α∈ ftv(C) Π(α) = ±. Si C1 C2 mod Π alors C1∧C C2∧C

mod Π.

p Preuve. Supposons C1 C2 mod Π (H1) et ∀α ∈ ftv(C) Π(α) = ±(H2). Soientϕ1 et X tels queϕ1, X`C1∧C (1). On aϕ1, X `C1 donc, par (H1), il existeϕ2 tel que ϕ2, X `C2 (2) etϕ2Πϕ1 (3). On d´eduit de (H2) et (3) que, pour toutα∈ftv(C),ϕ1(α) =ϕ2(α). Par (1), cela impliqueϕ2, X `C (4). En combinant (2) et (4), on obtientϕ2, X`C2∧C (5). En d´echargeant l’hypoth`ese (1) sur (5) et (3), on en d´eduit le but :C1∧CC2∧C mod Π. y La r`egle pol-existsconcerne un contexte se terminant par un quantificateur existentiel : les variables ¯α ´etant locales au trou du contexte, leur polarit´e peut ˆetre fix´ee ind´ependamment du contexte sup´erieurCpour lequel elles sont inaccessibles.

Lemme 10.37 SiC1C2 mod Πalors ∃α.C¯ 1∃¯α.C2 mod Π[~α7→~π].

p Preuve. SupposonsC1C2 mod Π(H1). Soientϕ1etX tels queϕ1, X` ∃¯α.C1(1). Il existe ϕ01tel queϕ101[~α7→~t] etϕ01, X`C1. Par (H1), on en d´eduit qu’il existeϕ02 tel queϕ02, X`C2

(2)et ϕ02Πϕ01 (3). Posonsϕ202[~α7→~t]. Par (2), on aϕ2, X ` ∃¯α.C2 (4). De plus, puisque ϕ1etϕ2 co¨ıncident sur ¯α, (3) impliqueϕ2Π[~α7→~π] ϕ1 (5). En d´echargeant l’hypoth`ese (1) sur (4) et (5), on en d´eduit le but :∃¯α.C1∃α.C¯ 2 mod Π[~α7→~π]. y Les deux premi`eres pr´emisses de la r`eglepol-letconcernent le typeτ: sa borne sup´erieure peut ˆetre contrainte par d’´eventuelles formes d’instanciation portant surxdansC. Les variables de type libres dansτ doivent donc recevoir des polarit´es conform´ement aux signes de leurs occurrences. Les deux derni`eres pr´emisses de pol-letconcernent la partie sup´erieure du contexte et la contrainte C. Elles sont comparables `a celles de pol-and, ´etant entendu que les variables ¯αsont locales au sch´ema.

Lemme 10.38 Supposons∀α∈ftv+(τ) +∈Π(α),∀α∈ftv(τ) − ∈Π(α)et∀α∈ftv(C) Π[~α7→

~π](α) =±. SiC1C2 mod Π, alorsletx : ∀α[C¯ 1].τinCletx : ∀¯α[C2].τ inC mod Π[~α7→~π].

p Preuve. SupposonsC1 C2 mod Π(H1), ∀α∈ftv+(τ) +∈Π(α)(H2), ∀α∈ftv(τ) − ∈ Π(α) (H3) et ∀α ∈ ftv(C) Π[~α 7→ ~π](α) = ± (H4). Soient ϕ1 et X tels que ϕ1, X ` letx :

∀α[C¯ 1].τ inC (1). On aϕ1, X` ∀α[C¯ 1].τ s(2)etϕ1, X[x7→s]`C(3). Soitt∈s(4). Par (2), il existeϕ01tel queϕ101[~α7→~t](5),ϕ01, X `C1(6)etϕ01(τ)≤t(7). Par (H1) et (6), il existeϕ02 tel queϕ02, X `C2 (8)et ϕ02Πϕ01 (9). Par (H2), (H3) et la propri´et´e1.7(page25), (7) implique

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

ϕ02(τ)≤ϕ01(τ). Par (7), on en d´eduit queϕ02(τ)≤t(10). Soitϕ202[~α7→~t](11). Par (8) et (10), on aϕ2, X` ∀¯α[C2].τ t. En d´echargeant l’hypoth`ese (4), on en d´eduit queϕ2, X ` ∀¯α[C2].τs (12). Par (5) et (11),ϕ1 etϕ2 co¨ıncident sur ¯αet sont respectivement identiques `aϕ01 et ϕ02 sur V\α. Cela donne, grˆ¯ ace `a (9),ϕ2Π[~α7→~π]ϕ1(13). Par (H4), on en d´eduit queϕ1etϕ2co¨ıncident sur ftv(C), de telle sorte que (3) implique ϕ2, X[x7→s]`C (14). Par une instance dec-let, les jugements (12) et (14) donnentϕ2, X`letx : ∀¯α[C2].τ inC(15). En d´echargeant l’hypoth`ese (1) sur (15) et (13), on obtient le but : letx : ∀¯α[C1].τ inCletx : ∀α[C¯ 2].τinC mod Π[~α7→~π]. y Enfin, la r`eglepol-intraite les contextes se terminant par une formeletx : σ in[ ], de mani`ere similaire `apol-and.

Lemme 10.39 Si C1C2 mod Π et∀α∈ftv(σ) Π(α) =±alorsletx : σ inC1letx : σinC2

mod Π.

L’affaiblissement d’une polarisation pr´eserve sa validit´e pour un contexte : si Π1 `Cet, pour tout α ∈ V, Π1(α) ⊆ Π2(α) alors Π2 ` C est ´egalement d´erivable. De plus, la polarisation qui consid`ere toutes les variables de type comme bipolaires est valide pour tous les contextes. On en d´eduit que chaque contexteCadmet une polarisation valideminimale(au sens de l’inclusion point

`

a point) ; laquelle peut ˆetre d´etermin´ee par la r´esolution d’une formule bool´eenne dont les variables logiques correspondent aux polarit´es des variables de type d´efinies parC. Par ailleurs, la deuxi`eme pr´emisse de la r`eglepol-and, la quatri`eme pr´emisse depol-letet la premi`ere pr´emisse depol-in sont relativement approximatives : elles consid`erent toute variable libre de la contrainteC(ou du sch´ema σ) comme bipolaire, quelle que soit la fa¸con dont elle est employ´ee. Il serait possible de raffiner ce crit`ere de mani`ere `a capturer des informations sur la contrainteC. Cependant, il est g´en´eralement pr´ef´erable en pratique de simplifier autant que possible le calcul des polarit´es, en particulier de mani`ere `a ce qu’il n’induise pas de surcoˆut `a l’ex´ecution. Comme cela apparaˆıtra au chapitre11(page217), un compromis int´eressant consiste `a arrˆeter l’exploration du contexte `a la premi`ere forme letx : ∀α[[ ]].τ¯ inC rencontr´ee, en consid´erant toutes les variables non dans ¯α comme bipolaires.

Le th´eor`eme suivant montre, que sous un contexte C de polarisation Π, il est possible de consid´erer l’implication ou l’´equivalence modulo Π, pour obtenir ext´erieurement l’implication ou l’´equivalence au sens habituel.

Th´eor`eme 10.40 (Polarit´es d’un contexte) SiΠ`CetC1C2 mod Πalors C[C1]C[C2].

p Preuve. Par induction sur la d´erivation de Π`C, en utilisant les lemmes 10.35,10.36, 10.37,

10.38et 10.39. y

La notion de polarit´e comme raffinement de l’accessibilit´e a ´et´e introduite par les travaux de Fuh et Mishra [FM89], puis reprise par Trifonov et Smith [TS96], et Pottier [Pot01b]. Ces derniers ne s’int´eressent cependant qu’`a des sch´emas de type clos, o`u toutes les variables de type sont universellement quantifi´ees. Cela donne lieu `a une d´efinition l´eg`erement moins g´en´erale que celle pr´esent´ee ici, qui rattache les polarit´es auxcontextes du langage de contraintes.

Les d´efinitions pr´ec´edentes indiquent comment les polarit´es des variables de types peuvent ˆetre extraites du contexte dans lequel la contrainte `a simplifier est plac´ee. Je montre maintenant com-ment ces polarit´es doivent ˆetre propag´ees `a travers la structure des types exhib´ee par l’expansion.

Comme je l’ai expliqu´e `a la section10.2.3(page184), on souhaite appliquer certaines heuristiques de simplification tout au long de la phase d’expansion et de d´ecomposition, sur chaque multi-squeletteavant de lui appliquer les r`egles de la figure10.3(page185). En faisant abstraction des quantificateurs existentiels (lesquels peuvent ˆetre consid´er´es comme faisant partie du contexte C, puisqu’ils sont remont´es au sommet de la contrainte parspe-ex-andlors de l’expansion), `a chaque

´etape de la proc´edure d’expansion et de d´ecomposition, la contrainte r´esolue peut ˆetre ´ecrite sous la forme Is∧I o`u Is est une contrainte structurelle, correspondant `a la partie d´ej`a expans´ee et

10.3· Heuristiques de simplification des contraintes 199

d´ecompos´ee, etI est la partie restant `a traiter, dont les variables libres ne sont pas dans le sup-port deIs. Comme ´enonc´e par le lemme10.28(page190), lorsque l’expansion et la d´ecomposition sont termin´ees,I est une contrainte atomique. La d´efinition et le th´eor`eme qui suivent montrent comment propager les polarit´es extraites du contexte le long de la structure des types donn´ee par Is, de mani`ere `a pouvoir simplifier directementI.

D´efinition 10.41 Etant donn´ees une polarisation´ Πet une contrainte structurelleIs, Π⊗Isest la plus petite polarisationΠ0telle que pour toutα∈ V,Π(α)⊆Π0(α), et pour tousβ =d β1· · ·βn∈Is,

eti∈[1, n], Π0(β)⊗d.i⊆Π0i).

Si une variableβa pour descripteurd β1· · ·βndansIsalors toute nouvelle borne (inf´erieure ou sup´erieure) surβest susceptible de se r´epercuter, par d´ecomposition, sur les sous-termesβ1, . . . , βn. Ainsi, siβ est positive pour Π alors chaque sous-terme doit ˆetre positif pour Π⊗Is s’il est `a une position covariante ou invariante ded, et n´egatif s’il est en position contravariante ou invariante.

Inversement, siβ est n´egative alors un sous-terme devient positif s’il est en position contravariante ou invariante, et n´egatif s’il est en position covariante ou invariante.

Th´eor`eme 10.42 (Polarit´es et structure) Soient Is une contrainte structurelle acyclique de sup-portα¯et Π une polarisation. SoientI1 etI2 deux contraintes telles que α¯# ftv(I1, I2) etIs∧I2

soit unifi´ee. Si I1I2 mod (Π⊗Is)alors Is∧I1Is∧I2 mod Π.

p Preuve. Soient I1 et I2 deux contraintes telles que ¯α# ftv(I1, I2), etIs∧I2 soit unifi´ee. Soit Π0 = Π⊗Is; on a, pour tout α ∈ V, Π(α) ⊆ Π0(α) (1), et pour tous β = d β1· · ·βn ∈ Is, et i∈[1, n], Π0(β)⊗d.i⊆Π0i)(2). SupposonsI1I2 mod Π0 (3).

Soit ϕ1 une affectation telle que ϕ1 `Is∧I1 (H1); je dois montrer qu’il existe ϕ02 telle que ϕ02` Is∧I2 (C1)et ϕ02Πϕ1 (C2). L’hypoth`ese (H1) implique ϕ1 ` I1; par (3), on en d´eduit qu’il existeϕ2 telle que ϕ2 `I2 (4)etϕ2Π0 ϕ1(5). La contrainteIs∧I2´etant unifi´ee, j’utilise le mˆeme proc´ed´e que dans la preuve du th´eor`eme10.30(page191) pour construire, `a partir deϕ2, une solutionϕ02 deIs∧I2 telle que :

ϕ02(α) =

2(α) siα6∈α¯

d ϕ021)· · ·ϕ02n) siα∈α¯etα=d α1· · ·αn ∈Is

Le but (C1) s’obtient de la mˆeme mani`ere qu’au th´eor`eme 10.30 (page 191). Il me reste `a mon-trer (C2). Je consid`ere pour cela une variableα. Je prouve par induction sur l’ordre≺Is, qui est bien fond´e puisqueIs est suppos´ee acyclique, queϕ02(α)≤Π0(α)ϕ1(α)(6).

◦Siα6∈α,¯ alorsϕ02(α) =ϕ2(α). On en d´eduit, par (5), queϕ02(α)≤Π0(α)ϕ1(α).

◦Si α∈α,¯ puisque Is est structurelle, il existe d α1· · ·αn telle que α=d α1· · ·αn ∈Is (7).

Soiti∈[1, n](8). Par (7), on a αiIs α, ce qui permet d’appliquer l’hypoth`ese d’induction `aαi

et d’obtenirϕ02i)≤Π0i)ϕ1i)(9). Or (2) implique Π0(α)⊗d.i⊆Π0i), de telle sorte que (9) impliqueϕ02i)≤Π0(α)⊗d.iϕ1i). En d´echargeant (8), on en d´eduit qued ϕ021)· · ·ϕ02n)≤Π0(α) d ϕ11)· · ·ϕ1n). Puisque ϕ1 et ϕ02 satisfont Is, par (7), les membres gauche et droit de cette in´egalit´e sont respectivement ´egaux `aϕ02(α) et ϕ1(α), ce qui permet de conclure : ϕ02(α)≤Π0(α) ϕ1(α).

Par (6) et (1), on obtient le but (C2). y