Previous Up Next

Chapitre 3  Normalisation forte du λσ w-calcul

Nous avons introduit au chapitre précédent une extension du λ-calcul aux substitutions explicites: le λx-calcul [BR95]. Cette extension, bien qu'elle possède les propriétés de confluence et de normalisation forte, n'est pas satisfaisante en tant que modèle des langages de programmation fonctionnels. En effet, les substitutions du λx-calcul sont beaucoup trop simples pour être utilisées dans une implantation raisonnable du λ-calcul puisque pour chaque couple (x/t), il est nécessaire de parcourir une fois en entier l'arbre du terme dans lequel nous désirons effectuer la substitution. Ainsi, la séquence suivante de réductions est "minimale" en λx-calcul:

( x y) [ x/z ] [ y/t ] λx  ( x [ x/z ] y [ x/z ] ) [ y/t ]
 λx  ( z y [ x/z ] ) [ y/t ]
 λx  ( z y) [ y/t ]
 λx  z [ y/t ] y [ y/t ]
 λx  z [ y/t ] t
 λx  z t

Nous présentons dans ce chapitre, la première extension du λ-calcul aux substitutions explicites: le λσ-calcul [ACCL90]. Ce système permet l'utilisation de substitutions correspondant à des listes de couples de la forme (x/t).

Ainsi la même substitution pourra s'effectuer comme suit en λσ-calcul:

( x y) [ x/z ] [ y/t ] λσ  ( x y) [ ( x/z ).( y/t ).id ]
 λσ  x [ ( x/z ).( y/t ).id ] y [ ( x/z ).( y/t ).id ]
 λσ  z y [ ( x/z ).( y/t ).id ]
 λσ  z y [ ( y/t ).id ]
 λσ  z t

Cependant, le λσ-calcul ne possède pas, y compris dans sa version typée que nous proposerons, la propriété de normalisation forte [Mel95].

Nous présenterons une version affaiblie de ce calcul: le λσ w-calcul [CHL96] nommé. Nous montrerons alors que ce calcul est fortement normalisant sur l'ensemble de ses expressions bien typées. Notre technique de démonstration est une adaptation d'une preuve due à Ritter [Rit94] pour le calcul avec indice de de Bruijn. L'originalité de la technique étant de remplacer le calcul λσ w par un autre calcul λσ w/ dans lequel nous identifierons certains termes grâce à une relation de congruence. Nous montrerons tout d'abord la terminaison des expressions bien typées du λσ w/-calcul grâce à une extension de la technique classique de réductibilité au cas de la gestion explicite de la substitution. Informellement, nous définirons dans un premier temps les expressions dites réductibles. Nous montrerons ensuite que les expressions réductibles terminent. Puis, nous montrerons comment, à partir d'une expression bien typée e, il est possible d'obtenir une expression réductible e' contenant e. Il nous suffira de remarquer que, puisque e ' termine, il en est de même pour e. Nous pourrons enfin conclure que toute expression bien typée du λσ w/-calcul termine. Nous en déduirons la terminaison du λσ w-calcul par un lemme technique.

Le but pricipal de la présentation de cette preuve est de permettre au lecteur de ce document de mieux comprendre la preuve de terminaison du λ Pw-calcul proposée au chapitre 4.

3.1  Définition du formalisme λσ

Le λσ-calcul a été introduit par Abadi, Cardeli, Curien et Lévy [ACCL90] en 1990. Sa grammaire divise en deux parties mutuellement inductives l'ensemble de ses expressions: les termes et les substitutions.

Nous utiliserons dans ce chapitre les types simples induits par la grammaire de la définition 50. Ces types seront généralement notés A,B, ….

Définition 1 (Expressions du λσ-calcul typé)   Les expressions (annotées) du λσ-calcul sont données par les grammaires suivantes:
(Termes)   M::=x(Variable)
  M M(Application)
 λ x : A. M(Abstraction)
  M [ s ] (Clôture)
 
(Substitutions)   s::=id(Identité)
 ( x/M ).s(Construction)
 ss(Concaténation)

Nous utiliserons pour désigner des expressions les notations e,e1,… Les termes serons eux désignés par les lettres M, N, et les substitutions par les lettres s, t, u, …

Informellement, dans l'expression ( x y) [ ( x/z ).((( z'/z ).id) ∘ id) ] , les variables libres sont y et z alors que les variables x et z' sont liées. La structure des substitutions pouvant être arbitrairement complexe, nous avons besoin de définir l'ensemble des variables liées par une substitution (dans l'exemple précédent {x,z'}) afin de pouvoir définir l'ensemble des variables libres d'une expression de la forme M [ s ] .

Notation 2   Il nous arrivera dans la suite afin d'alleger les notation d'omettre les types dans les λσ-expressions quand leur présences ne sera pas utile à la compréhension.
Définition 3 (Variables liées par une substitution)  

L'ensemble Var(s) des variables liées par une substitution s est défini par induction sur s comme suit:

Var(id) = 
Var(( x/M ).s) = {x}∪Var(s)
Var(st) = Var(s)∪Var(t)
Définition 4 (Variables libres d'une λσ-expression)   L'ensemble FV(e) des variables libres d'une λσ-expression e est défini par induction structurelle sur l'expression e.
FV(x) = {x}
FV( M N) =  FV(M)∪ FV(N)
FVx. M) =  FV(M)∖{x}
FV( M [ s ] ) = ( FV(M)∖ Var(s))∪ FV(s)
 
FV(id) = 
FV(( x/M ).s) =  FV(M)∪ FV(s)
FV(st) = ( FV(s)∖Var(t))∪ FV(t)
Définition 5 (Variables liées d'une λσ-expression)   L'ensemble BV(e) des variables liées d'une λσ-expression e est défini par induction sur l'expression e.
BV(x) = 
BV( M N) =  BV(M)∪ BV(N)
BVx. M) =  BV(M)∪{x}
BV( M [ s ] ) =  BV(M)∪ BV(s)
 
BV(id) = 
BV(( x/M ).s) =  BV(M)∪ BV(s)∪{x}
BV(st) =  BV(s)∪ BV(t)

Comme toujours, nous travaillerons modulo α-conversion. Les deux termes suivants sont α-équivalents:

  ( x y) [ ( x/z  ).((( u/z  ).id) ∘ id) ] =α   ( xy) [ ( x'/z  ).((( u'/z  ).id) ∘ id) ] 

Nous sommes désormais en mesure de présenter les règles de réduction du λσ-calcul.

Définition 6 (Règles de réduction du λσ-calcul)   Le système de réduction λσ  (que nous noterons aussi →  quand la confusion ne sera pas possible) est induit par les règles suivantes:
Départ
x. M) N  →  x. M) [ id ] N(Abs_id)
B-règle
x. M) [ s ] N  →   M [ ( x/N ).s ] (Abs_var)
Propagation des substitutions
( M N) [ s ]   →   M [ s ] N [ s ] (app)
x. M) [ s ]   →  λ x. ( M [ s ] )(abs)
Substitutions, Variables et Constantes
x [ id ]   →  x(var1)
x [ ( x/M ).s ]   →  M(var2)
y [ ( x/M ).s ]   →   y [ s ] si yx(var3)
Substitutions et Composition
t [ s1 ] [ s2 ]   →   t [ s1s2 ] (clos)
(st) ∘ u  →  s ∘ (tu)(ass_env)
(( x/M ).s) ∘ t  →  ( x/ M [ t ] ).(st)(concat1)
ids  →  s(id)

Nous supposons l'absence de capture de variables dans la règle (abs) c'est à dire xVar(s)∪ FV(s).

Le λσ-calcul est confluent:

Théorème 7 (Confluence du λσ-calcul [CHL96])   Le λσ-calcul est confluent.

Nous présentons à présent un système de types pour le calcul λσ. La principale nouveauté de ce système de types par rapport à ceux du λ-calcul et du λx-calcul est le fait que les substitutions doivent elles aussi être "typées". Ce typage ne se fera pas en renvoyant un type. Le type d'une substitution s dans un environnement Γ sera un environnement Γ' ce que nous noterons Γ⊢ s ▷ Γ'. Informellement, l'environnement Γ' sera l'union de l'environnement Γ et du domaine de s (enrichi de types). Il est donc nécessaire de pouvoir modifier les environnements à l'aide des substitutions.

Définition 8 (Système de type pour le λσ-calcul)   Les règles de typage du λσ-calcul sont:
 
Γ⊢ x : A
  
si (x,A)∈Γ(Var)
 
x : A,Γ⊢ M : B
Γ⊢λ x : A. M : AB
  
 (Abs)
 
Γ⊢ M : AB     Γ⊢ N : A
Γ⊢ ( M N) : B
  
 (App)
 
Γ⊢ s ▷ Γ'     Γ'⊢ M : A
Γ⊢ M [ s ] : A
  
 (Sub)
 
 
Γ⊢ id ▷ Γ
  
 (id)
 
Γ⊢ M : A     Γ⊢ s ▷ Γ'
Γ⊢( x/M ).sx : A,Γ'
  
si x∉Γ'(cons)
 
Γ⊢ t ▷ Γ'    Γ'⊢ s ▷ Γ''
Γ⊢ st ▷ Γ''
  
 (concat)
Théorème 9 (Préservation de types par réduction)   Soit Γ un environnement de types du λσ-calcul.
 Preuve. La preuve de ce théorème est obtenue par induction mutuelle sur les structures de M et de s. Nous admettrons provisoirement ce théorème. En effet, cette démonstration bien que techniquement assez simple est très longue et le chapitre 4 est consacré à l'étude d'une extension du λσ-calcul pour lequel nous démontrons cette propriété (théorème 56). D'autre part une preuve de ce théorème peut être trouvée, pour la version originale du λσ-calcul, dans Explicit Substitutions [ACCL90].

Malheureusement, le λσ-calcul ne possède pas la propriété de normalisation forte. Plus précisément, il existe des λ-termes bien typés (donc, par le théorème 56, fortement normalisables pour le système →λ ) qui ne sont pas fortement normalisables pour le système →λσ .

Théorème 10 (Contre-exemple de terminaison pour λσ)   Il existe un terme M bien typé du λσ-calcul qui ne termine pas.
 Preuve. Ce théorème est dû à Paul-André Melliès [Mel95, BG99].

3.2  Le calcul λσ w

Le contre-exemple de Melliès nous démontre qu'il est nécessaire de modifier les règles du λσ-calcul afin de pouvoir recouvrer la terminaison. L'une des solutions est de supprimer la règle (abs) ce qui conduit au λσ w-calcul. Cette solution est celle que nous adopterons dans la suite de ce chapitre. Elle présente trois avantages majeurs à nos yeux. Tout d'abord, le λσ w-calcul fournit une description plus proche des implantations des langages de programmation fonctionnels actuels qui implantent tous des stratégies faibles. Son second avantage est, tout en gardant des noms de variables, de ne plus recourir à l'α-conversion dans le système de réduction. Enfin, cette restriction présente l'avantage de permettre de recouvrer la terminaison des expressions bien typées.

Définition 11 (Système de réduction du λσ w-calcul)   Le système de réduction λσ w , que nous noterons aussi →  quand la confusion ne sera pas possible, est engendré par l'ensemble des règles de réduction du λσ-calcul (définition 6) privé de la règle (abs).

Ce système est confluent [CHL96] et préserve de plus les types par réduction [ACCL90]. Nous allons maintenant prouver la normalisation forte pour ce calcul.

Le principe général de cette preuve est dû à Ritter [Rit94]. Les grandes étapes de cette preuve sont:

3.3  Preuve de normalisation forte

Nous aurons besoin au cours de cette preuve de manipuler des substitutions inopérantes.

Définition 12 (Substitutions inopérantes)   L'ensemble des substitutions inopérantes est le plus petit ensemble contenant l'identité et clos par le constructeur Concaténation.

Informellement les substitutions inopérantes sont de la forme (idid) ∘ id… et ce sont les substitutions qui ne modifient pas leur environnement de typage.

Lemme 13  
 Preuve. La preuve de ce lemme est immédiate par induction sur la hauteur de la preuve du jugement Γ⊢ s ▷ Γ'.

Nous allons maintenant définir le calcul λσ w/. Ce calcul est dérivé du λσ w-calcul par la transformation de trois de ses règles de calcul en égalité.

Définition 14 (Le λσ w/-calcul)  

Nous définissons la relation comme étant la plus petite congruence sur les expressions du λσ w-calcul telle que:

( M N) [ s ]      M [ s ] N [ s ]
(st) ∘ u    s ∘ (tu)
M [ s ] [ t ]      M [ st ]

Nous définissons alors les expressions du λσ w/-calcul comme étant l'ensemble des expressions du λσ w-calcul quotienté par . Nous noterons λσ w/  la relation de réduction modulo induite par λσ w  et par .

Remarque 15   La relation de congruence étant définie par la transformation en équivalence de règles de réduction du λσ w-calcul, nous pouvons conserver le système de types de celui-ci. Le λσ w/-calcul possède alors, de manière immédiate, la propriété de préservation de types par réduction.

Nous pouvons de plus projeter la notion de substitution inopérante dans le λσ w/-calcul.

Lemme 16   Si s est une substitution inopérante du λσ w/-calcul alors s est fortement normalisable.
 Preuve. Nous raisonnons par induction sur la structure de la substitution s. Par définition de la relation ≡, seuls deux cas sont possibles:

Nous allons maintenant donner la définition, cruciale pour la suite de cette démonstration, d'expressions neutres. Informellement, les expressions neutres sont les expressions qui, une fois appliquées, ne créent pas de radical.

Définition 17 (Expressions neutres)  

Une autre notion vitale pour notre preuve est la notion d'expression réductible.

Définition 18 (Expression réductible)  

L'ensemble des termes réductibles de type A dans l'environnement Γ, noté [[ A]]Γ, est défini par induction sur le type A comme suit.

[[ ι]]Γ  {M ∣ Γ⊢ M : ι et M fortement normalisable }
[[ AB]]Γ  {M ∣ Γ⊢ M : AB et ∀Δ,∀ N∈[[ A]]ΓΔ, ( M N)∈[[ B]]ΓΔ }

L'ensemble des substitutions réductibles pour un environnement Γ dans un environnement Δ est défini comme suit:

     [[ Δ]]Γ=def{s∣  Γ⊢  s ▷   Δ et ∀ (x :  A)∈Δ,  x [ s ] ∈[[ A]]Γ }
Remarque 19   En particulier, les substitutions inopérantes sont dans [[ ∅]].
Notation 20   Dans la suite de ce chapitre, nous noterons ν(e), la longueur de la plus longue séquence de réductions issue de e.

Cette notion n'est bien définie que si l'expression e est fortement normalisable.

Dans la suite de ce chapitre, nous dirons qu'une expression est réductible pour exprimer le fait que cette expression est réductible dans un environnement donné.

Nous allons maintenant démontrer que les termes réductibles sont fortement normalisables et stables par réduction. De plus, les termes neutres dont tous les réduits sont réductibles sont eux-mêmes réductibles.

Lemme 21  
  1. Si M est réductible alors M est fortement normalisable.
  2. Si M=(x M1Mn) est un terme bien typé et si les Mi sont fortement normalisables alors M est réductible.
  3. Si M est réductible et si M→  M' alors M' est réductible.
  4. Si M est neutre bien typé et si tous ses réduits en un pas sont réductibles alors M est réductible.
 Preuve. Nous démontrons ces quatre points par induction sur le type A des expressions considérées.

Bien évidement, les substitutions réductibles vérifient les mêmes propriétés.

Lemme 22  
  1. Si s est réductible alors s est fortement normalisable.
  2. Si s est réductible et si s→  s' alors s' est réductible.
  3. Si s est neutre bien typé et si tous ses réduits en un pas sont réductibles alors s est réductible.
 Preuve. Nous démontrons ces propriétés par cas sur l'environnement Δ tel que Γ⊢ s ▷ Δ.

Grâce à ces deux lemmes fondamentaux nous allons pouvoir donner des critères syntaxiques de réductibilité.

Lemme 23   Soient M un terme appartenant à [[ A]]Γ et s une substitution appartenant à [[ Δ]]Γ. Soit x une variable fraîche. La substitution t=( x/M ).s appartient à [[ x : A,Δ]]Γ.
 Preuve. Avant toute chose nous remarquons que nous avons Γ⊢ tx : A,Δ. Afin de prouver que t appartient à [[ x : A,Δ]]Γ, il nous faut démontrer que pour tout (y : A) appartenant à x : A,Δ, nous avons y [ t ] ∈[[ B]]Γ.

Soit (y : B)∈ x : A,Δ. Nous remarquons que y [ t ] est neutre. Donc par le point 4 du lemme 21, il nous suffit de montrer que tous ses réduits en un pas appartiennent à [[ B]]Γ pour montrer que ce terme appartient à [[ B]]Γ. Mais puisque M et s sont réductibles, par les lemmes 21 et 22, ces deux expressions sont fortement normalisables. Nous allons raisonner par récurrence sur ν(M)+ν(s). Les réduits en un pas possibles de y [ t ] sont:

Donc y [ t ] est réductible et donc, par définition, t est réductible.


Lemme 24   Si st appartient à [[ Δ]]Γ, M [ t ] appartient à [[ A]]Γ et si x est une variable fraîche alors la substitution u=(( x/M ).s) ∘ t appartient à [[ x : A,Δ]]Γ.
 Preuve. Nous remarquons tout d'abord que u est bien typée dans Δ. Pour démontrer que u est réductible, il nous suffit de montrer que pour tout (y : B) dans x : A,Δ nous avons y [ u ] ∈[[ B]]Γ. Soit donc (y : B) appartenant à x : A,Δ. Puisque les expressions M [ t ] et st sont réductibles, nous savons que M [ t ] et st sont fortement normalisables par les lemmes 21 et 22. Nous allons démontrer par récurrence sur ν( M [ t ] )+ν(st) que y [ u ] ∈[[ B]]Γ. Puisque y [ u ] est un terme neutre, il nous suffit de démontrer que tous ses réduits en un pas sont réductibles. Les réduits possibles en un pas de ce terme sont: Donc y [ u ] est réductible et donc, par définition, u est réductible.
Lemme 25   Soit s∈[[ Δ]]Γ et soit λ x : A. M un terme de type AB dans Δ. Si pour tout Δ' et pour tout N∈[[ A]]Δ'Γ nous avons M [ ( x/N ).s ] ∈[[ B]]Δ'Γ, alors R= (λ x : A. M) [ s ] ∈[[ AB]]Γ.
 Preuve. Par définition, il nous suffit de démontrer que pour tout N dans [[ A]]ΓΔ', on a ( R N)∈[[ B]]ΓΔ'. Soit donc un terme N∈[[ A]]ΓΔ'. Puisque le terme R N est neutre il nous suffit, par le point 4 du lemme 21, de démontrer que tous ses réduits en un pas sont dans [[ B]]ΓΔ'. Puisque M [ ( x/N ).s ] est réductible, ce terme est fortement normalisable. Nous allons donc raisonner par récurrence sur ν(M)+ν(N)+ν(s). Les réduits possibles en un pas de R N sont:

Nous somme désormais en mesure de démontrer que la réductibilité est "stable" par substitution et par concaténation.

Théorème 26   Soit s une substitution appartenant à [[ Δ]]Γ.
 Preuve. La preuve de ce théorème est obtenue par induction sur les structures de t et M.

Nous somme désormais en mesure de démontrer la normalisation forte du λσ w/-calcul.

Théorème 27   Le λσ w/-calcul est fortement normalisant.
 Preuve. Nous commençons par remarquer que pour tout environnement Γ la substitution id appartient à [[ Γ]]Γ puisque Γ⊢ id ▷ Γ et id est une substitution neutre sans réduits.

Pour conclure, il nous suffit de montrer que pour tout terme M (resp. toute substitution s) bien typé, M est fortement normalisable.

Or, si M (resp. s) est bien typé alors, par le théorème 26, M [ id ] (resp. sid) est réductible et donc par le point 1 du lemme 21 (resp. le point 1 du lemme 22) le terme M [ id ] (resp. la substitution sid) est fortement normalisable. Nous en déduisons aisément le résultat.


Nous allons maintenant conclure ce chapitre par le résultat suivant:

Théorème 28   Le λσ w-calcul est fortement normalisant.
 Preuve. Avant toute chose, nous remarquons que nous pouvons considérer la relation →λσ w  comme étant R1R2R1 est la relation induite par les règles définissant le λσ w calcul privées de (app), (ass_env) et (clos) et où R2 est induite par ces trois règles. Nous considérons alors O l'ensemble de λσ w-expressions, O' celui des λσ w/-expressions, T la congruence ≡ et R' la relation →λσ w/ . Nous concluons alors par le lemme 8 et par le théorème 27 après avoir remarqué que R2 est fortement normalisante.

Previous Up Next