Corrigé Devoir Surveillé

Download Report

Transcript Corrigé Devoir Surveillé

Ann´
ee : 2014/2015
Semestre 1
PARCOURS : Master 2
UE : Syst`emes Experts
´
Epreuve
: Devoir surveill´e
Date : 15 Octobre 2015
Dur´
ee : 2 heures
Documents : autoris´es
Epreuve du Prof. Kaninda Musumbu
SUJET + CORRIGE
Avertissement
Question
Points
Logique de pr´edicats
5
— L’espace laiss´e pour les r´eponses est suffisant
Question du cours
(sauf si vous utilisez ces feuilles comme brouillon,
Ecriture de programme Prolog
ce qui est fortement d´econseill´e).
— En cas de besoin d’espace suppl´ementaire, vous Lecture et compr´ehension du code
pouvez utiliser le verso des feuilles.
Total:
Exercice 1 : Logique de pr´
edicats
Score
5
4
6
20
(5 points)
(a) (2 points) Traduire la phrase suivante en Logique :
≪ Certains ´
etudiants assistent `
a tous les cours, et pourtant ils ne r´eussisent pas tous aux examens. ≫
∃x(etudiant(x) ∧ ∀y cours(y) ∧ (¬(assiste(x, y) → reusir(x, y))))
(b) (1 point) Ecrire en Prolog la traduction que vous avez donner `a la question ci-dessus.
existe(X) :- etudiant(X) ,
forall(cours(Y), (assiste(X,Y), not(reussir(X,Y)))).
(c) (2 points) Appliquer l’algorithme de Quine, vu en cours, pour v´erifier la formule suivante et dites si
c’est une tautologie, une contradiction ou une formule valide.
((P =⇒ Q) ∧ (Q =⇒ R)) =⇒ (Q =⇒ ¬P )
On choisit Q car proposition ayant le plus d’occurence
Pour Q = 0 on obtient la branche de droite
((P =⇒ ⊥) ∧ (⊥ =⇒ R)) =⇒ (⊥ =⇒ ¬P )
On applique les simplifications
(¬P ∧ R) =⇒ ⊤) ≡ ⊤
Pour Q = 1 on obtient la branche de gauche
((P =⇒ ⊤) ∧ (⊤ =⇒ R)) =⇒ (⊤ =⇒ ¬P )
On applique les simplifications
(⊤ ∧ R) =⇒ ¬P ) ≡ (R =⇒ ¬P )
On choisit R ou P car proposition ayant le mˆeme nombre d’occurence
R =⇒ ¬P
R=1
⊤ =⇒ ¬P
⊥ =⇒ ¬P
¬P
P =1
¬⊤
⊥
En conclusion c’est une formule valide
R=0
⊤
P =0
¬⊥
⊤
UE Syst`emes Experts
Ann´ee 2014/2015
Exercice 2 : Question du cours
(5 points)
(a) (1 point) Dans l’´ecriture de programmes Prolog, peut-on toujours se passer du “CUT” ?
Sinon expliquer le pourquoi ?
On peut se passer du “CUT” , mais pour des raisons d’efficacit´e et de concision d’´ecriture, l’usage de
la coupure est incontournable, ou bien si l’on veut supprimer le non-determinisme.
(b) (4 points) On considere le programme :
a(1).
a(2).
b(3).
b(4).
c(5).
c(6).
test_cut(R):- a(X),b(Y),c(Z), R is X*Y*Z.
1. Quelles sont les r´eponses donn´ees par l’interpreteur Prolog `a la requˆete test cut(X). dans l’ordre ?
15,18,20,24,30,36,40,48
2. Pour changer cet ensemble de r´eponses, on s’autorise ´a modifier le programme : l’unique modification autoris´
ee est l’insertion d’une coupure dans le corps de la r`
egle qui d´
efinit
test cut.
Pour chaque ensemble de r´eponses de la liste suivante donner la version modifi´ee du programme
qui produit exactement cet ensemble `a la requˆete test cut(X)., si une telle version existe.
(a) 15,18.
test cut(R) :- a(X),b(Y), !,c(Z), R is X*Y*Z.
(b) 15,18,20,24.
test cut(R) :- a(X), !, b(Y),c(Z), R is X*Y*Z.
(c) 15,18,30,36.
Cette version n’existe pas.
(d) 15.
test cut(R) :- a(X),b(Y),c(Z), !, R is X*Y*Z.
Page 2 sur 4
UE Syst`emes Experts
Ann´ee 2014/2015
Exercice 3 : Ecriture de programme Prolog
(4 points)
(a) On voudrait extraire de la base “biographie de rois de France”, les noms de tous les princes qui ont eu
le plus d’enfants dans la famille.
(b) (4 points) Pour cela, il vous est demand´e d’´ecrire le pr´edicat suivant :
plus productif(P,N) qui donne, sous forme d’une liste tri´ee, les noms de princes v´erifiant la propri´et´e
d´ecrite ci-dessus.
N.B. n’hesitez pas de d´efinir des pr´edicats auxilliaires dont vous estimez avoir besoin.
prince(X) :- bio(X,_,_,_,_,_).
enfant(E,P,M):- bio(E,_,_,_,P,M).
nombreEnfant(P,N):- findall(X,enfant(X,P,_),L), length(L,N).
maxEnfant(P,N):- prince(P), nombreEnfant(P,N),
forall(
(prince(K), nombreEnfant(K,M)),
N > M.
)
plus_productif(P,N) :- setof(X, maxEnfant(X,N),P).
Page 3 sur 4
UE Syst`emes Experts
Ann´ee 2014/2015
Exercice 4 : Lecture et compr´
ehension du code
(a) myst_aux(N,[N]):- N < 2,!.
myst_aux(N,[R|L]):- R is N mod 2, N1 is N // 2,
myst_ss1(N1, R):-
(6 points)
myst_aux(N1, L).
myst_aux(N1, L), reverse(L,R).
myst_ss2([_|_],Q):- final(Q),!, writeln(’KO’), fail.
myst_ss2([],Q):- final(Q),
writeln(’OK’),!; writeln(’KO’), fail.
myst_ss2([X|L],Q):- trans(Q,X,Q1), myst_ss2(L,Q1).
trans(a,0,a).
trans(a,1,b).
trans(b,0,a).
trans(b,1,c).
init(a).
final(c).
traite(X):- number(X),!, myst_ss1(X,N), init(Q),myst_ss2(N,Q);
writeln(’Donnee invalide’).
mystere :- write(’Entre une valeur ’), read(X), traite(X).
(b) (4 points) Justifier votre r´eponse : qu’est cens´e d´efinir
1. traite(X). V´erifie si la donn´ee est valide ou pas. Si oui, on poursuit le traitement, sinon, on arrˆete
tout.
2. myst ss1(X,N). Convertit la donn´ee de la base d´ecimale en binaire.
3. myst ss2(N,Q). bas´e sur un automate fini, reconnait certains mots binaires, en partant de l’´etat
initial.
4. mystere. pr´edicat principal qui permet d’initialiser le d´ebut du traitement avec la donn´ee fournie
par l’utilisateur.
(c) (2 points) Caract´erisez les objets pour lesquel le syst`eme affiche OK
il reconnait d’abord 3 et ensuite en particulier une classe des nombres d´ecimaux repr´esent´es par la
formule suivante
2i + 3, i = 3 · · · ∞
Sinon en g´en´eral, il reconnait les nombres d´ecimaux dont la d´ecomposition en binaire respecte le langage
rationel suivant
(10)∗ .11
FIN
Page 4 sur 4