Académique Documents
Professionnel Documents
Culture Documents
1. INTRODUCTION
1.1 Définition
L’IA s’est donnée pour objectif d’analyser le comportement humain dans les domaines
des raisonnements et des actions intelligentes dans le but éventuel de le reproduire ensuite sur
ordinateur.
En informatique traditionnel, le raisonnement est fait par l’être humain qui fait
appel à l’ ordinateur pour sa rapidité de calcul.
Exemple: Au jeu d’échec, on ne connaît pas des méthodes conduisant au meilleur
coup à jouer quelque soit la situation.
2. CONNAISANCE 1. RAISONNEMENT
L’IA est une science pluridisciplinaire qui tire ses sources d’inspiration et certaines
de ces techniques de domaines variés : informatique, Logique, Sciences cognitives,
Linguistique, Philosophie, Neuroscience, etc.
1.
1
Hypothèse de l’ IA symbolique (Knowledge Representation Hypothesis)
L’Intelligence peut être décrite comme une suite d’opérations sur des structures symboliques, interprétables
de façon propositionnelle.
2
Ce non déterminisme fondamental, cette liberté d’action est une composante essentielle de l’intelligence.
3. SYSTEME DE PRODUCTION
3.1 Définition
C'est un système capable de résoudre un problème d'Intelligence Artificielle.
Les éléments de base d'un système de production en Intelligence Artificielle sont :
⇒ La base de données globale est la structure de données centrale utilisée par
un système de production d'Intelligence Artificielle.
⇒ Les règles de production agissent sur la base de données globale. Chaque
règle a des pré conditions qui sont ou ne sont pas satisfaites par la base de
données globale. Si les pré conditions sont satisfaites, la règle peut être
appliquée. Cette application change la base de données globale.
⇒ La stratégie de contrôle choisit la règle applicable qui doit être appliquée et
le processus se termine dès qu'une condition d'arrêt pour la base de données
est satisfaite.
Toutes les règles peuvent accéder à la base de données.
Aucune partie de cette base de données n'est liée à une règle particulière. Les règles
n’appellent pas d'autres règles ; la communication entre les règles se fait uniquement par
l’intermédiaire de la base de données globale.
Pour résoudre un problème en utilisant un système de production, il faut spécifier la
base de données globale, les règles et la stratégie de contrôle. La transformation de l'énoncé
d'un problème en ces 3 composants est souvent appelée le problème de la représentation en
Intelligence Artificielle.
3.2 Procédure de base dans un système de production
Procédure PRODUCTION
1 DONNEES ← base de données globale initiale
2 jusqu'à ce que DONNEES satisfasse la condition d'arrêt faire
3 début
4 sélectionner une règle dans l'ensemble des règles qui peuvent être appliquée
à DONNEES
5 DONNEES ← résultat de l'application de R à DONNEES
6 fin
Cette procédure est non déterministe parce que nous n'avons pas spécifié comment
nous allons sélectionner une règle applicable à l'étape 4. La sélection des règles et
l'enregistrement des séquences des règles déjà essayées et des bases de données qu'elles
produisent constituent ce qu'on appelle la stratégie de contrôle pour les systèmes de
production.
3.3 Stratégie de contrôle
On distingue 2 types majeurs de stratégies de contrôle :
♦ irrévocable
♦ par essais successifs ou encore par tentative
Avec la stratégie irrévocable, une règle applicable est sélectionnée et appliquée sans
qu'on puisse la remettre en question ultérieurement.
Dans une stratégie de contrôle par essais successifs, une règle applicable est
sélectionnée (soit arbitrairement, soit pour une bonne raison ) pour être appliquée, mais on
prévoit la possibilité de revenir sur ce choix par la suite.
On distingue 2 types de stratégies de contrôle par essais successifs :
♦ retour arrière chronologique
♦ recherche avec graphe
Pour le premier, un point de retour arrière est établi lorsqu'une règle est sélectionnée.
Dans le second, des dispositions sont prises pour explorer les effets de plusieurs
séquences de règles simultanément. On utilise divers type de structures de graphes et de
procédures de recherche dans des graphes.
3.4 Systèmes de production en chaînage arrière et systèmes de
production bidirectionnels
Un système de production en chaînage avant part de l'état initial jusqu'à l'état but.
Un système de production en chaînage arrière commence par l'état but pour progresser
vers l'état initial en appliquant le déplacement inverse. Chaque déplacement inverse produirait
un état sous-but à partir duquel l'état suivant pourrait être atteint en un seul coup.
Bien qu'il n'y ait pas de différence formelle entre les 2, il est souvent commode de
faire la distinction de façon explicite. Lorsqu'un problème a des états des buts intuitivement
clairs et lorsque nous décidons d'employer de descriptions de ces états comme base de
données globale, nous disons que le système est en chaînage avant. Des règles sont appliquées
aux descriptions d'états pour produire de nouvelles descriptions d'états. Celles-ci sont appelées
règles-avant.
Si à la place, nous choisissons d'employer les descriptions des buts du problème
comme base de données globale, nous dirons que le système est en chaînage arrière. Des
règles sont appliquées aux descriptions de buts pour produire des descriptions de sous-buts.
Celles-ci sont appelées règles-arrière.
Il est souvent opportun de résoudre un problème en utilisant une recherche
bidirectionnelle. On peut obtenir cet effet avec les systèmes de production qu'on appelle
systèmes de production bidirectionnels.
Pour ce faire, il faut incorporer à la fois les descriptions d'états et les descriptions de
buts dans la base de données globale. Les règles-avant sont appliquées à la partie description
d'état, tandis que les règles-arrière sont appliquées à la partie description de but. La condition
d'arrêt doit être formulée comme une condition d'unification de la partie description de but et
la partie description d'état de la base de données globale. Le mécanisme de contrôle doit
également décider à chaque étape s'il vaut mieux déclencher une règle-avant applicable ou
une règle-arrière applicable.
3.5 Systèmes de production commutatifs
Sous certaines conditions, l'ordre dans lequel un ensemble de règles applicables est
appliqué à une base de données globale est sans importance. Lorsque ces conditions sont
satisfaites, un système de production améliore son efficacité en évitant d'explorer inutilement
des chemins solutions redondants qui sont équivalents à l'ordre des règles près.
Nous disons qu'un système de production est commutatif s'il possède les propriétés
suivantes concernant une base de données globale B :
a ) Chaque règle de l'ensemble des règles applicables à B est également applicable à
toute base de données globale résultant de l'application d'une règle applicable à B.
b ) Si la condition de but est satisfaite par B, alors elle est aussi satisfaite par une base
de données produite par l'application de toute règle applicable à B.
Procédure PARTAGE
1 DONNEES ←base de données initiale
2 { Di } ←décomposition de données DONNEES
3 jusqu'à ce que tous les { Di } satisfassent la condition d'arrêt, faire
4 début
5 sélectionner D* parmi les { Di } qui ne satisfont pas la condition d'arrêt
6 enlever D* de { Di }
7 sélectionner une règle R dans l'ensemble des règles qui sont applicables à D*
8 D ←résultat de l'application de R à D*
9 { di } ← décomposition de D
10 ajouter { di } à { Di }
11 fin
4. STRATEGIES DE RECHERCHE
4.1 Stratégies de retour arrière :
Le mécanisme de contrôle avec retour arrière est souvent tout à fait adéquat et
efficace pour les problèmes demandant peu de recherche. Une simple procédure récursive
montre la base de fonctionnement d'un système de production soumis au contrôle avec
retour arrière. Cette procédure que nous appelons RETOUR-ARRIERE admet un seul
argument DONNEES ayant la base de données globale du système de production comme
valeur initiale. Une fois terminée, la procédure renvoie une liste des données initiales,
produisent une base de données satisfaisant la condition d'arrêt. Si la procédure s'arrête
sans trouver une telle liste de règles, elle renvoie ECHEC.
Procédure récursive RETOUR-ARRIERE (DONNEES)
Cette procédure peut ne jamais se terminer. Pour éviter, on peut imposer une limite
arbitraire pour la profondeur de la récursivité. On peut aussi modifier l'algorithme RETOUR-
ARRIERE en vérifiant que l'on ne repasse pas par une base de données se trouvant déjà sur le
chemin qui part de la base de données initiale. Afin d'implémenter cette stratégie de retour-
arrière comme une procédure récursive, toute la chaîne de base de données visitée doit être un
argument de la procédure.
Appelons RETOUR-ARRIERE1 notre nouveau algorithme qui évite les cycles. Il
prend comme argument une liste de base de données. Lorsqu'elle est appelée pour la première
fois, cette liste contient comme seul élément la base de données initiale. Lorsque la procédure
se termine avec succès, RETOUR-ARRIERE1 renvoie une séquence de règles qui peuvent
être appliquées à la base de données initiale pour en produire une qui satisfait la condition
d'arrêt.
Cette procédure est suffisamment générale pour englober une grande variété
d'algorithmes particuliers avec graphe. La produit un graphe explicite G, appelé graphe de
recherche et un sous-ensemble T de G appelé arbre de recherche. L’arbre de recherche est
défini par ses pointeurs qui sont définis en phase 7.
Chaque nœud (sauf d) dans G a un pointeur orienté vers un seul de ses parents dans
G, qui définit son parent unique dans T. Chaque chemin possible vers un nœud redécouvert
par l'algorithme est préservé explicitement dans G, un seul chemin distinct.
En gros, les nœuds dans OUVERT sont les feuilles de l'arbre T et les nœuds dans
FERME sont les autres nœuds.
Plus précisément, en phase 3 de la procédure, les nœuds dans OUVERT sont ces
feuilles de l'arbre de recherche qui n'ont pas encore été sélectionnés pour être développés.
Les nœuds dans FERME, soit des feuilles sélectionnées pour être développées qui n'ont pas
produit de successeurs dans le graphe de recherche, sont des de l'arbre de recherche qui ne
sont pas des feuilles. La procédure ordonne les noeuds dans OUVERT en phase 8 de sorte
que les meilleurs soient sélectionnés pour être développés en phase 4. Ce classement peut
être fondé sur diverses heuristiques ou sur divers critères arbitraires.
Chaque fois que le nœud sélectionné pour être développé est un nœud but, le
processus se termine avec succès. Le chemin qui réussit à relier le nœud de départ au nœud
but peut être re-parcouru (en sens) inverse en suivant la trace des pointeurs depuis le nœud
but vers d.
Le processus échoue lorsque toutes les feuilles ont été sélectionnées pour être
développées. (Certains nœuds peuvent ne pas avoir de successeurs du tout, il est donc
possible que OUVERT devienne vide). Un échec signifie que le but est inaccessible à
partir du départ.
La phase 7 nécessite un supplément d'explications. Si le graphe implicite dans
lequel on mène une recherche était un arbre, on pourrait être sur qu'aucun des successeurs
engendrés en phase 6 n'a été engendré précédemment.
Lorsque la procédure de recherche produit un nœud qu'elle a déjà engendré
auparavant, elle trouve un chemin différent de celui déjà enregistré dans l'arbre de
recherche. Nous désirons que l'arbre de recherche préserve le chemin de moindre coût
trouvé jusqu'à présent de d à n'importe lequel de ces nœuds. Lorsque le dernier chemin à
être découvert a un coût moins élevé que le chemin précédent, l'arbre de recherche est
ajusté en remplaçant le parentage du nœud réengendré par son parent dans le dernier
chemin. Si le parent dans T d'un nœud n dans FERME est modifié, c'est qu'un chemin
moins cher a été trouvé vers n. Celui-ci peut faire partie de chemins moins chers vers
certains des successeurs de n dans le graphe de recherche G; dans ce cas, un changement
du parentage dans T des successeurs de n dans G peut s’imposer.
4.3 Procédures aveugles de recherche avec graphe :
Si aucune information heuristique sur le domaine n'est utilisé dans le classement
des nœuds dans OUVERT, un plan arbitraire doit être utilisé à la phase 8 de l'algorithme
La procédure de recherche résultante est dite non informée ou aveugle.
Le premier type de recherche aveugle ordonne les nœuds dans OUVERT en ordre
décroissant suivant leur profondeur dans l'arbre de recherche. Les nœuds les plus profonds
sont placés en premier sur la liste. Les nœuds de profondeur égale sont ordonnés
arbitrairement. La recherche résultante de ce classement est appelée recherche en
profondeur d'abord. Pour empêcher que le processus de recherche ne s'égare sur des
chemins infructueux à l'infini, on impose une limite en profondeur. Aucun nœud dont la
profondeur dans l'arbre dépasse cette limite n'est engendré. Le second type de recherche
aveugle ordonne les nœuds dans OUVERT dans l'ordre croissant de leur profondeur dans
l'arbre de recherche. La recherche qui résulte d'un tel classement est appelée recherche en
largeur d'abord parce que le développement des nœuds dans l'arbre suit des contours de
profondeur égale.
4.4 Procédures de recherche heuristiques avec graphe :
Pour de nombreuses taches, il est possible d'utiliser des informations qui dépendent
du domaine d'application pour réduire du domaine d'application pour réduire la recherche.
Ce type d'information est généralement appelé information heuristique et les procédures de
recherche l'utilisant sont appelées méthodes heuristiques de recherche.
4.5 Utilisation des fonctions d'évaluation.
L'information heuristique peut être utilisée pour ordonner les nœuds dans OUVERT
à l'étape 8 de sorte que cette recherche s'étende vers les nœuds qui paraissent les plus
prometteurs. Pour pouvoir appliquer une telle procédure de classement, il nous faut une
méthode pour calculer la "promesse" d'un nœud appelée fonction d'évaluation.
Les fonctions d’évaluation reposent sur plusieurs idées :
♦ on a tenté de définir la probabilité qu'un nœud se trouve sur le meilleur chemin;
♦ on a proposé des mesures de distance ou de différence entre un nœud arbitraire
et l'ensemble des buts;
Nœud but
1 2 3 1 2 3 2 3
8 4 8 4 1 8 4
7 6 5 7 6 5 7 6 5
5 5 5
L'algorithme A
Définissons la fonction d'évaluation f pour que f(n), à n'importe quel nœud n,
estime la somme du coût du chemin optimal depuis le nœud de départ d au nœud n, plus le
coût du chemin optimal du nœud n au nœud but. Cela signifie que f(n) est une estimation
du coût du chemin optimal contraint de passer par le nœud n.
k(ni,nj) = coût réel du chemin entre ni et nj,
h*(n) = min{k(n,ti)} ti nœuds buts,
k n'est pas défini pour deux nœuds non reliés.
g*(n) = k(d,n)
f*(n) = g*(n) + h*(n)
f*(n) est donc le coût d’un chemin optimal commençant à d et contraint de passer
par n.
La fonction d'évaluation f est une estimation de f*. Notre estimation peut être
donnée par f(n) = g(n) + h(n)
g(n) est le coût des arcs traversés en suivant les pointeurs de n à d
h(n) est obtenue à partir de l'information heuristique.
Soient deux versions de A*, A1 et A2, on dit que l'algorithme A2 est plus
informé que A1 si pour tous les nœuds non but, h2(n) > h1(n). A1 développe toujours au
moins autant de nœuds que A2.
Une fonction heuristique h est monotone si pour tous les nœuds ni et nj, tq nj
est successeur de ni,
h(ni) - h(nj) <= c(ni, nj) avec h(t)=0
En écrivant cette condition sous la forme suivante
h(ni) <= h(nj) + c(ni, nj)
On constate qu'elle est similaire à l'intégralité triangulaire . Elle spécifie que
l'estimation du coût optimal vers un but à partir du nœud nj ne doit pas dépasser le coût de
l'arc de ni à nj plus l'estimation du coût optimal de nj jusqu'au but.
Pour le taquin à 9 cases, h(n)=w(n) est monotone.
Donc si la condition de monotonie est respectée, alors A* a déjà trouvé un
chemin optimal jusqu’au nœud sélectionné pour être développé. Autrement dit, si A*
sélectionne n pour le développer et si la condition de monotonie est respectée, g(n)=g*(n).
En plus si la condition de monotonie est respectée, les valeurs f de la séquence
de noeuds développes par A* sont croissantes.
Par contre si une formule P(x) est vraie pour au moins une valeur de x, alors on utilise le
quantificateur existentiel ∃ de la façon suivante. (∃x) P(x)
Toute expression obtenue en qualifiant une variable dans une fbf est aussi une fbf.
Une variable quantifiée est dite liée, dans l'autre cas elle est libre.
5.1.5 Propriétés des FBF
( ⎤X1) ~ X1
X1∨X2 ~ ⎤X1 ⇒ X2
(X1∧X2) ~ ⎤X1∨⎤X2
(X1∨X2) ~⎤ X1∧⎤X2 Loi de Morgan
X1∧ (X2 ∨ X3) ~ (X1∧ X2)∨(X1∧ X3)
X1∨ (X2∧ X3) ~ (X1∨X2) ∧ (X1 ∨X3) Distributivité
X1 ⇒ X2 ~ ⎤X2 ⇒ ⎤X1 Contraposition
(∃ x) P(x) ~ (∀x) [⎤P(x)]
(∀ x) P(x) ~ (∃x) [⎤P(x)]
(∀x) P(x) ~ (∀y) P(y)
(∃ x) P(x) ~ (∃ y) P(y)
Donc de ces 2 équivalences, on peut dire que la variable quantifiée est une variable muette.
C'est à dire qu'elle peut être remplacée par une autre variable qui n'est pas encore apparue dans
l'expression.
5.1.6 Règles d'inférence, Théorème et Démonstrations
L'inférence est le processus permettant de donner des conclusions à partir d'hypothèses. Une règle
d'inférence appliquée à un fbf produit une nouvelle fbf qu'on appelle Théorème. Une séquence
d'application de règles d'inférence utilisées dans la dérivation d'une fbf constitue la démonstration du
théorème.
Le calcul des prédicats donne lieu à beaucoup de règles d'inférence.
Modus Ponen : P, P⇒ Q dérive Q
Modus Tollen : ⎤Q, P⇒ Q dérive ⎤P
Transitivité : P⇒ Q, Q⇒ R dérive P⇒ R
Simplification : P ∧Q dérive P
Conjonction : P,Q dérive P ∧Q
Spécification Universelle : (∀x) P(x) dérive P(y)
Spécification Existentielle : ( ∃x) P(x) dérive P(x)
Exemple
On a les constantes suivantes : Jeannot et Sauteur
On a aussi les prédicats :
♦ Unaire : CHEVAL, CHIEN, LEVRIER, LAPIN
♦ Binaire :PLUS_VITE
On a aussi les fbf suivantes :
♦ ∆1 : (∀ x), (∀y) [ CHEVAL(x) CHIEN(y) PLUS_VITE(x,y) ]
♦ ∆2 : (∃y) [ LEVRIER(y) ( ∀z) [ LAPIN(z) PLUS_VITE(y,z) ]]
♦ ∆3 : ( ∀y) [ LEVRIER(y) CHIEN(y)]
♦ ∆4 : ( ∀x)( ∀y)( ∀z)[ PLUS_VITE(x,y) PLUS_VITE(y,z) PLUS_VITE(x,z)]
♦ ∆5 : CHEVAL( sauteur)
♦ ∆6 : LAPIN(Jeannot)
On peut démontrer que : PLUS_VITE (sauteur, Jeannot)
5.2 L'Unification
L'unification est un processus extrêmement important en IA. .Elle consiste à découvrir pour un
ensemble de phrases donné une substitution σ telle que toutes les phrases de l'ensemble sont identiques
après substitution; σ est appelé SUBSTITUTION UNIFICATRICE OU UNIFICATEUR .
Une substitution est représentée par σ ={t1/v1,t2v2,........,tn/vn} avec ti/vi signifie que le terme ti est
substitué par la variable vi.
Pour indiquer l'instance de substitution d'une expression E en utilisant une substitution σ nons
écrivons Eσ
La composition de deux substitutions σ1 et σ2 est notée σ 1 σ 2(σ 2o σ 1) qui est la
substitution obtenue en appliquant σ2 aux termes de σ 1 et en ajoutant ensuite toute paire de σ 2 ayant
des variables qui n'apparaissent pas parmi les variables de σ 1. On peut démontrer qu'appliquer σ 1 et σ
2 successivement à une expression L revient à appliquer σ 1 σ 2 à L. Ce qui signifie que (L σ 1) σ
2=L(σ 1 σ 2). On peut démontrer également que la composition de substitution est associative. Par
contre, elle n'est pas commutative.
Un ensemble d'expression {E1}unifiable peut avoir plusieurs unificateurs .Parmi ces unificateurs,
il existe un noté w tel que :
si σ est un unificateur de {Ei} alors il existe une substitution τ telle que {Ei} σ = {Ei}ωτ, ω est
l'unificateur le plus simple ou le plus général de {Ei} noté upg.
Il y a de nombreux algorithmes qui peuvent être utilisés pour unifier un ensemble fini
d'expressions unifiables et renvoient ECHEC lorsque l'ensemble ne peut être unifié. La procédure
récursive UNIFIER décrite de façon informelle ci-dessous donne une idée générale sur la manière
d'unifier un ensemble de deux expressions qui ont une structure de liste.
Procédure récursive UNIFIER (E1,E2)
Si E1 ou E2 est un atome ( c'est à dire un prédicat, une fonction, une constante, une négation ou
une variable) échanger les arguments E1 et E2 (si nécessaire), de sorte que E1 soit un atome , et faire:
DEBUT
Si E1 et E2 sont identiques , renvoyer NIL
Si E1 est une variable , faire:
DEBUT
Si E1 apparait dans E2 , renvoyer {E1/E2}
renvoyer ECHEC
FIN
Si E2 est une variable, renvoyer {E1/E2}
envoyer ECHEC
FIN
F1 ← le premier élément de E1, T1 ← le reste de E1
F2 ← le premier élément de E2, T2 ← le reste de E2
Z1 ← UNIFIER (F1,F2)
Si Z1 = ECHEC , renvoyer ECHEC
G1 ← résultat de l' application de Z1 à T1
G2 ← résultat de l' application de Z1 à T2
Z2 ← UNIFIER (G1,G2)
SI Z2 = ECHEC , renvoyer ECHEC
Renvoyer la composition de Z1 et Z2 .
5.3 Resolution
5.3.1 Clauses
La résolution est une règle d'inférence importante qui peut être appliquée à une certaine classe de
fbf appelées clauses.
Une clause est définie comme une fbf formée d'une disjonction de littéraux.
Toute fbf du calcul des prédicats peut être transformée en un ensemble de clauses de la façon
suivante:
Procédure RESOLUTION
CLAUSES ← S
Jusqu’à ce que NIL soit dans CLAUSES, faire
début
sélectionner dans CLAUSES deux clausses distinctes ci et cj qui peuvent être
résolues
calculer une résolvante rij de ci et cj
ajouter rij dans CLAUSES
fin
existentiellement et la découverte de valeurs ou instances, pour ces variables. Dès lors, il se pourrait que
nous voulions savoir si une fbf telle que (∃x) W(x) découle logiquement de S, et si c’est le cas; nous
voulions une instance de x qui existe. Trouver une démonstration de (∃x) W(x) à partir de S est un
problème courant de théorèmes en calcul des prédicats, mais produire une instance satisfaisante pour x
requiert une méthode de démonstration constructive.
Exemple
Soit le problème suivant : Si Fido va partout où Jean va et si Jean est à l’école, où est Fido?
Ce problème contient deux faits et une question dont la réponse peut être déduite de ces faits.
Les faits peuvent être traduits par un ensemble S de fbf
(∀x) [ A(Jean, x) ⇒ A(Fido, x)] et A(Jean, ECOLE)
On peut répondre à la question “ Où est Fido ” ? si on démontre d’abord que la fbf (∃x) A(Fido, x)
découle logiquement de S et qu’on trouve ensuite une instance de x qui existe .
Donc, pour répondre” à la question il faut franchir deux étapes.
1ère étape Transformer la question en une fbf but contenant un quantificateur existentiel tel que la
variable à la question. Si la question peut être résolue à partir des faits donnés, la fbf but créée de cette
manière découlera logiquement de S. La réfutation par résolution est obtenue de la façon habituelle.
2ème étape Cette étape consiste à extraire l’arbre de réfutation obtenue à l’étape 1 une réponse à la
question. Extraire une réponse implique la conversion d’un arbre de démonstration avec une formulation
à la racine qui peut être utilisée comme réponse.
Pour cela :
- Ajouter à chaque clause découlant de la négation de la fbf but, sa propre négation
- Suivant la structure de l’arbre de réfutation, accomplir les mêmes résolutions
qu’auparavant jusqu’à ce qu’une clause soit obtenue à la racine.
- Utiliser la clause à la racine comme réponse
Cette méthode est très simple, mais elle pose quelques problèmes pour certain cas, en particulier si
la fbf but contient des quantificateurs universels. Voici le processus d’extraction le plus général :
- Pendant la phase (ou étape) 1, marquer les sous-ensembles d’unification ie les littéraux
qui sont unifiés dans chaque résolution.
- Substituer toute fonction de Skolem apparaissant dans les clauses qui résultent de la
négation de la fbf but par des nouvelles variables.
- Transformer les clauses qui résultent de la négation de la fbf but en tautologies.
- Un arbre de démonstration modifié modélisant la structure de l’arbre de réfutation
originale est produit. Chaque résolution dans l’arbre modifié utilise un ensemble d’unification déterminée
par l’ensemble d’unification utilisé par la résolution correspondante dans l’arbre de réfutation.
- La clause à la racine de l’arbre modifié est la formule réponse extraite par ce processus.