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
etx
(E x
), ne seraient pas distingu´es car8c
[(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 deProlog(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 avoir8. 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 versO
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-variablex
de type fonctionnel aura toutes cesoccurrences remplac´ees par
y
(x y
). Lorsqu’une-r´eduction cause le remplacement de la -variablex
par un termeu
(t u
), c’est toute sa forme-expans´ee qu’il faut remplacer, etpas seulement
x
. En effet, remplacer seulementx
paru
(t u
)cr´eerait des-r´edex parasitesde la forme(
u
(t u
)y
). Il faut donc reconnaˆıtre les-variables-expans´ees. Cela se faitde 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´enotensz
(s
(n s z
)) et est -expans´e ennsz
(s
(n x
(s x
)z
))et queZ
d´enotesz
(z
), le terme (S
(S :::
(S Z
):::
))est -expans´e enab
(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 deS
. 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 dela 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-variablea
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`emeS
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 duplicationsab
(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`emeS
, 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 chaqueS
est constant. Le coˆut total est donc lin´eaire avec le nombre deS
.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 desconstantesuniverselles(80), ou de constantes universelles par des
-variables. Ces remplacements sontfr´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 >
(pourr
remplaces
danst
), 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 deProlog met en œuvre la r´educ- tion de graphe, mais lui ajoute des am´eliorations qui correspondent `a des traits particulier deProlog. 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.