Séance 11 : Initiation à Prolog Flashcards
(33 cards)
Qu’est-ce que la logique procédurale?
La résolution d’un problème avec une suite d’opérations qui permet d’obtenir la solution voulue
ex: Python texte -> procédure -> résultat
Comment est appliquée la logique procédurale? Exemples d’applications?
Par la manipulation et la transformation d’unités
ex: trier les mots d’un texte
extraire des contextes
gestion d’une base de donnée
V ou F : la procédure en logique procédurale dépend de la nature de l’objet à traiter.
Faux, elle en est indépendante. L’ordinateur n’a pas besoin de savoir ce qu’est un mot pour calculer sa fréquence dans un texte. Vs prolog qui a besoin de connaissances, comme nous.
Quelles sont les limites de la logique procédurale? Comment les traite-on en Prolog?
- Impossible de traiter des relations (représentation de connaissances)
ex: Jean est le père de Michel.
=> faits en Prolog
- Impossible de faire des inférences (nouvelles connaissances à partir de connaissances actuelles : exploitation de relations)
ex: Si une personne X et une personne Y – X et Y étant des personnes différentes - ont le même père ou la même mère alors X est le frère ou la sœur de Y et Y est le frère ou la sœur de X.
=> règles en Prolog
Quel langage de programmation utilise Prolog? Que permet-il de faire?
Le langage de programmation déclaratif.
Il fait appel aux mécanismes d’inférence de la logique des prédicats :
- Permet de représenter des relations et de faire des inférences (déduire nouvelles connaissances à partir d’actuelles sans qu’elles soit explicitées)
(D’où son nom «Programmation en logique».)
Prolog est-il efficace? puissant?
Très inefficace: les programmes sont lents.
Très puissant: développement rapide de mécanismes très complexes.
Quand on utilise Prolog? 2 exemples?
Pour des problèmes exprimés sous forme d’objets et de relations
= représentation de connaissances
ex: analyse syntaxique (on définit connaissances de base (catégories et syntagmes) et après on peut inférer quels agencements de mots font quels syntagmes
ex: création d’un arbre généalogique (on définit qui est le père, mère de qui et va inférer frère soeur etc)
Qu’est-ce qu’un terme dans Prolog?
Peut être une variable, un atome, un fait, une règle…
V ou F : Une variable est un terme.
Vrai, terme qui peut contenir un terme (car peut contenir un atome, un fait, une règle, un nombre, une structure)
Quels sont les 2 types de termes?
Inconditionnels (faits)
femme(marie).
homme(jean).
Conditionnels (règles)
parents(X,Y,Z) :-
mere(X,Z), pere(Y,Z).
V ou F ; L’ordre est important dans Prolog.
Faux, il est arbitraire. L’ordre des atomes doit toujours être le même par exemple (ex: parents(marie,jean,jude) => tj mère, père, enfant))
Différemment à Python, c’est comme si tout se fait en même temps.
V ou F : La signification d’un terme est pas important dans Prolog.
Faux, il est arbitraire (ex: patient peut référer à la patience ou la maladie), mais est important, car on doit toujours garder la même.
Qu’est-ce que l’humain fait quand il dit “Jean possède un livre”. Prolog fait-il la même chose?
- Il identifie deux objets (livre et jean)
- Il exprime une relation (appartenance)
=> donc, fait appel aux connaissances du lecteur ou de l’interlocuteur sur la nature des objets et sur les propriétés de la relation (unidirectionnelle (le livre possède pas jean) vs bidirectionnelle (pour frère ex))
Prolog fait la même chose, c’est sa grande force.
V ou F : Les objets doivent être nommés explicitement dans une relation. Ex?
Faux, ‘interlocuteur, l’utilisateur du programme comprend les informations implicites en fonction de ses connaissances et du contexte.
=> c’est l’esprit de Prolog, il fait appel aux connaissances de l’utilisateur
Exemple : La pomme est bonne
On ne dit pas pour qui (ou pour quoi) la pomme est bonne.
Il peut s’agir d’un être vivant mais pas nécessairement. La pomme (au sens du marché de la pomme) pourrait être bonne pour l’économie.
Le sens précis de «bonne» n’est pas explicite.
Quelles sont les propriétés des variables?
Elles commencent par une majuscule.
Leur portée est uniquement à l’intérieur d’un terme
ex:
est_mere(X) :- mere(X,Y).
est_pere(X) :- pere(X,Y).
*Tout est compartimenté, les X et Y ne sont pas les mêmes d’une ligne à l’autre
V ou F : Dans Prolog, les variables sont manipulées directement.
Faux, sauf dans des cas extrêmement rares. Leur contenu est inféré des faits et des règles.
=> acquierent leur valeur automatiquement
Comment appelle-t-on le regroupement des faits et des règles ?
Les connaissances
vs Les questions
Qu’est-ce que Prolog fait quand on pose la question : Est-ce que Jean possède un livre?
- Il vérifie si les objets existent (a-t-il jean, a til livre dans ses connaissances)
- Il vérifie si la relation de possession existe ( a-til la possession, ou connaissances dans une autre comme jean achète un livre)
Quels sont les 3 niveaux de la programmation en Prolog?
- Identifier des objets (ex: pierre(homme). et des relations père(pierre,marie)).
- En Prolog, on dit «déclarer des faits»
(construire mon dict, lui donner des connaissances)
- Inférer de nouvelles relations à partir des «faits» (ex: estpère(X) : père (X, _))
- En Prolog, on dit «définir des règles»
(créer des nouvelles relations et connaissances a partir des faits de bases donnés en 1)
3.Poser des questions à propos d’objets et de leurs relations (ex: estpère(X)… X = Pierre).
En Prolog, on dit «interroger l’interpréteur» ou «converser»
(poser des questions à prolog sur nos objets et relations)
Qu’est-ce que représente la virgule en Prolog?
Une conjonction, signifie que les deux conditions sont obligatoires (représente un ET)
ex: s_aime(X,Y) :- aime(X,Y), aime(Y,X).
s’aiment X et Y si ils s’aiment un et l’autre.
Que représente le point-virgule en Prolog?
Représente une disjonction inclusive
Signifie qu’au moins une des deux conditions doit être vraie (OU non exclusif)
ex: aime(X,vin) :- aime(X, vinrouge) ; aime(X, vinblanc).
X aime le vin s’il aime le vin blanc ou le vin rouge.
Créer les règles générales suivantes :
enfant(X,Y) qui exprime que X est l’enfant de Y
fils(X,Y) qui exprime que X est un fils de Y
fille(X,Y) qui exprime que X est une fille de Y
frereousoeur(X,Y) qui exprime que X est le frère ou la soeur de Y (pas demis)
frere(X,Y) qui exprime que X est un frère de Y
soeur(X,Y) qui exprime que X est une soeur de Y
enfant(X,Y) :-
pere(Y,X).
enfant(X,Y) :-
mere(Y,X).
fils(X,Y) :-
enfant(X,Y),
homme(X).
fille(X,Y) :-
enfant(X,Y),
femme(X).
frereousoeur(X,Y) :- pere(P,X), pere(P,Y), mere(M,X), mere(M,Y), X \== Y.
frere(X,Y) :-
frereousoeur(X,Y),
homme(X),
X == Y.
soeur(X,Y) :-
frereousoeur(X,Y),
femme(X),
X == Y.
À quoi servent les règles?
Servent à inférer des relations entre les faits
À quoi sert compilebuffer?
Transmettre à l’interpréteur