• Nenhum resultado encontrado

4.3 Raffinement

4.3.3 Préservation du typage par le raffinement

Nous sommes prêts maintenant pour énoncer le théorème de préservation du typage par le raffinement.

Théorème 4.3.1. Soit un jugement de typage · „e:··Ádérivable. Alors il existe un effet ÁÕ tel que le jugement

( )· ( )„e: (·ÁÕ

est dérivable et quel que soit un type · œdom , si Á Û ·, alors ÁÕ Û (·).

Démonstration. Par récurrence sur la dérivation du typage. Remarquons au préalable que si l’effet Á = ‹, poser ÁÕ = ‹ vérifie trivialement l’implication de l’énoncé. Par conséquent, les cas ou e est une expression atomique (variable, constante, adresse mémoire) ainsi que le cas oùe est de forme a.f (accès au champs f) se vérifient direc- tement en appliquant la définition du raffinement. Le cas oùeest une conditionnelle se montre en appliquant directement l’hypothèse de récurrence. Traitons donc les quatre cas restants.

Cas de la règle T-Let. La dérivation du typage dee se termine par

· „e1 :·1·Á1 [x‘æ·1]· „e2 :·2 ·Á2

œ (Fv(e2)\ {x})fi (F¸(e2))1Û fl

· „letx = e1 in e2 :·2·Á1ÛÁ2

En appliquant l’hypothèse de récurrence, nous avons

( )· ( ) „e1 : (·1ÁÕ1 et ( )[x‘æ (·1)]· ( )„e2 : (·2ÁÕ2 avec des effetsÁÕ1 etÁÕ2 tels que

· œdom .(Á1Û · =∆ ÁÕ1Û (·)) · (Á2Û · =∆ ÁÕ2Û (·)) D’après le lemme3.2.4, on a donc

· œdom 1ÛÁ2Û · =∆ ÁÕ1 ÛÁÕ2Û (·).

De plus, si une région Õ est dans ( (Fv(e2)\ {x})fi (F¸(e2))), elle s’écrit alors () pour une certaine région dans (Fv(e2)\ {x})fi (F¸(e2)). Or, puisque par hypothèse Á1 Û fl, on a, d’après ce qui précède, ÁÕ1 Û flÕ. Ainsi, on peut conclure en dérivant le jugement

( )· ( ) „e1 : (·1ÁÕ1 ( )[x‘æ (·1)]· ( )„e2 : (·2ÁÕ2

Õ œ ( (Fv(e2)\ {x})fi (F¸(e2)))Õ1Û flÕ ( )· ( ) „letx =e1 in e2 : (·2ÁÕ1ÛÁÕ2

Cas de la règle T-Alloc. La dérivation du typage dee se termine par

· „ai :·i·‹ ={fi :·iiœ[1, ..., n]}r fi deux à deux distincts

· „{fi =aiiœ[1, ..., n]}:·(?· {})

Par définition, () ={fi : (·i)iœ[1, ..., n]}r. Par hypothèse de récurrence, nous avons pour i œ [1, . . . , n], que le ( )· ( ) „ ai : (·i)·‹ est dérivable. On peut donc dériver

( )· ( )„ai : (·i)·‹ () ={fi : (·i)iœ[1, ..., n]}r fi deux à deux distincts ( )· ( )„{fi =aiiœ[1, ..., n]}: ()·(?· { ()})

Montrons maintenant la partie de l’énoncé concernant ÁÕ qui est égal dans ce cas à (?· { ()}). Considérons un type · œdom tel que(?· {})Û ·. Puisque l’ensemble des régions écrites est vide, on a(?· {})Û · si est seulement si ou bien· est une sous- région stricte de , ou bienR()flR(·) =?. Dans le premier cas, (·)est clairement une sous-région stricte de (). Dans le deuxième cas,R( ())flR( (·)) = ?d’après le lemme de séparation. On a donc(?· { ()})Û (·) ce qui permet de conclure.

Cas de la règle T-Assign. La dérivation du typage de e se termine par

· „ai :i·‹ · „aÕi,j :·i,jÕ ·‹ i.fi,j ƒ·i,jÕ i deux à deux distincts ’i. fi,j deux à deux distincts

Ï = (i.{fi,j Ω·i,jÕ jœ[1, ..., ki]}iœ[1, ..., n])

· „ai.{fi,j ΩaÕi,j jœ[1, ..., ki]}iœ[1, ..., n] :Unit·({1, . . . , n} ·Ï)

En appliquant l’hypothèse de récurrence, on a pouriœ[1, . . . , n]etj œ[1, . . . , ki]la dérivabilité des jugements

( )· ( ) „ai : (i)·‹ et ( )· ( )„aÕi,j : (·i,jÕ )·‹.

De plus, le raffinement préserve l’égalité structurelle, donc on a (i).fi,j ƒ (·i,jÕ )en vertu des relations i.fi,j ƒ·i,jÕ .

Posons ÏÕ = ( (i).{fi,j Ω (·i,jÕ ) jœ[1, ..., ki]}iœ[1, ..., n]) et désignons par AÕ l’argu- ment de l’opération . Rappelons que AÕ correspond à la projection de l’affectation parallèle au niveau des types. Tout d’abord, montrons que l’opération est bien définie surAÕ. Pour cela, introduisons les notations suivantes. Comme au chapitre précédent2, notons AÕ( (i), fi,j) , (·ijÕ ) et AÕ(fl, g) , fl.g lorsque la région n’est pas dans { (1), . . . , (n)}. Notons aussi que pour œ R({ (1), . . . , (n)}), on définit AÕ(fl,fi)comme dans le chapitre précédent, à savoir par les équations :

AÕ(fl,fi),

Y_ _] __ [

si =

AÕ(fl, f) si =f‘ etAÕ(fl, f) = AÕ(Õ,fiÕ) si =ffiÕ et AÕ(fl, f) = Õ

Posons maintenant la relation binaire AÕ , {ÈAÕ( (i),fi), (i).fiÍ |i œ[1, . . . , n]} et montrons que AÕ est bijective.

2. Voir le paragraphe 2 de la page94

Tout d’abord, pour tout chemin tel que (i).fi est défini, notons ,, où est le plus long préfixe de tel que i.fi soit défini. Remarquons alors que

AÕ( (i),fi) = (A(i,fi)).fi

ce que l’on peut encore représenter graphiquement à l’aide de la figure 4.3 laquelle montre comment chaque paire dans AÕ est structurée :

i

i.⇡ A(⇢i, )

(ri)

(⇢i).⇡ A0( (⇢i),⇡ )

(⇢i).⇡ A0( (⇢i),⇡) (⇢i.⇡ ).⇡ (A(⇢i, )).⇡

= =

Figure4.3 – La structure de AÕ .

En effet, le raffinement préserve la structure d’aliasing, donc A(i,fi) étant bien dé- fini, on a AÕ( (i),fi) = (A(i,fi)). De plus, si le suffixe n’est pas vide, alors nécessairement i.fi est un type privé. Par conséquent, il ne fait pas partie des types { (1), . . . , (n)}et donc a bien

AÕ( (i),fi) =AÕ( (A(i,fi),fi)) = (A(i,fi)).fi. Considérons maintenant dans AÕ deux paires

ÈAÕ( (i),fii), (i).fiiÍ et ÈAÕ( (j),fij), (j).fijÍ

pour lesquelles posons respectivementi ,ii etj ,jj. Il suffit alors de montrer l’équivalence4.1 ci-dessous :

(i).fiii = (j).fijj ≈∆ AÕ( (i),fiii) = AÕ( (j),fijj). (4.1) Pour cela, remarquons que pour tout Èfl,flÕÍ œAÕ, on a clairement ƒÕ. Par consé- quent, lorsque l’un des quatre types (i).fii, (j).fij, AÕ( (i),fii), AÕ( (j),fij) est un type scalaire, l’équivalence 4.1 est trivialement vérifiée.

Sinon, les quatre types dénotent nécessairement des régions avec le même statut public/privé. Or, dans ce cas-là, le chemin i est vide si et seulement si le chemin j

l’est. En effet, si l’un des deux chemins est vide, alors que l’autre ne l’est pas, cela contredit l’hypothèse de fraîcheur des indices introduits par le raffinement.

Lorsque i ==j, l’équivalence4.1 est vérifiée, car d’une part le raffinement est injectif et d’autre part la relationA est bijective par hypothèse du typage de e.

Supposons enfin que ni i, ni j ne sont vides. Or, dans ce cas-là, les quatre types considérés étant des régions, on a, en vertu de l’hypothèse de séparation, les deux équivalences ci-dessous :

(i).fii = (j).fij ≈∆i.fii =j.fij

AÕ( (i),fii) =AÕ( (j),fij) ≈∆A(i,fii) =A(j,fij)

lesquelles, mises ensemble, impliquent l’équivalence 4.1 et donc la bijectivité de AÕ. En résumé, on a montré que surAÕ est bien défini, ce qui permet de poser

ÏÕ ,{ | il existe Õ ”= telle que Èfl,flÕÍ œAÕ ouÈÕ,flÍ œAÕ} et dériver le jugement de typage

( )· ( )„aÕi,j : (·i,jÕ )·‹ ( )· ( )„ai : (i)·‹ (i) deux à deux distincts ’i. fi,j deux à deux distincts (i).fi,j ƒ (tÕi,j) ÏÕ = ( (i).{fi,j Ω (·i,jÕ ) jœ[1, ..., ki]}iœ[1, ..., n]) ( )· ( )„ai.{fi,j ΩaÕi,j jœ[1, ..., ki]}iœ[1, ..., n]:Unit·({ (1), . . . , (n)} ·ÏÕ) On a donc poséÁÕ = ({ (1), . . . , (n)}·ÏÕ)et il reste à montrer que pour· œdom on a l’implication Á Û · =∆ ÁÕ Û (·). Montrons ce résultat par récurrence sur la dérivation du jugement ÁÕÛ ·. Le résultat est immédiat lorsque · est un type scalaire ou bien quand· est l’une des régions parmi 1, . . . ,fln. Traitons le cas inductif où· est une région telle queœ/ {1, . . . ,fln},œ/ Ïet telle que pour toutf, sifl.f est défini, alors ({1, . . . ,fln} ·Ï)Û fl.f. Il est clair que () œ/ { (1), . . . , (n)}. Supposons par absurde que () œ ÏÕ. Puisque œ/ Ï, on a () œ/ (Ï). Donc, si () œ ÏÕ, c’est que ()est nécessairement une région fraîche introduite par le raffinement. Or, cela contredit l’hypothèse que œdom . Donc, (/ ÏÕ.

Il reste donc à montrer que pour tout champ f tel que ().f est défini, on a ÁÕÛ ().f. Par hypothèse de récurrence, on a, pour tout f tel que fl.f est défini, ÁÕÛ ().f. Bien entendu, cela ne suffit pas pour conclure, car il faut considérer également les champs f tel que ().f soit une région fraîche introduite par le raffinement.

Supposons par absurde qu’il existe un champf tel que la région ().f, introduite par le raffinement, est dansÏÕ. Cela signifie qu’il existe une régioniet un chemin , tels que È (A(i.fi),fi), (i.fi).fiÍ œ AÕ avec (A(i.fi),fi) ”= (i.fi).fi et tels que ().f est égal ou bien à (i.fi).fi, ou bien à (A(i.fi).fi. En prenant la contraposée de l’hypothèse de séparation, on a alors, selon le cas, ou bien =i.fi, ou bien =A(i,fi).

D’autre part, par hypothèse n’est pas dans Ï, donc nécessairement A(i,fi) = i.fi. Par conséquent, (A(i,fi)) = (i.fi), ce qui contredit le fait que (A(i.fi),fi)”=

(i.fi).fi. Ainsi, on a bien ÁÕÛ ().f pour tout f tel que ().f est défini, ce qui permet de conclure.

Cas de la règle T-Call. La dérivation du typage dee se termine par p:·1. . .·næ·0·(Ê·Ï) · „ai :(·i)·‹

· „p(a1, . . . , an):(·0)·((Ê(Ï)) Le raffinement de la signature dep est égale à

(·1)◊ · · ·◊ (·n)æ (·0)·(ÊÕ ·ÏÕ)

où pour toute région dans R(·1, . . . , ·n), (Ê·Ï)Û fl implique(ÊÕ·ÏÕ)Û (). Appli- quons le lemme4.3.2aux types·0, . . . , ·net à la substitution, ce qui donne l’existence d’une substitution Õ telle que pour tout iœ[0, . . . , n] on a

Õ( (·i)) = ((·i)).

La substitution de régions Õ et le raffinement étant injectifs, leur composition l’est également. Par conséquent, pour tout · œ {·0, . . . ,·n} et tout chemin tel que ·.fi est défini, on a Õ( (·.fi)) =Õ( (·)).fi. En particulier, les régions dans l’effet(ÊÕ·ÏÕ) étant incluses dans R( (·0), . . . , (·n)), l’effet (Õ(ÊÕÕ(ÏÕ)) est bien défini.

Appliquons maintenant l’hypothèse de récurrence au typage des atomes a1, . . . , an, ce qui donne ( )· ( ) „ai : ((·i))·‹ pour tout iœ[1, . . . , n]. Par conséquent, on peut dériver le jugement

p: (·1)◊ · · ·◊ (·n)æ (·0)·(ÊÕ·ÏÕ) ( )· ( )„ai :Õ( (·i))·‹ ( )· ( ) „p(a1, . . . , an):Õ( (·0))·(Õ(ÊÕÕ(ÏÕ))

Il reste à monter que quel que soit un type · œ dom , lorsqu’on a ((Ê(Ï))Û ·, alors on a(Õ(ÊÕÕ(ÏÕ))Û (·). Montrons le résultat par récurrence sur la dérivation du jugement((Ê(Ï))Û · en raisonnant par cas, selon que · est dans l’image de ou pas. Lorsque· est un type scalaire, le résultat est trivial. Supposons donc que · est une certaine région . Lorsque œIm, il existe doncı œdom telle que =(ı).

Dans ce cas-là, on a((Ê(Ï))Û ◊(ı)et donc(Ê·Ï)Û flı, puisque est injective. Par ailleurs, comme ı œdom, on a ı œR(·01, . . . ,·n), Montrons que nécessairement ı œ R(·1, . . . ,·n). En effet, si ı œ R(·0)\ R(·1, . . . ,·n), alors ı œ Ï, ce qui est impossible, puisque (Ê ·Ï)Û flı. Donc, ı œ R(·1, . . . ,·n). D’après la définition du raffinement, on a alors (ÊÕ·ÏÕ)Û (ı), ce qui permet d’écrire

(Õ(ÊÕÕ(ÏÕ))Û ◊Õ( (ı))

et puisque ı œ R(·1, . . . ,·n), on a d’après ce qui précède, Õ( (ı)) = ((ı)) = (), ce qui permet de conclure dans le cas où œIm.

Sinon, considérons le cas où œ/ Im. On en déduit que œ/ (Ê) etœ/ (Ï). Par conséquent, comme((Ê(Ï))Û fl, on déduit que, pour tout champf tel quefl.f est défini, on a ((Ê(Ï))Û fl.f. Par hypothèse de récurrence, on a alors pour toutf tel que fl.f soit défini (Õ(ÊÕÕ(ÏÕ))Û ().f. Montrons également que pour tout fÕ tel que le type ().fÕ soit défini avec fÕ frais, on a (Õ(ÊÕÕ(ÏÕ))Û ().fÕ. Supposons par l’absurde que ce n’est pas le cas pour un certain fÕ. Alors, il existe un chemin tel que la région ().fÕ œ Õ(ÏÕ) et tel que pour tout Õ ª , ().fÕÕ œ/ Õ(ÊÕ).

Or, puisque ().fÕ œ Õ(ÏÕ), on peut écrire ().fÕ = Õ( (·j).fijj) pour un certain type ·j parmi les types ·0, . . . ,·n et un certain chemin jj. On en déduit l’égalité ().fÕ = ((·j.fij)).fijj est nécessairement un chemin non-vide, car sinon, on aurait l’égalité entre deux régions où l’une d’entre elles aurait un indice frais alors que l’autre non, donc l’égalité entre deux régions ayant des indices distincts, ce qui est absurde. Mais alors, cela signifie que et (·j.fij) sont deux régions privées telles que l’intersection de () avec ((·j.fij)) n’est pas vide. D’après l’hypothèse de séparation, cela implique que = (·j.fij) et contredit ainsi l’hypothèse que n’appartient pas à l’image de. Ainsi, pour tout champfÕtel que ().fÕ est défini, on a(Õ(ÊÕÕ(ÏÕ))Û ().fÕ. Il suffit donc de vérifier que (/ Õ(ÊÕ)et que (/ Õ(ÏÕ), ce qui se démontre par l’absurde de la manière identique au raisonnement que nous venons de faire. Par conséquent, on peut dériver(Õ(ÊÕÕ(ÏÕ))Û ◊Õ( (0))par la règle

vpind, ce qui permet de conclure dans le cas de l’appel de fonction.