Chapitre 2. Conclusion conséquente et la production
2.4. Algorithmes de calcul de production
2.4.2. Algorithme avec coupure
subsume(nil, c) →
/ ;
subsume(l.c’, c) →
subsume(c’, c)
dans(l, c) ;
longueur-inferieure(c, infini) →
/ ;
longueur-inferieure(nil, l) → ;
longueur-inferieure(a.c, l) →
/
impasse ;
longueur-inferieure(a.c, l) →
val(sub(l, l), l’)
longueur-inferieure(c, l’) ;
2.4.2. Algorithme avec coupure
A toute étape de production, on essaie d’effacer le premier littéral de la première branche
d’arbre (le littéral à effacer). Pour ce faire, il faut choisir une clause candidate contenant
l’opposé de ce littéral et satisfaisant aux conditions de non répétition, en ôter tous les littéraux
immédiatement effaçables (qui ne satisfont pas aux conditions C2b), puis essayer d’effacer la
clause restante. Quand tous ces choix ont été effectués et résolus, il reste un choix
supplémentaire qui est de mettre en production le littéral à effacer.
Or, si le littéral à effacer a été, pour un certain choix, complètement effacé sans avoir eu
besoin d’installer des littéraux en productions supplémentaires, il est inutile d’effectuer les
choix restants. On peut formaliser ceci par une définition et une propriété.
Définition 2.13:
S’il existe un début de production, D, de dernière étape (j) :
...
(i)<p1, (l.s) B1>
...
(j)<p
2, B
2>
telle que B
1= B
2et p
1= p
2, on dira que le littéral l a été complètement effacé.
Propriété 2.7:
Dans ce cas toute production égale à D jusqu’à l’étape (i) incluse, ne pourra produire que
des clauses subsumées par d’autres clauses produites par les productions de début D.
Donc, d’après la structure de l’algorithme, qui à partir de l’étage (i+1), calcule toutes les
productions ayant ces (i) premières étapes avant de faire les autres choix pour l à l’étape
(i+1), il sera inutile si ce littéral est complètement effacé de faire ces autres choix. C’est
principalement pour cette raison que l’on essaie d’abord d’effectuer toutes les résolutions
possibles sur un littéral avant de mettre ce littéral en production (avant d’essayer d’effacer de
manière classique un littéral, on regarde s’il n’existe pas une clause contenant son opposé et
dont tous les littéraux sont immédiatement effaçables). Le choix inverse est possible mais
donne de moins bons résultats.
Démonstration :
Soit PR1 une production égale à D jusqu’à (i). Cette production aura une étape (j’) dont
l’arbre est B1, et peut donc s’écrire :
...
(i)<p1, (l.s) B1>
...
(j’)<q p1, B1>
...
(n’)<r q p
1, 0>
PR1 produit la clause p = r q p
1dans laquelle q et r sont des clauses éventuellement vides
(la notation inclut le cas où j’ = n’). Pour prouver le théorème, il faut construire à partir de
PR1 une production, PR2, dont le début est D et dont la clause produite subsume p.
Le début de PR2 est donc :
...
(i)<p1, (l.s) B1>
...
L’important est que, à l’étape (j’) de PR1 et à l’étape (j) de PR2, les arbres sont égaux. À
l’étape (j), la clause en production, p
1, de PR2 est une sous clause de la clause en production à
l’étape (j’), q p1, de PR1.
Les étapes de PR2 qui suivent (j) sont construites à partir des étapes de PR1 qui suivent
(j’) telles que, si la clause appelée contient un littéral de r q alors ce littéral n’est pas
immédiatement effacé mais inséré dans l’arbre. Il sera mis en production à l’étape où il sera
littéral à effacer de l’arbre courant. Plus précisément :
1. L’étape (j+1) de PR2 est construite à partir de l’étape (j’+1) de PR1 telle que :
- si (j’+1) met en production le littéral à effacer, alors (j+1) mettra également en
production ce même littéral à effacer.
- si (j’+1) effectue une résolution sur une clause c, alors (j+1) effectuera également
une résolution sur cette même clause c. Les branches ajoutées à l’arbre B1 (dans
PR2) sont obtenues à partir des littéraux de c non immédiatement effaçables (dans
PR1). Mais les littéraux de c immédiatement effaçables dans PR2, sont les
littéraux de c immédiatement effaçables dans PR1, plus les littéraux de c, égaux à
un des littéraux de q (les ascendants et frères sont les mêmes dans PR1 et PR2 car
les arbres sont égaux à l’étape (i)). Donc les branches à ajouter dans PR2 sont les
branches à ajouter dans PR1, plus éventuellement un certain nombre de branches
dont les racines sont les littéraux de c qui ne sont pas dans q.
2. On répète l’opération pour les étapes suivantes de PR2, qui sont construites à partir
des étapes de PR1. Les clauses appelées sont les mêmes dans PR1 et PR2. La seule
différence est que dans les arbres correspondants (dans PR2) sont insérées un certain
nombre de branches supplémentaires, branches dont les racines seront toujours des
éléments de q. Quand le littéral à effacer (dans PR2) portera sur une de ces branches
supplémentaires, ce littéral sera mis en production. On insère donc un certain nombre
d’étapes qui sont toutes des mises en production de littéraux de q.
La suite de couples ainsi formée est bien une production, car comme PR1 en est une, on
en déduit que pour toutes les étapes de résolution de PR2 les clauses appelées satisfont aux
conditions de non répétition. En effet, ces étapes sont telles que :
- l’étape associée dans PR1 satisfait aux conditions de non répétition
- les ascendants sont les mêmes dans PR1 et PR2 car ces étapes sont des étapes de
résolution et ne portent donc pas sur les branches supplémentaires (on a dit que les
étapes portant sur les branches supplémentaires mettent en production un littéral).
- l’union des frères et littéraux en production de PR2 est incluse dans l’union des frères et
littéraux en production de PR2.
PR2 est donc bien une production et la clause produite par PR2 subsume bien celle
produite par PR1 car les littéraux mis en production dans PR1 et non dans PR2 sont tous dans
q.
Exemple 2.2:
C = {a b c, ¬a b, ¬a u, ¬u v, ¬v w}
On veut calculer toutes les productions d’origine a b c. L’algorithme construira, par ses
appels récursifs, la première production qui produit la clause c b :
1.
<0 ,(a) (b) (c)>2. ¬a b <0 ,(b) (c)>
3. <b ,(c)>
4. <c b ,0>
Cette production est donnée par le choix de ¬a b à la deuxième étape. Il reste deux choix
à cette étape : soit appeler la clause ¬a u, soit mettre a en production. En fait ces choix sont
inutiles car ils ne pourront générer que des clauses subsumées par d’autres clauses produites
par la production effectuée auparavant. Le premier choix donne trois productions dont la
première est :
1.
<0 ,(a) (b) (c)>2. ¬a u <0 ,(ua) (b) (c)>
3. ¬u v <0 ,(vua) (b) (c)>
4. ¬v w <0 ,(wvua) (b) (c)>
5. <w ,(b) (c)>
6. <b w ,(c)>
7. <c b w ,0>
En fait, c b w est subsumée par c b.
Dans le document
Intégration de l'inférence abductive et inductive pour la représentation des connaissances dans les réseaux de gènes
(Page 68-71)