La Programmation Logique

avec PROLOG...

...La programmation Made In France

Qu'est-ce que c'est ?

H :- B1, …, Bn.

Paradigme Déclaratif

Un langage inscrit dans le

Une grande méthode de programmation.

P.O.O

Impératif

Fonctionnelle

...

"Rule-Based"

Définir une application par un ensemble de faits élémentaires et des conséquences plus ou moins directes.

swpl ?> - query(X)
> - result.

Base de connaissances

moteur d'inférence

Un langage non-déterministe

construit et pensé pour l'IA

Une très très longue histoire !

01 001 0111 0101 0011
?- write('Hello World!'), nl.
	Hello World!
	oui.

L'idée à 

la BASE de

l'informatique et des mathématiques modernes

1930s

λ-calcul

Jacques Herbrand

1908 - 1931

"modèle de Herbrand-Gödel"

un mécanisme d'évaluation symbolique

Systèmes récursif

Alonzo Church

1903 - 1995

1960s

John Alan Robinson

1930 - 2016

Cordell Green

1903 - 1995

un raisonnement par l'absurde
sous forme
clausale

if -> then -> else -> ...

1er programme logique en LISP

1964-69

Le BOUM de l'IA et les grands débats

John McCarthy

représentation déclarative

Robert Kowalski

1927 - 2011

1941 - 

1964-69

Le BOUM de l'IA et les grands débats

Marvin Lee Minsky

représentation procédurale

Seymour Papert

1927 - 2016

1928 - 2016

1964-69

Le BOUM de l'IA et les grands débats

Pat Hayes

1944 -

un langage équationnel

Procédure de réduction des buts

1970s

Alain Colmerauer

1941 - 2017

3

ans

Théorisé

Créé

1976

Portage sur micro-ordinateur

1977

Premier compilateur

1982

PROLOG II - équations et infini

1987

PROLOG III - listes et booléens

1996

PROLOG IV - version finale

Gödel

Oz

PyPy

Comment ça marche ?

Fonctionnement Logique

On ne s’occupe pas de la manière d’obtenir le résultat ;
par contre, le programmeur doit faire la description du problème à résoudre en listant les objets concernés, les propriétés et les relations qu’ils vérifient.

Ensuite, le mécanisme de résolution (pris entièrement en charge par le langage) qui est général et universel, parcourt de façon non déterministe le fichier et liste toutes les possibilités du problème et peut donc retourner plusieurs solutions.

Des concepts pour différents problèmes

Contrôle Logique

Algorithme = Logique + Contrôle

Problème -> Solution

Résolution d'arbres "and-or"

Négation par l'échec

H :- A1, …, An, not B1, …, not Bn.

H if A1 and … and An and not B1 and … and not Bn.

Représentation des connaissances

Clauses à cornes + raisonnement à rebours

Atomes

Les textes constants constituent des atomes.

Un atome est ordinairement constitué d'une chaîne de lettres, nombres et traits bas (_), commençant par une lettre minuscule.

Nombres

Les implémentations courantes de PROLOG ne distinguent pas les nombres entiers des flottants (et ce peut importe leur taille).

Variables

Les variables sont indiquées en utilisant un ensemble de lettres, nombres et caractères de soulignement et commençant avec une lettre majuscule.

​Elles peuvent aussi être anonymes (commençant par un tiret bas '_') et jouent ainsi le même rôle que x et y en algèbre.

Termes Composés

Un terme composé consiste en une tête (aussi appelée foncteur), qui doit être un atome, et des paramètres sans restriction de type. Le nombre de paramètres, nommé arité du terme, est en revanche significatif. Un terme composé est identifié par sa tête et son arité, et habituellement écrit comme foncteur/arité.

Listes

Une liste n’est pas un type de données isolé, mais est définie par une construction récursive (utilisant le foncteur '.' d'arité 2, c'est donc au niveau de la représentation interne un terme composé)

Prédicats

Il est l'unité principale de ce langage.

Il s'agit d'une expression (toujours vraie) qui vient remplir la base de connaissances ; il peut être vu comme une règle guidant l’exécution du programme.

% <!> Fichier example.pl
chat(tom).


% <!> REPL swi-prolog
? - chat(tom).
	oui.
    
? - chat(X).
	X = tom;
	fail.
    
? - chat(vim).
	fail.

Les Prédéfinis

Ensemble des prédicats inscrit nativement dans le langage et permettant les activités de routine :

  • évaluation numérique
  • actions E/S...
% <!> affiche un message sur la console
?- write('Hello World!'), nl.
	Hello World!
	oui.

Règles

Instructions définissant les liens entre les différents éléments de notre base de connaissances (variables, foncteurs, constantes ...)

% <!> Le symbole :- corrrespond à un si
lumière(on) :- interrupteur(on).

% <!> Le symbole , corrrespond à un &&
père(X,Y) :- parent(X,Y), mâle(X).

% <!> Le symbole ; corrrespond à un &&
parent(X, Y) :- père(X, Y) ; mère(X, Y).

H :- B1, …, Bn.

H -> la tête de la règle (son nom)

Bx -> le corps de la règle

Prédéfinis de comparaison

Eléments logiques de comparaison utilisés lors de l'écriture des règles.

  • T1  ==  T2 % réussit si T1 est identique à T2

  • T1  \== T2 % réussit si T1 n'est pas identique à T2

  • T1  \=  T2 % réussit si T1 n'est pas unifiable à T2

  • T1  @<  T2 % réussit si T1 est inférieur à T2

  • T1  @=< T2 % réussit si T1 est inférieur ou égal à T2

  • T1  @>  T2 % réussit si T1 est supérieur à T2

  • T1  @>= T2 % réussit si T1 est supérieur ou égale à T2

Un langage proche de l’Humain

% <!> fichier liens_de_parentés.pl

% définition de la fraternité
frère_ou_sœur(X,Y) :- parent(Z,X), parent(Z,Y), X \= Y.

% définition de la parenté
parent(X,Y) :- père(X,Y).
parent(X,Y) :- mère(X,Y).

% définition de la maternité
mère(trude, sally).

% définition de la paternité
père(tom, sally).
père(tom, erica).
père(mike, tom).


% <!> REPL swi-prolog
? - frère_ou_sœur(sally, erica)
	oui.

Réversibilité

En général, PROLOG n'impose pas de statut aux paramètres d'un prédicat :
ce ne sont pas des paramètres 'donnés' ou 'résultats', ou même 'donnés/résultats', leur statut est indifférent
a priori et sera défini en fonction des requêtes, et parfois des prédéfinis utilisés.

Ceci permet souvent la définition de prédicats réversibles : les requêtes fermées, fournissant des résultats à partir des données, pourront être inversés en requêtes ouvertes, cherchant les données menant à un résultat positif.

% <!> Requete fermée (vrai ou faux) :
age(capitaine, 45)

% <!> Requêtes ouvertes :

% demande quel est l age X du capitaine
age(capitaine, X)

% demande quel capitaine à 45 ans
age(X, 45)

En résumé, PROLOG se distingue par :

PROLOG dans l'industrie

WATSON

Apache UIMA (Unstructured Information Management Architecture) framework

"We required a language in which we could conveniently express pattern matching rules over the parse trees and other annotations (such as named entity recognition results), and a technology that could execute these rules very efficiently. We found that Prolog was the ideal choice for the language due to its simplicity and expressiveness."

Et pour le reste ?

MERCI !