• Aucun résultat trouvé

Le rˆole de la  ´equivalence

La correspondance que l’on vient d’´evoquer n’est valide que si la logique de



Prolog comprend l’axiome de



-´equivalence(87). Autrement, deux termes non-

-´equivalents,

E

et

x

(

E x

), ne seraient pas distingu´es car8

c

[(

E c

)=

(

x

(

E x

)

c

)].

Muni de la



-´equivalence, on peut pousser cette correspondance jusqu’`a un idiome de programmation o`u



-abstraction et quantification universelle sont sym´etriques. Cela per- met de convertir `a volont´e des



-abstractions en des quantifications universelles et des



-variables en des constantes universelles. Cette sym´etrie sert de fil directeur `a notrere- construction pragmatique de



Prolog(121)[Belleann´ee et al. 95], mais elle a aussi des cons´e-

quences importantes pour l’impl´ementation [Brisset et Ridoux 92b].

La repr´esentation des termes qui est la plus commode pourl´unification(138)modulo



-´equivalence est leurforme normale de tˆete



-longue(89)[Huet 75]. Pour ne pas avoir

8. On peut parler d’it´eration car il s’agit d’une r´ecursivit´e terminale, et elle est impl´ement´ee comme une it´era- tion.

9. Au sens o`u, en programmation logique, programmer se fait en exprimant des assertions sur l’univers de calcul.

ληx O : 1 O : 1 λη x -réduction β ( x ) ( ) O : O : O : O : O : O : O : O : 2 3 4 5 5 4 3 2 ( x ) ( )

FIG. 7 – R´eduction de graphe et



-r´edex

`a la calculer `a chaque unification, les termes sont syst´ematiquement repr´esent´es de cette mani`ere d`es leur cr´eation. On construit ainsi beaucoup de



-abstractions que l’on peut juger artificielles, et aussi beaucoup de

-r´edex qui le sont autant. Il ne faudrait pas mobi- liser toute la proc´edure de r´eduction de graphe pour ces

-r´edex. Pour cela, on distingue les



-abstractions issues d’une



-expansion en les appelant des



-abstractions. La pro- c´edure de r´eduction de graphe peut alors reconnaˆıtre les

-r´edex construits `a l’aide de



-abstractions : on les appelle des



-r´edex(125). Ceux l`a peuvent ˆetre r´eduits en construi-

sant simplement une nouvelle application (voir `a la figure 7 la nouvelle application o`u le pointeur vers

O

2est remplac´e par un pointeur vers

O

4). Il ne faut noter comme tels que les



-r´edex qui le resteront quelles que soient les

-r´eductions qui leur seront appliqu´ees : ce sont les



-r´edex qui sont enforme normale de tˆete(89).

Les



-variables sont aussi



-expans´ees et cela est la cause d’une autre forme de

-r´edex

((abusifs)). `A cause de la



-expansion, une



-variable

x

de type fonctionnel aura toutes ces

occurrences remplac´ees par

y

(

x y

). Lorsqu’une

-r´eduction cause le remplacement de la



-variable

x

par un terme

u

(

t u

), c’est toute sa forme



-expans´ee qu’il faut remplacer, et

pas seulement

x

. En effet, remplacer seulement

x

par

u

(

t u

)cr´eerait des

-r´edex parasites

de la forme(

u

(

t u

)

y

). Il faut donc reconnaˆıtre les



-variables



-expans´ees. Cela se fait

de la mˆeme mani`ere que pour reconnaˆıtre les



-r´edex.

La combinaison de ces deux heuristiques produit un gain de complexit´e impor- tant. Par exemple, sachant que

S

d´enote

nsz

(

s

(

n s z

)) et est



-expans´e en

nsz

(

s

(

n x

(

s x

)

z

))et que

Z

d´enote

sz

(

z

), le terme (

S

(

S :::

(

S Z

)

:::

))est



-expans´e en

ab

(

S cd

(

S ::: uv

(

S Z x

(

u x

)

v

)

:::x

(

c x

)

d

)

x

(

a x

)

b

),

et se

-normalise na¨ıvement en un nombre d’´etapes qui est en cube du nombre de

S

. Ce nombre devient quadratique quand la premi`ere heuristique est appliqu´ee et lin´eaire lorsque les deux le sont. On peut s’en convaincre en regardant la trace de la

-r´eduction na¨ıve de

la forme



-expans´ee de(

S

(

S

(

S Z

))).

1. Les premi`eres

-r´eductions emboˆıtent des



-abstractions.

ab

(

S cd

(

S ef

(

S Z g

(

e g

)

f

)

h

(

c h

)

d

)

i

(

a i

)

b

)

ab

(

a

(

S ef

(

S Z g

(

e g

)

f

)

h

(

c

(

i

(

a i

)

c

)

h

)

b

))

ab

(

a

(

h

(

c

(

i

(

a i

)

c

)

h

)(

ef

(

S Z g

(

e g

)

f

)

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

b

)))

2. Elles introduisent des

-r´edex qui n´ecessitent de nombreuses duplications. Les termes dupliqu´es sont soulign´es. Ils ne sont pas des combinateurs, car la



-variable

a

y est libre, et n’offrent donc pas prise `a l’heuristique de la section pr´ec´edente.

ab

(

a

(

c

(

i

(

a i

)

c

)(

ef

(

S Z g

(

e g

)

f

)

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

b

)))

ab

(

a

(

i

(

a i

)(

ef

(

S Z g

(

e g

)

f

)

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

b

)))

ab

(

a

(

a

(

ef

(

S Z g

(

e g

)

f

)

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

b

))) 3. Le troisi`eme

S

cause encore plus de

-r´edex parasites, . . .

ab

(

a

(

a

(

S Zg

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

b

)))

ab

(

a

(

a

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

(

Z c

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

c

)

b

)))) 4. . . . qui n´ecessitent encore plus de duplications

ab

(

a

(

a

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

) (

Z c

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

c

)

b

))))

ab

(

a

(

a

(

h

(

c

(

i

(

a i

)

c

)

h

) (

Z c

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

c

)

b

))))

ab

(

a

(

a

(

c

(

i

(

a i

)

c

) (

Z c

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

c

)

b

))))

ab

(

a

(

a

(

i

(

a i

)(

Z c

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

c

)

b

))))

ab

(

a

(

a

(

a

(

Z c

(

g

(

c

(

h

(

c

(

i

(

a i

)

c

)

h

)

c

)

g

)

c

)

b

))))

ab

(

a

(

a

(

a b

)))

Le coˆut de duplication est proportionnel `a la taille des termes soulign´es. Le coˆut total est donc cubique. Avec la premi`ere heuristique, les ´etapes de

-r´eduction sont les mˆemes, mais il n’y a plus de duplication. Le coˆut total devient quadratique. La deuxi`eme heuris- tique va ´eviter d’emboˆıter des



-abstractions. Il y a donc moins de

-r´edex et moins de

-r´eductions. La trace de la

-r´eduction avec les deux heuristiques est la suivante, o`u les num´eros correspondent aux mˆemes ´etapes que pour la

-r´eduction na¨ıve.

1. La r´eduction commence comme plus haut, . . .

ab

(

S cd

(

S ef

(

S Z g

(

e g

)

f

)

h

(

c h

)

d

)

i

(

a i

)

b

)

ab

(

a

(

S ef

(

S Z g

(

e g

)

f

)

i

(

a i

)

b

))

2. . . . mais n’emboˆıte pas de



-abstractions.

ab

(

a

(

i

(

a i

)(

ef

(

S Z g

(

e g

)

f

)

i

(

a i

)

b

))) 3. Une

-r´eduction suffit pour atteindre le troisi`eme

S

, et . . .

ab

(

a

(

a

(

ef

(

S Z g

(

e g

)

f

)

i

(

a i

)

b

)))

ab

(

a

(

a

(

S Z i

(

a i

)

b

)))

ab

(

a

(

a

(

i

(

a i

)(

Z i

(

a i

)

b

)))) 4. . . . aucune duplication n’est n´ecessaire.

ab

(

a

(

a

(

a

(

Z i

(

a i

)

b

))))

ab

(

a

(

a

(

a b

)))

Le coˆut de la

-r´eduction de chaque

S

est constant. Le coˆut total est donc lin´eaire avec le nombre de

S

.

Le point de d´epart de cette discussion sur l’effet de la



-´equivalence sur l’impl´e- mentation ´etait la sym´etrie entre les deux quantifications essentiellement universelles,



et8. Cette sym´etrie se traduit par des remplacements de



-variables par desconstantes

universelles(80), ou de constantes universelles par des



-variables. Ces remplacements sont

fr´equents et le programmeur les exprime par des

-r´edex. Il est aussi fr´equent qu’un rem- placement soit suivi peu apr`es par le remplacement inverse. `A cause des duplications qu’elle implique (mˆeme en consid´erant les heuristiques d´ecrites), la r´eduction de graphe n’est pas le bon choix pour impl´ementer ce qui n’est en fait qu’un changement de point de vue sur un terme. Nous avons donc choisi d’adapter la technique des substitutions explicites(131)[Revesz 88] `a la r´eduction de graphe, mais uniquement pour traiter la corres-

pondance entre constantes universelles et



-variables (!TRIV

(135)). Cela permet de d´efaire

l’effet d’un remplacement simplement en enlevant la substitution explicite qui le repr´e- sente. Il faut bien sˆur trouver une repr´esentation MALIde ces nouveaux objets, qui sont es- sentiellement des triplets de termes

< r;s;t >

(pour

r

remplace

s

dans

t

), et programmer les op´erations associ´ees : cr´eation, propagation, suppression et r´ealisation de substitution explicite.

De ces deux d´eveloppements un peu techniques sur le rˆole des combinateurs et de la



-´equivalence, il faut retenir qu’un syst`eme complexe ne se range pas facilement dans une cat´egorie pr´e´etablie. Par exemple, notre impl´ementation de



Prolog met en œuvre la r´educ- tion de graphe, mais lui ajoute des am´eliorations qui correspondent `a des traits particulier de



Prolog. La r´eduction de graphe fournit un cadre g´en´eral dont la principale qualit´e est la simplicit´e, celle de la gestion de m´emoire en particulier. Nous l’avons choisi pour cela. La r´eduction de graphe pr´evoit des op´erations qui sont parfois coˆuteuses, et une premi`ere forme d’am´elioration consiste `a trouver des heuristiques qui permettent de remplacer les op´erations coˆuteuses par des op´erations qui le sont moins ou mˆeme de simplement les ´eviter. Une seconde forme d’am´elioration consiste `a ajouter `a la r´eduction de graphe des op´erations qui viennent d’autres paradigmes comme les substitutions explicites.