• Aucun résultat trouvé

Plongements de l’Appel-Par-Nom et de l’Appel-Par-Valeur

3.3 Calcul à ressources pour Λ pv

3.4.2 Plongements de l’Appel-Par-Nom et de l’Appel-Par-Valeur

l’Appel-Par-Pousse-Valeur est connu pour subsumer à la fois les stratégies d’Appel-Par-Nom et d’Appel-Par-Valeur. En particulier, les deux peuvent être plongées dans Λpv. Si l’on considère le λ-calcul simplement typé5 Λ, on donne deux fonctions ()v, ()n: Λ → Λ

pv, définies en figure 3.7. On ne considère pas ici Traduction Appel-Par-Nom Traduction Appel-Par-Valeur

(x)n= der(x) (x)v= der(x)!

(M N )n = hMni(Nn)! (M N )v= hder(M )iN

(λxM )n= λxMn (λxM )v = (λxMv)!

Figure 3.7 – Deux traductions, ()n et ()v, de Λ vers Λpv.

de calcul avec produits, ou autres constructeurs explicites, de façon à se concen- trer dans un cadre plus simple sur la relation entre les exponentielles et les stra- tégies de réduction (voir les travaux d’Ehrhard et Tasson [ET16] pour les exten- sions). Nos traductions assurent par exemple les propriétés suivantes (pour plus de précisions sur ces traductions, voir les travaux originaux de Levy [Lev06]) : 5. Nous n’expliciterons pas le typage, car les traductions fonctionnent de la même façon qu’avec le λ-calcul pur (par exemple quand il est traduit dans les réseaux de preuve). Mais comme le calcul cible, Λpv, est typé, cette restriction est nécessaire.

((λxM )N )v

pv (M [N/x])v si et seulement si N est une variable ou une abs- traction, et ((λxM )N )n →pv (M [N/x])n pour tous M, N . On parvient donc bien à isoler les deux stratégies : on rappelle qu’en Appel-Par-Valeur usuel, les valeurs sont bien les variables et les abstractions.

Du point de vue du développement de Taylor, soient Tnet Tvrespectivement le développement de Taylor classique (Ehrhard et Regnier [ER03]), par nom, et le développement par valeur (introduit par Ehrhard [Ehr12], et étudié de façon plus approfondie par Kerinec, Manzonetto et Pagani [KMP18]). On peut vérifier la correction de la construction de notre calcul à ressources ∆pvet de son développement Tpvpar rapport à ces traductions, en utilisant Tn et Tv qui sont définis en figure 3.8. Le premier est défini sur ∆n, qui est le calcul à ressources

Développement de Taylor par nom Tn(x) = {x}

Tn(M

1M2) = {hm1im2| m1∈ Tn(M1), m2∈ Tn(M2)!} Tn(λxM ) = {λxm | m ∈ Tn(M )}

Développement de Taylor par valeur Tv(x) = {[x] k| k ∈ N} Tv(M 1M2) = {hm1im2| mi ∈ Tv(Mi)} Tv(λxM ) = {[λxm 1, . . . , λxmk] | mi∈ Tv(M )} Figure 3.8 – Tv: Λ → P (∆v) et Tn: Λ → P (∆n)

original de Ehrhard et Regnier [ER03], et le second est défini sur ∆v, un calcul

à ressources par valeurs introduit par Ehrhard [Ehr12]. Les deux sont décrits en figure 3.9. ∆n v m, n ::= x | λxm | hmin m, n ::= [x]k| [λxm1, . . . , λxmk] | hmin hλxmi[n1, . . . , nk] → m[n1/xf (1), . . . , nk/xf (k)] h[λxm]i[n1, . . . , nk] → m[n1/xf (1), . . . , nk/xf (k)]

si k = degx(m) etf ∈ Sk si k = degx(m) etf ∈ Sk

Figure 3.9 – Calculs à ressources par nom et par valeur

Propriété 4. Soit e la fonction qui supprime toutes les dérélictions d’un ensemble

de termes (les dérélictions n’existent pas dans ∆nni dans ∆v). Pour tout terme

M ∈ Λ, e(Tpv((M )v)) = Tv(M ) et e(Tpv((M )n)) = Tn(M ).

Démonstration. La preuve consiste en une récurrence sur M via un simple exa-

men des définitions. Commençons par les constructions d’Appel-Par-Valeur : Le cas de la variable est immédiat, car Tpv(xv) = {der(x)}!, et Tv(x) = {x}!. Tpv((λxM )v) = Tpv((λxMv)!) = {[λxm1, . . . , λxmk] | k ∈ N, mi ∈ Tpv(Mv)}, on conclut, car par hypothèse de récurrence, e(Tpv(Mv)) = Tv(M ), et car on a :

Tv(λxM ) = {[λxm0

Le cas de l’application est traité par un argument similaire avec un appel à l’hypothèse de récurrence, et par le fait que e(hder(M )iN ) = he(M )ie(N ).

Pour l’Appel-Par-Nom, on considère seulement le cas de l’application, les autres étant immédiats : Tpv((M N )n) = {hmin | m ∈ Tpv(Mn), n ∈ Tpv(Nn)!}. Par hypothèse de récurrence, e(Tpv(Mn)) = Tn(M ) et e(Tpv(Nn)) = Tn(N ), et on peut conclure.

Avec la propriété de simulation de Tpv(propriété 4), la Propriété 4 éclaire le fait que l’Appel-Par-Pousse-Valeur subsume bien l’Appel-Par-Nom et l’Appel- Par-Valeur, de façon à ce que cela reste valide au niveau des constructions relatives à la consommation de ressources.

3.4.3

Finitude

Dans cette section, nous montrons un résultat (analogue au théorème 6 pour les réseaux à ressources), qui permet également de considérer une version quantitative du développement de Taylor, et d’étendre la réduction du calcul à ressources à des séries infinies avec coefficients. Les conditions de validité de ce résultat, concernant la finitude de l’antiréduction, ont été largement étu- diées [CV18, PTV16, Vau17] dans des systèmes non uniformes, probabilistes, et nous avons produit une étude [Cho19] de ces différentes méthodes de démons- trations relativement à différentes stratégies de réduction.

On définit une relation de cohérence, à la façon de Ehrhard et Regnier [ER08], entre les éléments de ∆pv, dont on montre qu’elle est stable par réduction à res- sources, et qui est telle que le développement de Taylor d’un terme de Λpvdéfi- nisse toujours une clique maximale pour cette relation (un ensemble de termes deux-à-deux cohérents). Cela nous permettra d’établir le résultat de finitude de l’antiréduction : pour tous n ∈ ∆pv et M ∈ Λpv, {m ∈ Tpv(M ) | m →=pv n} a au plus un élément.

Définition 34 (Relation de cohérence sur les termes de ∆pv). — x¨ x pour tout x. — i¨ j si i = j, pour i, j ∈ {1, 2}. — λxm¨ λxm0, πi(m)¨ πi(m0) et der(m)¨ der(m0) si m¨ m0. — hmin¨ hm0in0 si m¨ m0 et n¨ n0. — (m1= m2) · n¨ (m01= m02) · n0 si m1¨ m01 et si m2= m02→ n¨ n0 — [m1, . . . mk]¨ [mk+1, . . . , mk+l] si ∀i, j ∈ {1, . . . , k + l}, mi¨ mj.

On remarque que dans les termes de la forme (m1= m2) · n, on ne demande pas que m1 soit cohérent avec m2. Cela tient au fait que nous voulons que le développement de Taylor soit une clique pour la cohérence : or, le développement de Taylor pourra donner des termes comme (π1((m1, m2)) = m1) · n, où les termes dont l’égalité est testée ne sont pas cohérents entre eux avant réduction, mais doivent tout de même l’être avec les autres termes de cette forme issus du développement de Taylor.

Propriété 5. Soient m¨ m0, et {n1, . . . , ndegx(m), n01, . . . , n0degx(m0)} un ensemble

de termes deux-à-deux cohérents. Alors, on a :

Démonstration. La propriété se montre par une simple récurrence sur m. Lemme 42. Pour tout terme M de Λpv, Tpv(M ) est une clique pour¨.

Démonstration. La preuve est par induction sur M . On détaille seulement le cas

du point fixe, les autres constructions pouvant être traitées par de simples ap- plications de l’hypothèse de récurrence. Soit M = fixx(N ). Tpv(M ) = {fixkx(n) |

n ∈ Tpv(N ), k ∈ N}. On montre d’abord par induction sur k que fixkx(n) est

une clique pour tout k, puis on montrera que les éléments de fixk+1(n) sont cohérents avec ceux de fixkx(n).

— fix0x(n) est évidemment une clique, car c’est un singleton.

— Soient m1, m2∈ fixk+1x (n). m1 = n[n1/x1, . . . , ndegx(n)/xdegx(n)] et m0 =

n[n01/x1, . . . , n0degx(n)/xdegx(n)] où tous les niet n0jsont éléments de fix k x(n)!.

Par hypothèse de récurrence, fixkx est une clique, donc tous les éléments de niet n0j sont cohérents deux-à-deux. Pour conclure ce cas, on applique

la propriété 5 qui entraîne bien m1¨ m2.

Soient maintenant m1 ∈ fixk+1x (n) et m2 ∈ fixkx(n). Si k = 0, On a m1 =

n[n1/x1, . . . , ndegx(n)/xdegx(n)] et m2= n[[]/x1, . . . , []/xdegx(n)] où les ni et sont

éléments de fix0x(n). Alors on conclut par la propriété 5, car []¨ n pour tout multiensemblen.

Si k = l + 1, alors m1= n[n1/x1, . . . , ndegx(n)] et m2= n[n01/x1, . . . , n0degx(n)] où lesni et sont éléments de fixl+1x (n) et les n0j sont éléments de fix

l

x(n)!. par

hypothèse de récurrence (sur l), les éléments de fixlx(n) sont cohérents avec ceux de fixl+1x (n), donc on peut également conclure par la propriété 5.

La relation de cohérence que l’on a introduite permet de comparer des termes ayant la même forme. En particulier, si deux termes cohérents sont des rédex, il y a une façon de les réduire tous deux de manière à obtenir deux réduits cohérents entre eux. Notons que la cohérence n’est pas préservée par la réduction en général. Par exemple, soient π1(m1, n1)¨ π1(m2, n2). π1(m1, n1) se réduit en m1, et π1(m2, n2) en π1(m02, n2) si m2 se réduit en m02, ce qui donne bien deux réduits non cohérents. Le lemme suivant établit que si l’on réduit deux termes cohérents « au même endroit », alors la cohérence est préservée.

Lemme 43. Soient m, m0, n, n0 tels que m¨ m0, et soient : — m = hλxriv, m0 = hλxr0iv0, avec (v 1, . . . , vk) ∈ splitk(v) et (v10, . . . , vk0) ∈ splitk(v0), n = r[v1/x1, . . . , vk/xk], et n0= r0[v01/x1, . . . , vk00/xk0]. — m = (u = (j, v)) · r, m0= (u0 = (j0, v0)) · r0, n = r et n0 = r0. — m = πi(n1, n2), m0= πi(n10, n02), n = ni et n0 = n0i. — m = der([r]), m0= der[r0], n = r et n0= r0.

— m = e[u], m0 = e[u0], n = e[r] et n0= e[r0] avec les réductions u →rpvr et

u0→rpvr0 suivant un des cas ci-dessus. Alors n¨ n0. Si, de plus, n = n0, alors m = m0.

Démonstration. La plupart de ces cas se traitent par induction structurelle sur

m et m0. On traite seulement le premier point qui n’est pas immédiat, mais

Par construction, r¨ r0 et v¨ v0. Si l’on montre que {v1, . . . , vk, v01, . . . , v0k}

forme un ensemble de termes deux-à-deux cohérents, cela suffira pour conclure en appliquant la propriété 5.

On établit ce point par induction sur v. Si v = x, alors v0 et tous les vi, vj0

sont également égaux à x. Si v = [n1, . . . , nk], alors v0 = [n01, . . . , n0l] avec tous

les ni et n0j deux-à-deux cohérents. Les vi et vj0 étant des multiensembles de

termes de v (respectivement de termes de v0), ils sont bien deux-à-deux cohérents également. Pour conclure que découpage split() conserve bien la cohérence, on applique l’hypothèse de récurrence sur la paire et l’injection.

Notre objectif maintenant est de montrer, à l’aide des résultats précédent, que si, pour M ∈ Λpv, m, m0 ∈ Tpv(M ), on a m →=rpv n et m0 →=rpv n, alors

m = m0.

Lemme 44. Soient m, m0, n, n0 tels que m ¨ m0, m →=rpv n et m0 →= rpv n0. Si

n = n0 alors m = m0.

Démonstration. La preuve est par cas sur la réduction. On traite le cas réflexif

à part, et appliquons le lemme 43 pour la réduction stricte.

— Si m = n, alors m = m0 = n = n0, car un terme n’est jamais cohérent avec l’un de ses réduits stricts, par construction, donc on ne peut pas avoir

m¨ m0, m0→rpvn et m = n, car sinon l’on aurait m0¨ n également. — Sinon, m, m0, n, n0 respectent l’une des hypothèses du lemme 43, et on

conclut.

En combinant les résultats précédents, on obtient le lemme suivant, qui cor- respond à l’objectif de cette section sur la finitude de l’antiréduction :

Lemme 45 (Finitude de l’antiréduction). Soit n ∈ ∆pv, et M un terme de Λpv.

card{m ∈ ∆pv; m ∈ Tpv(M ), m →=rpvn} ≤ 1.

Démonstration. Par le lemme 42, Tpv(M ) est une clique, et par le lemme 44, si

m, m0 ∈ Tpv(M ) se réduisent en n, m = m0, donc n ne peut en effet pas avoir plus d’un antiréduit dans Tpv(M ).