La programmation en logique

Définition

Les langages de programmation en logique sont des langages où il ne s'agit pas d'écrire des instructions de résolution d'un problème.
Il s'agit simplement d'abord de créer une base ce connaissances(des faits et des règles) et ensuite de demander à un moteur d'inférences(lui rédigé dans un langage de programmation classique) de satisfaire un but entré par l'utilisateur.
Le plus connu est PROLOG créé en 1990 par Alain COMERAUER à L'université de Marseille-Luminy et ses dérivés(TURBO-PROLOG, …)

Les causes de Horn
Le chercheur britannique KOWALSI a prouvé qu'en utilisant en logique les clauses de Horn c'est-à-dire des théorèmes de la forme "si conditions alors .conclusion " on peut effectivement résoudre un certain nombre de problèmes.
Une clause de HORN est de la forme $A_1 \ et \ A_2 \ et \ \cdots \ et \ A_n \longrightarrow B$ où les $A_i$ et $B$ sont des termes c'est-à-dire soient des constantes, soient des variables, soient des expressions de la forme $p(t_1,t_2,\cdots,...,t_n)$ où $p$ est appelle un prédicat utilisant des termes $t_1\cdots,t_n$
Par exemple, en Prolog on les écrit dans l'autre sens : heureux(ti_sonson) \longrightarrow aime(ti_sonson, la logique)
Ce type de clause s'appelle une règle qui dispose d'une tête : heureux(ti_sonson)
et d'une queue : aime(ti_sonson, la logique).
Une clause sans queue s'appelle un fait. Par exemple :
heureux(ti_bouboule).

Moteurs d'inférences
Les moteurs d'inférences fonctionnent soit en chaînage avant, soit en chaînage arrière.

Exemple de chaînage avant :

Faits :
courant passe
lampe neuve

Règles :
Si lampe neuve alors lampe OK
Si courant passe et lampe OK alors lampe s'allume

Réponse :
Lampe OK puis Lampe s'allume.

l'utilisateur rentre des faits dans une base.
Le moteur d'inférences déduit de nouveaux faits qui sont de conséquences conséquences des règles agissant sur les faits initiaux.
Ces nouveaux faits viennent alors enrichir la base de faits.
Dès qu'un faits élémentaires entrés par l'utilisateur dans la base de faits.
La conséquence déduite d'une règle vient ensuite enrichir la base de faits.
Dès qu'un tour complet d'examen des règles n'a entraîné la déduction d'aucune nouvelle conséquence, le fonctionnement du processus de chaînage avant s'arrête.

Exemple de chainage arrière



Le langage PROLOG est un langage de programmation déclarative. On représente dans un formalisme adéquat des connaissances (sous forme de claususe de Horn : faits et règles) sur un sujet donné, à partir desquelles seront déduites par un moteur d'inférences des réponses aux questions de l'utilisateur.
Le moteur d'inférences de la machine Prolog fonctionne en chaînage arrirrère ou "backtracking"