Programmation logique Dmonstrateur automatique C Dmonstrateur automatique Substitution
Programmation logique Démonstrateur automatique C. Démonstrateur automatique Substitution Unification Couple de désaccord Algorithme d'unification Principe de résolution Algorithme général de résolution Détermination des résolvantes Résolution dans un cas simple Propriété de la résolution Résolution dans Prolog Clauses de Horn Les différents cas Pas d'inférence Exemples
Programmation logique Démonstrateur automatique � Substitution • C'est un ensemble {ti/xi} où xi sont des variables et ti sont des termes qui peuvent être des constantes, des variables ou des fonctions. Ca revient à remplacer toutes les occurrences des variables xi par ti. • Soit la substitution S = {a/x , g(b)/y } et soit la clause C = P(x, y) V Q(x, f(y)) • C'=C. S=P(a, g(b)) V Q(a, f(g(b)))
Programmation logique Démonstrateur automatique 1. Unification • Deux termes t 1 et t 2 sont unifiables s'il existe une substitution S telle que S. t 1 = S. t 2 • Un ensemble de termes {t 1, t 2, . . . tn} est unifiable s'il existe une substitution S telle que S. t 1 = S. t 2 =. . = S. tn 1. Exemple 2. t 1 = f(A, g(B) ) 3. t 2 = f(x, y) 4. t 1 et t 2 sont unifiable car il existe S = {x/A, y/g(B) } telle que S. t 1 = S. t 2 = f(A, g(B)).
Programmation logique Démonstrateur automatique � Unification : autres exemples • Prédicats parents p(5) et p(5) Unificateur : µ = {} Instance commune p(5) • Prédicats parents p(x) et p(5) Unificateur : µ = { x: =5} Instance commune p(5) • Prédicats parents p(x) et p(y) Unificateur : µ = {x: =y} Instance commune p(y)
Programmation logique Démonstrateur automatique � Unification : autres exemples • Prédicats parents p(x, x) et p(5, y) Unificateur : µ = {x: =5; y: =5} Instance commune p(5, 5) • Prédicats parents p(f(x), f(5), x) et p(z, f(y), y) Unificateur : µ = {z: = f(5); y: =5; x: =5)} Instance commune p(f(5), 5)
Programmation logique Démonstrateur automatique � Unification : Couple de désaccord • Le couple de désaccord D(t 1, t 2) entre deux termes t 1 et t 2 est le couple le plus à gauche et ne débutant pas par un symbole identique. • Exemple : t 1 = f(g(u), z) t 2 = f(g(h(t)), r(a)) --> D(t 1, t 2) =( u, h(t) )
Programmation logique Démonstrateur automatique � Unification : algorithme • Soient deux termes t 1 et t 2. L'algorithme qui suit cherche l'unificateur µ s'il existe. 1. S 0 = {} ; k : = 0 2. SI Sk. t 1 = Sk. t 2 : µ : = Sk ; fin avec succès 3. Calculer D(Sk. t 1, Sk, t 2). Soit (d 1, d 2) SI d 1 est une variable : Sk+1 = { d 2/d 1} U Sk Allera 2 SI d 2 est une variable Sk+1 = {d 1/d 2} U Sk Allera 2 Sinon "Echec"
Programmation logique Démonstrateur automatique � Unification : Exemple Dérouler l'algorithme pour l'exemple précédent t 1 = f(g(u), z) t 2 = f(g(h(t)), r(a)) • • • S 0 = {} ; D = {u, h(t)) S 1 = S 0 U { u/h(t) } = { u/h(t)} D = {z, r(a)} S 2 = S 1 U { z/r(a) } = { u/h(t), z/r(a))} S 2 est l'unificateur.
Programmation logique Démonstrateur automatique � Unification : remarques • Deux termes ne sont pas toujours unifiables. Ex f(A), f(B). • Deux termes peuvent avoir une infinité d'unificateurs, mais il existe un qui est le plus général(donné par l'algorithme). • x et f(x) donne une boucle infini.
Programmation logique Démonstrateur automatique 1. Principe de résolution (Robinson 65) • C'est une procédure d'inférence syntaxique qui, appliquée à un ensemble de clauses, détermine si l'ensemble est inconsistant ( il n y a pas d'interprétations pour laquelle l'expression est vraie ). • Cette procédure est similaire au processus de démonstration par l'absurde.
Programmation logique Démonstrateur automatique � Principe de résolution (Robinson 65) • Supposons que nous voulons démontrer { C 1, C 2, . . . Cn} --> D ou encore C 1 & C 2. . . & Cn --> D • Démontrer çà revient à démontrer l'inconsistance de C 1 & C 2. . & Cn & non D • En effet : • Démontrer que (C 1 & C 2. . & Cn --> D) est valide revient à démontrer que sa négation est inconsistante c'est à dire • non(C 1 & C 2 &. . & Cn --> D) est inconsistante. • = non(C 1 & C 2. . . Cn)V D) ) • = C 1 & C 2. . . & Cn & non D. • (Formules utilisées : p-->q = non p V q non (p V q) = non p et non q)
Programmation logique Démonstrateur automatique � Principe de résolution (Robinson 65) • En utilisant la résolution et l'unification nous pouvons montrer que l'ensemble { C 1, C 2, . . . Cn, Non D) est inconsistant ( par la déduction d'une contradiction). • Si l'ensemble des clauses est inconsistant, la résolution et l'unification génère toujours la clause vide( Complétude).
Programmation logique Démonstrateur automatique � Détermination des résolvantes : • Soient deux clauses C 1 = A 1 V A 2. . . V An C 2 = B 1 V B 2. . V Bm • S'il existe i et j tels que Ai et Non Bj sont unifiables par S, alors on obtient une nouvelle clause appelée résolvante et est donnée par S(A 1 V. . V Ai-1 V Ai+1. . . An V B 1 V. . V Bj-1 V Bj+1 V. . Bm ) • La résolvante est une conséquence logique de C 1 et C 2.
Programmation logique Démonstrateur automatique � Détermination des résolvantes : ( Explication ) C 1 de la forme X V Ai (Commutativité du V) C 2 de la forme Bj V Y (Commutativité du V) S. C 1 = S. X V S. Ai (1) S. C 2 = S. Bj V S. Y (2) de(1) : Non S. X ==> S. Ai de(2) : Non S. Bj ==> S. Y Comme S. Ai = S. Non Bj ( S unificateur), par transitivité on : Non S. X ==> S. Y ou : S. X V S. Y ou encore S. (X V Y)
Programmation logique Démonstrateur automatique � Algorithme général de résolution • Soit à démontrer C 1, C 2, . . , Cn --> But C 1, C 2, . . Cn et but sont des clauses. 1. A 0 ={C 1, C 2, . . . Cn}U{ Non but} 2. Ai+1 = Ai U { Toutes les résolvantes de clauses prises dans Ai} 3. SI Ai+1 contient la clause vide : Arrêt, But est une conséquence logique de C 1, . . Cn " 4. Si Ai+1 = Ai : Arrêt, But n'est pas une conséquence logique de C 1, . . Cn " 5. Allera 2
Programmation logique Démonstrateur automatique � Résolution dans un cas particulier • Soient deux clauses C 1 et C 2 avec aucune variable en commun. S'il existe un littéral L 1 dans C 1 qui est un complément d'un littéral L 2 dans C 2, L 1 et L 2 sont supprimés et la disjonction de C 1 et C 2 est formée à partir des restes des clauses. La nouvelle clause est appelée résolvante de C 1 et C 2. • Exemple : pour résoudre les deux clauses (Non p) V q et (Non q) V r nous écrivons : (Non p) V q , (Non q) V r (Non p) V r L'unificateur est S = {}. Çà correspond tout simplement à la règle du chaînage.
Programmation logique Démonstrateur automatique � Résolution dans un cas particulier : Exemple • Prouver A 1 & A 2 avec les hypothèses suivantes : C 1 : Non B 1 V Non B 2 V A 1 C 2 : B 1 C 3 : Non B 1 V Non A 2 V B 2 C 4 : A 2 • Il s'agit donc de réfuter l'ensemble A 0 = { C 0, C 1, C 2, C 3, C 4} avec C 0 : Non A 1 V Non A 2
Programmation logique Démonstrateur automatique � Résolution dans un cas particulier : Exemple • Construction de A 1 : de C 0 et C 1 on déduit : de C 0 et C 4 on déduit : de C 1 et C 2 on déduit : de C 1 et C 3 on déduit : de C 2 et C 3 on déduit : de C 3 et C 4 on déduit : C 5 = Non B 1 V Non B 2 V Non A 2 C 6 = Non A 1 C 7 = Non B 2 V A 1 C 8 = Non B 1 V Non A 2 V A 1 C 9 = Non A 2 V B 2 C 10 = Non B 1 V B 2 A 1 = { C 1, C 2, C 3, C 4, C 5, C 6, C 7, C 8, C 9, C 10}
Programmation logique Démonstrateur automatique � Résolution dans un cas particulier : Exemple • Construction de A 2 : de C 0 et C 7 on déduit : C 11 = Non B 2 V Non A 2 de C 0 et C 8 on déduit : C 12 = Non B 1 V Non A 2 *** de C 1 et C 6 on déduit : C 13 = Non B 1 V Non B 2 de C 1 et C 9 on déduit : C 14 = Non B 1 V Non A 2 V A 1 de C 1 et C 10 on déduit : C 15 = Non B 1 V A 1 ect. . . A la prochaine étape on aura C 2 et C 12 ont comme résolvante s = Non A 2. Ce qui mène vers une clause vide en la combinant avec C 4.
Programmation logique Démonstrateur automatique 1. Propriétés de la résolution • La résolution est saine : 1. Si elle permet de dériver la clause vide à partir des hypothèses S et de la dénégation D alors S ==> Non D est nécessairement vrai. • La résolution est complète : 1. Si S ==> Non D, alors la clause vide est nécessairement dérivable. • Ne pas oublier que la logique du premier ordre est semidécidable(Church 1936). En d'autres termes, si S n'infère pas D, la résolution peut ne pas arriver à le prouver.
Programmation logique Démonstrateur automatique � Résolution dans Prolog : clauses de Horn • Dans Prolog, les énoncés sont restreints à deux types de formules(Logique des clauses de HORN) : assertion et implication. • Assertion : un atome(littéral positif) • Implication : A <-- B 1 & B 2 &. . . &Bn A désigne le conséquent et B 1 & B 2 &. . l'antécédent.
Programmation logique Démonstrateur automatique 1. Résolution dans Prolog : clauses de Horn • Cette dernière écriture est équivalente à : 1. (Non B 1) V (Non B 2) V. . (Non Bn) V A. • Une clause de Horn est une clause qui contient au plus un littéral positif. • Prolog utilise un type particulier de résolution appelée "résolution descendante"
Programmation logique Démonstrateur automatique � Résolution dans Prolog (Les différents cas que l'on peut avoir ) • On retrouve les résultats précédents en mettant les implications sous forme disjonctive. (a) Dénégation : Non A Implication : A <-- B • La résolution correspond à une règle simple "Modus Tollens" Non A, A ==> B Non B
Programmation logique Démonstrateur automatique � Résolution dans Prolog ( Les différents cas que l'on peut avoir ) (b) Dénégation : Non A Implication : A <- • Résolvante : s = clause vide.
Programmation logique Démonstrateur automatique � Résolution dans Prolog ( Les différents cas que l'on peut avoir ) (c) Dénégation : Non (A 1, A 2, . . , An) Implication : Ak <-- B 1, B 2, . . . , Bm • Résolvante : s = Non (A 1, A 2, . . , Ak-1, B 2, . . . , Ak+1, . . . An)
Programmation logique Démonstrateur automatique � Résolution dans Prolog( Les différents cas que l'on peut avoir ) (d) Dénégation : Non (A 1, A 2, . . , An) Implication : Ak <- • Résolvante : s = Non (A 1, A 2, . . , Ak-1, Ak+1, . . . An)
Programmation logique Démonstrateur automatique � Résolution dans Prolog (Pas d'inférence dans le cas de la résolution descendante ) • 1. S'assurer qu'il n'existe pas de variables communes dans la dénégation D et dans l'implication S. Un changement de variable peut être fait. • 2. Choisir dans D, un Ai qui est conséquent de S. Si ceci est possible, le pas d'inférence l'est aussi. • 3. Déterminer l'unificateur le plus général µ de Ai et du conséquent de S. Si ceci est possible, le pas d'inférence l'est aussi. • 4. Remplacer dans D, Ai par les antécédents de S. Si S est une assertion, effacer tout simplement Ai de D. On obtient ainsi une nouvelle dénégation. • 5. appliquer µ à la dénégation tout entière.
Programmation logique Démonstrateur automatique � Résolution dans Prolog : Exemple Prouver A 1, A 2. (, désigne le "et logique") avec comme implications : f 0 : A 1 <-- B 1, B 2. f 1 : B 1 <-f 2 : B 2 <-- B 1, A 2 f 3 : A 2 <--
Programmation logique Démonstrateur automatique � Résolution dans Prolog : Exemple • Il suffit donc de réfuter Non(A 1 & A 2) Par remplacements successives, nous obtenons : Non( A 1 et A 2) Non( B 1 et B 2 et A 2) f 0 Non( B 2 et A 2) f 1 Non( B 1 et A 2) f 2 Non( B 1 et A 2) simplification Non( A 2) f 1 Faux f 3 Noter l'utilisation du Backtracking.
Programmation logique Démonstrateur automatique � Résolution dans Prolog : Exemple 2 • Prouver Inf(2, 3) avec S 0: Inf(0, Y) <-- Y > 0 S 1: Inf(X, Y) <-- X <> 0, Inf(X-1, Y-1)
Programmation logique Démonstrateur automatique 1. • • 1. 2. 3. 4. 5. 6. 7. 8. 9. Résolution dans Prolog : Exemple 2 Il faut donc réfuter D = Non(Inf(2, 3)). Inf(2, 3) s'unifie avec Inf(X, Y) (application de S 1) µ = { X: =2 ; Y : =3 } D devient Non (2<>0, Inf(1, 2)) Inf(1, 2) s'unifie avec Inf(X, Y) (application de S 1) µ = { X: =1 ; Y : =2 } D devient Non (2<>0, 1<>0, Inf(0, 1)) Inf(0, 1) s'unifie avec Inf(0, Y) (application de S 0) µ = { Y : =1 } D devient Non (2<>0, 1>0) D'ou l'inconsistance de D.
- Slides: 31