Approche logique de l`intelligence artificielle Jean

publicité
Approche logique de l’intelligence artificielle
Jean-Philippe Préaux
http://www.i2m.univ-amu.fr/~preaux
Où l’on voit comment une méthode de démonstration formelle
en logique des prédicats a permis la réalisation d’un langage
de programmation logique –Prolog– capable de concevoir des
« systèmes intelligents ».
2010
Approche logique de l'I.A.
Jean-Philippe Préaux
Table des matières
Introduction…………………………………………………………………………………….3
I) Logique des prédicats………………………………………………………………………..5
I.1) Syntaxe du calcul des prédicats……………………………………………………………7
I.1.1) Langage du calcul des prédicats ...............................……………………………7
I.1.2) Formules bien formées………………………………………………….……….7
a) Les termes…………………………………………………………………...…7
b) Les atomes……………………………………………………………………..8
c) Formules bien formées…………………………………………………………8
I.1.3) Représentation d’un FBF sous la forme d’un arbre……………………………...9
I.1.4) Portée d’un quantificateur, variable libre ou liée………………………………10
a) Portée d’un quantificateur………………………………………………….…10
b) Variable libre, variable liée………………………….......................................11
I.2) Sémantique du calcul des prédicats………………………………………………………12
I.2.1) Réalisation d’un langage……………………………………………………….12
I.2.2) Valeur d’une formule………………………………………………………..…12
a) Assignation de variables……………………………………………………...12
b) Valeur d’une formule dans un modèle, pour une assignation……………...…13
c) Valeur d’une formule dans un modèle……………………………………......14
I.2.3) Formules valides, inconsistantes, équivalentes………………………………...14
I.2.4) Théorie, conséquence logique………………………………………………….15
I.2.5) Equivalence du calcul des prédicats……………………………………………17
I.3) Système axiomatique, règles d’inférences……………………………………………….19
I.3.1) Définitions……………………………………………………………………...19
I.3.2) Système axiomatique du calcul des prédicats…………………………………..19
I.3.3) Complétude du calcul des prédicats…...…………….…………………………20
I.3.4) Indécidabilité du calcul des prédicats…………………………………………..21
II) Procédure de Preuve par réfutation : le principe de résolution……..……………………..23
II.1) Ecriture sous forme clausale…………………………………………………………….25
II.1.1) Formes prénexes…………………………………………………………….…25
II.1.2) Formes normales conjonctives………………………………………………...28
II.1.3) Formes de Skolem……………………………………………………………..30
II.1.4) Formes clausales………………………………………………………………31
II.1.5) En résumé : Algorithme de mise sous forme clausale………………………...33
II.1.6) Exemple complet………………………………………………………………34
II.2) Principe de résolution……………………………………………………………………35
II.2.1) Principe de résolution appliqué à des clauses concrètes………………………35
II.2.2) Unification de littéraux………………………………………………………...36
a) Substitution…………………………………………………………………36
b) Unification………………………………………………………………….37
c) Algorithme d’unification…………………………………………………...38
II.2.3) Principe de résolution appliqué à des clauses quelconques…………………...41
II.2.4) Propriétés du principe de résolution…………………………………………...41
II.3) Preuve par réfutation en utilisant le principe de résolution……………………………...43
II.3.1) Réfutation par résolution………………………………………………………43
http://www.i2m.univ-amu.fr/~preaux
1
Approche logique de l'I.A.
Jean-Philippe Préaux
II.3.2) Non déterminisme de la réfutation par résolution……………………………..46
a) Non déterminisme………………………………………………………….46
b) Stratégies de résolution par réfutation, complètes, effectivement
complètes…………………………………………………………………...47
c) Graphe de dérivation, graphe de réfutation………………………………...47
II.3.3) Quelques exemples de stratégies………………………………………………49
a) Stratégie de résolution « en largeur »………………………………………49
b) Stratégie de résolution « linéaire »………………………………………....49
c) Stratégie « linéaire par entrée »…………………………………………….52
II.3.4) Principe de résolution restreint aux clauses de Horn …………………………53
II.3.5) Principes de programmation logique………………………………………….54
II.4) Illustrations………………………………………………………………………………57
http://www.i2m.univ-amu.fr/~preaux
2
Approche logique de l'I.A.
Jean-Philippe Préaux
Introduction
Il faudrait plus que quelques lignes pour définir fidèlement −si tant est que cela soit
possible− ce que l’appellation d’Intelligence Artificielle recouvre de nos jours. Disons que ce
domaine, d’orientation plus pragmatique que théorique, a pour objet de faire réaliser à des
systèmes informatiques des tâches complexes nécessitant une forme de « raisonnement » dit
« intelligent ». Des activités mentales comme par exemple celles nécessitées par la conduite
d’un véhicule, la pratique des mathématiques, la compréhension d’une langue, la pratique des
échecs ou l’étude d’un cours de l’école de l’air (…) sont habituellement considérées comme
faisant appel à un raisonnement « intelligent ». Durant ces dernières décennies de nombreux
systèmes informatiques pouvant accomplir des tâches de cette nature ont été conçus. Il existe
par exemple des systèmes capables de diagnostiquer une maladie, de battre le champion du
monde aux échecs, de prévoir la synthèse de produits chimiques complexes, de résoudre des
équations différentielles, d’écrire de petits programmes répondant à certaines spécifications
formelles, de traduire des textes de construction assez simple, ou de retranscrire un discours
oral (etc…). Ainsi l’intelligence artificielle est déjà présente dans le monde technologique qui
nous entoure. Plus que cela, son développement est intimement lié aux développements
technologiques à venir.
La conception de tels systèmes repose essentiellement sur des techniques générales
provenant de la logique, des mathématiques, et de l’informatique théorique. Ces techniques
sont encore en nombre relativement restreint −l’IA est une discipline récente−. Nous nous
focaliserons dans ce cours seulement sur l’une d’entre-elle, à cause de son importance et de sa
généralité (certaines techniques de théorie des graphes, d’heuristique, ou d’optimisation
combinatoire seront abordées par ailleurs, pour elles-mêmes, dans d’autres cours de la
mineure de Recherche Opérationnelle). La technique que nous étudierons est le fondement
théorique du langage de programmation logique PROLOG, langage utilisé pour la conception
de nombreux systèmes « intelligents ». Il s’agit grosso modo d’une technique de
démonstration automatique de théorèmes −même si elle sera rarement utilisée pour résoudre
des problèmes mathématiques.
Cette technique utilise la logique des prédicats pour représenter les connaissances dont
on dispose. Le langage des prédicats est suffisamment riche pour représenter formellement un
grand nombre de connaissances ou faits, et leurs relations logiques. A partir d’un ensemble de
connaissances initiales (c'est-à-dire de formules dans le langage des prédicats), on peut se
poser la question de savoir si un fait quelconque (traductible en une formule du même
langage) doit nécessairement être vrai (par exemple si : « Tous les hommes sont mortels » et
si « Socrate est un homme », alors « Socrate est mortel » est nécessairement vrai). Dans ce
cadre logique, la véracité d’un tel fait constitue un théorème, et pour l’établir il s’agit d’en
effectuer une démonstration. Pour qu’un système informatique soit capable à partir de certains
faits exprimés dans le langage des prédicats, d’en déduire d’autres il faut qu’il soit capable
d’effectuer des démonstrations automatiques. C’est d’une telle technique de démonstration
automatique dont ce cours fait l’objet.
Le cours se compose de deux chapitres. Dans le premier chapitre nous introduisons la
logique des prédicats, d’une façon assez classique. Dans le deuxième chapitre nous
établissons la procédure de preuve automatique dite procédure de preuve par réfutation. Nous
terminons ce chapitre par un survol (très rapide) du langage PROLOG, et par quelques
illustrations.
Novembre 2003
http://www.i2m.univ-amu.fr/~preaux
3
Approche logique de l'I.A.
Jean-Philippe Préaux
http://www.i2m.univ-amu.fr/~preaux
4
Approche logique de l'I.A.
Jean-Philippe Préaux
Chapitre I
Logique des prédicats
http://www.i2m.univ-amu.fr/~preaux
5
Approche logique de l'I.A.
Jean-Philippe Préaux
Introduction
La logique, initiée par Aristote au IVe av. J.C. dans l’Organon, a pour vocation
d’étudier le raisonnement déductif en lui-même, abstraction faite de la matière à laquelle il
s’applique ou de tout processus psychologique. Par exemple tandis que « le frère de ma mère
est mon oncle » est une vérité de langage, et que « le feu ça brûle » est une vérité de fait, les
trois phrases suivantes sont des vérités logiques :
− « si lorsqu’il pleut la route est mouillée, alors si la route n’est pas mouillée c’est qu’il ne
pleut pas »,
− « si soit il fait beau, soit il pleut, alors s’il ne pleut pas, c’est qu’il fait beau »,
− « si tous les chats sont verts, et si Félix est un chat, alors Félix est vert ».
Après Aristote, la logique −sous un aspect plus formel− a été développée au XIXe
siècle, essentiellement dans le but d’établir un fondement solide des Mathématiques. C’est à
cette époque qu’apparaît la logique des prédicats (Frege, 1879).
Plutôt que de la logique il faudrait parler des logiques. Il existe de nombreux types de
logiques, chacune d’entre-elles étant plus adéquates que les autres pour exprimer certains
types de raisonnement. La plus simple d’entre-elles est certainement la logique des
propositions. Elle traite de propositions qui prennent les valeurs vraie ou fausse, et des
connecteurs logiques, le non : ¬ , le ou : ∨ , le et : ∧ , et le implique : ⇒ (et éventuellement
le est équivalent à : ⇔ ).
La logique des propositions est cependant trop pauvre pour exprimer beaucoup de
vérités. La première vérité logique citée plus haut peut se formaliser par
( Pluie ⇒ mouillée) ⇒ (¬mouillée ⇒ ¬Pluie) , et la deuxième vérité logique par la formule
( Soleil ∨ Pluie) ⇒ (¬Pluie ⇒ Soleil ) , et ces formules sont dites valides ou des tautologies
(elles sont vraies indépendamment des valeurs prises par les propositions Pluie, mouillée,
etc…). Cependant la troisième vérité logique ci-dessus ne peut pas s’exprimer comme une
tautologie du langage des propositions ; la raison en est la présence du quantificateur « tous
les… ».
Pour exprimer cette dernière vérité logique il est nécessaire de faire appel à la logique
des prédicats. En logique des prédicats on dispose de variables, de constantes, et de fonctions,
et les propositions sont remplacées par des prédicats dépendant de variables ; ils prennent la
valeur vrai ou faux en fonction des valeurs prises par leur variable. On utilise toujours les
connecteurs logiques ; bref le langage des prédicats doit être compris comme une version
améliorée du langage des propositions, intégrant des variables, des constantes et des
fonctions. Une particularité supplémentaire est l’emploi des quantificateurs ∀ (dit universel)
et ∃ (dit existentiel). La dernière vérité logique peut s’exprimer dans ce langage comme la
tautologie ((∀x, Chat ( x) ⇒ Vert ( x)) ∧ Chat ( Félix)) ⇒ Vert ( Félix) .
La logique des prédicats est assez riche pour exprimer un grand nombre de vérités
logiques. Elle permet d’ailleurs de formaliser la plupart des mathématiques. Même si elle est
inadéquate pour exprimer certaines situations (comme des concepts temporels « demain »)
elle constitue un bon compromis entre simplicité et puissance d’expression, et joue un rôle
d’importance en I.A..
http://www.i2m.univ-amu.fr/~preaux
6
Approche logique de l'I.A.
Jean-Philippe Préaux
I.1) Syntaxe du calcul des prédicats
I.1.1) Langage du calcul des prédicats
On se donne un alphabet constitué des symboles suivants :
– Un ensemble de symboles appelés les constantes. Sauf contre-indication on aura
coutume de les désigner par les premières lettres minuscules de l’alphabet, éventuellement
munies d’indices : a, b, c, d,…, a1 , a2 ,..., etc... .
– Un ensemble de symboles appelés les variables. On les désignera usuellement par
les dernières lettres de l’alphabet minuscule : x, y, z , x1 , x2 ,..., z1 , z2 ,... etc.….
– Un ensemble de symboles appelés les prédicats, que l’on désignera usuellement par
les lettres majuscules : P, Q, R,..., P1 , P2 ,..., etc... . Tout prédicat est muni d’une arité, i.e. d’un
nombre entier : 0, 1,2,…,etc.,… (qui informellement représente le nombre d’arguments
qu’accepte le prédicat). Des prédicats munis d’arité 1, 2, 3, n, sont appelés respectivement des
prédicats unaires, binaires, ternaires, n-aires. Un prédicat d’arité 0 est aussi appelé une
proposition.
– Un ensemble de symboles appelés les fonctions, désignés par :
f , g , h,..., f1 , f 2 , etc,... . Eux aussi sont munis d’une arité, à ceci près qu’il s’agit
d’un entier non nul : 1, 2,3,…, n (et on parlera de fonction unaire, binaire, ternaire,
ou n-aire.
– Les séparateurs : ce sont les parenthèses : ( et ) ; ainsi que la virgule : ,.
– Les connecteurs logiques : ¬, ∧, ∨, ⇒, ⇔ , (respectivement désignés, « non »,
« et », « ou », « implique », et « équivaut à »).
– Les quantificateurs (respectivement existentiel et universel) : ∃ et ∀ .
Ces symboles sont dénués de toute signification intrinsèque. Il ne servent qu’à constituer un
langage formel : à partir de cet alphabet on peut concevoir des formules (des suites finies de
symboles, comme : a¬P( x, y , ou ∃x, P( x) , …) ; parmi toutes les formules on ne considérera
que certaines d’entre elles appelées des formules bien formées. Ces FBFs en abrégé, sont
définies par certaines règles ‘grammaticales’, exposées dans le prochain paragraphe.
I.1.2) Formules bien formés (ou FBFs)
a) Les termes : Ils sont définis par induction de la façon suivante :
− Les variables et les constantes sont des termes.
− Si f est une fonction d’arité n, et si t1 , t2 ,..., tn sont n termes, alors la
formule f (t1 , t2 ,..., tn ) un terme.
− Tous les termes s’obtiennent de cette façon (propriété de clôture).
Remarques : - Attention il s’agit là d’un abus de notation !! Les t1 , t2 ,..., tn ne sont pas
nécessairement des symboles de notre alphabet, mais représentent des termes !! La notation
f (t1 , t2 ,..., tn ) représente la formule obtenue en remplaçant chaque ti par le terme qu’il
représente. Nous pourrons commettre souvent cet abus de notation.
http://www.i2m.univ-amu.fr/~preaux
7
Approche logique de l'I.A.
Jean-Philippe Préaux
Exemples : – Si f, g sont des fonctions respectivement unaire et binaire, a, b des
constantes, et x une variable, alors les formules : a ; x ; f(x) ; f ( f (b)) ; f ( g (b, f ( x))) sont des
termes.
– Si l’on considère les fonctions unaires père et mère , et les constantes
Nathalie et Eric , on peut former (entre autres) les termes suivants : père(Nathalie) ,
mère(père(Eric)) , Eric .
Informellement les termes sont les éléments. Ils vivent dans un monde appelé espace des
termes ou domaine. Cela sera précisé rigoureusement dans la section I.2 qui traite de
sémantique.
b) Les atomes : Ils sont définis par les lois :
− Toute proposition (ou prédicat d’arité 0) est un atome.
− Si P est un prédicat n-aire, et si t1 , t2 ,..., tn sont n termes, alors
P(t1 , t2 ,..., tn ) est un atome.
− Tout atome s’obtient ainsi (propriété de clôture)
Exemple : Si P est un prédicat binaire, P(a, x) et P( g (a, b), f ( x)) sont des atomes (dits aussi
formules atomiques car nous allons voir que ce sont en particulier des FBFs).
Informellement les atomes sont des propositions qui prennent des valeurs V (vrai) ou F (faux),
lorsque les variables qu’ils invoquent prennent des valeurs. La véracité de ces propositions
dépend en général des valeurs prises par les variables invoquées.
c) Formules bien formées : Elles sont définies par le procédé d’induction :
− Les atomes sont des FBFs.
− Si F1 et F2 sont des FBFs, alors les formules ( F1 ∧ F2 )
; ( F1 ∨ F2 ) ; ( F1 ⇒ F2 ) ; ( F1 ⇔ F2 ) ; et ¬F1 sont des FBFs.
− Si F est une FBF, et x une variable, ∃x, F et ∀x, F sont des FBFs.
(F est alors appelé la portée du quantificateur.)
− Propriété de clôture.
Exemples : – Les formules ∃y, (∀x, P( a, b)) ∧ (¬P( f ( y ), b)) ; ∀x, ∃y, ¬P( x, y ) sont des FBFs.
– Les termes ne sont jamais des FBFs !! Les formules x ; f (a) ; f (a) ⇒ g ( x, b) ne
sont pas des FBFs !!
– Si l’on rajoute au dernier exemple du paragraphe précédent le prédicat unaire
CONNAITRE , alors on peut construire (entre autres) les FBFs suivantes :
CONNAITRE (père(Nathalie)) ;
CONNAITRE (Nathalie) ∧ ¬CONNAITRE (mère(Eric)) .
Remarques et notations : − Les parenthèses n’ayant d’autre utilité que d’encadrer le champ
des paramètres d’un prédicat, d’une fonction, ou d’un connecteur et d’imposer les priorités
dans leur évaluation, on pourra dans certains cas où ils ne présentent aucune utilité ou
ambiguïté sémantique commettre des abus de notation les concernant : Ainsi les formules
suivantes sont des FBFs : (P (a, x )) ; (¬P(a, b)) ; P (a, x) ∨ P(b, b) ; P(a, a) ⇒ ∃x, P( x, x) .
http://www.i2m.univ-amu.fr/~preaux
8
Approche logique de l'I.A.
Jean-Philippe Préaux
Nous pourrons employer les ‘crochets’ « [,] » en lieu et place de parenthèses pour accroître la
lisibilité des formules.
− De la même façon, lorsque nous aurons parlé de l’équivalence des FBFs, et des
règles d’associativité de ∧ ainsi que de ∨ , nous aurons coutume de noter F1 ∧ F2 ∧ F3 (forme
conjonctive) au lieu de ( F1 ∧ ( F2 ∧ F3 )) ou de (( F1 ∧ F2 ) ∧ F3 ) ; de même nous noterons
F1 ∨ F2 ∨ F3 (forme disjonctive). Mais attention, F1 ∧ F2 ∨ F3 n’est pas une FBF !!
− Toute FBF de la forme F ou ¬F , où F est un atome est appelé un littéral. Dans le
premier cas on parlera de littéral positif et dans le second cas de littéral négatif.
I.1.3 Représentation d’une FBF sous la forme d’un arbre
Il peut-être plus pratique (ou du moins plus visuel) de représenter un FBF sous la
forme d’un arbre. Cela a l’avantage d’éviter l’utilisation de parenthèses -souvent peu lisibles.
Les sommets de cet arbre sont labellés : ils sont représentés par des cercles (ou nœuds, ou
sommets) contenant le symbole de notre alphabet d’une constante, variable, prédicat, fonction,
connecteur ou bien d’un quantificateur suivi d’une variable ( ∃x ou ∀y ) (seuls les séparateurs
sont omis). L’arbre se lit de haut en bas. Si un sommet a pour label un symbole de fonction,
prédicat (d’arité >0), connecteur ou quantificateur, d’arité n, il part de la base de ce sommet n
arêtes qui le relient à ses arguments. Si un sommet a pour label une variable ou une constante,
il ne part de sa base aucune arête ; de même si il s’agit d’une proposition : on dit que c’est une
feuille. Le nœud situé le plus en haut est appelé la racine de l’arbre. Le mieux est d’illustrer
sa construction sur des exemples :
Exemples : Dans le dernier paragraphe nous avons considéré les FBFs suivantes :
∀x, ∃y, ¬P( x, y )
∃y, (∀x, P(a, b)) ∧ (¬P ( f ( y ), b))
La FBF ∀x, ∃y, ¬P( x, y ) donne le graphe suivant :
∀x
∃y
¬
P
x
y
La FBF ∃y, (∀x, P( a, b)) ∧ (¬P( f ( y ), b)) donne le graphe qui suit. Cet exemple est bien plus
instructif :
http://www.i2m.univ-amu.fr/~preaux
9
Approche logique de l'I.A.
Jean-Philippe Préaux
∃y
∧
∀x
¬
P
P
a
b
f
b
y
On voit sur cet exemple que la construction de l’arbre suit la construction inductive de la
formule : dans l’exemple qui précède la formule ∃y, (∀x, P(a, b)) ∧ (¬P( f ( y ), b)) est
construite à partir des termes a, b, f(y), en formant d’abord les atomes P (a, b), et P ( f ( y ), b) ,
puis en considérant les FBFs ∀x, P(a, b) et ¬P( f ( y ), b) , dont on prend la conjonction, puis
finalement, en quantifiant existentiellement la variable y.
I.1.4) Portée d’un quantificateur, variable libre ou liée
a) Portée d’un quantificateur
Considérons une FBF notée φ et supposons qu’elle invoque un quantificateur
quelconque ; on suppose sans perte de généralité que φ invoque le quantificateur ∀ (i.e. une
occurrence de ∀ apparaît dans φ ). Considérons l’arbre construit à partir de φ . Il a un sommet
de label ∀x (par exemple) correspondant à l’occurrence considérée de ∀ dans φ . De la base
de ce noeud se prolonge une seule arête qui vient finir sur un autre sommet. Ce dernier
sommet est la racine d’un sous arbre maximal ; et ce sous arbre (ou rameau) correspond à une
sous-formule G de φ . Cette sous-formule G est la portée du quantificateur ∀ (ou ∀x )
considéré.
http://www.i2m.univ-amu.fr/~preaux
10
Approche logique de l'I.A.
Exemple : Dans la FBF :
Jean-Philippe Préaux
∀x, (∃x, P( x) ∧ ∀y, ( P( y ) ∨ P( x)))
∀x
∧
∃x
∀y
P
∨
x
P
P
y
x
La portée du premier quantificateur ∀x est : (∃x, P( x) ∧ (∀y, ( P( y ) ∨ P( x)))
La portée du deuxième quantificateur ∃x est : P(x)
La portée du dernier quantificateur ∀y est : ( P( y ) ∨ P( x))
∀x,(∃x, P(x) ∧∀y,(P( y) ∨ P( x)))
∀x,
Portée de ∀x
∃x,
Portée de ∃x
∀y,
Portée de ∀y
b) Variable libre, variable liée
Considérons maintenant une FBF φ et une variable y ayant une occurrence dans φ .
L’occurrence de y dans φ est dite libre si elle n’est pas située dans la portée d’un
quantificateur gouvernant y (i.e. ∀y ou ∃y ), sinon elle dite liée. Une variable est dite libre si
une de ses occurrences est libre, sinon elle est dite liée.
Exemple : Dans la précédente FBF : ∀x, (∃x, P ( x) ∧ ∀y, ( P ( y ) ∨ P ( x))) toutes les variables
sont liées. Alors que dans (∃x, P ( x) ∧ (∀y, ( P( y ) ∨ P ( x))) la première occurrence de x est
liée, tandis que sa deuxième occurrence est libre : x est une variable libre. Quant à la variable
y, elle est bien sûr liée.
http://www.i2m.univ-amu.fr/~preaux
11
Approche logique de l'I.A.
Jean-Philippe Préaux
I.2) Sémantique du calcul des prédicats
I.2.1) Réalisation d’un langage
Donné un langage L du calcul des prédicats, une réalisation (ou modèle, ou
interprétation) M de L est la donnée de :
− Un ensemble E, appelé le domaine.
− Pour chaque constante c du langage L un élément c de E.
− Pour chaque fonction f d’arité n, une application f de E n dans E.
− Pour chaque prédicat P d’arité n>0, une application P de E n dans {V , F } .
− Pour chaque proposition P une valeur prise dans {V , F } .
Remarque : En particulier si M est un modèle de L et si l’on ajoute des symboles de
constante au langage L, M reste un modèle de L. Ce fait sera utilisé dans les procédures de
transformation de formules (cf. §II.1).
Exemples : Soit le langage L constitué d’une variable z, d’une constante c, d’une fonction f
d’arité 1, et d’un prédicat binaire P. On considère les réalisations suivantes de L :
a)
E = \*+ ; c = 1 ; f ( x) = x 2 ; P( x, y ) : x < y .
E est une population ; c est Paul, f ( x) est le père de x, et P( x, y ) : x est plus
jeune que y.
c)
E est l’ensemble des jours de l’année ; c est le 21 juin, f ( x) est le jour qui
b)
succède à x, et P ( x, y ) : le jour x est plus court que le jour y (du levée au coucher du
soleil).
d)
E est la réunion de l’ensemble des points du plan privés de l’origine, et des
droites passant par l’origine. c est l’axe des abscisses, f associe à tout point la droite
passant par ce point et par l’origine, et à toute droite elle-même. P ( x, y ) : x et y sont
des droites, et y est strictement plus pentue que x.
I.2.2) Valeur d’une formule
a) Assignation de variables
Soit M une réalisation du langage L . On appelle assignation de variables, toute
application d’une partie finie de l’ensemble des variables de L dans le domaine E.
Exemple : Si L a pour variables x1 , x2 , x3 ,... , et si le champ est ] , alors x1 := −1 , x3 := 2
est une assignation des variables x1 et x3 aux valeurs -1 et 2. Cela signifie qu’on leur attribue
ces valeurs. C’est l’analogue de ce que l’on noterait en algorithmique : x 1 ← −1 et x 3 ← 2 .
Considérons un terme t du langage. Ce terme invoque certaines variables.
Considérons une assignation α des variables invoquées dans t, ou tout du moins qui
s’applique à toutes les variables de t. Alors donnée une telle assignation de variables on peut
http://www.i2m.univ-amu.fr/~preaux
12
Approche logique de l'I.A.
Jean-Philippe Préaux
naturellement donner une valeur t à t, (c'est-à-dire lui associe un élément t ∈ E , on dit évaluer
t). Pour cela il suffit de remplacer dans t toute constante c par sa valeur c , toute fonction f
par l’application f , et toute variable par la valeur qui lui est assignée.
b) Valeur d’une formule dans un modèle pour une assignation
On se propose d’évaluer une formule φ dans un modèle donné, pour une assignation
donnée de ses variables libres (notons α cette assignation), c'est-à-dire lui attribuer une valeur
V (vrai) ou F (faux) dépendant de α . Pour cela on procède par induction :
− Si φ est un atome, φ = P(t1 ,..., tn ) . L’assignation α donne les valeurs t1 ,..., t n aux
termes t1 ,..., tn . Alors φ prend la valeur P (t1 ,..., t n ) (qui est V ou F).
− Les connecteurs logiques sont évalués selon les règles données par les tables de
vérité :
P
V
F
¬P
F
V
P
Q
V
F
V
F
V
V
F
F
P
Q
P∨Q
P
Q
V
F
V
F
V
V
F
F
V
V
V
F
V
F
V
F
V
V
F
F
P
Q
V
F
V
F
V
V
F
F
P⇔Q
V
F
F
V
P⇒Q
V
V
F
V
P∧Q
V
F
F
F
− Si F est de la forme : ∀x, P( x) (où P est une FBF ayant (entre autres) x pour variable
libre) ; F est vrai si P( x) est vrai quelle que soit l’assignation de x.
− Si F est de la forme : ∃x, P ( x) ; F est vrai si pour une certaine assignation de x,
P( x) est vrai.
Exemple : Si l’on reprend le langage de l’exemple ci-dessus, et la formule P( x, f ( x)) .
− Dans le modèle a), c’est une formule vraie pour toute assignation qui donne à x une
valeur supérieure à 1, et fausse sinon. La formule close ∃x, P ( x, f ( x)) est vraie et
∀x, P ( x, f ( x)) est fausse.
− Dans le modèle b), elle est vraie pour toute assignation de x : un fils est toujours plus
jeune que son père. En particulier la formule ∀x, P( x, f ( x)) est vraie.
− Dans le modèle c) la formule est vraie pour une assignation donnant à x une valeur
comprise entre le solstice d’hiver et le solstice d’été.
− Dans le modèle d) la formule est fausse quelle que soit l’assignation considérée. Si x
est un point P ( x, f ( x)) est par définition faux, et si x est une droite f ( x) = x a même pente
que x.
http://www.i2m.univ-amu.fr/~preaux
13
Approche logique de l'I.A.
Jean-Philippe Préaux
c) Valeur d’une formule dans un modèle
Une formule φ ( x1 ,..., xn ) invoquant des variables libres x1 ,..., xn est vraie dans M si
elle est vraie pour toute assignation de x1 ,..., xn ; on note
M φ ( x1 ,..., xn )
et l’on dit que M est un modèle de φ ( x1 ,..., xn ) . On dit qu’elle est fausse dans M lorsque sa
négation est vraie dans M (c’est alors un contre modèle). En général une formule non close
n’est ni vraie ni fausse dans M.
Puisque la validité d’une formule close φ dans un modèle M est indépendante de
toute assignation de variable, elle ne peut être que vraie ou fausse. Si φ est vraie on note :
M
φ
et l’on dit que M est un modèle de φ . Sinon (elle est fausse) on dit que c’est un contre
modèle. Tout modèle de φ est un contre modèle de ¬φ et réciproquement.
Exemple : Avec le même exemple que précédemment, la formule P ( x, f ( x)) admet pour
modèle b) et pour contre modèle d). Dans les cas a) et c) elle n’est ni vraie ni fausse.
I.2.3) Formules valides, inconsistantes, équivalentes
Si la formule φ est vraie dans tout modèle du langage L , on dit que c’est une formule valide
ou encore une tautologie (autrement on dit qu’elle est invalide). On note :
φ
Si elle est fausse dans tout modèle on dit que la formule est inconsistante (sinon on dit qu’elle
est consistante). Dans ce cas sa négation est une formule valide.
Exemples : La formule P ∨ ¬P est valide (toujours vraie), la formule P ∧ ¬P est
inconsistante (toujours fausse). La formule ∃x, P ( x) est consistante (prendre pour domaine
l’ensembles des êtres humains, et pour P : être une femme) et invalide (prendre le même
domaine et P : mesure 10 mètres de haut). La formule P ( x, f ( x)) considérée comme exemple
plus haut est aussi consistante et invalide.
Si deux formules φ et ϕ sont vraies dans les mêmes modèles, on dit qu’elles sont
équivalentes. On note φ ≡ ϕ .
Remarque : On peut facilement montrer (exercice !) que P ≡ Q (les formules P et Q sont
équivalentes) si et seulement si P ⇔ Q (la formule P ⇔ Q est valide).
http://www.i2m.univ-amu.fr/~preaux
14
Approche logique de l'I.A.
Jean-Philippe Préaux
I.2.4) Théorie, conséquence logique
Dans la suite on fixe un langage L des prédicats du 1er ordre.
Définitions : – Une théorie T est la donnée d’un ensemble fini de FBFs T = {F1, F2 ,..., Fn } .
– Un modèle (ou réalisation, ou interprétation) de la théorie T est un modèle du
langage L , qui est un modèle pour chaque formule de T . De façon équivalente un modèle de
T n’est rien d’autre qu’un modèle de la formule conjonctive F1 ∧ F2 ∧ ... ∧ Fn .
– Une théorie est non contradictoire ou consistante si elle admet un modèle.
Sinon elle est inconsistante.
– Une formule φ est une conséquence logique de la théorie T si tout modèle de
T est aussi un modèle de F. On note {F1, F2 ,..., Fn }
φ.
Exemples : − Considérons la théorie T suivante :
{ Est _ père _de(michel, anne) ; Est _ père _de(paul, michel ) ;
∀x , ∀y, ∀z,(Est _ père _de(x , y ) ∧ Est _ père _de(y, z )) ⇒ Est _ grand − père _de(x , z ) }
Elle est non contradictoire (il est facile d’en construire un modèle). La formule :
Est _ grand − père _de(paul, anne) en est une conséquence logique.
− La théorie
{∀x, P( x); ∀y, Q( y ); ∃x, ¬( P( x) ⇒ Q( x))} est
inconsistante. En
effet la formule ∃x, ¬(( P( x) ⇒ Q( x)) est équivalente à ∃x, ( P( x) ∧ ¬Q( x)) qui a pour
conséquence logique ∃x, ¬Q( x) elle-même équivalente à la formule ¬(∀y, Q( y )) qui
fait apparaître une contradiction avec la formule ∀y, Q( y ) .
Théorème (de la déduction): La FBF φ est conséquence logique de la théorie {F1, F2,..., Fn } si
et seulement si la formule (F1 ∧ F2 ∧ ... ∧ Fn ) ⇒ φ est valide. En d’autres termes,
{F1, F2 ,..., Fn }
φ si et seulement si (F1 ∧ F2 ∧ ... ∧ Fn ) ⇒ φ .
Preuve : Supposons que φ soit une conséquence logique de {F1, F2 ,..., Fn } , c'est-à-dire que
{F1, F2 ,..., Fn }
φ . Alors tout modèle qui satisfait {F1, F2,..., Fn } satisfait aussi φ , et donc la
formule (F1 ∧ F2 ∧ ... ∧ Fn ) ⇒ φ est valide. Réciproquement si (F1 ∧ F2 ∧ ... ∧ Fn ) ⇒ φ ,
alors dans tout modèle, on ne peut pas avoir à la fois F1, F2, …, et Fn et ¬φ . Ainsi tout modèle
de {F1, F2 ,..., Fn } est aussi un modèle de φ .CQFD
http://www.i2m.univ-amu.fr/~preaux
15
Approche logique de l'I.A.
Jean-Philippe Préaux
Remarque (importante !) : Voilà trois façons d’affirmer que la formule φ est une
conséquence logique de la théorie {F1, F2 ,..., Fn } :
•
La formule (F1 ∧ F2 ∧ ... ∧ Fn ) ⇒ φ est valide.
•
La formule F1 ∧ F2 ∧ ... ∧ Fn ∧ ¬φ est inconsistante (c’est la négation de la
précédente).
•
La théorie { F1 , F2 ,..., Fn , ¬φ } est inconsistante.
http://www.i2m.univ-amu.fr/~preaux
16
Approche logique de l'I.A.
Jean-Philippe Préaux
I.2.5) Quelques formules équivalentes
On rappelle que deux formules φ et ϕ sont dites équivalentes lorsque elles admettent
les mêmes modèles. Voici quelques exemples de formules équivalentes :
Formule
Formule
équivalente
Appellation
(éventuelle)
P
¬¬P
P ⇒Q
¬P ∨ Q
P ∧Q
Q ∧P
Commutativité de ∧
P ∨Q
Q ∨P
Commutativité de ∨
P ⇔Q
Q ⇔P
Commutativité de ⇔
¬(P ∨ Q )
¬P ∧ ¬Q
¬(P ∧ Q )
¬P ∨ ¬ Q
P ∧ (Q ∧ R)
(P ∧ Q ) ∧ R
Associativité de ∧
P ∨ (Q ∨ R)
(P ∨ Q ) ∨ R
Associativité de ∨
P ∨ (Q ∧ R)
(P ∨ Q ) ∧ (P ∨ R)
(P ∧ Q ) ∨ R
(P ∨ R) ∧ (Q ∨ R)
P ∧ (Q ∨ R)
(P ∧ Q ) ∨ (P ∧ R)
(P ∨ Q ) ∧ R
(P ∧ R) ∨ (Q ∧ R)
Distributivité à gauche
de ∨ sur ∧
Distributivité à droite
de ∨ sur ∧
Distributivité à gauche
de ∧ sur ∨
Distributivité à droite
de ∧ sur ∨
P ⇔Q
(P ⇒ Q ) ∧ (Q ⇒ P )
P⇒Q
¬Q ⇒ ¬ P
Lois de De Morgan
Loi de contraposition
http://www.i2m.univ-amu.fr/~preaux
17
Approche logique de l'I.A.
Jean-Philippe Préaux
Formule
Formule
équivalente
∀x , P (x )
∀y, P (y )
∃x , P (x )
∃y, P (y )
¬∀x , P (x )
∃x , ¬P (x )
¬∃x , P (x )
∀x , ¬P (x )
∀x ,(P (x ) ∧ Q(x ))
∀x , P (x ) ∧ ∀x ,Q(x )
∃x ,(P (x ) ∨ Q(x ))
∃x , P (x ) ∨ ∃x ,Q(x )
∀x , P (x ) ∧ Q
∀x ,(P (x ) ∧ Q )
Q ∧ ∀x , P (x )
∀x ,(Q ∧ P (x ))
∀x , P (x ) ∨ Q
∀x ,(P (x ) ∨ Q )
Q ∨ ∀x , P (x )
∀x ,(Q ∨ P (x ))
∃x , P (x ) ∧ Q
∃x ,(P (x ) ∧ Q )
Q ∧ ∃x , P (x )
∃x ,(Q ∧ P (x ))
∃x, P( x) ∨ Q
∃x ,(P (x ) ∨ Q )
Q ∨ ∃x , P (x )
∃x ,(Q ∨ P (x ))
http://www.i2m.univ-amu.fr/~preaux
18
Approche logique de l'I.A.
Jean-Philippe Préaux
I.3) Système axiomatique, règles d’inférence
I.3.1) Définition
Une règle d’inférence est une règle permettant à partir d’une ou plusieurs FBFs de
produire (on dit « déduire ») une autre FBF. Une règle d’inférence est dite saine si la formule
déduite est toujours une conséquence logique des formules dont on l’a déduit. Dans la
pratique, toutes les règles d’inférence que nous considérerons seront saines.
Exemples : – Le Modus Ponens est une règle saine qui à partir des formules P et
P ⇒ Q déduit la formule Q.
− Le Modus Tollens est une règle saine qui à partir des formules
¬Q et P ⇒ Q déduit la formule ¬P .
− Nous verrons dans le chapitre 2 une règle d’inférence saine appelée Principe
de Résolution, qui sera fondamentale dans notre étude. C’est une généralisation de la règle
d’inférence qui déduit A ∨ B à partir de X ∨ A et de ¬X ∨ B .
Un système axiomatique est la donnée d’une théorie c'est-à-dire d’un ensemble de
FBFs du langage L (appelées les axiomes, ou les hypothèses), et de règles d’inférences. Une
preuve est une suite finie de formules telle que chaque formule est soit un axiome, soit déduit
de formules qui le précèdent par les règles d’inférence. La dernière formule de la preuve est
le théorème que l’on vient de ‘prouver’. On demande à un système axiomatique d’être non
contradictoire, c'est-à-dire que l’ensemble de ses axiomes soit non contradictoire. On ne
considérera dans la suite que des systèmes axiomatiques non contradictoires.
Exemple : Considérons la théorie constituée des axiomes : {P ; P ⇒ Q;Q ⇒ R} et d’une
règle d’inférence qui est le modus ponens : la formule R en est un théorème : une preuve est
donnée par :
1– P
2– P ⇒ Q
3– Q (déduit de 1 et 2 par modus ponens)
4– Q ⇒ R
5– R (déduit de 3 et 4 par modus ponens).
I.3.2) Système axiomatique pour le calcul des prédicats
Considérons le système axiomatique suivant. Nous le noterons dans la suite S .
Règles d’inférence :
Le Modus Ponens : Déduit la formule G des formules F et F ⇒ G .
La généralisation : Déduit ∀x , P (x ) , de la formule P (x ) .
La substitution de formules : Si φ est une formule invoquant un prédicat P d’arité n, et ϕ est
une formule ayant n variables libres (ou plus) telle que ses variables libres (resp. liées) sont
désignés par d’autres lettres que les variables liées (resp. libres) de φ , et telle que si dans φ ,
http://www.i2m.univ-amu.fr/~preaux
19
Approche logique de l'I.A.
Jean-Philippe Préaux
P est dans la portée d’un quantificateur quantifiant une variable, cette variable n’est pas
invoquée dans ϕ ; alors on peut dans φ changer chaque occurrence de P par ϕ .
La substitution de termes : Si t est un terme quelconque, on peut déduire φ (t ) de ∀x, φ ( x)
Axiomes du calcul des prédicats :
P ⇒ (Q ⇒ P)
( P ⇒ (Q ⇒ R)) ⇒ (( P ⇒ Q) ⇒ ( P ⇒ R))
( P ∧ Q) ⇒ P
( P ∧ Q) ⇒ Q
( P ⇒ Q) ⇒ (( P ⇒ R) ⇒ ( P ⇒ (Q ∧ R)))
P ⇒ ( P ∨ Q)
Q ⇒ ( P ∨ Q)
( P ⇒ R) ⇒ ((Q ⇒ R) ⇒ (( P ∨ Q) ⇒ R))
( P ⇒ Q ) ⇒ ( ¬Q ⇒ ¬P )
P ⇔ ¬¬P
( P ⇔ Q) ⇒ (( P ⇒ Q) ∧ (Q ⇒ P ))
(( P ⇒ Q) ∧ (Q ⇒ P)) ⇒ ( P ⇔ Q)
∃x, P( x) ⇔ ¬∀x, ¬P( x)
∀x, ( P ⇒ Q( x)) ⇒ ( P ⇒ ∀x, P( x))
I.3.3) Complétude du calcul des prédicats
Clairement, avec cette définition, tout théorème de S est une conséquence logique des
axiomes. Puisque ces derniers sont des formules valides, il s’ensuit que tout théorème est une
formule valide. Il est naturel de se poser la question de la réciproque : toute formule valide est
elle un théorème de S ? Cela présenterait un avantage certain : il semble plus évident pour
montrer qu’une formule est valide de chercher à établir une preuve que de tenter de montrer
qu’elle est vraie dans tout modèle (qui sont bien sur en nombre infini). Cela présenterait en
outre un résultat remarquable par sa portée : une totale adéquation entre le concept syntaxique
de preuve, et le concept sémantique de validité (ou vérité). Un tel résultat est vrai ; le
théorème suivant l’établit. C’est un résultat de complétude (au sens de la déduction) : Pour
montrer qu’une formule est valide il suffit d’en exhiber une preuve (ce qui est cependant en
général hautement non trivial).
Théorème de complétude [Gödel, 1930]: Considérons ce système axiomatique S du calcul
des prédicats. Alors,
− Une FBF est valide si et seulement si c’est un théorème de S .
−Donnée une théorie T , une formule est une conséquence logique de T si et
seulement si c’est un théorème dans le système axiomatique obtenu à partir de S en
rajoutant aux axiomes les formules de T .
Nous admettrons la preuve. Elle est délicate.
http://www.i2m.univ-amu.fr/~preaux
20
Approche logique de l'I.A.
Jean-Philippe Préaux
I.3.3) Indécidabilité du calcul des prédicats
Peut-on établir un algorithme qui puisse décider pour toute FBF, si c’est une formule
valide (décidabilité du calcul des prédicats) ? Le théorème de complétude du paragraphe
précédent semble apporter quelque espoir dans cette direction : pour montrer qu’une formule
est valide, il suffit d’en exhiber une preuve, ce qui semblerait plus facilement implémentable
que de tester si elle est vraie dans tout modèle. Ce résultat est cependant faux comme l’établit
le résultat suivant.
Théorème d’indécidabilité [Church, 1931]
Le calcul des prédicats est indécidable. Il n’existe pas d’algorithme permettant de
décider pour n’importe quelle formule si elle est ou non valide.
Remarques : − La démonstration nécessite de définir mathématiquement la notion
d’algorithme. Cela a été fait dans les années 30, à travers les notions de fonctions récursives et
de machine de Turing (Church, Turing, Godel). Informellement il faut comprendre par
algorithme une procédure qui prend en entrée certaines valeurs (dites initiales) et produit
(toujours) une réponse constituée de certaines valeurs, et cela de façon déterministe (la
réponse ne dépend que des valeurs initiales).
− La non existence d’un tel algorithme est dans un sens très fort : il ne s’agit
pas seulement d’affirmer que l’on ne peut pas trouver un tel algorithme mais qu’il n’existe
pas : on pourrait imaginer qu’il existe un algorithme qui nécessite pour être écrit l’utilisation
de plus de symboles qu’il n’y a d’atomes dans l’univers. Ce n’est pas le cas : Il n’existe
pas !!!
http://www.i2m.univ-amu.fr/~preaux
21
Approche logique de l'I.A.
Jean-Philippe Préaux
http://www.i2m.univ-amu.fr/~preaux
22
Approche logique de l'I.A.
Jean-Philippe Préaux
Chapitre II
Procédure de preuve par réfutation :
Le principe de résolution
http://www.i2m.univ-amu.fr/~preaux
23
Approche logique de l'I.A.
Jean-Philippe Préaux
Introduction
Nous établissons dans cette partie une procédure de démonstration automatique
célèbre initiée par Robinson (1965), basée sur le principe de résolution. Elle constitue les
fondements théoriques du langage de programmation logique PROLOG développé au début
des années 70 par A.Colmerauer, P.Roussel et le groupe d’intelligence artificielle de Marseille
(U2, Luminy).
Qu’entendons nous par « procédure de démonstration automatique » ? Le souhait
serait de construire un algorithme qui puisse décider si une formule quelconque donnée est
une conséquence logique d’hypothèses (données), ou de façon équivalente (avec le théorème
de la déduction §I.2.4) de décider si une formule donnée est valide. Seulement nous avons vu
dans la partie précédente (théorème d’indécidabilité, §I.3.3) qu’un tel algorithme n’existe
pas !! Ce que nous allons faire, c’est construire une procédure qui va ‘tester’ si une formule
donnée φ est valide, en ce sens :
− Si φ est valide (ou de façon équivalente si φ est conséquence logique
de certaines hypothèses préalablement posées) alors la procédure finit
par s’arrêter en donnant une réponse positive.
− Sinon, la procédure risque de tourner indéfiniment sans jamais
apporter de réponse à l’utilisateur.
Cette procédure ne constitue pas un algorithme ! Si la formule entrée est invalide la procédure
risque de tourner indéfiniment, et l’utilisateur restera indécis quant à la validité de la formule,
ne pouvant savoir à un instant donné si la formule est invalide ou si le programme n’a tout
simplement pas encore achevé son implémentation. La seule utilité de cette procédure réside
dans le fait que lorsque la formule est valide elle finit par l’établir ; bref elle démontre les
théorèmes vrais, mais ne sait pas répondre à la question « ce théorème est-il vrai ?». Avec le
théorème d’indécidabilité c’est définitivement le meilleur résultat que nous pouvons établir
dans cette direction : il constitue un résultat de « semi-décidabilité ».
Dans la pratique la procédure que nous allons établir ne recherche pas si une formule
est valide mais si elle est inconsistante. Mais puisque φ est valide seulement lorsque ¬φ est
inconsistante cette approche est équivalente.
La démarche procède en plusieurs étapes. Tout d’abord nous transformons une
formule en une formule d’écriture plus simple qui à défaut d’être équivalente a même
consistance (i.e. est inconsistante si et seulement si la formule initiale est aussi inconsistante).
C’est l’objet de la section 1. La formule obtenue est sous forme prénexe universelle (les
quantificateurs sont tous universels et placés ‘devant’) et la matrice (sous-formule obtenue en
supprimant les quantificateurs) est une conjonction de clauses (on appelle clause une
disjonction de littéraux). L’inconsistance de la formule initiale se ramène à l’inconsistance de
l’ensemble constitué des clauses de la formule obtenue.
On introduit alors une règle d’inférence (saine) appelée le principe de résolution qui
ne s’applique qu’à des clauses, modelé sur la règle : « X ∨ A et ¬X ∨ B implique A ∨ B ».
Pour l’appliquer à des clauses quelconques il est nécessaire d’unifier les littéraux (§II.2.2),
c'est-à-dire de faire apparaître par substitution de termes aux variables invoquées d’éventuels
littéraux X et ¬X (où X est un atome quelconque), dits complémentaires. Le résultat
fondamental de cette section, est que lorsque un ensemble de clauses est inconsistant, on doit
aboutir par applications successives du principe de résolution à la clause vide (§II.2.4). C’est
un résultat de complétude pour la réfutation. Il ouvre la voie à une procédure de preuve par
réfutation, qui lorsqu’un ensemble de clauses est inconsistant parvient à le déterminer. C’est
l’objet de toute la section 2.
http://www.i2m.univ-amu.fr/~preaux
24
Approche logique de l'I.A.
Jean-Philippe Préaux
A ce stade la procédure de preuve par réfutation est non implémentable car non
déterministe : elle nécessite parfois un choix de l’utilisateur qui est déterminant quant à
l’issue de la procédure. L’objet de la section 3 est d’affiner cette méthode en considérant des
stratégies permettant de lever ce non-déterminisme : on ne nécessitera plus l’intervention d’un
utilisateur. En particulier nous étudierons la stratégie utilisée par PROLOG, qui ne s’applique
qu’à une classe plus restreinte de clauses dites clauses de Horn (ce sont les clauses invoquant
au plus un littéral positif).
Enfin dans la dernière section nous illustrerons ces méthodes par quelques exemples.
II.1) Ecriture sous forme clausale
Dans cette section nous établissons un algorithme permettant de transformer une FBF
quelconque en une autre FBF plus simple (dite sous forme clausale) qui ait même consistance.
Il procède en 3 étapes. Tout d’abord on transforme une FBF en un FBF sous forme prénexe
(tous les quantificateurs devant !) qui lui soit équivalente (§ II.1.1). Ensuite on éliminera les
quantificateurs existentiels en introduisant de nouveaux symboles de constantes et de
fonctions : c’est le procédé de Skolémisation (§ II.1.2). Le théorème de Skolem (théorème
§II.1.3) établit que la formule obtenue a même consistance que la formule initiale. C’est ici
que l’on perd l’équivalence ! Finalement (§ II.1.3), on transforme la matrice (sous-formule
obtenue en supprimant tous les quantificateurs) en une conjonction de clauses : on obtient la
forme clausale souhaitée. Elle a même consistance que la FBF initiale.
L’algorithme établi sera amplement utilisé dans la suite de ce cours.
II.1.1) Formes prénexes
Une FBF et sous forme prénexe si elle s’écrit :
Q1x 1,Q2x 2 ,...,Qn x n , P
où les symboles Qi représentent n’importe quel quantificateur, et P est une formule
n’invoquant aucun quantificateur (bref tous les quantificateurs sont devant). La sous-formule
(non bien formée) Q1x 1,Q2x 2,...,Qn x n , est appelée le préfixe, tandis que la formule (bien
formée) P est appelée la matrice.
Exemple : La formule ∀x , ∃y, ∀z,((P (x ) ⇒ Q(y )) ∨ R(z )) où P,Q,R, sont des prédicats
unaires est sous forme prénexe, tandis que ∀x , ∃y,((P (x ) ⇒ Q(y )) ∨ ∀z, R(z )) n’est pas sous
forme prénexe.
Théorème : Pour toute FBF il existe une FBF équivalente sous forme prénexe. De plus cette
formule peut-être déterminée grâce à un algorithme.
Démonstration : Appliquer la méthode exposée ci-dessous. Elle peut toujours s’appliquer, et
à partir d’une formule quelconque aboutit à une formule sous forme prénexe qui lui est
équivalente. CQFD.
http://www.i2m.univ-amu.fr/~preaux
25
Approche logique de l'I.A.
Jean-Philippe Préaux
Algorithme d’écriture d’une formule sous forme prénexe :
On suppose donnée une formule. On va construire une formule sous forme prénexe qui lui est
équivalente.
a) Elimination des connecteurs ⇒ et ⇔ .
On élimine d’abord tous les connecteurs ⇔ en utilisant l’équivalence :
P ⇔ Q ≡ (P ⇒ Q ) ∧ (Q ⇒ P )
Puis on élimine tous les connecteurs ⇒ en utilisant la formule :
P ⇒ Q ≡ ¬P ∨ Q
b) Accoler tous les connecteurs ¬ aux atomes.
Pour ce faire utiliser les formules suivantes :
¬¬P ≡ P
Lois de De Morgan :
¬(G ∨ H ) ≡ ¬G ∧ ¬H
¬(G ∧ H ) ≡ ¬G ∨ ¬H
¬∃x , P (x ) ≡ ∀x , ¬P (x )
¬∀x , P (x ) ≡ ∃x , ¬P (x )
c) Distinguer les variables.
On fait en sorte que chaque quantificateur ‘gouverne’ une variable de nom original. Pour cela
on utilise les équivalences :
∃x , P (x ) ≡ ∃y, P (y )
∀x , P (x ) ≡ ∀y, P (y )
Renommer aussi les variables de façon à ce qu’aucune variable libre ne porte le même nom
qu’une variable liée.
Remarque : On peut pour cela ajouter au langage de nouvelles variables. Si M était un
modèle pour notre langage, il le demeure après le rajout de ces variables.
d) Eliminer les quantificateurs inutiles
On élimine les quantificateurs ne servant à rien (c'est-à-dire quantifiant des variables qui
n’apparaissent pas) :
Si Q n’invoque pas la variable libre x
∀ x ,Q ≡ Q
∃ x ,Q ≡ Q
http://www.i2m.univ-amu.fr/~preaux
26
Approche logique de l'I.A.
Jean-Philippe Préaux
e) Faire passer les quantificateurs devant.
Pour cela utiliser les équivalences qui suivent, où Q représente une formule qui n’invoque pas
d’occurrences libres de la variable x:
∃x , P (x ) ∨ Q ≡ ∃x ,(P (x ) ∨ Q )
∃x , P (x ) ∧ Q ≡ ∃x ,(P (x ) ∧ Q )
∀x , P (x ) ∨ Q ≡ ∀x ,(P (x ) ∨ Q )
∀x , P (x ) ∧ Q ≡ ∀x ,(P (x ) ∧ Q )
Q ∨ ∃x , P (x ) ≡ ∃x ,(Q ∨ P (x ))
Q ∧ ∃x , P (x ) ≡ ∃x ,(Q ∧ P (x ))
Q ∨ ∀x , P (x ) ≡ ∀x ,(Q ∨ P (x ))
Q ∧ ∀x , P (x ) ≡ ∀x ,(Q ∧ P (x ))
Il s’agit de la dernière étape ! La FBF obtenue vérifie les propriétés suivantes :
− Elle est sous forme prénexe.
− Chaque quantificateur quantifie une variable de nom original, et
chaque variable libre à un nom différent des variables liées.
− La matrice se construit à partir de littéraux, de conjonctions ∧ , et de
disjonctions ∨ (avec emploi de parenthèses).
Exemple : on considère la formule suivante :
∀x ,[P (x ) ∨ ∀y, ∃x , ¬(Q(x , y ) ⇒ ∀z , R(a, x , y ))]
On applique tout d’abord l’étape a) qui permet de supprimer tous les connecteurs ⇒ :
∀x ,[P (x ) ∨ ∀y, ∃x , ¬(¬Q(x , y ) ∨ ∀z , R(a, x , y ))]
Après avoir appliqué l’étape b) (accoler les ¬ aux atomes), on obtient :
∀x ,[P (x ) ∨ ∀y, ∃x ,(Q(x , y ) ∧ ∃z , ¬R(a, x , y ))]
On applique ensuite l’étape c) (renommer les variables) :
∀x ,[P (x ) ∨ ∀y, ∃u,(Q(u, y ) ∧ ∃z, ¬R(a, u, y ))]
Puis l’étape d) (éliminer les quantificateurs inutiles) :
∀x ,[P (x ) ∨ ∀y, ∃u,(Q(u, y ) ∧ ¬R(a, u, y ))]
On applique finalement l’étape e) pour faire passer les quantificateurs devant. On obtient la
forme prénexe :
∀x , ∀y, ∃u,[P (x ) ∨ (Q(u, y ) ∧ ¬R(a, u, y ))]
Remarques : − On peut aussi considérer une dernière étape facultative, permettant de
réordonner l’agencement des quantificateurs, à l’aide des formules :
∀x , ∀y, A ≡ ∀y, ∀x , A
∃x , ∃y, A ≡ ∃y, ∃x , A
http://www.i2m.univ-amu.fr/~preaux
27
Approche logique de l'I.A.
Jean-Philippe Préaux
Attention, les formules ∀x , ∃y, A et ∃y, ∀x , A ne sont pas équivalentes. Par exemple si on
prend pour domaine l’ensemble des entiers relatifs, la formule :
∀x , ∃y,(x + y = 0)
est vraie (tout nombre a un opposé), tandis que :
∃y, ∀x ,(x + y = 0)
est une assertion fausse, puisque que l‘on ne peut pas trouver d’entier y, tel que pour tout x,
x +y = 0.
− Dans l’exemple considéré ci-dessus, la formule est équivalente à l’autre forme
prénexe : ∀y, ∀x , ∃u,[P (x ) ∨ (Q(u, y ) ∧ ¬R(a, u, y ))] , (on intervertit ∀x et ∀y ) mais n’est pas
équivalente à : ∀x , ∃u, ∀y,[P (x ) ∨ (Q(u, y ) ∧ ¬R(a, u, y ))] (on a interverti ∀y et ∃u ).
− Parfois on peut intervertir les quantificateurs ∀ et ∃ . Par exemple :
∀x, ∃y, ( P ( x) ∨ Q( y )) ≡ ∀x, ( P( x) ∨ ∃y, Q( y ))
≡ (∀x, P( x) ∨ ∃y, Q( y ))
≡ ∃y, (∀x, P( x) ∨ Q( y ))
≡ ∃y, ∀x, ( P( x) ∨ Q( y ))
En fait si on y regarde de plus près on peut s’apercevoir que la permutation entre ∀x et ∃y est
possible chaque fois qu’il n’y a pas de littéral dans leur portée invoquant à la fois les
variables x et y.
− Comme nous venons de le vérifier sur cet exemple, il existe en général plusieurs
formes prénexes équivalentes.
II.1.2) Formes normales conjonctives
Définitions : Une clause est une formule qui est soit un littéral, soit une disjonctions de
littéraux.
∨
L1
L2
L3
Considérons la forme prénexe :
Q1x 1,Q2x 2 ,...,Qn x n , P
Si la matrice P est une conjonction de clauses alors on dit que la formule est sous forme
normale conjonctive.
Conjonction de clauses
∧
∨
∨
∨
clauses
L1
L2
L3
L4
L5
L6
L7
L8
L9
littéraux
http://www.i2m.univ-amu.fr/~preaux
28
Approche logique de l'I.A.
Jean-Philippe Préaux
Théorème : Pour toute formule il existe une formule équivalente qui s’écrit sous forme
normale conjonctive. De plus il existe un algorithme permettant de déterminer cette formule.
Preuve : Transformer d’abord la formule en une forme prénexe équivalente (en utilisant
l’algorithme du paragraphe précédent). Puis appliquer l’algorithme décrit ci-dessous à la
matrice obtenue. CQFD.
Algorithme d’écriture sous forme normale conjonctive
Après avoir appliqué l’algorithme précédent, notre formule est sous forme prénexe, et
la matrice ne comporte que des connecteurs logiques ∧ et ∨ appliqués à des littéraux. Pour
parvenir à une forme normale conjonctive on applique autant de fois que possible les
équivalences suivantes (distributivité à gauche et à droite de ∨ sur ∧ ) :
P ∨ (Q ∧ R) ≡ (P ∨ Q ) ∧ (P ∨ R)
(P ∧ Q ) ∨ R ≡ (P ∨ R) ∧ (Q ∨ R)
Exemple : Si l’on reprend l’exemple qui précède, la forme prénexe :
∀y, ∀x , ∃u,[P (x ) ∨ (Q(u, y ) ∧ ¬R(a, u, y ))]
devient :
∀y, ∀x , ∃u,[(P (x ) ∨ Q(u, y )) ∧ (P (x ) ∨ ¬R(a, u, y ))]
∀y
∀x
∃u
∧
∨
∨
P
x
Q
u
¬
y
R
a
u
http://www.i2m.univ-amu.fr/~preaux
29
y
Approche logique de l'I.A.
Jean-Philippe Préaux
II.1.3) Formes de Skolem
C’est l’utilisation de quantificateurs qui est à l’origine de la puissance, mais aussi de la
complexité du calcul des prédicats. C’est pour cette raison qu’il est judicieux d’écrire une
formule sous une forme normale qui lui soit équivalente : écrite sous une forme plus simple
son inconsistance (ou sa validité) pourrait peut-être être plus simple à déterminer. Cependant
même si les formes obtenues sont relativement simples, la coexistence de quantificateurs
universels et existentiels amène une difficulté. Il serait plus intéressant de n’avoir que des
quantificateurs universels.
Une formule sous forme normale conjonctive est dite universelle si son préfixe ne
comporte que des quantificateurs universels. Mais attention une formule n’admet pas en
général de forme normale conjonctive universelle qui lui soit équivalente. Nous allons
cependant voir comment écrire une forme normale conjonctive universelle, qui ait même
consistance que la formule initiale. C’est un résultat bien plus faible que l’équivalence, mais
qui sera suffisant pour le propos qui est le nôtre. Ce procédé s’appelle le procédé de
Skolémisation.
Algorithme de Skolémisation
On travaille sur une FBF donnée sous forme prénexe (ou encore sous forme normale
conjonctive). Comme nous l’avons vu dans les paragraphes précédents toute formule admet
une formule équivalente écrite sous cette forme.
A chaque occurrence de quantificateur existentiel apparaissant dans la formule on lui associe
les variables quantifiées universellement qui le précèdent (par exemple x 1, x 2 ,..., x n si les
quantificateurs ∀x1 , ∀x2 , …, et ∀xn précèdent le ∃y considéré dans le préfixe), ainsi qu’un
nouveau symbole fonctionnel (par exemple f) ayant pour arité le nombre n de ces variables.
On remplace dans la matrice chaque occurrence de la variable (disons y) que gouverne le
quantificateur existentiel (ici ∃y ) considéré, par le terme f (x 1, x 2,..., x n ) , et l’on supprime dans
le préfixe le quantificateur existentiel ( ∃y ) considéré. Dans le cas où aucun quantificateur
universel ne précède le quantificateur existentiel considéré, on introduit un nouveau symbole
de constante c, on remplace les occurrences de y par c, et –comme précédemment- on
supprime le quantificateur existentiel ∃y considéré.
Exemple : Considérons la formule sous forme prénexe :
∃x , ∀y, ∀z , ∃w,(P (x ) ⇒ (Q(x , y, z ) ∨ R(w )))
Le premier quantificateur existentiel n’est précédé par aucun quantificateur existentiel : on
remplace la variable x par une nouvelle constante c :
∀y, ∀z, ∃w,(P (c) ⇒ (Q(c, y, z ) ∨ R(w )))
pour le quantificateur existentiel ∃w, on considère un nouveau symbole fonctionnel binaire f
et on lui associe les variables y et z. On obtient :
∀y, ∀z,(P (c) ⇒ (Q(c, y, z ) ∨ R(f (y, z ))))
Cette nouvelle formule est appelé la transformée de Skolem ou la forme de Skolem de la
formule initial. Si une formule prénexe a un suffixe ne comportant aucun quantificateur
universel, elle est sa propre transformée de skolem.
Remarque : Une formule et sa transformée de Skolem ne sont en général pas équivalentes.
Par exemple, la transformée de Skolem, de ∃x , P (x ) est P (c) . Si on prend comme domaine
http://www.i2m.univ-amu.fr/~preaux
30
Approche logique de l'I.A.
Jean-Philippe Préaux
d’interprétation ] , et si P (x ) est interprété par x > 0 , la valeur de P (c) dépend évidemment
de l’interprétation de la constante c, tandis que la formule initiale est évidemment vraie.
Cependant, ce qui justifie de son utilisation c’est le fait qu’une formule et sa transformée de
Skolem ont toutes deux même consistance comme l’établit le résultat suivant :
Théorème : [Skolem] Une formule et sa transformée de Skolem sont simultanément toutes
deux inconsistantes ou toutes deux consistantes.
Preuve : Notons φ une formule est S (φ) sa transformée de Skolem. Pour établir la
proposition il est suffisant d’établir que φ est inconsistante si et seulement si S (φ) est
inconsistante.
Par construction des valeurs de vérité, il est clair que si S (φ) est vraie pour un modèle, il en
est de même de φ . Ainsi l’inconsistance de φ entraîne l’inconsistance de S (φ) . Prouvons
maintenant la réciproque. Supposons que φ soit vraie dans un certain modèle de notre
langage L , de domaine D. Pour construire la formule S (φ) on a du enrichir notre langage de
nouveaux symboles fonctionnels ou de constantes, pour aboutir à un langage L ' . Interprétons
dans ce modèle notre langage L ' . Tous les symboles de L ⊂ L ' sont interprétés comme
précédemment. Considérons un symbole de constante de L ' L . Il est nécessairement
associé à une variable quantifiée existentiellement de φ , qui n’est précédée par aucun
quantificateur universel. Puisque la formule φ est vraie, on peut supprimer ce quantificateur
existentiel, et assigner à cette variable une valeur constante de D qui garde la formule vraie.
On interprétera ce symbole de constante par cet élément de D.
Considérons maintenant un symbole fonctionnel f de L ' L ; il est associé à une
quantification existentielle (disons ∃y, ) de la formule φ . Supposons que cette quantification
soit précédée par des quantificateurs existentiel portant sur les variables (disons) x 1, x 2 ,..., x n .
Alors par définition, pour toute assignation de x 1, x 2 ,..., x n , on peut trouver une assignation de
y qui rende la formule φ vraie. La fonction f sera ainsi interprétée par une fonction de choix
qui à une assignation de x 1, x 2 ,..., x n associe une valeur assignée à y qui garde la formule
vraie ; c’est une application de D n dans D. En procédant ainsi, donnée une interprétation de
L qui rende φ vraie, on a interprété notre langage L ' pour ce modèle de façon à ce que la
formule S (φ) soit vraie. Ainsi si S (φ) est inconsistante, il en est de même de φ . CQFD.
II.1.4) Formes clausales
On dispose désormais d’une formule sous forme normale conjonctive universelle :
∀x 1, ∀x 2 ,..., ∀x n , φ1 ∧ φ2 ∧ ... ∧ φp
(où les φi sont des clauses). Elle est équivalente à la conjonction des formules :
∀x 1, ∀x 2 ,..., ∀x n , φ1
∀x 1, ∀x 2 ,..., ∀x n , φ2
#
∀x 1, ∀x 2 ,..., ∀x n , φp
La dernière étape pour l’écrire sous forme clausale est de distinguer les variables invoquées
dans chaque clause. Pour cela on utilise les règles :
∀x, ( P( x) ∧ Q( x)) ≡ ∀x, P ( x) ∧ ∀x, Q( x) ≡ ∀x, P( x) ∧ ∀y, Q( y ) ≡ ∀x, ∀y, ( P( x) ∧ Q( y ))
http://www.i2m.univ-amu.fr/~preaux
31
Approche logique de l'I.A.
Jean-Philippe Préaux
∀x 1
quantificateurs
existentiels
#
∀x n
∧
∨
∨
∨
clauses
L1
L2
L3
L4
L5
L6
L7
L8
L9
littéraux
Notation : une forme clausale ∀x 1, ∀x 2 ,..., ∀x n , φ1 ∧ φ2 ∧ ... ∧ φp pourra être écrite sous la
forme {φ1 ; φ2 ;...; φ p } où les φi sont les clauses. La raison en est la suivante :
Proposition : La formule sous forme clausale ∀x 1, ∀x 2 ,..., ∀x n , φ1 ∧ φ2 ∧ ... ∧ φp a même
consistance que l’ensemble des clauses {φ1 ; φ2 ;...; φ p } .
Preuve : Si M est un modèle de la formule ∀x 1, ∀x 2 ,..., ∀x n , φ1 ∧ φ2 ∧ ... ∧ φp alors c’est aussi
un modèle des formules ∀x 1, ∀x 2 ,..., ∀x n , φ1 , ∀x 1, ∀x 2 ,..., ∀x n , φ2 , …., et ∀x 1, ∀x 2 ,..., ∀x n , φp ,
et donc de chacune des clauses φ1 , φ2 ,…, φn . Réciproquement si M est un modèle
de {φ1 ; φ2 ;...; φ p } , alors c’est un modèle de la formule non close φ1 ∧ φ2 ∧ ... ∧ φ p , et donc de la
formule close ∀x 1, ∀x 2 ,..., ∀x n , φ1 ∧ φ2 ∧ ... ∧ φp où les x1 , x2 ,..., xn sont toutes les variables
libres invoquées dans les clauses. (Remarque : on a en fait démontré un résultat plus fort,
l’équivalence : tout modèle de l’un est modèle de l’autre). CQFD.
http://www.i2m.univ-amu.fr/~preaux
32
Approche logique de l'I.A.
Jean-Philippe Préaux
II.1.5) En résumé : algorithme de mise sous forme clausale
1.a) Elimination des connecteurs ⇒ et ⇔ .
P ⇔ Q ≡ (P ⇒ Q ) ∧ (Q ⇒ P )
1.b) Accoler les ¬ aux atomes.
¬¬P ≡ P
Lois de De Morgan :
¬(G ∨ H ) ≡ ¬G ∨ ¬H
¬(G ∧ H ) ≡ ¬G ∧ ¬H
¬∃x , P (x ) ≡ ∀x , ¬P (x )
¬∀x , P (x ) ≡ ∃x , ¬P (x )
1.c) Distinguer les variables.
∃x , P (x ) ≡ ∃y, P (y )
∀x , P (x ) ≡ ∀y, P (y )
1.d) Eliminer les quantificateurs inutiles.
∀ x ,Q ≡ Q
∃ x ,Q ≡ Q
1.e) Faire passer les quantificateurs devant.
∃x , P (x ) ∨ Q ≡ ∃x ,(P (x ) ∨ Q )
∃x , P (x ) ∧ Q ≡ ∃x ,(P (x ) ∧ Q )
∀x , P (x ) ∨ Q ≡ ∀x ,(P (x ) ∨ Q )
∀x , P (x ) ∧ Q ≡ ∀x ,(P (x ) ∧ Q )
Q ∨ ∃x , P (x ) ≡ ∃x ,(Q ∨ P (x ))
Q ∧ ∃x , P (x ) ≡ ∃x ,(Q ∧ P (x ))
Q ∨ ∀x , P (x ) ≡ ∀x ,(Q ∨ P (x ))
Q ∧ ∀x , P (x ) ≡ ∀x ,(Q ∧ P (x ))
A ce stade on a obtenu une forme prénexe équivalente.
2) Mettre sous forme normale conjonctive.
P ∨ (Q ∧ R) ≡ (P ∨ Q ) ∧ (P ∨ R)
(P ∧ Q ) ∨ R ≡ (P ∨ R) ∧ (Q ∨ R)
3) Skolémisation. Eliminer les quantificateurs existentiels, en introduisant les symboles
fonctionnels ou de constante appropriés (voir §II.1.3).
4) Distinguer les variables de chaque clause.
∀x, ( P( x) ∧ Q( x)) ≡ ∀x, P( x) ∧ ∀x, Q( x) ≡ ∀x, P( x) ∧ ∀y, Q( y ) ≡ ∀x, ∀y, ( P( x) ∧ Q( y ))
http://www.i2m.univ-amu.fr/~preaux
33
Approche logique de l'I.A.
On a obtenu :
Jean-Philippe Préaux
∀x 1, ∀x 2 ,..., ∀x n , φ1 ∧ φ2 ∧ ... ∧ φp . On considère l’ensemble constitué des
clauses : {φ1 ; φ2 ;...; φ p } . C’est la forme clausale souhaitée.
II.1.6) Exemple complet
Appliquons l’algorithme à la formule :
∃x, P (a, x) ⇒ (∀x, ∃y, P ( x, y ) ∧ ∃w, Q( w))
.1.a)
.1.b)
.1.c)
.1.d)
.1.e)
≡ ¬(∃x, P( a, x)) ∨ (∀x, ∃y, P( x, y ) ∧ ∃w, Q( w))
≡ (∀x, ¬P( a, x)) ∨ (∀x, ∃y, P( x, y ) ∧ ∃w, Q( w))
≡ (∀x, ¬P(a, x)) ∨ (∀u, ∃y, P (u, y ) ∧ ∃w, Q( w))
ne change rien (il n’y a pas de quantificateur inutile).
≡ (∀x, ¬P(a, x)) ∨ (∃w, ∀u , ∃y, P(u, y ) ∧ Q( w))
≡ ∀x, [ ¬P (a, x) ∨ (∃w, ∀u , ∃y, P (u, y ) ∧ Q( w)) ]
≡ ∀x, ∃w, ∀u , ∃y, [ ¬P (a, x) ∨ ( P (u , y ) ∧ Q( w)) ]
.2)
≡ ∀x, ∃w, ∀u , ∃y, [ (¬P(a, x) ∨ P(u , y )) ∧ (¬P(a, x) ∨ Q( w)) ]
.3)
≈ ∀x, ∀u , [ (¬P (a, x) ∨ P(u , g ( x, u ))) ∧ (¬P( a, x) ∨ Q( f ( x))) ]
(c’est la Skolémisation, avec la fonction f unaire associée à ∃w et la fonction g
binaire associée à ∃y . On a perdu l’équivalence, mais cette formule a même consistance que
la formule initiale.)
.4)
≈ ∀x, ∀u , [ ¬P(a, x) ∨ P(u , g ( x, u )) ] ∧ ∀y, [ ¬P(a, y ) ∨ Q( f ( y )) ]
≈ ∀x, ∀u , ∀y, [ (¬P (a, x) ∨ P (u , g ( x, u ))) ∧ (¬P( a, y ) ∨ Q( f ( y ))) ]
≈ {¬P(a, x) ∨ P(u , g ( x, u )); ¬P(a, y ) ∨ Q( f ( y ))}
http://www.i2m.univ-amu.fr/~preaux
34
Approche logique de l'I.A.
Jean-Philippe Préaux
II.2) Principe de résolution
II.2.1) Principe de résolution appliqué à des clauses concrètes
Un littéral est dit concret s’il ne comporte aucun symbole de variable. Une clause concrète est
une disjonction de littéraux concrets. Par exemple P (a ) ∨ Q(a, b) est une clause concrète
tandis que P (a ) ∨ Q(x , b) n’en est pas une.
Le principe de résolution est une règle d’inférence qui sera utilisée de façon prépondérante
durant toute la suite du cours. Elle est modelée sur la règle :
X ∨ A ⎫⎪⎪
⎪
et
⎬ implique A ∨ B
⎪
¬X ∨ B ⎪⎪
⎪⎭
qui en remplaçant A par A1 ∨ A2 ∨ ... ∨ Ap et B par B1 ∨ B2 ∨ ... ∨ Bq , se généralise
immédiatement en :
X ∨ A1 ∨ A2 ∨ ... ∨ Ap
et
¬X ∨ B1 ∨ B2 ∨ ... ∨ Bq
⎫⎪
⎪⎪
⎬ implique A1 ∨ A2 ∨ ... ∨ Ap ∨ B1 ∨ B2 ∨ ... ∨ Bq
⎪⎪
⎪⎪⎭
Définition : Le principe de résolution est une règle d’inférence qui à partir de deux clauses
concrètes de la forme : X ∨ A1 ∨ A2 ∨ ... ∨ Ap et ¬X ∨ B1 ∨ B2 ∨ ... ∨ Bq déduit la clause
concrète : A1 ∨ A2 ∨ ... ∨ Ap ∨ B1 ∨ B2 ∨ ... ∨ Bq . Cette dernière clause est appelée la
résolvante des deux premières (elles même appelées clauses parentes).
Remarques : − Trivialement il s’agit d’une règle d’inférence saine.
− La résolvante des clauses concrètes P et ¬P ∨ Q (qui peut aussi
s’écrire P ⇒ Q ) est la clauseQ . Ainsi le principe de résolution recouvre le modus
ponens.
− La résolvante de ¬P ∨ Q (ou encore P ⇒ Q ) et ¬Q ∨ R (ou
encoreQ ⇒ R ) est ¬P ∨ R (c'est-à-dire P ⇒ R ). Ce cas particulier du principe de
résolution est appelé règle d’enchaînement.
− Attention ! Les clauses ¬P ∨ Q et P ∨ ¬Q admettent deux résolvantes
Q ∨ ¬Q et P ∨ ¬P . La clause vide n’en est pas une résolvante. On ne peut effectuer qu’une
résolution à la fois !!!
Exemples : − Des clauses concrètes A_la_maison ∨ Au_travail et ¬ A_la_maison on déduit la
clause Au_travail.
− Des clauses concrètes Sérieux ∨ Regarde_la_télé ∨ Fait_la_sieste et
¬ Sérieux ∨ Fait_du_sport on déduit Regarde_la_télé ∨ Fait_la_sieste ∨ Fait_du_sport.
http://www.i2m.univ-amu.fr/~preaux
35
Approche logique de l'I.A.
Jean-Philippe Préaux
II.2.2) Unification de littéraux
a) Substitution
Définition : Etant donné un langage L , une substitution σ est la donnée d’un nombre fini de
couples constitués chacun d’une variable et d’un terme de L . On note une substitution :
σ = ( x1 / t1 , x2 / t2 ,..., xn / tn )
où les xi sont les variables, et les ti sont les termes.
Si φ est une formule ou un terme, et σ = ( x1 / t1 , x2 / t2 ,..., xn / tn ) est une substitution, la
formule (ou le terme) φσ , (que l’on peut aussi noter φ ( x1 / t1 , x2 / t2 ,..., xn / tn ) ) est obtenue à
partir de φ en remplaçant chaque occurrence libre de la variable xi dans φ par le terme ti .
Exemple : Si l’on considère la substitution σ = ( x / f (a), y / a, z / x) , ainsi que la
formule φ := P( x) ∨ ¬Q( f ( x), z ) , alors φσ := P( f (a)) ∨ ¬Q( f ( f (a )), x) .
Il faut remarquer que l’on substitue les termes aux variables initialement présentes dans φ , et
non à celles éventuellement apparues en cours de route. Ainsi même si la substitution z / x
fait apparaître un x à la place de z, on ne lui applique pas ensuite la substitution x / f (a) .
Etant données deux substitutions σ et τ , leur produit sera définie comme la
substitution (notée στ ) ayant le même effet que l’action de σ suivie de l’action de τ .
Formellement on aboutit à la définition suivante :
Définition : Soient σ = ( x1 / t1 , x2 / t2 ,..., xn / tn ) et τ = ( y1 / s1 , y2 / s2 ,..., ym / sm ) deux
substitutions. Leur produit στ est la substitution constituée de toutes les substitutions xi / tiτ
pour i variant de 1 à n, ainsi que des substitutions yi / si chaque fois que yi n’est pas une des
variables x1 , x2 ,..., xn .
Dans la pratique. Données les substitutions σ et τ comme ci-dessus, pour déterminer le
produit στ on procédera de la façon suivante :
– Appliquer la substitution τ à chaque terme t1, t2 ,..., tn de σ , c'est-à-dire que l’on
remplacera chaque occurrence de la variable yi dans un des termes t1, t2 ,..., tn de σ ,
par le terme si . On obtient la substitution : (x 1 / t1τ, x 2 / t2 τ,..., x n / tn τ )
– Ajouter à cette substitution les couples yi / si chaque fois que la variable yi n’est
pas une des variables x 1, x 2 ,..., x n invoquées dans τ .
Exemples : − Considérons les deux substitutions données par : σ = (x / f (y, z ), y / a ) et
τ = (y / g(a ), z / g(x )) . Alors ,
στ = (x / f (g(a ), g(x )), y / a, z / g(x ))
τσ = (y / g(a ), z / g(f (y, z )), x / f (y, z ))
Clairement στ ≠ τσ .
− On part de la formule P ( x, y, u ) et on lui applique le produit στ des
substitutions :
σ = ( x / h(u, v), y / f (d ))
τ = (u / y, v / h( x, x))
leur produit στ est :
http://www.i2m.univ-amu.fr/~preaux
36
Approche logique de l'I.A.
Jean-Philippe Préaux
στ = ( x / h( y, h( x, x)), y / f (d ), u / y, v / h( x, x))
et l’on obtient la formule :
P (h( y, h( x, x)), f (d ), y )
Remarques : On vérifie aisément que Fστ = ( Fσ )τ , et que le produit de substitutions est
associatif, i.e. σ (τυ ) = (στ )υ στυ . Il n’est par contre pas commutatif comme le montre
l’exemple plus haut, i.e. en général στ ≠ τσ .
b) Unification
Définition : Un ensemble de littéraux {L1 , L2 ,..., Lp } est dit unifiable si il existe une
substitution σ , telle que les littéraux L1σ , L2σ ,..., Lpσ soient tous identiques. La substitution
σ est alors appelée l’unificateur des littéraux L1 , L2 ,..., Lp . Un unificateur σ est principal si
tout autre unificateur est de la forme στ pour une certaine substitution τ .
Exemple : L = {P (x , f (a )); P (y, f (z )); P (z, w )} est unifiable. Si on lui applique la
substitution σ = (z / a, y / a, x / a, w / f (a )) alors Lσ = {P (a, f (a ))} .
Il est facile de décider si un ensemble de littéraux est unifiable ou non, et le cas
échéant d’exhiber un unificateur principal (dans ce cas ce dernier existera toujours). La
propriété suivante établit ce résultat (nous l’admettrons).
Propriété (admise) : Lorsque un ensemble de littéraux est unifiable, il admet un unificateur
principal. De plus il existe un algorithme permettant de décider pour un ensemble de littéraux
s’il est unifiable, et qui, le cas échéant, fournit un unificateur principal.
L’algorithme sera présenté dans le prochain paragraphe. Il utilise la notion d’ensemble de
discordance. Si {L1 , L2 ,..., Lp } est un ensemble de littéraux, son ensemble de discordance
D est construit de la façon suivante :
„ Si les littéraux L1 , L2 ,..., Lp sont tous identiques, alors D = ∅ .
„ Sinon on écrit les littéraux sous forme d’arbre, et on les lit simultanément de haut
en bas, et de gauche à droite, tant qu’ils sont tous identiques. A la première
apparition de nœuds portant des symboles différents on définit D comme
l’ensemble constitué des différentes expressions (nécessairement des termes ou
formules) obtenues en considérant les sous arbres débutant sur ces nœuds.
L’ensemble de discordance correspond informellement aux premières sous formules qui
diffèrent dans leur écriture.
Exemple : Considérons trois littéraux :
L1 := P (x , y )
;
L2 := P ( f (a ), y )
Leur représentation sous forme d’arbre est :
;
L3 := P ( f ( f (a )), x )
http://www.i2m.univ-amu.fr/~preaux
37
Approche logique de l'I.A.
Jean-Philippe Préaux
P
x
P
y
f
P
y
f
x
f
a
a
L’ensemble de discordance est D = {x , f (a ), f (f (a ))} .
Dans la suite on note Γ un ensemble de littéraux, et σ une substitution qui vaut
initialement la substitution triviale σ = ε (qui n’affecte aucune variable). L’algorithme
s’applique au couple (Γ, σ) et retourne –lorsque c'est possible– un unificateur principal. Dans
le cas contraire l’algorithme s’arrête en déclarant que Γ n’est pas unifiable.
c) Algorithme d’unification
UNIFIER( Γ, σ )
1- Si tous les éléments de Γ sont identiques ( Γ est un singleton),
alors arrêter et retourner σ comme unificateur principal.
2- Construire l’ensemble D de discordance de Γ .
3- Si il existe deux éléments x et t de D , où x est une variable et t est un terme qui
n’invoque pas x,
alors : { σ ← σ(x / t )
Γ ← Γ(x / t )
UNIFIER( Γ, σ )}
4- Arrêter : l’ensemble Γ n’est pas unifiable.
Exemple : Appliquons l’algorithme dans le cas des littéraux L1, L2 , L3 considérés ci-dessus :
UNIFIER( {L1, L2 , L3 } , σ )
Etape 1- L1, L2 , L3 ne sont pas identiques. On passe à l’étape 2.
Etape 2- D = {x , f (a ), f (f (a ))} , comme vu ci-dessus. On passe à l’étape 3.
Etape 3- On considère les éléments x, et f (a ) de D . Le terme f (a ) n’invoque pas la variable x,
ainsi on applique : σ ← σ(x / f (a )) et Γ ← Γ(x / f (a )) . On obtient σ = (x / f (a )) ,
L1 := P ( f (a ), y ) ; L2 := P ( f (a ), y ) ; L3 := P ( f ( f (a )), f (a )) .
http://www.i2m.univ-amu.fr/~preaux
38
Approche logique de l'I.A.
Jean-Philippe Préaux
P
f
P
y
f
a
P
y
a
D = (f (a ), f (f (a )))
f
f
f
a
a
On appelle ensuite UNIFIER ( {L1, L2 , L3 } , σ ) :
Etape 1- L1, L2 , L3 ne sont pas identiques. On passe à l’étape 2.
Etape 2- D = ( f (a ), f (f (a ))) . On passe à l’étape 3.
Etape 3- D ne contient pas de variable. On passe à l’étape 4.
Etape 4- On s’arrête, {L1, L2 , L3 } n’est pas unifiable.
L’algorithme conclut donc que l’on ne peut pas unifier {L1, L2 , L3 } . Remarquons que
l’ensemble {L1, L2 } est lui unifiable en le facteur L1 = L2 := P ( f (a ), y ) . L’unificateur
principal est σ = (x / f (a )) .
Autre exemple : On considère l’ensemble constitué des littéraux :
L1 := P (a, x , f (g(y ))) ; L2 := P (z, f (z ), f (v ))
P
a
x
P
f
z
f
f
g
z
v
y
D = {a, z }
On lance UNIFIER( {P (a, x , f (g(y ))), P (z, f (z ), f (v ))}, σ )
Etape 1- On passe à l’étape 2.
Etape 2- D = {a, z } .
Etape 3- On effectue : σ ← σ(z / a ) et Γ ← Γ(z / a ) . On obtient :
σ = (z / a ) et Γ = {P (a, x , f (g(y ))), P (a, f (a ), f (v ))} .
http://www.i2m.univ-amu.fr/~preaux
39
Approche logique de l'I.A.
Jean-Philippe Préaux
σ ← (z / a )
P
a
x
f
P
a
f
f
g
a
v
y
D = {x , f (a )}
On appelle UNIFIER( Γ, σ ).
Etape 1- On passe à l’étape 2.
Etape 2- D = {x , f (a )} .
Etape 3- On effectue : σ ← σ(x / f (a )) et Γ ← Γ(x / f (a )) . On obtient :
σ = (z / a, x / f (a )) et Γ = {P (a, f (a ), f (g(y ))), P (a, f (a ), f (v ))} .
σ ← σ(x / f (a ))
P
a
f
f
a
a
P
f
f
g
a
v
y
D = {g(y ), v}
On appelle UNIFIER( Γ, σ ).
Etape 1- On passe à l’étape 2.
Etape 2 - D = {g(y ), v} .
Etape 3 - On effectue : σ ← σ(v / g(y )) et Γ ← Γ(v / g(y )) . On obtient :
σ = (z / a, x / f (a ), v / g(y )) et Γ = {P (a, f (a ), f (g(y )))} .
σ ← σ(v / g(y ))
P
a
f
f
a
g
a
P
f
f
a
g
y
y
σ = (z / a, x / f (a ), v / g(y ))
On appelle UNIFIER( Γ, σ ).
http://www.i2m.univ-amu.fr/~preaux
40
Approche logique de l'I.A.
Jean-Philippe Préaux
Etape 1- Γ est un singleton. L’algorithme s’arrête : L1, L2 sont unifiables. Leur unificateur
principal est σ = (z / a, x / f (a ), v / g(y )) , et le facteur obtenu est P (a, f (a ), f (g(y ))) . FIN
II.2.3) Principe de résolution appliqué à des clauses quelconques
Soient deux clauses quelconques C et D, pour lesquelles on suppose qu’elles n’ont pas de
variables en commun (voir §II.1.4). On note C et D comme des ensembles de littéraux, c'està-dire que si C = C 1 ∨ C 2 ∨ ... ∨ C p et D = D1 ∨ D2 ∨ ... ∨ Dq , on notera :
C = {C1 , C2 ,..., C p } ; D = {D1 , D2 ,..., Dq }
ou plutôt C = {Ci } et D = {D j } , où i et j seront supposés prendre les valeurs adéquates.
Le principe de résolution est une règle d’inférence qui à partir des clauses C et D (appelées
clauses parentes) produit (éventuellement) une nouvelle clause qui sera appelée un résolvant.
Le procédé est le suivant :
Principe de résolution : Considérons deux clauses C = {C1 , C2 ,..., C p } et D = {D1 , D2 ,..., Dq }
ayant des variables distinctes.
Si il existe un sous-ensemble {Ck } de {Ci } et un sous-ensemble {Dl } de {D j } tels que
Γ = {Ck } ∪ {¬Dl } soit unifiable, avec pour unificateur principal σ , alors un résolvant de C et
D sera défini comme (clause ayant pour ensemble de littéraux) :
({Ci } − {Ck })σ ∪ ({D j } − {Dl })σ
Exemple : Appliquons le principe de résolution aux deux clauses :
C = P (x , f (a )) ∨ Q(x ) ∨ P (a, y ) et D = ¬P (u, v ) ∨ P (a, f (v )) . L’ensemble de littéraux
L = {P (x , f (a )), P (a, y ), P (u, v )} est
unifiable
avec
pour
unificateur
principal
σ = (x / a, y / f (a ), u / a, v / f (a )) en le littéral P (a, f (a )) . Le principe de résolution s’applique
aux clauses parentes C et D, pour déduire le résolvantQ(a ) ∨ P (a, f (f (a ))) .
II.2.4) Propriétés du principe de résolution
● C’est une règle saine, c'est-à-dire que tout résolvant est une conséquence logique des deux
clauses parentes. En effet les clauses de {C i }σ et {Di }σ sont des conséquences logiques de
{C i } et {Di } . La règle de résolution prend alors la même forme que dans le cas des clauses
concrètes, qui est trivialement une règle d’inférence saine.
● Le fait que cette règle d’inférence soit saine ainsi que sa forme ont une conséquence
fondamentale :
Considérons un ensemble C = {C1 , C2 ,..., C p } de clauses, et une suite finie de clauses
G1 ,..., Gn vérifiant :
d) Gn est la clause vide.
e) Pour i variant de 1 à n, soit Gi est un élément de C, soit c’est un résolvant de
deux clauses antérieures de la suite.
Une telle suite G1 ,..., Gn s’appelle une réfutation par résolution de C. Elle prouve
l’inconsistance de C !!
http://www.i2m.univ-amu.fr/~preaux
41
Approche logique de l'I.A.
Jean-Philippe Préaux
En effet : remarquons tout d’abord que puisque le principe de résolution est une règle saine,
chaque Gi est une conséquence logique de C. Si la clause vide Gn a deux clauses parentes
C1 et C2 , cela signifie qu’il existe un unificateur principal σ tel que C1σ et C2σ soient réduits
à des littéraux complémentaires, i.e. C1σ = {L} et C2σ = {¬L} .
Si C admettait un modèle M , les clauses C1 et C2 seraient vérifiées dans ce modèle, et donc
aussi les clauses C1σ et C2σ . Ainsi on aurait nécessairement comme conséquence
logique C1σ ∧ C2σ ≡ L ∧ ¬L , qui est invalide. Donc C ne peut pas admettre de modèle.
CQFD.
● C’est un règle complète pour la réfutation (par opposition à la complétude pour la
déduction vu au §I.3.3). On montre ([Siekmann 83],[Chang 73], [Nilsson 71]) que si un
ensemble C de clauses est inconsistant, alors il existe une réfutation par résolution de C, i.e.
une suite d’applications du principe de résolution qui aboutit à la clause vide. Ce résultat est
fondamental !!!
● Le principe de résolution admet une formulation différente. Certains auteurs ont une
formulation différente du principe de résolution. Ils ‘découpent’ cette règle d’inférence en
deux règles d’inférence :
− Le Principe de résolution binaire : Soient deux clauses G = {Gi } et H = { H j } (notées
comme ensembles de littéraux) ayant des variables distinctes. Si il existe un littéral Gk de G et
un littéral H l de H, tels que Gk et ¬H l soient unifiables alors si σ est un unificateur
principal, une résolvante binaire de G et H est la clause définie par :
({Gi } − Gk )σ ∪ ({H j } − H l )σ .
Clairement le principe de résolution binaire est un cas particulier du principe de résolution :
c’est le cas où les sous-ensembles de littéraux considérés sont des singletons.
− Règle de factorisation : Soit une clause (notée comme ensemble de littéraux) G = {Gi } ,
telle que deux ou plusieurs littéraux de G (disons G1 , G2 ,..., G p ) soient unifiables. Alors on
peut déduire la clause appelée le facteur de G définie par ({Gi } − {G2 ,..., G p })σ .
Exemple : De la clause P ( x) ∨ P( y ) ∨ Q(a) on déduit le facteur P ( x) ∨ Q(a ) .
On montre que tout résolvant (non binaire) de deux clauses quelconques peut être
aussi déduit en appliquant le principe de résolution binaire et la règle de factorisation.
Attention le principe de résolution binaire ne suffit pas à lui seul à retrouver le principe de
résolution (non binaire) : il suffit par exemple de considérer les deux clauses P ( x) ∨ P ( y ) et
¬P(a) ∨ Q(b) ; elles admettent pour résolvante Q(b) (avec pour unificateur principal
( x / a, y / a) ), et pour résolvante binaire P ( y ) ∨ Q (b) . Par contre si l’on applique d’abord la
règle de factorisation à P ( x) ∨ P ( y ) on obtient P( x) puis en appliquant le principe de
résolution binaire à P ( x) et ¬P(a) ∨ Q(b) , on obtient aussi Q(b) .
Nous verrons plus tard, que lorsqu’on l’applique à certaines clauses particulières
comme les clauses de Horn (clauses contenant au plus un littéral positif) le principe de
résolution binaire est suffisant pour recouvrer le principe de résolution.
http://www.i2m.univ-amu.fr/~preaux
42
Approche logique de l'I.A.
Jean-Philippe Préaux
II.3) Preuve par réfutation en utilisant le principe de résolution
II.3.1) Réfutation par résolution
Supposons que l’on veuille prouver que la formule Q est une conséquence logique des
formules H1 , H 2 ,..., H n . Cela équivaut à montrer que la formule ¬( H1 ∧ ... ∧ H n ) ∨ Q est
valide, soit encore que la formule H1 ∧ ... ∧ H n ∧ ¬Q est inconsistante. Notons φ cette
dernière formule. Pour prouver que φ est inconsistante, il suffit de prouver que sa forme de
Skolem, ou encore que sa forme clausale est inconsistante. Si elle
s’écrit ∀x1 ,..., ∀xq (C1 ∧ ... ∧ C p ) , il suffit de prouver que la conjonction de clauses
C1 ∧ ... ∧ C p est inconsistante (en effet (∀x, P( x)) ⇒ P ( x) ), et il suffit pour cela de prouver que
l’ensemble constitué des clauses C1 ,..., C p est inconsistant. Cela peut être fait en lui appliquant
une réfutation par résolution. Cela donne la procédure :
Pour montrer que Q est une conséquence logique de H1 , H 2 ,..., H n :
ƒ Considérer la formule H1 ∧ ... ∧ H n ∧ ¬Q .
ƒ
ƒ
Construire sa forme clausale {C1 , C2 ,..., C p }
Appliquer une réfutation par résolution aux clauses C1 , C2 ,..., C p . Si
l’on finit par produire la clause vide on a prouvé que Q est une
conséquence logique de H1 , H 2 ,..., H n .
Si Q est une conséquence logique de H1 , H 2 ,..., H n , on peut par cette méthode le prouver.
Seulement si ce n’est pas le cas, l’algorithme risque de tourner indéfiniment sans que l’on
puisse conclure.
Exemples de réfutation par résolution
a) Montrons que :
{∀x, ( P( x) ⇒ Q( x)); ∀x, (Q( x) ⇒ R( x))} ∀x, ( P( x) ⇒ R( x))
C’est équivalent à montrer que la formule :
[∀x, ( P( x) ⇒ Q( x)) ∧ ∀x, (Q( x) ⇒ R( x))] ⇒ ∀x, ( P( x) ⇒ R( x))
est valide, ce qui équivaut à montrer que la formule :
∀x, ( P( x) ⇒ Q( x)) ∧ ∀x, (Q( x) ⇒ R( x)) ∧ ¬(∀x, ( P( x) ⇒ R( x)))
est inconsistante.
On aboutit à la forme normale conjonctive :
∀x, ∀y, [ (¬P ( x) ∨ Q( x)) ∧ (¬Q( y ) ∨ R( y )) ∧ P ( f ( x, y )) ∧ ¬R ( f ( x, y )) ]
soit encore à la forme clausale :
{¬P( x) ∨ Q( x); ¬Q( y ) ∨ R( y ); P( f (u, v)); ¬R( f ( w, t ))}
On schématise la preuve par réfutation par un arbre de réfutation. Deux arêtes relient les deux
clauses parentes à la clause résolvante. On peut (optionnellement) labelliser ce couple d’arêtes
par l‘unificateur principal employé :
http://www.i2m.univ-amu.fr/~preaux
43
Approche logique de l'I.A.
Jean-Philippe Préaux
¬P ( x ) ∨ Q ( x )
P ( f (u, v))
( x / f (u, v))
¬Q ( y ) ∨ R ( y )
Q( f (u, v))
( y / f (u , v))
¬R( f ( w, t ))
R ( f (u, v))
( w / u, t / v)
■
b) Dans le même genre, montrons que :
[∃x , P (x ) ∧ ∀x ,(P (x ) ⇒ Q(x ))] ⇒ ∃x,Q(x )
est valide, c'est-à-dire que la formule :
∃x , P (x ) ∧ ∀x ,(¬P (x ) ∨ Q(x )) ∧ ¬(∃x ,Q(x ))
est inconsistante. On obtient la forme clausale :
{P (c); ¬P (x ) ∨ Q(x ); ¬Q(y )}
¬P (x ) ∨ Q(x )
P (c)
(x / c)
¬Q(y )
Q(c)
(y / c)
■
c) Eric pense que : « Tout problème admet une solution ».
Claire constate que : « L’absentéisme est insoluble ».
On admet les hypothèses avancées par Eric et Claire. Montrons qu’alors :
« L’absentéisme n’est pas un problème »
On prend pour prédicats : P( x) : x est un problème ; S ( x, y ) : x a pour solution y, et pour
constante : a : l’absentéisme.
La pensée de Eric s’écrit : ∀x, ( P( x) ⇒ ∃y, S ( x, y ))
http://www.i2m.univ-amu.fr/~preaux
44
Approche logique de l'I.A.
Jean-Philippe Préaux
La constatation de Claire s’écrit : ¬∃y , S (a, y ) soit ∀y, ¬S (a, y )
Quant à la conclusion recherchée : ¬P (a )
La pensée de Eric a même consistance que :
∀x, (¬P( x) ∨ S ( x, f ( x))
On est donc amené à prouver l’inconsistance de la forme clausale :
{¬P( x) ∨ S ( x, f ( x)); ¬S (a, y ); P(a)}
Ce que fait l’arbre de réfutation ci-dessous :
¬P( x) ∨ S ( x, f ( x))
¬S ( a , y )
P (a )
( x / a, y / f (a))
¬P ( a )
■
c) On admet les assertions suivantes :
1- « John aime toutes les sortes de nourriture ».
2- « Tout ce que quelqu’un mange et qui ne le tue pas est de la nourriture ».
3- « Bill mange des chips et cela ne l’a pas tué ».
On veut prouver que :
4- « John aime les chips ».
On prend pour constantes : John, Bill, chips. On prend pour prédicats : A( x, y ) : x aime y ;
M ( x, y ) : x mange y ; T ( x, y ) : x tue y ; N ( x) : x est de la nourriture.
Les assertions deviennent :
1- ∀x, ( N ( x) ⇒ A( John, x))
2- ∀x, (∃y, ( M ( y, x) ∧ ¬T ( x, y )) ⇒ N ( x)
3- M ( Bill , chips) ∧ ¬T (chips, Bill )
4- A( John, chips)
Les FBFs 1 et 2 deviennent :
1- ∀x, (¬N ( x) ∨ A( John, x))
2- ∀x, ∀y, ¬M ( y, x) ∨ T ( x, y ) ∨ N ( x)
Des conjonctions de 1,2,3 avec la négation de la conclusion 4, on obtient la forme clausale :
http://www.i2m.univ-amu.fr/~preaux
45
Approche logique de l'I.A.
Jean-Philippe Préaux
{¬N (u ) ∨ A( John, u ); ¬M ( y, x) ∨ T ( x, y ) ∨ N ( x); M ( Bill , chips ); ¬T (chips, Bill ); ¬A( John, chips )}
¬ M ( y , x ) ∨ T ( x, y ) ∨ N ( x )
¬T (chips, Bill )
( x / chips, y / Bill )
¬M ( Bill , chips ) ∨ N (chips)
M ( Bill , chips )
¬N (u ) ∨ A( John, u )
N (chips )
(u / chips )
¬A( John, chips )
A( John, chips)
■
II.3.2) Non déterminisme de la réfutation par résolution
a) Non déterminisme
Soit H = {H 1, H 2,..., H n } une théorie, et φ une formule. Le procédé de réfutation par
résolution permettant de prouver que φ est conséquence logique de H peut s’écrire :
REFUTATION PAR RESOLUTION (H ; φ )
1- Constituer (avec l’algorithme du §II.1.5) la forme clausale C obtenue à partir
de la formule H 1 ∧ H 2 ∧ ... ∧ H n ∧ ¬φ .
2- Tant que la clause vide n’est pas dans C, faire :
2.1- début : Choisir deux clauses C1 , C2 de C.
2.2- Appliquer l’algorithme d’unification à toutes les sous clauses pour trouver
–si elles existent- des sous clauses C1' de C1 et C2' de C2 telles que
C1' ∪ ¬C2 ' soit unifiable, c'est-à-dire tel que l’on puisse appliquer le
principe de résolution à C1 et C2 .
2.3- Si le principe de résolution s’applique aux clauses C1 et C2 , alors :
2.3.1- Choisir un résolvant de C1 et C2 .
2.3.2- L’adjoindre à C.
2.4- fin.
3- Fin
http://www.i2m.univ-amu.fr/~preaux
46
Approche logique de l'I.A.
Jean-Philippe Préaux
Si la procédure s’arrête, on a bien prouvé que la FBF φ est une conséquence logique de la
théorie H. Seulement ainsi décrite cette procédure est non déterministe. Les étapes 2.1- et
2.3.1- font appel à un choix de l’utilisateur. En outre ce choix est crucial : le résultat de
« complétude pour la réfutation » affirme que si φ est une conséquence logique de la théorie
H, alors on peut faire les choix judicieux aux étapes 2.1- et 2.3.1- pour produire la clause
vide. Seulement on peut aussi –à priori- procéder à des choix moins judicieux produisant
indéfiniment des résolvants sans ne jamais aboutir à la clause vide de sorte que l’utilisateur
soit indéfiniment indécis sur une réponse à apporter. A ce stade, cette procédure n’est pas un
algorithme!
Remarque : On peut parfois se rendre compte ‘a priori’ que le principe de résolution ne peut
s’appliquer. Si par exemple les deux clauses considérées n’ont que des littéraux de même
signe (tous positifs ou tous négatifs) il est clair que le principe de résolution ne s’applique pas.
De même on peut parfois se rendre compte qu’une preuve par réfutation ne peut aboutir : si
par exemple toutes les clauses considérées contiennent exactement un littéral positif et un
littéral négatif, il en sera de même de toute résolvante, et on ne pourra donc jamais aboutir à la
clause vide.
b) Stratégies de résolution par réfutation, complètes, effectivement complètes
La procédure REFUTATION-PAR-RESOLUTION peut être améliorée aux étapes 2.1 et 2.3.1
(celles comportant un choix). On appelle stratégie de résolution par réfutation, une restriction,
ou un ordonnancement dans la façon de procéder au choix des clauses C1 et C2 (étape 2.1) ou
des littéraux à unifier (étape 2.3.1).
Une stratégie de résolution par réfutation sera qualifiée de complète (pour la réfutation),
lorsque si il existe une façon de procéder pour aboutir à la clause vide (c'est-à-dire si la forme
clausale initiale est inconsistante), il existe aussi une façon de procéder qui suit cette stratégie.
Elle sera dite effectivement complète lorsque l’utilisateur appliquant cette stratégie à une
forme clausale invalide est assuré d’aboutir à la clause vide au bout d’un temps fini. Une
stratégie effectivement complète est complète. Une stratégie complète non effectivement
complète offre un choix à l’utilisateur qui peut le faire aboutir à une impasse (un bouclage par
exemple).
c) Graphe de dérivation, graphe de réfutation
A toute forme clausale on associe un graphe de dérivation. On prend tout d’abord un sommet
pour chaque clause, puis dès que deux clauses admettent une clause résolvante, on ajoute au
graphe une sommet associé à la résolvante et deux arêtes orientées reliant ce dernier sommet
aux deux sommets associés aux clauses parentes. Dans la pratique les arêtes seront non
orientées, mais se dirigeront de haut en bas de sorte que des clauses parentes sont toujours au
dessus de leur résolvante. Bien sur, le graphe peut être fini ou infini. Mais deux clauses
n’admettent (à changement de variable près) qu’un nombre fini de résolvantes ; aussi on peut
pas à pas construire ce graphe.
Exemple : On considère pour hypothèses les FBFs :
∀x , ∃y,(¬P (x ) ⇒ Q(y )) et ∀z,(P (b) ⇒ R(a, z ))
et l’on veut montrer que : ¬R(a, b) ⇒ ∃u,Q(u )
http://www.i2m.univ-amu.fr/~preaux
47
Approche logique de l'I.A.
Jean-Philippe Préaux
Cela donne la forme clausale :
{P( x) ∨ Q( f ( x)); ¬P(b) ∨ R(a, y ); ¬R (a, b); ¬Q( z )}
Le graphe de dérivation est le suivant (dans ce cas c’est un graphe fini) :
P ( x) ∨ Q( f ( x))
¬P(b) ∨ R(a, y )
Q( f (b)) ∨ R(a, y )
Q( f (b))
Q( f (b))
■
¬R ( a , b )
¬Q ( z )
¬P (b)
P ( x)
■
R ( a, y )
R ( a, y )
■
■
■
Un graphe de réfutation est un sous graphe du graphe de dérivation, qui contienne un sommet
associé à la clause vide. Voici un exemple de graphe de réfutation extrait du graphe de
dérivation précédent.
P ( x) ∨ Q( f ( x))
Q( f (b)) ∨ R(a, y )
Q( f (b))
¬P(b) ∨ R(a, y )
¬R ( a , b )
¬Q ( z )
■
http://www.i2m.univ-amu.fr/~preaux
48
Approche logique de l'I.A.
Jean-Philippe Préaux
II.3.3) Quelques exemples de stratégies de résolution
a) Stratégie de résolution « en largeur »
On associe à chaque clause une profondeur. Les clauses initiales sont de profondeur 0. Une
clause est de profondeur n lorsque le maximum de la profondeur de ses deux parents est
( n − 1 ). La stratégie en largeur consiste à produire toutes les clauses de profondeur 0, puis
toutes les clauses de profondeur 1, etc….
Puisque de deux clauses on ne peut déduire qu’un nombre fini de clauses résolvantes, le
nombre de clauses de profondeur donné est fini. Ainsi cette stratégie est effectivement
complète, puisque l’on est sûr en l’appliquant d’énumérer toutes les clauses résolvantes.
Cette stratégie ne restreint pas le choix des clauses ou des littéraux : il ordonne le choix des
clauses.
Exemple : Dans l’exemple considéré plus haut, à la fin de l’implémentation la stratégie en
largeur a produit le graphe de réfutation suivant :
P ( x) ∨ Q( f ( x))
¬P(b) ∨ R(a, y )
¬R ( a , b )
Q( f (b)) ∨ R(a, y )
Q( f (b))
¬Q ( z )
¬P (b)
P ( x)
Q( f (b))
R ( a, y )
R ( a, y )
■
b) Stratégie de résolution « linéaire »
Soit un ensemble de clauses G, inconsistant, et C0 une clause de G telle que G − C0 soit
consistant. La clause C0 est appelée clause centrale de départ. Toute clause résolvante ayant
pour ancêtre C0 est appelée clause centrale.
La stratégie linéaire procède de la façon suivante :
1- On applique le principe de résolution à C0 et à une clause de G. La résolvante est
notée CC1 .
2- A chaque étape la clause centrale CCi +1 est obtenu en appliquant le principe de
résolution entre CCi et une clause de bord CB , c'est-à-dire tel que CB soit une
clause de G ou un ancêtre CC j (avec j ≤ i ) de CCi +1 .
http://www.i2m.univ-amu.fr/~preaux
49
Approche logique de l'I.A.
Jean-Philippe Préaux
La construction de l’arbre de réfutation est dans ce cas légèrement modifiée pour prendre la
forme :
CC 0
CB0
CC 1
CB1
CC 2
CBn −1
#
CC n
CBn
Clauses au
bord
#
Clauses
centrales
Exemple : Voici un graphe de recherche obtenu à partir d’une stratégie de résolution linéaire,
à partir de la clause centrale de départC 0 = P (x ) ∨ Q( f (x )) .
P (x ) ∨ Q( f (x ))
¬P (b) ∨ R(a, y )
¬Q(z )
¬R(a, b)
Q( f (b)) ∨ R(a, y )
R(a, y )
■
Le fait que la stratégie soit complète ou effectivement complète est à ce stade non
trivial. C’est pourtant le cas comme l’établit le résultat (admis) suivant :
http://www.i2m.univ-amu.fr/~preaux
50
Approche logique de l'I.A.
Jean-Philippe Préaux
Théorème : La stratégie de résolution linéaire est complète. Si en outre on ordonne la
production des clauses centrales par une stratégie en largeur, elle est effectivement complète.
Remarques : Pour appliquer la stratégie de résolution il s’agit tout d’abord de choisir une
clause centrale de départ C 0 de façon à ce que G − C 0 soit consistante. Dans la pratique on
prendra une des clauses issues de la négation de la conclusion recherchée. On peut alors
présumer que G − C 0 est consistant. Il ne comprend que les clauses issues des hypothèses et
de la négation de la conclusion auquel on a retiré une clause. Dans le cas contraire, on pourrait
montrer l’inconsistance de G − C 0 (qui implique l’inconsistance de G), en procédant de la
même façon.
Reprenons l’exemple utilisé durant cette section. Nous n’avons pas appliqué cette
méthode ci-dessus : P (x ) ∨ Q( f (x )) n’est pas issu de la négation de la conclusion recherchée
(soit ¬R(a, b) ⇒ ∃u,Q(u ) ). La forme clausale considérée est :
{P (x ) ∨ Q(f (x )); ¬P (b) ∨ R(a, y ); ¬R(a, b); ¬Q(z )}
Les deux dernières clauses étant issues de la négation de la conclusion. Si l’on prend pour
clause centrale de départC 0 = ¬R(a, b) , et que l’on procède à une stratégie linéaire (et en
largeur), on obtient le graphe de réfutation :
¬R(a, b)
¬P (b) ∨ R(a, y )
P (x ) ∨ Q(f (x ))
¬Q(z )
¬P (b) ∨ R(a, y )
¬R(a, b)
¬P (b)
Q(f (b))
■
Et à partir de C 0 = ¬Q(z ) :
¬Q(z )
P (x ) ∨ Q(f (x ))
P (x )
R(a, y )
■
http://www.i2m.univ-amu.fr/~preaux
51
Approche logique de l'I.A.
Jean-Philippe Préaux
c) Stratégie « linéaire par entrée »
Cette stratégie est identique à la stratégie linéaire, à ceci près que les clauses au bord ne
peuvent être prises que parmi les clauses d’entrée. Par exemple les trois résolutions linéaires
considérées au paragraphe précédent sont des résolutions linéaires par entrée.
En général les stratégies linéaires et par entrées ne sont pas complètes, comme en témoigne
l’exemple suivant !
{P (a ) ∨ Q(x ); P (y ) ∨ ¬Q(y ); ¬P (z ) ∨ ¬Q(z ); ¬P (u ) ∨ Q(u )}
Par la stratégie linéaire (et en largeur), en partant de la clause ¬P (z ) ∨ ¬Q(z ) :
¬P (z ) ∨ ¬Q(z )
¬P (u ) ∨ Q(u )
P (y ) ∨ ¬Q(y )
P (a ) ∨ Q(x )
¬P (z )
¬Q(y )
¬P (z )
(ce n’est pas une clause d’entrée !)
P (a )
■
Cette résolution linéaire n’est pas linéaire et par entrée. En fait il est impossible dans ce cas
d’obtenir un graphe de réfutation par cette dernière méthode. En effet puisque les quatre
clauses d’entrée sont des disjonctions de deux littéraux non unifiables, toute résolution
invoquant une clause d’entrée éliminera un littéral mais pas les deux : on ne pourra jamais
aboutir à la clause vide.
Seulement les stratégies linéaires et par entrée sont complètes lorsqu’elles sont appliquées à
des clauses de Horn (c’est-à-dire des clauses ne comportant au plus qu’un littéral positif), et
de plus en n’utilisant que le principe de résolution binaire !!!
http://www.i2m.univ-amu.fr/~preaux
52
Approche logique de l'I.A.
Jean-Philippe Préaux
II.3.4) Preuves par réfutation restreintes aux clauses de Horn
Définition : Une clause de Horn est une clause contenant au plus un littéral positif. Une
clause (de Horn) contenant exactement un littéral positif est appelée une clause définie. Une
clause (de Horn) ne contenant aucun littéral positif est appelée clause négative ou but.
Afin de comprendre pourquoi l’on s’intéresse à ces clauses particulières, remarquons les faits
suivants concernant le principe de résolution appliqué uniquement à des clauses de Horn :
● La résolvante de deux clauses définies est elle-même définie.
En effet chaque clause parente comporte exactement un littéral positif, et une
résolvante a été nécessairement obtenue en supprimant exactement un des deux
littéraux positifs dans une des deux clauses. Donc la clause résolvante doit contenir
l’autre littéral positif, et tous ses autres littéraux sont négatifs : c’est donc une clause
définie.
• Si une des deux clauses parentes est négative, l’autre clause parente est nécessairement
définie ; la résolvante est une clause négative. En effet la première clause parente étant
négative l’autre clause parente doit nécessairement comporter un littéral positif.
Puisqu’il s‘agit d’une clause de Horn elle en comporte exactement un : c’est une
clause définie. Ce littéral positif sera supprimé par résolution : la résolvante n’aura que
des littéraux négatifs.
• En particulier la résolvante de deux clauses de Horn est elle-même une clause de
Horn.
Proposition : Soit Σ un ensemble de clauses de Horn, et Σ0 le sous-ensemble constitué des
clauses définies. Alors,
1) Σ0 est non-contradictoire.
2) Si Σ est inconsistant, alors il existe une clause négative C de Σ , telle que Σ0 ∪ {C } soit
inconsistant
Preuve : Montrons d’abord la première assertion : remarquons tout d’abord que Si Σ0 était
inconsistant, alors par complétude pour la réfutation, il existerait une preuve par réfutation
aboutissant à la clause vide. Or puisque toutes les clauses de Σ0 sont des clauses définies
toute résolvante sera aussi définie, et donc on ne peut pas aboutir à la clause vide ; Σ0 est donc
non contradictoire.
Montrons maintenant la deuxième assertion. Si Σ est inconsistant, alors puisque les
stratégies linéaires sont complètes il existe une réfutation linéaire ayant pour clause de départ
une clause C négative. Avec le deuxième énoncé plus haut, toutes les clauses centrales (i.e. les
résolvantes) seront négatives, et les clauses d’entrée seront nécessairement définies. Donc la
réfutation s’applique à Σ0 ∪ {C } et donc Σ0 ∪ {C } est inconsistant. CQFD
Proposition : Les stratégies linéaires et par entrée sont complètes lorsque appliquées à des
clauses de Horn.
Preuve : Par complétude de la stratégie linéaire, si un ensemble de clauses de Horn admet un
arbre de réfutation, il en admet un qui suit une stratégie linéaire. Avec la proposition
précédente la clause initiale doit être choisie parmi les clauses négatives. Avec le deuxième
fait observé plus haut toutes les clauses centrales seront négatives et les clauses d’entrées
seront définies. Ainsi aucune clause d’entrée ne peut être aussi une clause centrale, et la
stratégie linéaire se fait par entrée. CQFD
http://www.i2m.univ-amu.fr/~preaux
53
Approche logique de l'I.A.
Jean-Philippe Préaux
II.3.5) Principes de programmation logique
Le langage de programmation logique PROLOG utilise la méthode de résolution
appliquée à des clauses de Horn. La restriction de la méthode à de telles clauses a pour
avantage de simplifier considérablement les algorithmes de résolution. Il a cependant aussi
pour désavantage de ne pas pouvoir s’appliquer à toutes les formules du calcul des prédicats :
si toute formule du calcul des prédicats admet une conjonction universelle de clauses qui ait
même consistance, ce n’est plus vrai si l’on se restreint à des clauses de Horn. Cependant dans
la pratique, la plupart des problèmes pourront s’interpréter grâce à l’emploi de clauses de
Horn (parfois au prix d’une certaine ingéniosité).
Nous utilisons la syntaxe de SWI-prolog, une version freeware de PROLOG
développée par l’université d’edimbourg.
une clause de Horn définie P ∨ ¬N1 ∨ ¬N 2 ∨ ... ∨ ¬N k s’écrit en PROLOG :
P : − N1 , N 2 ,..., N k .
et se lit « P si N1 , N 2 ,..., N k » ou encore « P aux conditions N1 , N 2 ,..., N k » (elle est
équivalente à ( N1 ∧ N 2 ∧ ... ∧ N k ) ⇒ P ). On l’appelle une règle. Le littéral positif P est appelé
la tête et le second membre N1 , N 2 ,..., N k appelé la queue.
Dans le cas d’une clause définie restreinte à un littéral positif : P , on note :
P.
et l’on parle d’un fait.
Un programme PROLOG est constitué d’un ensemble de règles et de faits.
Exemple : Soit le programme :
pere(marc, anne).
pere( pierre, marc).
grandpere( X , Z ) : − pere( X , Y ), pere(Y , Z ).
(Les chaînes de caractère commençant par une lettre majuscule sont interprétées comme des
variables, les autres comme des constantes ou fonctions.)
Il doit être compris comme le système axiomatique constitué des formules :
pere(marc, anne) ; pere( pierre, marc) ; et
∀x, ∀y, ∀z, ( pere( x, y ) ∧ pere( y, z )) ⇒ grandpere( x, z )
Note sur l’emploi de variables. Toutes les clauses considérées doivent être compris comme
des formes clausales, et donc toutes les variables sont quantifiées universellement. Seulement
cela est vrai pour une écriture sous forme prénexe ! Par exemple :
∀x, ∀y, ∀z, ( Père( x, y ) ∧ Père( y, z )) ⇒ Grand − père( x, z )
≡ ∀x, ∀y, ∀z, ¬( Père( x, y ) ∧ Père( y, z )) ∨ Grand − père( x, z )
≡ ∀x, ∀z , [∀y, ¬( Père( x, y ) ∧ Père( y, z )) ] ∨ Grand − père( x, z )
≡ ∀x, ∀z , [ ¬∃y, ( Père( x, y ) ∧ Père( y, z )) ] ∨ Grand − père( x, z )
≡ ∀x, ∀z , [ ∃y, ( Père( x, y ) ∧ Père( y, z )) ] ⇒ Grand − père( x, z )
De façon générale :
ƒ a( X ) : −b. doit se comprendre : b ⇒ ∀x, a( x) , soit pour tout X, a(X) à la condition b
(en effet ∀x, (a( x) ∨ ¬b) ≡ ∀x, a( x) ∨ ¬b ≡ b ⇒ ∀x, a( x) .)
http://www.i2m.univ-amu.fr/~preaux
54
Approche logique de l'I.A.
ƒ
ƒ
Jean-Philippe Préaux
a : −b( X ). doit se comprendre : ∃x, b( x ) ⇒ a , soit a à la condition qu’il existe X tel
que b(X) (en effet ∀x, ( A ∨ ¬B ( x)) ≡ A ∨ ∀x, ¬B ( x) ≡ A ∨ ¬∃x, B( x) ≡ ∃x, B( x) ⇒ A .)
a ( X ) : −b( X ). doit se comprendre : ∀x, (b( x) ⇒ a ( x)) , soit (pour tout X) a(X) à la
condition b(X).
Un programme PROLOG ne fait rien d’autre qu’énoncer des règles ! C’est l’utilisateur qui
questionne le programme. Il entre au prompteur ‘>’ des littéraux positifs séparés par des
virgules.
Exemples : > L1 , L2 ,..., Lp .
Ou en reprenant l’exemple précédent :
> grandpere( X , anne).
Qui doit être compris comme la question « pour quelles valeurs de x ce prédicat est-il vrai ? »
Le langage interprète cela comme la clause négative ¬L1 ∨ ¬L2 ∨ ... ∨ ¬Lp . Il ajoute cette
clause au langage, et essaye d’en déduire la clause vide par une preuve par réfutation. S’il
parvient à déduire la clause vide il répond ‘Yes’ et fournit la substitution employée. Exemple,
dans ce cas le programme répondrait :
X = pierre
Yes
>
Une réponse négative :
No
>
doit-être interprétée comme « je ne sais pas répondre » (c’est ici qu’on retrouve
l’indécidabilité !!), et non comme une réponse négative à la question.
Si la question ne comportait pas de variable :
> grandpere( pierre, anne).
(qui doit se comprendre comme « Est-ce que le prédicat est vrai ? » alors l’interpréteur répond
simplement (dans ce cas) :
Yes
Exemple : L’exemple le plus élémentaire de l’utilisation de PROLOG est l’écriture de bases
de données évoluées, qui peuvent répondre à certaines questions posées par l’utilisateur. Par
exemple on peut créer une base de données indiquant le grade d’officiers. Il suffit pour celà de
considérer les faits :
grade(dupond , lieutenant ).
grade(durand , capitaine).
grade(dubois, capitaine).
grade(dieudonne, lieutenantcolonel ).
grade(michel , colonel ).
#
grade(martin, general ).
à la question :
> grade(michel , X ).
http://www.i2m.univ-amu.fr/~preaux
55
Approche logique de l'I.A.
Jean-Philippe Préaux
Le logiciel répondra :
X = colonel
Yes
Tandis qu’à la question
grade( X , capitaine).
le logiciel répondra par la liste des capitaines :
X = durand
X = dubois
#
Yes
On souhaiterait aussi que le logiciel réponde aux questions « qui sont les plus haut gradés que
le Cne Durand, qui sont les moins gradés. Cela peut-être fait en considérant des assertions du
genre : ∀x, ∀y, ( grade( x, lieutenant ) ∧ grade( y, capitaine)) ⇒ plusgrade( y, x) , c'est-à-dire de
rajouter les règles :
plusgrade( X , Y ) : − grade( X , capitaine), grade(Y , lieutenant ).
plusgrade( X , Y ) : − grade( X , lieutenantcolonel ), grade(Y , capitaine).
plusgrade( X , Y ) : − grade( X , colonel ), grade(Y , capitaine).
plusgrade( X , Y ) : − grade( X , general ), grade(Y , colonel ).
Mais ce n’est pas suffisant. Il faut aussi que le logiciel comprenne que la relation plusgrade
est transitive, i.e. ∀x, ∀y, ∀z, ( plusgrade( x, y ) ∧ plusgrade( y, z )) ⇒ plusgrade( x, z ) . Celà
donne la forme clausale ¬plusgrade( x, y ) ∨ ¬plusgrade( y, z ) ∨ plusgrade( x, z ) qu’il suffit de
rentrer par la règle :
plusgrade( X , Z ) : − plusgrade( X , Y ), plusgrade(Y , Z ).
Maintenant à la question
>plusgrade(X,durand) .
Le logiciel répond en donnant tous les plus gradés que le Cne Durand, quelque chose comme :
X=martin
#
X=michel
Yes
Tandis qu’à la question
>plusgrade(michel,X).
Le logiciel répondra en donnant tous les subordonnés du Colonel Michel.
On voit sur cet exemple qu’il est facile d’écrire de base de données pouvant répondre à des
questions plus « intelligentes », pour peu que l’on définisse des lois qui permettent au logiciel
de répondre.
Remarque : - Le langage PROLOG utilise une stratégie linéaire par entrée en profondeur,
avec retour arrière, et doit faire certains choix dans l’ordre d’application des résolutions. Ces
choix sont faits en vue de rendre le programme implémentable, au détriment peut-être
d’autres choses : ainsi effectuée cette stratégie n’est pas effectivement complète.
- La présentation que nous en avons donné est on ne peut plus succincte ! Nous
n’avons exposé que le principe général ; nous verrons plus de fonctionnalités durant le cours.
http://www.i2m.univ-amu.fr/~preaux
56
Approche logique de l'I.A.
Jean-Philippe Préaux
II.4.) Illustration
« Vous vous trouvez au purgatoire. Deux malins génies ont profité de l’absence de St
Pierre pour vous faire une farce. Il vous présentent deux portes : l’une d’entre-elles ouvre sur
le paradis tandis que l’autre ouvre sur l’enfer. Plutôt que de peser votre âme pour décider où
vous envoyer ils ont décidé de vous laisser choisir laquelle des deux portes ouvrir, les deux
portes étant évidemment, vues de l’extérieur, absolument semblables, et votre choix bien
évidemment irrévocable. Seuls les deux génies savent quelle porte ouvre sur le paradis. Ils
vous annoncent que pour vous aider ils vous permettent de poser une et une seule question à
l’un seul d’entre eux. Ils vous disent aussi que l’un d’entre eux à par avance décidé de vous
donner une réponse erronée, et l’autre de vous donner une réponse juste, sans bien sûr vous en
dire plus.
Vous prenez quelques minutes pour réfléchir, et la solution vous apparaît soudain :
vous vous tournez vers le premier des deux malins génies, et lui demandez : « que me dirait
votre comparse si je lui demandais quelle porte ouvre sur le paradis ?». « Il vous dirait que
c’est celle-ci » vous répond le malin génie. Vous vous dirigez alors vers l’autre porte et
l’ouvrez. »
• Montrez par une preuve de réfutation que vous avez fait le bon choix.
Nous commençons par considérer un langage qui puisse retranscrire l’énoncé. Nous allons
considérer deux symboles de constante a et b qui désigneront les deux malins génies. Nous
considérons aussi deux prédicats S ( x) : x est sincère et M ( x) : x ment. Nous considérons une
fonction Dit ( x, y ) signifiant le terme : x dit y, et une autre constante Droite pour la
phrase : ‘c’est la porte de droite’. Enfin on considère un prédicat Exact ( x) qui signifie qu’il
exact que x. Il sera interprété ainsi : Exact ( Dit ( x, y )) : il est vrai que x dit y (soit encore « x
dit y » mais en tant que littéral et non plus en temps que terme), et Exact ( Droite) : c’est bien
la porte de droite. L’énoncé peut alors se transcrire par :
• Soit x ment soit il est sincère ; l’un ou l’autre :
1- ∀x, S ( x) ∨ M ( x)
2- ∀x, ¬( S ( x) ∧ M ( x))
• Si une personne sincère dit y, alors il est exact que y, sinon il est faux que y.
3- ∀x, ∀y, ( S ( x) ∧ Exact ( Dit ( x, y ))) ⇒ Exact ( y )
4- ∀x, ∀y, ( S ( x) ∧ ¬Exact ( Dit ( x, y ))) ⇒ ¬Exact ( y )
• De même si un menteur dit y, il est faux que y, sinon il est exact que y.
5- ∀x, ∀y, ( M ( x) ∧ Exact ( Dit ( x, y ))) ⇒ ¬Exact ( y )
6- ∀x, ∀y, ( M ( x) ∧ ¬Exact ( Dit ( x, y ))) ⇒ Exact ( y )
•On peut aussi pour simplifier la résolution ajouter que si a répondait d’une certaine façon, b
dirait le contraire, et réciproquement.
7- ∀x, Exact ( Dit ( a, x)) ⇔ ¬Exact ( Dit (b, x))
• le génie a dit que le génie b dirait qu’il faut choisir la porte de droite.
8- Exact ( Dit (a( Dit (b, Droite)))
• Et ce que l’on veut prouver c’est que ce n’est pas la porte de droite qu’il faut choisir, soit
que ¬Exact ( Droite) . On considère donc sa négation :
9- Exact ( Droite)
http://www.i2m.univ-amu.fr/~preaux
57
Approche logique de l'I.A.
Jean-Philippe Préaux
On transforme ces formules sous forme clausale. On obtient :
123456789-
S ( z1 ) ∨ M ( z1 )
¬ S ( z 2 ) ∨ ¬M ( z 2 )
¬S ( x1 ) ∨ ¬Exact ( Dit ( x1 , y1 )) ∨ Exact ( y1 )
¬S ( x2 ) ∨ Exact ( Dit ( x2 , y2 )) ∨ ¬Exact ( y2 )
¬M ( x3 ) ∨ ¬Exact ( Dit ( x3 , y3 )) ∨ ¬Exact ( y3 )
¬M ( x4 ) ∨ Exact ( Dit ( x4 , y4 )) ∨ Exact ( y4 )
¬Exact ( Dit ( a, x)) ∨ ¬Exact ( Dit (b, x))
Exact ( Dit ( a( Dit (b, Droite)))
Exact ( Droite)
http://www.i2m.univ-amu.fr/~preaux
58
Approche logique de l'I.A.
3
Jean-Philippe Préaux
8
( x1 / a, y1 / Dit (b, Droite))
¬S (a ) ∨ Exact ( Dit (b, droite))
1
( x1 / a)
M (a ) ∨ Exact ( Dit (b, Droite))
7
5
9
( y3 / Droite)
M (a ) ∨ ¬Exact ( Dit (a, Droite))
¬M ( x3 ) ∨ ¬Exact ( Dit ( x3 , Droite))
( x3 / a)
4
¬Exact ( Dit ( a, Droite))
( x2 / a, y2 / Droite)
¬S (a ) ∨ ¬Exact ( Droite)
Exact ( Dit (b, droite))
http://www.i2m.univ-amu.fr/~preaux
59
7
Approche logique de l'I.A.
¬S (a ) ∨ ¬Exact ( Droite)
Jean-Philippe Préaux
Exact ( Dit (b, droite))
9
5
( y3 , Dit (b, Droite))
¬M ( x3 ) ∨ ¬Exact ( Dit ( x3 , Dit (b, Droite)))
¬S ( a )
8
1
( x3 / a )
( x1 / a)
¬M ( a )
M (a)
■
Ce qui prouve la conclusion souhaitée.
Quelques ouvrages de référence :
− « Outils logiques pour l’intelligence artificielle », JP.Delahaye, Editions Eyrolles, 1986.
− « Principes d’intelligence artificielle », Nils J.Nilson, Collection Techniques avancées de
l’informatique, Editions CEPADUES, 1988.
− « Fondements mathématiques de l’informatique »,J.Stern, Editions Mc Graw-Hill, 1990.
http://www.i2m.univ-amu.fr/~preaux
60
Téléchargement