• Aucun résultat trouvé

Pr´eservation du typage par r´eduction

6.4 Une extension de MLIF(T) ` a Core ML 2

6.4.2 Pr´eservation du typage par r´eduction

Je montre maintenant que la r´eduction des configurations Core ML2 pr´eserve le typage dans ce syst`eme ´etendu. Je commence par une s´erie de lemmes techniques permettant d’analyser et de construire des d´erivations de typage. Le premier d’entre eux compl`ete la r`egle e-sub : il montre que la param`etrepcdes jugements est contravariant.

Lemme 6.4 (Affaiblissement) Si pc0 ≤pc et pc, X, M`He:t [r]alors pc0, X, M`He:t [r].

p Preuve. On proc`ede par induction sur la d´erivation depc, X, M`He:t [r] (H1).

◦Cas e-value.L’expressioneest une valeurv. La pr´emisse dee-valueestX, M`Hv:t. En appliquante-valueavec cette mˆeme pr´emisse, on peut ´egalement d´eriver le jugementpc0, X, M `H

v:t [r].

◦Cas e-raise. Le jugement (H1) est de la forme pc, X, M `H raiseξ v : t [ξ : pc;r0]. Cette d´erivation se termine par une instance de e-raise de pr´emisse X, M `H v : type(ξ). Par une instance dee-raiseavec cette mˆeme pr´emisse, on peut ´egalement d´eriver le jugementpc0, X, M `H

raiseξ v:t [ξ:pc0;r0]. Par l’hypoth`esepc0≤pcete-sub, on obtient le but :pc0, X, M`H raiseξ v: t [ξ :pc;r0].

◦Cas e-app. L’expressioneest de la formev1v2. Les pr´emisses dee-appsont X, M `H v1 : t0−−−−−→pct`[r]` t(1),X, M `H v2:t0 (2)et`Ct(3). L’hypoth`esepc0≤pcimpliquepc0t`≤pct`.

Par la contravariance du constructeur de type→vis-`a-vis de son deuxi`eme argument, on en d´eduit quet0 pc

0t`[r]`

−−−−−−→t≤t0 −−−−−→pct`[r]` t(4). Parv-sub, (1) et (4), on aX, M `H v1:t0 pc

0t`[r]`

−−−−−−→t (5).

En appliquante-appaux pr´emisses (5), (2) et (3), on obtient le but :pc0, X, M`H v1v2:t [r].

◦ Cas e-destructor. L’expression e est f v1· · ·vn. Les pr´emisses de e-destructor sont

` f : t1· · ·tn pc00[r]

−−−−→ t (1) et pc ≤ pc00 (2) et ∀j X, M ` vj : tj (3). Par (2) et l’hypoth`ese pc0 ≤pc, on apc0≤pc00 (4). Par une instance dee-destructorde pr´emisses (1), (4) et (3), on obtient le but :pc0, X, M`Hf v1· · ·vn:t [r].

◦Les cas e-let, e-bind, e-handle, e-finally et e-sub s’obtiennent de mani`ere directe `a partir l’hypoth`ese d’induction.

◦ Cas e-bracket. L’expression e est de la forme he1 | e2i. Les pr´emisses sont, pour tout i∈ {1,2},pctpc00, X, M `H ei:t [r](1), pc00∈H (2)et pc00Ct(3). Par l’hypoth`esepc0≤pc, on apc0tpc00≤pctpc00. En appliquant l’hypoth`ese d’induction `a (1), il vient, pour touti∈ {1,2}, pc0tpc00, X, M`H ei:t [r](4). Par une instance dee-bracketavec les pr´emisses (4), (2) et (3), on obtient le but recherch´e :pc0, X, M`H he1|e2i:t [r]. y

6.4·Une extension de MLIF(T) `a Core ML2 123

Le deuxi`eme lemme montre que les jugements de typage sont pr´eserv´es par projection des expressions. Il s’agit d’un r´esultat relativement grossier : en effet, il n’utilise pas les deux derni`eres pr´emisses des r`eglesv-bracketet e-bracket.

Lemme 6.5 (Projection) Soiti∈ {1,2}. SiX, M `H v:talors X, M`H bvci:t. Si pc, X, M`H

e:t [r] alors pc, X, M `Hbeci:t [r].

p Preuve. On proc`ede par induction sur la d´erivation donn´ee en hypoth`ese.

◦ Cas e-bracket. L’expressione est de la formehe1 | e2i et beci = ei. Parmi les pr´emisses dee-bracket, on apctpc0, X, M `H ei :t [r]. Par le lemme 6.4, on obtient le but recherch´e : pc, X, M `Hei:t [r].

Le casv-bracketest similaire. Tous les autres cas s’obtiennent de mani`ere imm´ediate `a partir

de l’hypoth`ese d’induction. y

Je donne maintenant quatre lemmes qui permettent d’analyser les d´erivations qui portent sur des r´esultats. Le premier est une sorte de r´eciproque de la r`eglee-value. Le second permet de manipuler les jugements portant sur une exception. Enfin, les lemmes 6.8 et 6.9 consid`erent les r´esultats de la formeha1|a2i.

Lemme 6.6 (Valeur) pc, X, M`Hv:t [r] implique X, M `Hv:t.

p Preuve. Par induction sur la d´erivation depc, X, M`Hv:t [r]. Puisquevest une valeur, seuls les cas suivants sont `a envisager.

◦Cas e-value.La pr´emisse de la r`egle est le but recherch´e.

◦Cas e-sub. Le but r´esulte de l’hypoth`ese d’induction et dev-sub.

◦Cas e-bracket. Le but r´esulte de l’hypoth`ese d’induction et dev-bracket.

Lemme 6.7 (Exception) Supposons ξ ∈ Ξ. Si pc, X, M `H raiseξ v : t [r] alors X, M `H v : type(ξ), pc≤r(ξ)et, pour tout `∈ L, on a pct`, X, M`Hraiseξ v:? [(rt∂`)].

p Preuve. La d´erivation de pc, X, M `H raiseξ v : t [r] peut se terminer par une instance de e-raise ou e-sub. On se ram`ene au premier cas par une induction imm´ediate. La pr´emisse de e-raise est alors notre premier but :X, M `H v : type(ξ)(1). On a de plus r(ξ) = pc, ce qui donne le deuxi`eme but. Enfin, puisque ξ ∈ Ξ, on en d´eduit (rt∂`)(ξ) = pct` (2). Par une instance de e-raise, on d´erive de (1) et (2) le jugementpct`, X, M `H raiseξ v :t0 [(rt∂`)],

qui est notre troisi`eme but. y

Lemme 6.8 (Valeur gard´ee) SiX, M `Hhv1|v2i:t alors il existe pc∈H tel que pcCt.

p Preuve. On proc`ede par induction sur la d´erivation du jugement donn´e en hypoth`ese. De par la forme de la valeur port´ee par ce jugement, seuls les deux cas suivants sont `a envisager.

◦Cas v-bracket. Parmi les pr´emisses dev-bracket, on apc∈H etpcCt.

◦ Cas v-sub. Les pr´emisses de v-sub sont X, M `H hv1 | v2i : t0 (1) et t0 ≤ t (2). Par l’hypoth`ese d’induction appliqu´ee `a (1), il existe pc ∈ H tel que pc C t0. Par la propri´et´e 6.1

(page116) et (2), on en d´eduitpcCt. y

Lemme 6.9 (R´esultat gard´e) Si pc, X, M`H ha1|a2i:t [r]alors il existe pc0∈H tel que, pour touti∈ {1,2}, pctpc0, X, M`Hai :t [r] et, sia1 eta2 sont des valeurs, pc0Ct.

p Preuve. On proc`ede par induction sur la d´erivation du jugement pc, X, M `H ha1 |a2i:t [r]

(H1). De par la forme de l’expression port´ee par ce jugement, seuls les cas suivants sont `a envisager.

◦Cas e-value.a1eta2sont des valeurs. La pr´emisse dee-valueestX, M `Hha1|a2i:t(1).

Par le lemme6.8, il existepc0 ∈Htel quepc0Ct. Par une instance dee-valuede pr´emisse (1), on a

124 Chapitre 6·Typage et non-interf´erence

pctpc0, X, M`H ha1|a2i:t [r]. En appliquant le lemme6.5, on obtientpctpc0, X, M `Hai:t [r], pour touti∈ {1,2}.

◦Cas e-bracket. Les pr´emisses dee-bracket sont pctpc0, X, M `H ai : t [r] (1), pour touti∈ {1,2},pc0∈H (2)etpc0Ctoua11oua21(3). (1) et (2) donnent le premier but. Sia1

et a2sont des valeurs, alorsa11 eta21sont faux. On d´eduit de (3) le deuxi`eme but : pc0 Ct.

◦Cas e-sub. Les pr´emisses de e-sub sont pc, X, M `H ha1 | a2i : t0 [r0] (1), t0 ≤ t (2) et r0 ≤r(3). Par l’hypoth`ese d’induction appliqu´ee `a (1), il existepc0 ∈H tel quepctpc0, X, M `H

ai :t0 [r0](4), pour touti ∈ {1,2}, et si a1 et a2 sont des valeurs, pc0 Ct0 (5). Une instance de e-sub de pr´emisses (4), (2) et (3) donnepctpc0, X, M `H ai : t [r]. Par (5) et la propri´et´e6.1

(page116), sia1 eta2 sont des valeurs, alorspc0 Ct. y

Les deux lemmes suivants donnent deux propri´et´es habituelles des syst`emes de type. Le premier montre que les jugements sont pr´eserv´es par extension de l’environnementXou de l’environnement m´emoireM0. Le second est un r´esultat de substitution.

Lemme 6.10 (Affaiblissement) Supposons que X0 et M0 ´etendent respectivement X et M. Si pc, X, M `H e : t [r] alors pc, X0, M0 `H e : t [r]. Si X, M `H v : t alors X0, M0 `H v : t.

p Preuve. Par induction sur la d´erivation donn´ee en hypoth`ese. y Lemme 6.11 (Substitution) Supposons X, M `H v : s. Soit X0 un environnement ´etendant X.

Si X0Jx 7→sK, M `H v0 :t alors X0, M `H v0[x ←v] :t. Si pc, X0Jx 7→sK, M `H e: t [r] alors

pc, X0, M `H e[x←v] :t [r].

p Preuve. SupposonsX, M`Hv:s(H1). On d´emontre la propri´et´e par induction sur la struc-ture de la d´erivation du jugement donn´e en hypoth`ese : X0Jx 7→ sK, M `H v0 : t ou pc, X0Jx 7→

sK, M `H e:t [r](H2).

◦Cas v-var.La valeurv0 est un identificateurxet la pr´emisse dev-varestt∈X0Jx7→sK(x) (1). Si x est la variablex, alors (1) donne t ∈s. Ainsi, l’hypoth`ese (H1) implique X, M `H v: t et, par le lemme 6.10,X0, M `H v :t. Il s’agit de notre but, puisquev0[x←v] = v. Sinon, si v0 n’est pasx,X0Jx7→sK(x) =X0(x) et, par (1), on obtientt∈X0(x). Par une instance dev-var, on en d´eduit notre but :X0, M `Hx:t.

◦Cas v-abs.Le jugement (H2) ´etant obtenu par une instance dev-abs,eest de la formeλy.e0 et t de la forme t00 −−−−→pc[r]` t0. La pr´emisse de v-abs est pc, X0Jx 7→ sKJy 7→t00K, M `H e: t0 [r]

(1) avecx 6=y (2). Par (2), on a X0Jx 7→ sKJy 7→t00K =X0Jy 7→t00KJx 7→ sK, ainsi, l’hypoth`ese d’induction appliqu´ee `a (H1) et (1) donnepc, X0Jy7→t00K, M `He[x←v] :t [r]. Parv-abs, on en d´eduit X0, M `Hλy.(e[x←v]) :t00−−−−→pc[r]` t0 (3). Par (2),λy.(e[x←v]) = (λy.e)[x←v] donc (3) est le but recherch´e.

◦Cas v-bracket. Le jugement (H2) ´etant obtenu par une instance dev-bracket, la valeur v est de la forme hv1 | v2i. Les pr´emisses de v-abs sont X0Jx 7→sK, M `H vi :t (1), pour tout i ∈ {1,2}, pc ∈ H (2) et pc C t (3). Soit i ∈ {1,2}. Grˆace au lemme 6.5, l’hypoth`ese (H1) implique X, M `H bvci : s (4). En appliquant l’hypoth`ese d’induction `a (4) et (1), on obtient X0, M `Hvi[x← bvci] :t (5). Par une instance dev-bracketavec les pr´emisses (5), (2) et (3), on d´erive le jugement X0, M `H hv1[x ← bvc1] | v2[x ← bvc2]i : t. Puisquehv1 | v2i[x ← v] = hv1[x← bvc1]|v2[x← bvc2]i, il s’agit de notre but.

Les autres cas sont imm´ediats ou analogues aux pr´ec´edents. y Je termine cette s´erie de lemmes par deux ´enonc´es relatifs `a la r´eduction des contextesbindet handle. Il s’agit en fait de fragments de la preuve du th´eor`eme6.16(page126). Cependant, afin de partager leur d´emonstration pour les deux cas o`u ils interviennent, (pop) et (lift-pop), je les isole sous la forme de deux lemmes ind´ependants.

6.4·Une extension de MLIF(T) `a Core ML2 125

Lemme 6.12 (Contexte bind) Supposons que le contextebindx= [ ]ineacceptea. Si pc, X, M `H

a:t1 [r1] et pc, XJx7→t1K, M `H e:t [r2]alors pc, X, M `H (bindx= [ ]ine)a:t [r1tr2].

p Preuve. Supposons pc, X, M `H a:t1 [r1] (H1) et pc, XJx7→t1K, M `H e: t [r2] (H2). On raisonne par cas suivant la forme du r´esultata; puisquebind[ ] =xineacceptea, seules les deux possibilit´es suivantes sont `a envisager.

◦Casaest une valeurv.Par le lemme6.6(page123), le jugement (H1) donneX, M `Hv:t1

(1). En appliquant le lemme de substitution (lemme6.11) aux jugements (1) et (H2), on obtient : pc, X, M `He[x←v] :t [r2].e-subpermet d’en d´eduire le but :pc, X, M`H e[x←v] :t [r1tr2].

◦ Cas a est une exception raiseξ v. Par le lemme 6.7 (page 123), (H1) donne le jugement pc, X, M `Hraiseξ v:t [r1]. En appliquant une instance dee-sub, on obtient le but :pc, X, M`H

raiseξ v:t [r1tr2]. y

Lemme 6.13 (Contexte handle) Supposons que le contexte[ ]handleh1· · ·hn accepte a. Si pct pc0, X, M`H a:t [r] et, pour toutj ∈[1, n], pc, X, M `H hj:r⇒t [r0]alors pctpc0, X, M `H

([ ]handleh1· · ·hn)a:t [r|escape(h1···hn)tr0]. De plus, sia est une exception alors pc0 Ct ou

(([ ]handleh1· · ·hn)a)1.

p Preuve. Supposonspctpc0, X, M `H a:t [r] (H1)et, pour toutj ∈[1, n],pc, X, M`H hj : r⇒t [r0](H2). On raisonne par cas suivant la forme du r´esultata. Puisque ce r´esultat est accept´e par [ ]handleh1· · ·hn, seules les possibilit´es suivantes sont `a envisager.

◦ Cas a est une valeur v. Par le lemme 6.6 (page 123), (H1) donneX, M `H v : t. Par une instance dee-value, ce jugement permet de d´eriver le but :pctpc0, X, M `Hv:t [r|escape(h1···hn)t r0].

◦Casaest une exceptionraiseξ vavecξ ∈handled(hj). Soit Ξ = handled(hj). Par le lemme6.7 (page123), (H1) impliquepc0 ≤ ⇑r(1)etX, M`H v: type(ξ)(2). On distingue quatre sous-cas, suivant la forme de la clausehj.

· Si hj = Ξ e. La d´erivation de (H2) se termine par une instance de h-wilddone dont les pr´emisses sontpct ⇑r, X, M `H e: t [r0] (3)et ⇑r Ct (4). En appliquant le lemme 6.4 (page122) au jugement (3), et grˆace `a (1), on obtientpctpc0, X, M `H e :t [r0]. Une instance de e-sub donne le premier but : pctpc0, X, M `H e : t [r|escape(h1···hn)tr0]. Par (1), (4) et la propri´et´e6.1(page116), on obtient le deuxi`eme but :pc0 Ct.

· Si hj = Ξx e. La d´erivation de (H2) se termine par une instance deh-vardone, parmi les pr´emisses de laquelle on trouve type(ξ)≤t0 (5) et pct ⇑r, XJx7→t0K, M `H e: t [r0] (6).

Par v-sub, (2) et (5) donnent X, M `H v : t0 (7). Le lemme 6.11, appliqu´e aux jugements (7) et (6), donnepct ⇑r, X, M `He[x←v] :t [r0]. On peut alors conclure de la mˆeme mani`ere que pour le sous-cas pr´ec´edent.

· Sihj = Ξ epgt. La d´erivation de (H2) se termine par une instance deh-wildprop dont la pr´emisse estpct ⇑r, X, M `He:t2 [r2](8)avecr0=r2t(rt∂⇑r2) (9). Par le lemme6.4 (page122) et grˆace `a (1), le jugement (8) peut ˆetre affaibli en pctpc0, X, M `H e:t2 [r2](10).

Par le lemme6.7(page123), (H1) donnepctpc0t ⇑r2, X, M`Hraiseξ v:t [(rt∂⇑r2)](11).

En appliquant le lemme6.2 (page120) `a (10) et (11), on obtientpctpc0, X, M `H (e;raiseξ v) : t [r2t(rt∂⇑r2)], qui, grˆace `a (9), est le premier but. Par d´efinition, on a (e;raiseξ v)1, ce qui donne le second but.

·Sihj= Ξxepgt. La d´erivation de (H2) se termine par une instance deh-varprop, parmi les pr´emisses de laquelle on trouve type(ξ) =t0 (12)et pct ⇑r, XJx 7→ t0K, M `H e : t2 [r2] (13)avecr0=r2t(rt∂⇑r2). Le lemme6.11, appliqu´e aux jugements (2) et (13), grˆace `a (12), donnepct ⇑r, X, M `H e[x←v] :t [r2]. On peut alors conclure de la mˆeme mani`ere que pour le sous-cas pr´ec´edent.

126 Chapitre 6·Typage et non-interf´erence

◦ Cas a est une exception raiseξ v avec ξ ∈ escape(h1· · ·hn). Par le lemme 6.7 (page 123), (H1) donne pc, X, M `H raiseξ v : t [r1|escape(h1···hn)]. En appliquant e-sub, on obtient le but :

pc, X, M`H raiseξ v:t [r|escape(h1···hn)tr0]. y

La pr´eservation du typage par les r`egles (δ) et (lift-δ), n´ecessite naturellement de relier la s´emantique des primitives aux types donn´es aux constructeurs et destructeurs. Je formule pour cela les deux hypoth`eses suivantes.

Hypoth`ese 6.14 Supposons (i) ` f : t1· · ·tn pc[r]

−−−→t, (ii) ∀j ∈ [1, n] ∅, M `H vj : tj et (iii) M`Hµ. Sif v1· · ·vn/µ−fe+ ˙µalors il existeM0 ´etendantM surdom( ˙µ)tel que pc,∅, M0` e:t [r], et, pour toutm∈dom( ˙µ), M0`µ(m)˙ et pcCM0(m).

Hypoth`ese 6.15 Supposons (i) ` f : t1· · ·tn pc[r]

−−−→t, (ii) ∀j ∈ [1, n] ∅, M `H vj : tj et (iii) M`Hµ. Siv/µ¯ 6↓f et∀i∈ {1,2} b¯vci/bµcif alors il existe pc0∈H tel que`f :t1· · ·tn

pctpc0[r]

−−−−−−→

t et pc0Ct.

Dans ces deux ´enonc´es, les suppositions (i), (ii) et (iii) assurent que la configurationf v1· · ·vn/µ a le typet dans l’environnement m´emoireµ. La premi`ere hypoth`ese correspond `a la pr´eservation du typage par (δ), la seconde par (lift-δ).

Je peux maintenant donner le r´esultat principal de cette section, le th´eor`eme de stabilit´e. Je donne en fait deux ´enonc´es de cette propri´et´e. Le premier (th´eor`eme 6.16) permet une preuve par induction simple. Le deuxi`eme (th´eor`eme 6.17, page 128) est plus abstrait et ne mentionne pas d’environnement m´emoire.

Th´eor`eme 6.16 (Stabilit´e) Supposons e /iµ → e0 /iµ0 et pc,∅, M `H e : t [r] et M `H µ. Si i ∈ {1,2}, supposons pc ∈H. Alors il existe un environnement m´emoire µ0, qui ´etendµ, tel que

pc,∅, M0`H e0:t [r]etM0`Hµ0.

p Preuve. On proc`ede par induction sur la d´erivation dee /iµ→e0/iµ0. On peut supposer, sans perte de g´en´eralit´e, que la d´erivation de pc,∅, M `H e : t [r] (H1) ne se termine pas par une instance dee-sub. Par cons´equent, elle doit se terminer par une instance de la r`egle dirig´ee par la syntaxe qui correspond `a la structure de l’expressione.

Je consid`ere tout d’abord les r`egles qui n’affectent pas l’´etat m´emoire, c’est-`a-dire telles que µ0 =µ. Pour ces r`egles, on peut choisir M0 =M, de telle sorte que le second but, M0 `H µ0 est identique `a la troisi`eme hypoth`ese :M`Hµ(H2). Il reste `a prouverpc,∅, M `He0 :t [r](C1).

◦Cas (β). Les expressions e et e0 sont respectivement (λx.e0)v et e0[x ← v]. La d´erivation de (H1) se termine par une instance de e-app dont les pr´emisses comprennent les jugements

∅, M `H λx.e0 : t0 −−−−−→pct`[r]` t (1) et ∅, M `H v : t0 (2). La d´erivation de (1) se termine par une instance de v-abs, ´eventuellement suivie par une ou plusieurs instances de v-sub. Puisque

→ est covariant (resp. contravariant) en ses premier et deuxi`eme (resp. troisi`eme et quatri`eme) param`etres, en appliquant le lemme 6.4 (page122) et e-sub `a la pr´emisse de v-abs, on obtient pc,{x7→t00}, M `H e0:t [r](3)pour un certain typet00tel quet0 ≤t00(4). Par une instance de v-sub, on peut d´eriver le jugement∅, M `Hv:t00(5)de (2) et (4). Ainsi, en appliquant le lemme6.11 (page124) avec les hypoth`eses (5) et (3), on obtient le but (C1) :pc,∅, M `H e0[x←v] :t [r].

◦Cas (let).Les expressionseete0sont respectivementletx=vine0ete0[x←v]. La d´erivation du jugement (H1) se termine par une instance dee-letdont les pr´emisses sont∅, M `H v :set pc,{x 7→s}, M `H e0 : t [r]. En appliquant le lemme 6.11(page 124) `a ces deux jugements, on obtient le but (C1) :pc,∅, M `H e0[x←v] :t [r].

◦ Cas (pop). Les expressions e et e0 sont respectivement E[a] et E a. On distingue trois sous-cas suivant la forme du contexteE.

· Si E est bindx = [ ] in e0. La d´erivation du jugement (H1) se termine par une instance de e-binddont les pr´emisses sontpc,∅, M `Ha:t1 [r1](1)et pct ⇑r1,{x7→t1}, M `H e0:t [r2]

6.4·Une extension de MLIF(T) `a Core ML2 127 fpv(e). Puisquepct ⇑(∂⊥) =pc, le lemme6.2(page120) peut ˆetre appliqu´e `a ces jugements. On obtient ainsi le but (C1) :pc,∅, M `H(e;a) :t [r].

◦Cas (lift-β).Les expressionse ete0 sont respectivement hv1 |v2iv et hv1bvc1 |v2bvc2i. La d´erivation de (H1) se termine par une instance de e-appdont les pr´emisses sont ∅, M `H hv1 | v2i : t0 −−−−−→pct`[r]` t (1), ∅, M `H v : t0 (2) et ` Ct (3). Par le lemme 6.8 (page 123) et (1), il existepc0 ∈H (4) tel quepc0 ≤` (5). Par (3) et la propri´et´e6.1 (page116), on obtient pc0 Ct (6). Soiti∈ {1,2}. En appliquant le lemme6.5(page123) `a (1) et (2), on obtient respectivement

∅, M `H vi :t0 −−−−−→pct`[r]` t et∅, M `H bvci: t0. Une instance de e-apppermet de d´eriver de ces

a (1), seules les deux possibilit´es suivantes sont `a envisager.

·SiE=bindx= [ ]ine2. La d´erivation de (H1) se termine par une instance dee-binddont les

128 Chapitre 6·Typage et non-interf´erence

j∈[1, n],pc,∅, M `H bhjci0 :r1⇒t [r2](17). En appliquant le lemme6.13(page125) aux juge-ments (15) et (17), grˆace `a (13), on obtientpctpc0,∅, M `H([ ]handle(bh1ci0· · · bhnci0))ai0 : t [r](18)et, siai0 est une exception,pc0 Ctou ([ ]handle(bh1ci0· · · bhnci0))ai01(19). Par (16) et (19), on apc0 Ctou ([ ]handle(bh1c1· · · bhnc1))a11 ou ([ ]handle(bh1c2· · · bhnc2))a21 (20). Ainsi, en appliquante-bracket aux pr´emisses (18), (14) et (20), on obtient le but (C1) : pc,∅, M `H h([ ]handle(bh1c1· · · bhnc1))a1|([ ]handle(bh1c2· · · bhnc2))a2i:t [r].

Je consid`ere maintenant les trois r`egles susceptibles de modifier l’´etat m´emoire.

◦ Cas (δ). L’expression e et l’´etat m´emoire µ0 sont respectivement f v1· · ·vn et µ4iµ˙ o`u f v1· · ·vn/µ−fe0+ ˙µ(1). La d´erivation de (H1) se termine par une instance dee-destructor dont les pr´emisses sont`f :t1· · ·tn

pc0[r]

−−−−→t (2),pc≤pc0 (3)et, pour tout j ∈[1, n],∅, M `H

vj :tj (4). Par l’hypoth`ese6.14(page126) appliqu´ee `a (2), (4), (H2) et (1), il existeM0 ´etendant M sur dom( ˙µ)(5)tel quepc0,∅, M0`H e0:t [r](6)et, pour toutm∈dom( ˙µ),∅, M0`H µ(m) :˙ M0(m) (7)etpc0 CM0(m)(8). Par le lemme6.4 (page122), (3) et (6) donnent le premier but : pc,∅, M0`H e0:t [r].

La d´erivation de (H2) se termine par une instance de store dont les pr´emisses sont ∀m 6∈

dom(M) µ(m) = null(9) et ∀m ∈ dom(M) ∅, M `H µ(m) : M(m) (10). Soit m 6∈ dom(M0).

Par (5), on a m 6∈ dom(M) et m 6∈ dom( ˙µ). En utilisant (9), et par µ0 = µ4i µ, on obtient˙ µ0(m) =null. On en d´eduit finalement :∀m6∈ dom(M0) µ0(m) = null(11). Soit m∈dom(M0), on veut montrer∅, M0 `H µ0(m) : M0(m) (12). Si m6∈ dom( ˙µ) alors, par (5),m∈ dom(M) et µ0(m) = µ(m). On d´eduit de (10), par le lemme 6.10 (page 124), que ∅, M0 `H µ(m) : M(m).

Supposons maintenant quem∈dom( ˙µ), on distingue alors les sous-cas suivants :

·Sii=•,alorsµ0(m) = ˙µ(m) et (7) donne imm´ediatement (12).

· Si i = 1, alors, par hypoth`ese, pc ∈ H (13). Par la propri´et´e 6.1 (page 116), (3) et (8) donnentpcCµ0(m)(14). Siµ(m) =null, alorsµ0(m) =hµ(m)˙ |nulli; en appliquantw-bracket aux pr´emisses (7), (13) et (14), on obtient le but (12) : ∅, M0 `H hµ(m)˙ | nulli : M0(m). Si µ(m)6=null, alorsµ0(m) =hµ(m)˙ | bµ(m)c2i. En appliquant les lemmes 6.5et 6.10 `a (10), on a

∅, M0`Hbµ(m)c2:M0(m)(15). En appliquantv-bracketaux pr´emisses (7). (15), (13) et (14), on obtient ´egalement le but (12) : ∅, M0 `Hhµ(m)˙ | bµ(m)c2i:M0(m).

·Le sous-cas o`u i= 2 est similaire au pr´ec´edent.

On en d´eduit :∀m∈dom(M0) ∅, M0`Hµ0(m) :M0(m)(16). En appliquant une instance de store aux pr´emisses (11) et (16), on obtient le second but :M0`H µ0.

◦Cas (context).Les expressionseete0 sont respectivementE[e0] etE[e00] o`ue0/iµ→e00/iµ0. En appliquant l’hypoth`ese d’induction `a la premi`ere pr´emisse dee-bind,e-handleoue-finally, on obtient une nouvelle version de celle-ci o`uMete0 sont respectivement remplac´es parM0ete00, M0 ´etant un environnement m´emoire ´etendantM tel queM0`H µ0. PuisqueM0 ´etendM, par le lemme 6.10(page124), la (les) autre(s) pr´emisse(s) reste(nt) valide(s) en rempla¸cant M parM0. Ainsi, une nouvelle instance dee-bind,e-handleoue-finally permet de conclure.

◦Cas (bracket).Les expressionseete0sont respectivementhe1|e2iethe01|e02i. On aei1/i1µ→ e0i1/i1µ0 (1)etei2 =e0i2, avec{i1, i2}={1,2}. Puisquehe1|e2in’est pas une valeur, sa d´erivation doit se terminer par une instance dee-bracketdont les pr´emisses sontpctpc0,∅, M `Hei1:t [r]

(2), pctpc0,∅, M `H ei2 :t [r] (3),pc0 ∈H (4)et pc0 Ct ou ei11 ouei21 (5). Grˆace `a (4), l’hypoth`ese d’induction peut ˆetre appliqu´ee `a (1), (2) et (H2). Il existe donc M0 ´etendantM (6) tel quepctpc0,∅, M0`H e0i1 :t [r](7)etM0 `Hµ0 (8). Par le lemme6.10(page124) et (6), (3) implique pctpc0,∅, M0 `H e0i2 :t [r] (9). Puisque le pr´edicat·1 est pr´eserv´e par r´eduction, (5) impliquepc0Ctoue0i11oue0i21(10). Par une instance de e-bracketde pr´emisses (7), (9), (4) et (10), on obtient le premier but :pc,∅, M `Hhe01|e02i:t [r]. (8) est le deuxi`eme but. y Corollaire 6.17 (Stabilit´e) Si ∅`He / µ:t [r]et e / µ→e0/ µ0 alors ∅`H e0/ µ0:t [r].

6.5·Constantes 129 Figure 6.7 – Axiomes pour les constructeurs et destructeurs

p Preuve. Le jugement∅`H e /µ:t [r] est obtenu par une instance deconfdont les pr´emisses sontpc,∅, M`He:t [r] et M`H µ. Pare / µ→e0/ µ0 et par le th´eor`eme6.16(page126), on en d´eduit qu’il existeM0 tel que pc,∅, M0`He0 :t [r] etM0`H µ0. En appliquantconf `a ces deux

jugements, on obtient le but :∅`H e0/ µ0:t [r]. y

Je ne donne pas d’´enonc´e de progression pour Core ML et MLIF(T), exprimant qu’une confi-guration bien typ´ee ne peut pas ˆetre bloqu´ee : il s’agit d’une propri´et´e ind´ependante du probl`eme qui m’int´eresse ici, qui n’est pas n´ecessaire pour ´etablir la non-interf´erence. Elle peut cependant ˆetre obtenue par une analyse de cas imm´ediate sur les expressions du langage, apr`es avoir formul´e les hypoth`eses habituelles sur les constantes. On peut ´egalement obtenir ce th´eor`eme en montrant que toute configuration bien typ´ee dans MLIF(T) est ´egalement bien typ´ee dans une variante de B(T), pour laquelle la progression est connue.

6.5 Constantes

La figure 6.7 donne les axiomes pour le typage des constantes introduites `a la section 5.1.3 (page102). Je donne ´egalement, dans la figure6.8, des r`egles de typage d´eriv´ees pour les applications de constructeurs et de destructeurs, dont la lecture est probablement plus compr´ehensible. Elles sont obtenues en combinant les axiomes pr´ec´edents avec les r`eglesv-constructorete-destructor ainsi quev-sub ete-sub.

Parv-int, les constantes enti`eresbnont le typeint⊥(et, par covariance deint,b`pour tout niveau

`).e-addrefl`ete le fait que le r´esultat d’une addition donne potentiellement des informations sur ses deux arguments. La formulation de la r`egle est simplifi´ee en supposant que ces derniers ont le mˆeme niveau` : puisque la d´erivation de chaque pr´emisse peut se terminer par une instance de

130 Chapitre 6·Typage et non-interf´erence

Entiers naturels

v-int

X, M `bn:int?

e-add

X, M`v1:int` X, M `v2:int`

?, X, M`v1+b v2:int` [?]

R´ef´erences

v-unit

Γ, M `() :unit

e-ref

X, M `v:t pcCt pc, X, M`refv:reft ? [?]

e-assign

X, M `v1:reft ` X, M `v2:t pct`Ct pc, X, M`v1:=v2:unit [?]

e-deref

X, M`v:reft0` t0≤t `Ct pc, X, M `!v:t [?]

Paires

v-pair

X, M `v1:t1 X, M `v2:t2

X, M `(v1, v2) :t1×t2

e-proj

X, M`v:t1×t2

?, X, M `projjv:tj [?]

Sommes binaires

v-inj

X, M `v:t X, M `injjv: (t+j?)?

e-case

X, M `v: (t1+t2)` `Ct X, M `v1:t1

pct`[r]`

−−−−−→t X, M `v2:t2

pct`[r]`

−−−−−→t pc, X, M `vcasev1v2:t [r]

Point fixe e-fix

X, M `v1: (t0 −−−−→pc[r]` t)−−−−−→>[∂⊥] (t0 −−−−→pc[r]` t) X, M `v2:t0 `≤pc `Ct pc, X, M`fixv1v2:t [r]

Figure 6.8– R`egles d´eriv´ees pour les constructeurs et destructeurs

6.5·Constantes 131

v-sub, on peut r´e-´ecriree-addde mani`ere ´equivalente en : e-add

X, M`v1:int`1 X, M`v2:int`2

?, X, M `v1+b v2:int(`1t`2) [?]

Les r`eglese-ref et e-assign requi`erent pc Ct pour assurer quepc est une borne inf´erieure sur le niveau du bloc m´emoire dont le contenu est modifi´e. La pr´emisse` Ct dee-assign et e-derefrefl`ete le fait que l’´ecriture ou la lecture d’une adresse m´emoire peut, indirectement, r´ev´eler quelque information sur son identit´e. Notons enfin que,t0 apparaissant en position invariante dans la premi`ere pr´emisse de e-deref, il faut en consid´erer un super-type t de mani`ere `a ce que la contrainte`Ctne porte que sur le type du r´esultat du d´er´ef´erencement, et non sur celui du bloc m´emoire lui-mˆeme.

La r`egle v-pair est standard. Dans e-proj, les annotations pc et r ne sont pas contraintes, puisque les projections n’ont pas d’effets. J’´ecris (t1+1t2)` pour (t1 +t2)` et (t2+2t1)` pour (t2+t1)` dans la r`egle v-inj. Dans e-case, chaque branche vj obtient, si elle est ex´ecut´ee, de l’information sur le tag de la somme. Par cons´equent, elle doit ˆetre typ´ee sous un niveaupct`, et le type de son r´esultat doit ˆetre gard´e par`. En utilisant le codage expliqu´e section5.1.3(page102), on en d´eduit des r`egles de typage pour les Bool´eens. Parv-inj, les constantestrue et falseont le type (unit+unit)`, pour tout `, lequel peut ˆetre not´ebool`. On peut d´eriver dee-caseet v-abs la r`egle suivante pour les conditionnelles :

Γ, M`v:bool` pct`,Γ, M `e1:t [r] pct`,Γ, M `e2:t [r] `Ct pc,Γ, M `ifvthene1elsee2:t [r]

La r`egle de typage de l’op´erateur de point fixe, e-fix, est identique `a celle de ML, aux anno-tations port´ees par les types fl`eches pr`es. Le premier argument defix, v1, doit ˆetre une fonction.

Pour simplifier la formulation de la r`egle, je suppose qu’elle n’est pas le r´esultat d’un calcul et ne produit pas d’effets lors de son application, en annotant sa fl`eche par les constantes>, ∂⊥et

⊥: cela est suffisant pour le codage de la construction let rec qui nous int´eresse. L’argument de cette fonction est la valeur construite par le point fixe, qui doit elle-mˆeme ˆetre une fonction, de typet0 −−−−→pc[r]` t. Les pr´emisses`≤pc et `Ct assurent que cette fonction peut ˆetre appliqu´ee, ce qui est n´ecessaire pour d´erouler le point fixe. Enfin, le deuxi`eme argument defix, v2, est la valeur pass´ee en argument `a la fonction d´efinie r´ecursivement. Elle doit avoir le type t0, de telle sorte que l’applicationfixv1v2 produit finalement un r´esultat de typet avec l’effetr. On peut obtenir,

`

a partir des r`egles e-let, v-abs, e-app et e-fix, la r`egle suivante pour la construction let rec propos´ee section5.1.3(page102) :

Je montre maintenant que ces r`egles de typage sont correctes, c’est-`a-dire v´erifient, avec les r´eductions donn´ees section5.2.4(page108), les hypoth`eses6.14et 6.15.

Lemme 6.18 L’hypoth`ese6.14 (page126) est v´erifi´ee par les primitives+,b ref,:=, !,projj, caseet

fix.

Je raisonne par cas suivant la r`egle utilis´ee pour obtenir (H4). Je consid`ere tout d’abord les r`egles qui ne modifient pas l’´etat m´emoire, c’est-`a-dire telles que ˙µ = ∅. Pour celles-ci, il faut choisirM0=M, et les buts (C2) et (C3) sont imm´ediats. Il reste `a v´erifier le but (C1).

132 Chapitre 6·Typage et non-interf´erence

132 Chapitre 6·Typage et non-interf´erence