
3
9
8
3
9
78
¯
2
¯
4
¯
5¯
6
¯
7¯
8
¯
1¯
1
¯
2
¯
4
¯
5
¯
8
¯
6
Fig. 1 – Graphe des propagations unitaires pour les branches ¯
1¯
23¯
4¯
5(¯
6)(9)¯
7(8,¯
8) (à
gauche) et ¯
1¯
23¯
4¯
5(¯
6)(9)7(8,¯
8) (à droite).
sur l’affectation de x3à faux, et explore alors, au pire, toutes les branches commençant
par ¯
1¯
23. Le backtrack non chronologique, quant à lui, détecte que tous les conflits
obtenus dans les branches commençant par ¯
1¯
2¯
3ont été provoqués par la résolution
unitaire avec les affectations de x1et x2à faux. Il revient donc sur l’affectation de x2à
faux, sans explorer les branches commençant par ¯
1¯
23. Pour détecter ces coupables, on
utilise un graphe représentant les affectations impliquées dans les résolutions unitaires.
Question 3 Faire tourner la procédure DPLL avec backtrack non chronologique sur
la formule ϕcomme à la question 1, sans la règle des littéraux purs.
Jusqu’à la détection du premier conflit, la procédure se comporte comme la procédure
DPLL. Elle explore donc la branche 4 : ¯
1¯
2¯
3(4)(¯
9)¯
5(6,¯
6). Étant donné que la dernière
décision (¯
5) est la première valeur pour x5, la procédure revient donc sur cette décision
et explore la branche 5 : ¯
1¯
2¯
3(4)(¯
9)5(¯
6,6).
Un conflit est à nouveau détecté. Les deux valeurs pour x5ayant été explorées, la der-
nière décision est maintenant ¯
3. Or, on peut voir que dans le premier conflit l’affectation
6est provoquée par ¯
5et ¯
9, via la clause (956). Or, l’affectation ¯
9est obtenue par pro-
pagation unitaire de 4, elle-même obtenue par propagation de ¯
3. La décision ¯
3est donc
impliquée dans au moins un des conflits, et comme c’est la plus récente on doit revenir
sur elle.
L’algorithme explore alors les branche 6 : ¯
1¯
23¯
4¯
5(¯
6)(9)¯
7(8,¯
8), puis 7 : ¯
1¯
23¯
4¯
5(¯
6)(9)7(8,¯
8).
La dernière décision est ici ¯
5, mais on peut voir sur les graphes des propagations uni-
taires (figure 1) que les affectations ¯
1et ¯
2suffisent à expliquer tous les conflits. On
revient donc sur l’affectation ¯
2. L’algorithme explore alors les branches 13 à 16 de la
question 1. Il a au final exploré 5branches inutiles de moins que l’algorithme avec
backtrack chronologique.
Question 4 L’apprentissage de clauses va plus loin que le backtrack non chronologique,
en créant de nouvelles clauses, aussitôt ajoutées à la formule, pour expliquer les conflits.
Pour cela, comme pour le backtrack non chronologique, à chaque conflit détecté le graphe
des propagations unitaires est analysé, et une clause minimale expliquant le conflit est
ajoutée à la formule. Faire tourner la procédure DPLL avec apprentissage de clauses sur
la formule ϕcomme à la question 1, sans la règle des littéraux purs et avec backtrack
4