• Aucun résultat trouvé

Des co-produits à la réécriture d’ordre supérieur

3.7 Exemples de combinaisons

3.7.3 Des co-produits à la réécriture d’ordre supérieur

Les duaux catégoriques des produits sont les co-produits. Les produits correspondent,

par l’isomorphisme de Curry-Howard, au « et » logique, et les co-produits correspondent

au « ou » intuitionniste.

Définition 3.7.4 L’extension co-produitd’une signature B estB

+

=

def

B ⊎{_+_}.

Voici comment définir le système. Soit ty⊆{⇒, 2, Λ,Nat,×}.

— Les termes sont enrichis des constructions suivantes :

t, u∈Λ

ty

(B

+

, Σ) ::= . . . | inj

1

t | inj

2

t | case(t, x

1

.t

1

, x

2

.t

2

) .

Notons que danscase(t, x

1

.t

1

, x

2

.t

2

), les variablesx

1

etx

2

sont liées respectivement

danst

1

et t

2

. Les termes sont bien entendu quotientés par =

α

, dont la définition

est celle de1.2.6 augmentée du cas suivant :

case(t, x

1

.t

1

, x

2

.t

2

) =

α

case(u, y

1

.u

1

, y

2

.u

2

)

sit=

α

uet pour tout i∈{1, 2},

t

i

[x

i

7→z] =

α

u

i

[y

i

7→z]pour tout z∈ X sauf un nombre fini.

— Les règles de typage sont les suivantes :

Γ ⊢t:T

i

Γ ⊢inj

i

t:T

1

+T

2

(i∈{1, 2})

Γ, x:T

1

⊢t

1

:U

Γ ⊢t:T

1

+T

2

Γ, x:T

2

⊢t

2

:U

Γ ⊢case(t, x

1

.t

1

, x

2

.t

2

) :U

— Les règles de réduction sont les suivantes :

case(inj

1

u, x

1

.t

1

, x

2

.t

2

) 7→

+

t

1

[u/x

1

]

case(inj

2

u, x

1

.t

1

, x

2

.t

2

) 7→

+

t

2

[u/x

2

].

Les réductions des co-produits posent une question difficile à la réécriture : la définition

d’un formalisme cadre pour les systèmes de réécriture avec variables liées. Cette ligne de

recherche a donné lieu à de nombreux travaux :

— Les « Combinatory Reduction Systems » de Klop [Klo80] (voir aussi [KOR93]).

— La réécriture d’ordre supérieure de Wolfram [Wol93] et Nipkow [Nip91, NP98],

étendue à la réécriture conditionnelle d’ordre supérieur [ALS94].

— Les systèmes d’ordre supérieur de van Oostrom et van Raamsdonk [OR94,Oos94,

Raa96].

3.7 Exemples de combinaisons

L’enjeu de ces systèmes est de fournir un mécanisme de filtrage prenant en compte des

variables liées dans les membres gauches de règles et permettant de gérer les paires

critiques dues aux variables actives dans les membres gauche de règles. Nous ne nous

sommes pas intéressés à ce problème difficile.

Chapitre 4

Réécriture conditionnelle

Ce chapitre concerne la réécriture conditionnelle. Nous commençons par les définitions

de règle conditionnelle et de relation de réécriture conditionnelle et donnons quelques

exemples. Ensuite, en utilisant les termes de de Bruijn, nous montrons que la réécriture

conditionnelle sur Λ(Σ) est le quotient par =

α

de la réécriture conditionnelle sur L(Σ)

modulo =

α

.

4.1 Définitions

Nous commençons par un exemple qui introduit les idées principales de la réécriture

conditionnelle. On aimerait définir, par réécriture, une fonctionfilterparamétrée par une

fonction booléenne p, qui se comporte ainsi :

— filterp[ ]se réécrit en[ ],

— filterp(t::ts) se réécrit ent:: (filterp ts) sip t se réécrit entrue,

— filterp(t::ts) se réécrit enfilterp ts si p tse réécrit en false.

Cette spécification peut être écrite en utilisant des règles de réécriture conditionnelle

(⊃se lit « implique ») :

filterp[ ] 7→ [ ]

p x = true ⊃ filterp(x::xs) 7→ x:: (filterp xs)

p x = false ⊃ filterp(x::xs) 7→ filterp xs

(4.1)

Si nous essayons de définir une relation de réécriture satisfaisant notre spécification,

cela donne

filterp(t::ts) → t:: (filterp ts) si p t →

true.

En d’autres termes, lors de la définition de dans le pas

filterp(t::ts) → t:: (filterp ts),

nous avons besoin de savoir sip t→

true, donc d’utiliser la relation. Cette circularité

est résolue par une définition inductive de la réécriture conditionnelle, dans laquelle

la relation est stratifiée en relations (→

i

)

i∈N

, dont la correction est assurée par le

théorème du point fixe de Tarski. On pose =

def

S

i∈N

i

, avec, dans notre exemple,

0

=

def

∅et

i+1

définie en fonction de

i

par

Chapitre 4 Réécriture conditionnelle

Venons en aux définitions formelles. Nous autorisons, dans l’évaluation des conditions,

l’utilisation d’une relation auxiliaire quelconque. De ce fait, dans le cas oùL⊆ Ter(Σ,X),

les définitions présentées ici sont des extensions de celles présentées dans [DO90,Ohl02].

De plus, notre définition de réécriture conditionnelle normale est plus large que celles que

nous avons pu trouver dans la littérature.

Définition 4.1.1 (Règles de réécriture conditionnelle) Soit L ⊆Λ(Σ). Une règle

de réécriture conditionnelle surL est un tuple écrit sous la forme

d

1

=c

1

∧ . . . ∧ d

n

=c

n

⊃ l 7→ r

oùd

1

, . . . , d

n

, c

1

. . . , c

n

, l, r∈L.

Dans une règle de réécriture conditionnelle, on distingue

— lemembre gauche l (aussi appelé lhs),

— lemembre droit r (aussi appelé rhs),

— les conditions d

1

=c

1

∧· · ·∧ d

n

=c

n

.

Nous supposons que les membres gauches sont des termes algébriques qui ne sont pas des

variables et queFV(~d,~c, r)FV(l).

Si r∈ X, alors~d=~cl7→r est dite effondrante.

Les règles de réécriture conditionnelle sont souvent appelées simplement « règles de

réécriture ». Lorsque|~d|=|~c|=0, la règle~d=~cl7→rest dite « non conditionnelle ».

Notons que pour les TRS algébriques à gauche, la notion de règle non-conditionnelle

effondrante définie en3.1.16est un cas particulier de règle conditionnelle effondrante.

Dans toute la suite, le symbole R désigne un ensemble de règles de réécriture. Les

symboles définis (resp. constructeurs) deRsont les symboles définis (resp. constructeurs)

du TRS{(l, r) |~d=~cl7

R

r}.

Remarque 4.1.2 (Extension des remarques 2.2.2 et 2.4.2)

— Les notions de règles de réécriture conditionnelle sur Λ(Σ), Ter(Σ,X) et Ter(X)

sont des conséquences immédiates de la définition4.1.1.

— SiRest un ensemble de règles de réécriture surL⊆Λ(Σ), alors(L,R)est un TRS

au sens de la définition2.4.1.

— L’extension de la notion de règle de réécriture conditionnelle à uneΣ-algèbre libre

Ter(Σ

A

,X

A

) se fait comme pour les relations de réécriture en 2.2.2 et les TRS

en 2.4.2 : on dit que ~d = ~c l 7→ r est une règle de réécriture sur Ter(Σ

A

,X

A

)

si i(~d) = i(~c) i(l) 7→ i(r) en est une sur Ter(Σ,X), où i est l’isomorphisme

canonique deTer(Σ

A

,X

A

)→Ter(Σ,X).

Remarque 4.1.3 Les conditions des règles conditionnelles ne sont pas symétriques : la

conditiond=cn’est pas la même que la condition c=d. Cette distinction est justifiée

par la possibilité de définir des relations de réécriture conditionnelles qui évaluent les

conditions de façon asymétrique. C’est le cas par exemple, pour les règles définissant

filteren 4.1, de la conditionp x=true qui est évaluée en testant sip t→

true.

Les notions de système algébrique et de système applicatif à droite définies en 3.1.8

4.1 Définitions

Définition 4.1.4 (Règles conditionnelles applicatives et algébriques) Une règle

conditionnelle ~d=~cl7→r est

— applicative à droite sir est applicatif,

— applicativesi elle est applicative à droite et si les termes de ~d,~c sont applicatifs,

— algébrique à droite sir est algébrique,

— algébriquesi elle est algébrique à droite et si les termes de ~d,~c sont algébriques.

Un système de réécriture conditionnel R est applicatif à droite (resp. applicatif,

algé-brique à droite,algébrique) si toutes ses règles le sont.

Étant donné un ensembleRde règles de réécriture conditionnelles, on peut construire

de nombreuses relations de réécritures selon la façon dont on évalue des conditions : par

conversion, par joignabilité ou par réduction. Dans chaque cas on peut choisir d’autoriser

des pas d’une autre relation de réécriture.

Définition 4.1.5 (Relations de réécriture conditionnelle) Soient L⊆Λ(Σ),R un

ensemble de règles de réécriture conditionnelle sur L et

R

une relation de réécriture

sur L.

— La relation de réécritureR-conditionnelle semi-équationnelle issue de R sur L est

la relation

R(R)se

L

stratifiée par (→

R(R)se

Li

)

i∈N

, où

R(R)se

L0

=∅ et pour tout i∈N,

R(R)se

Li+1

est la plus petite relation sur L qui est close par contexte sur L et telle

que, pour toute règle~d=~cl7

R

r, pour toute substitution σ:X →L,

si ~

R(R)se

Li∪R

~cσ alors lσ →

R(R)se

Li+1

rσ .

— La relation de réécriture R-conditionnelle par joignabilité issue de R sur L est la

relation

R(R)jo L

stratifiée par (→

R(R)jo Li

)

i∈N

, où

R(R)jo L0

= ∅ et pour tout i ∈ N,

R(R)jo Li+1

est la plus petite relation sur L qui est close par contexte sur L et telle

que, pour toute règle~d=~cl7

R

r, pour toute substitution σ:X →L,

si ~

R(R)jo

Li∪R

~cσ alors lσ →

R(R)jo

Li+1

rσ .

— La relation de réécritureR-conditionnelle orientée issue de R sur L est la relation

R(R)o

L

stratifiée par (→

R(R)o

Li

)

i∈N

, où

R(R)o

L0

=∅ et pour tout i∈N,

R(R)o Li+1

est la plus petite relation sur L qui est close par contexte sur L et telle que, pour

toute règle~d=~cl7

R

r, pour toute substitution σ:X →L,

si ~

R(R)o

Li∪R

~cσ alors lσ →

R(R)o

Li+1

rσ .

Remarque 4.1.6 Rappelons que le pas de réécriture conditionnelle, c’est-à-dire le fait

de savoir si un terme se réécrit en un autre, n’est en général pas décidable [Kap84]

(voir aussi [Ohl02]), même pour des systèmes de réécriture donnant lieu à des relations

fortement normalisantes.

Il est parfois pratique d’écrire « réécriture se-R-conditionnelle », « réécriturejo-R

-condi-tionnelle » et « réécriture o-R-conditionnelle » au lieu de, respectivement, « réécriture

Chapitre 4 Réécriture conditionnelle

R-conditionnelle semi-équationnelle », « réécritureR-conditionnelle par joignabilité », et

« réécritureR-conditionnelle orientée ». Lorsque

R

=∅, on écrit

RX

au lieu de

R(R)X

(X∈{se, jo, o}). Dans ce cas, nous parlons de « réécriture X-conditionnelle » au lieu de

« réécritureX-R-conditionnelle ».

Nous devons vérifier que nous avons bien défini des relations de réécriture.

Proposition 4.1.7 SoitL⊆Λ(Σ),Run ensemble de règles de réécriture conditionnelle

surLet

R

une relation de réécriture sur L. Alors

R(R)X

Li

est une relation de réécriture

sur L pour toutX∈{se, jo, o}, et tout i∈N.

Preuve. Par induction suri∈N, en utilisant le lemme2.2.3.

Lorsque le contexte le permet, nous écrivons

RX

i

pour désigner

RX

Li

. Une forme de

réécriture conditionnelle importante en pratique est la réécriture conditionnellenormale.

C’est un cas particulier de réécriture orientée et de réécriture par joignabilité.

Définition 4.1.8 (Relation de réécriture conditionnelle normale) SoitL⊆Λ(Σ),

Run ensemble de règles de réécriture conditionnelle surL,

R

une relation de réécriture

surLetX∈{jo, o}. Si pour toute règle~d=~cl7

R

rles termes~c sont clos et en forme

R(R)X

-normale, alors la relation de réécriture

R(R)X

est une relation de réécriture

R-conditionnelle normale.

La propriété suivante, dont la preuve est longue mais évidente, dit qu’il n’y a en fait

qu’une seule relation de réécriture normale.

Proposition 4.1.9 SoitL⊆Λ(Σ),Run ensemble de règles de réécriture conditionnelle

surLet

R

une relation de réécriture surL. Alors

R(R)jo

estR-normale si et seulement

si

R(R)o

l’est aussi et dans ce cas

R(R)jo

=→

R(R)o

.

Preuve. La preuve se fait par induction sur les stratifications de

R(R)jo

et

R(R)o

.

Pour i ∈ N et X ∈ {jo, o}, nous disons que

R(R)X

i+1

est normale si pour toute règle

~d=~cl7

R

rles termes~csont clos et en forme

R(R)X

i

-normale. Par convention, nous

disons que

R(R)X

0

est toujours normale. Il est évident que si

R(R)X

est normale, alors

R(R)X

i

est normale pour touti≥0.

— Tout d’abord, supposons que

R(R)jo

soit normale. On montre par induction

sur i ∈ N que

R(R)o

i

est normale et que

R(R)o

i

⊆→

R(R)jo

. Il s’en suit que

R(R)o

⊆→

R(R)jo

, et donc que

R(R)o

est normale.

Le cas de basei=0 est trivial parce que

R(R)jo

0

=∅=→

R(R)o 0

.

Supposons la propriété vraie pour i ≥0, et montrons que

R(R)o

i+1

est normale.

Pour toute règle ~d = ~c l 7

R

r, comme les termes ~c sont en forme

R(R)jo

-normale, ils sont en forme en forme

R(R)o

i

-normale par hypothèse d’induction. Il

s’en suit que

R(R)o

i+1

est normale.

Maintenant, si t →

R(R)o

i+1

u, alors il existe une règle ~d = ~c l 7

R

r, une

substitution σ:X → L et un contexte C[ ] :L →L tels que t=C[lσ],u= C[rσ]

4.2 Exemples