• Aucun résultat trouvé

On définit la relation binaire ¹ sur les expressions par la propriété suivante :

e ¹ e0 ssi ∀G, ∀t, (G ` e : t) ⇒¡G ` e0: t¢ LEMME4.10.Pour tout contexte E, si e ¹ e0, alors E[e] ¹ E[e0].

Démonstration. On examine tous les cas possibles pour le contexte E .

• Si E = [] e0, alors E [e] = e e0. Prenons G et t quelconques tels que : G ` e e0: t (1). Par le

lemme 4.3 appliqué à cette dernière dérivation, il existe t0tel que G ` e : t0→ t(2)et G ` e0: t0(3).

Par l’hypothèse e ¹ e0 appliquée à(1), on sait que G ` e0: t0 → t (4). On déduit en appliquant la

règle (APP) à(3)et(4)que G ` e0e0: t et on conclut en remarquant que e0e0= E[e0].

• Si E = e0[], la preuve est presque identique au cas [] e0.

• Si E =let x = []in e0, alors E [e] = let x = e in e0. Prenons G et t quelconques tels que

G `letx = eine0: t (5). Par le lemme 4.2, on peut trouver une dérivation simple de(5). Celle-ci

4.5. LEMME DE PRÉSERVATION DU TYPAGE 71

Prenons maintenant un élément t0 quelconque de T0. Par la règle (INST) appliquée à (6)on a G `

e : t0(9). On peut appliquer l’hypothèse e ¹ e0 à(9)pour déduire G ` e0: t0. Comme on a montré ce

dernier jugement pour tout t0∈ T0, on peut appliquer la règle (GEN) pour trouver G ` e0: T0(10). On

peut alors réappliquer la règle (LET) à(10)et(7), de sorte que G `let x = e0ine0: T , c’est-à-dire

G ` E [e0] : T (11). On conclut en appliquant la règle (SUB]) à(11)et(8).

• Si E = C {`1= e1; . . . ; `i = []; . . . ; `n = en}. Prenons G et t quelconques tels que :

G ` C {`1= e1; . . . ; `i = e; . . . ; `n = en}

| {z }

E [e]

: t

(12)

Par le lemme de simplification 4.2, on peut trouver une dérivation simple de ce jugement. Celle-ci se termine forcément par la règle (OBJET) et il existe t0tel que t0 6 t, t0∈ #C, G ` e : C ·`i(t0)(13)et

G ` ej: C ·`j(t0)pour tout j 6= i . En appliquant l’hypothèse e ¹ e0à(13), il vient G ` e0: C ·`i(t0).

On peut alors réappliquer les règles (OBJET) puis (SUB) pour conclure :

G ` C©`1= e1; . . . ; `i = e0; . . . ; `n = en ª | {z } E [e0] : t ¥ LEMME 4.11 (PROJECTION).Si G ` e : t et filtre(e, π ) = vrai, alors il existe G0 et t0 tels que

t ` π : t0; G0, t0 6 t, G ` e : t0et G ` e ↓ π : G0

Démonstration. Écrivons G ` e : t (1) etfiltre(e, π ) = vrai (2) et procédons par induction sur la structure du motif π .

• Si π = _, il suffit de prendre t0 = t et G0 = ∅.

• Si π = $ , alors, par définition du filtrage, on a e = a (3) et a ∈ $ (4). Prenons t0 = a et G0= ∅. Par le lemme 4.4, on sait que t06 t. Par la règle (π -PRIM), on a aussi t0` π : t0; ∅ et par la

règle (π -SUB) t ` π : t0; ∅. Enfin e ↓ π étant vide, l’environnement vide ∅ en est un typage correct.

• π = π0 as x. Par définition du filtrage et de la projection, on afiltre(e, π0) =vrai(5)et e ↓ π =

e ↓ π0⊕ [x 7→ e](6). Appliquons l’hypothèse d’induction à(5)et(1). On peut donc trouver t0et G00

tels que t06 t (7), t ` π0: t0; G00(8), G ` e ↓ π0: G00(9)et G ` e : t0. Posons alors G0 = G00[x : t0].

Par la règle (π -LIEUR) appliquée à(8), on a t0 ` π : t0; G0. Par ailleurs, par (6) et (9), on a aussi

G ` e ↓ π : G0.

• Si π = #C {`1= π1; . . . ; `n= πn}, alors, par définition du filtrage, e est forcément un objet de

classe C, c’est-à-dire de la forme e = C {`1= e1; . . . ; `n= en} (10). De plus, pour tout i ∈ [1, n],

on afiltre(ei, πi) = vrai (11). Par le lemme de simplification 4.2, on peut considérer une dérivation

simple de(1). Vu la nature de e, celle-ci se termine forcément par la règle (OBJET) et il existe t0tel que

t06 t(12), t0∈ #C(13), G ` e : t0(14)et G ` ei: C ·`i(t0)(15). Appliquons l’hypothèse d’induction

à(11)et(15)pour chaque i ∈ [1, n]. Il existe donc ti0et G0itels que ti0 6 C ·`i(t0)(16), G ` ei: ti0(17),

C ·`i(t0)` πi: ti0; G0i (18)et G ` ei↓ πi: G0i (19). Les équations(13)et(18)constituent les prémisses

de la règle (π -CLASSE), ce qui permet de déduire t0 ` π : t0; G01⊕ · · · ⊕ G0n. Posons finalement

G0 = G0

1⊕ · · · ⊕ G0n. Il reste à montrer que G ` e ↓ π : G0. Prenons x ∈ fv(π ). Comme l’ensemble

des variables libres de chacun des sous-motifs πi sont deux-à-deux disjoints, il existe un unique i tel

que x ∈ fv(πi)et on a alors (e ↓ π )(x) = (ei↓ πi)(x). On conclut en appliquant(19)et en remarquant

• π = C {`1= π1; . . . ; `n= πn}. Par définition du filtrage, on a pour une certaine classe C0 v C :

e = C0{`1= e1; . . . ; `n= en; . . . ; `n0 = en0} (20)et pour tout i ∈ [1, n],filtre(ei, πi) = vrai(21). Par le lemme de simplification 4.2, on peut considérer une dérivation simple de (1). Étant don- née la forme de e, cette dérivation se termine forcément par la règle (OBJET) et il existe t0 tel que

t0 6 t (22), t0 ∈ #C0 (23), G ` e : t0 (24) et, pour tout i ∈ [1, n], G ` e

i: C0·`i(t0) (25).

L’axiome (APPROXIMATION) appliqué à (23) nous dit qu’il existe t00 ∈ #C tel que t0 6 t00. En

appliquant l’axiome (CHAMPS-COVARIANTS) à cette dernière inégalité et sachant C0 v C, il vient C0·`

i(t0) 6 C ·`i(t00)(26). Par la règle (SUB) appliquée à(25)et(26), on a G ` ei: C ·`i(t00)(27).

Appliquons maintenant l’hypothèse d’induction à(21)et(27)pour chaque i ∈ [1, n]. Il existe donc ti0 et G0i tels que ti0 6 C ·`i(t00)(28), G ` ei: ti0(29), C ·`i(t00)` πi: ti0; Gi0 (30)et G ` ei↓ πi: G0i (31).

Le jugement(30) et le fait que t00 ∈ #C constituent les prémisses de la règle (π -CLASSE), ce qui permet de déduire :

t00 ` #C {`1= π1; . . . ; `n= πn} : t00; G01⊕ · · · ⊕ G 0 n

(32)

Finalement, cette dernière équation plus l’inégalité t0 6 t00 sont les prémisses de (π -SOUS-CLASSE) et on conclut t0 ` π : t0; G01⊕ · · · ⊕ G0n.

Le typage de la substitution e ↓ π est identique au cas précédent. ¥ LEMME4.12 (PRÉSERVATION DU TYPAGE).Si e −→ e0, alors e ¹ e0.

Démonstration. Par induction sur la dérivation de e −→ e0.

Si la dernière règle appliquée est (CONTEXTE), alors il existe E , e0 et e00 tels que e = E [e0],

e0 = E[e00] et e0 −→ e00 (1). En appliquant l’hypothèse d’induction à (1), il vient e0 ¹ e00 (2). On

conclut en appliquant le lemme 4.10 à(2).

• Si la dernière règle appliquée dans la dérivation de e −→ e0est différente de (CONTEXTE), considé- rons une dérivation quelconque de G ` e : t. Par le lemme de simplification 4.2, il existe un polytype

T 6] t et une dérivation simple de G `0 e : T . Supposons qu’on puisse en déduire que G ` e0: T .

Dans ce cas, on sait, par définition de6], qu’il existe un certain t0 ∈ T tel que t0 6 t. Par application de la règle (INST) suivie de la règle (SUB), il vient que G ` e0: t.

Pour montrer e ¹ e0, il suffit donc de prouver que G `0 e : T (3)implique G ` e0: T . Pour cela, nous considérons les différents cas possibles pour la règle R utilisée dans la dérivation e −→ e0. • Si R = (BETA), alors e = (fun x ⇒ e1)e2 et e0 = [x 7→ e2]e1. La dérivation de (3) étant

simple, on a T = t1, G ` e2: t2 (4) et G ` fun x ⇒ e1: t2 → t1. Par le lemme de simplifica-

tion 4.2, il existe t10 et t20 tels que t20 → t10 6 t2 → t1 (5) et G `0 (fun x ⇒ e1): t20 → t10 (6).

La dérivation de (6) se terminant nécessairement par (FUN), on a G[x : t20] ` e1: t10 (7). En ap-

pliquant l’axiome (FLÈCHE-VARIANCE) à (5), il vient t2 6 t20 (8) et t10 6 t1 (9). En appliquant la

règle (SUB) à(4)et(8), on a G ` e2: t20 (10). Par le lemme de substitution 4.9 appliqué à(7)et(10),

on sait que G ` [x 7→ e2]e1: t10 (11). Enfin, par la règle (SUB) appliquée à (9) et(11), on conclut

G ` [x 7→ e2]e1: t1, c’est-à-dire G ` e0: T .

• Si R = (BETA-LET), alors on a e = (let x = e1 in e2) et e0 = [x 7→ e1]e2. La dérivation du

jugement(3)étant simple, elle se termine forcément par (LET) et on a G ` e1: T1(12)et G[x : T1] `

e2: T (13). Par le lemme de substitution 4.9 appliqué à(12)et(13), on conclut G ` [x 7→ e1]e2: T ,

4.5. LEMME DE PRÉSERVATION DU TYPAGE 73

• Si R = (BETA-FIX), alors on a e = fix x ⇒ e0 et e0 = [x 7→ e]e0. La dérivation simple

du jugement (3) se terminant forcément par (FIX), on a G[x : T ] ` e0: T (14). Par le lemme de

substitution 4.9 appliqué à(3)et(14), on conclut G ` [x 7→ e]e0: T , c’est-à-dire G ` e0: T .

• Si R = (BETA-OBJ), on a, l’indice i étant fixé, e = C ·`i(C0{`1= e1; . . . ; `n= en}) et e0= ei. La

dérivation simple de(3)se terminant nécessairement par (APP), on a T = ti, G ` C ·`i: t → ti (15)

et G ` C0{`1= e1; . . . ; `n = en} : t (16). En appliquant le lemme de simplification 4.2 à(15), on

voit qu’il existe t00 et ti00 tels que t00 → t00

i 6 t → ti (17) et G `0 C ·`i: t00 → ti00 (18). Cette

dernière dérivation étant simple, elle termine forcément par la règle (GET) dont une des prémisses est C ·`i(t00) = ti00 (19) dont on déduit aussi t00 ∈ #C (20). Par ailleurs, en appliquant une nou-

velle fois le lemme de simplification 4.2 cette fois à (16), on trouve t000 tel que t000 6 t (21) et

G `0 C0{`1= e1; . . . ; `n = en} : t000 (22). Cette dernière dérivation, étant simple, se termine for-

cément par la règle (OBJET) dont on déduit G ` ei: ti000 (23) et C0·`i(t000) = ti000 (24), d’où égale-

ment t000 ∈ #C0 (25). En appliquant l’axiome (FLÈCHE-VARIANCE) à(17), on déduit t 6 t00 (26)

et ti00 6 ti (27). Par transitivité de 6 appliquée à (21) et (26), on sait donc que t000 6 t00 (28). Par

l’axiome (CLASSES-COVARIANTES) appliqué à(25),(20)et(28), on déduit que C0 v C (29). Puis, par l’axiome (CHAMPS-COVARIANTS) appliqué à(29)et(28), on déduit C0·`

i(t000) 6 C ·`i(t00)(30).

En tenant compte des égalités(19)et(24),(30)peut se réécrire ti000 6 ti00 (31). En appliquant la tran- sitivité de6 à(31)et(27), il vient alors ti000 6 ti (32). Par la règle (SUB) appliquée à(23)et(32), on

conclut G ` ei: ti, c’est-à-dire G ` e0: T .

• Si, R = (BETA-PRIM), on a alors e = f ha1, . . . ,ani (33), a0 = f (a1, . . . ,an) (34) et e0 =

a0 (35). La dérivation simple de(3) se terminant nécessairement par (APP), on a T = t0 (36), G `

f : t → t0 (37)et G ` ha1, . . . ,ani : t (38). En appliquant le lemme 4.2 à(37), on trouve t0 et t00

tels que G `0 f : t0 → t00 (39)et t0 → t00 6 t → t0 (40). La dérivation de (39) se terminant

nécessairement par la règle (PRIM), on déduit, l’indice i prenant toutes les valeurs entre 1 et n, t00 ∈

A0 (41), Tuple

n·i (t0) = ti0 (42)et ∀a1 ∈ t10, . . . ,an ∈ tn0, f (a1, . . . ,an) ∈ t00 (43). Par ailleurs,

ré-appliquons le lemme de simplification 4.2 à(38) : il existe donc u tel que u 6 t (44)et G `0

ha1, . . . ,ani : u (45). La dérivation de(45)se terminant forcément par (OBJET), on déduit que G `

ai: ui (46)etTuplen·i (u) = ui (47)où l’indice i prend toutes les valeurs entre 1 et n. Appliquons

maintenant l’axiome (FLÈCHE-VARIANCE) à(40). On déduit t 6 t0(48)et t00 6 t0(49). Par transitivité

de6 appliquée à(44)et(48), on sait u 6 t0(50). Par l’axiome (CHAMPS-COVARIANTS) appliqué

à (50) et à la classe Tuplen, il vient Tuplen·i (u) 6 Tuplen·i (t0) (51). En tenant compte des

égalités(42)et(47),(51)peut se réécrire ui 6 ti0(52). Par le lemme de typage des valeurs 4.4 appliqué

à(46), on sait que ai 6 ui (53). Par transitivité de6 appliquée à(53)et(52), il vient ai 6 ti0(54). Par

définition de ti0, il vient alors ai ∈ ti0(55). L’une des prémisse de(43)appliquée à(55)nous permet de

déduire f (a1, . . . ,an)∈ t00, c’est-à-dire a0 ∈ t00 (56). Par définition de t00, on sait alors que a06 t00(57).

Par transitivité de6 appliquée à(57)et(49), on a a0 6 t0(58). Par (CST), on sait G ` a0: a0(59)et

on conclut enfin par (SUB) appliquée à(59)et(58)que G ` a0: t0, c’est-à-dire G ` e0: T .

• Si R = (BETA-METH), alors e est de la forme e = (meth {π1⇒ e1; . . . ; πk ⇒ ek}) e0 (60)

et il existe un indice j tel que filtre(e0, πj) = vrai (61) et e0 = [e0↓ πj]ej (62). La dérivation

simple de (3) se terminant nécessairement par (APP), on a T = t1 (63), G ` e0: t0 (64)et G `

meth{π1⇒ e1; . . . ; πk ⇒ ek} : t0 → t1 (65). On peut réappliquer le lemme de simplification 4.2

à ce dernier jugement pour en trouver une dérivation simple. Celle-ci se termine forcément par la règle METH et il existe t00 et t10 tels que t00 → t0

1 6 t0 → t1 (66)et G ` πj ⇒ ej: t00 → t10 (67).

Par la variance de la flèche appliqué à(66), on sait que t0 6 t00 (68)et t10 6 t1(69). En appliquant la

de projection 4.11 à ce dernier jugement en sachant quefiltre(e0, πj) =vrai. On trouve qu’il existe

t000et G0tels que t00 ` πj: t000; G0(71)et G ` e0↓ πj: G0(72). Or, dans les prémisses de la dérivation

de(67), on a, entre autres¡t00 ` πj: t000; G0

¢

⇒¡G ⊕ G0 ` ej: t10

¢

. On en déduit donc la partie droite de cette implication, c’est-à-dire G ⊕ G0` ej: t10. On peut alors appliquer le lemme de substitution 4.9

à ce jugement et à(72)pour déduire G ` [e0↓ πj]ej: t10 (73). On conclut en appliquant la règle (SUB)

à(73)et(69)que G ` [e0↓ πj]ej: t1, c’est-à-dire que G ` e0: T . ¥