QUESTION 1 :
- Lancez l'applette "Travaux
Pratiques ProPlog" en cliquant sur le lien.
- Vérifiez le bon fonctionnement en chargeant
l'exemple Ours (menu Exemples>Ours)
- demandez une exécution en chaînage avant (menu
Semantique>chaînage avant puis menu Menu>Execute)
- demandez une exécution en chaînage arrière pour la
question ?- baleine. (menu Semantique>chaînage arrière et poser la question
?- baleine. dans la ligne apparue en dessous des fenêtres puis 'Enter' ou
menu Menu>Execute)
(Répondre par le listing complet des 2 fenêtres :
copier/coller dans une table ou image des fenêtres)
Reprendre maintenant le Programme du DH01 :
destCDI_1.pl
dest :- cycle_Probatoire_CDI , uv_Approfondissement , uv_SocioEconomique.
cycle_Probatoire_CDI :- uvCDI1 , uvCDI2 , uvCDI3 , uvCDI4.
uvCDI2 :- uv16472.
uvCDI3 :- uv19339.
uvCDI4 :- uv16392.
uvCDI1 :- uv10863 , uv10872.
uvCDI1 :- uv10863 , uv16883.
uvCDI1 :- uv10863 , uv16767.
uvCDI1 :- uv10863 , uv19786.
|
En ProPlog les procédures (groupe de clauses ayant
leurs parties gauches identiques) comportant une seule règle peuvent supprimées
après avoir substitué la suite d'atomes de leur partie droite à l'atome de leur
partie gauche partout ailleurs dans le programme.
Exemple : on peut supprimer uvCDI2 :- uv16472. à
condition d'avoir remplacé
cycle_Probatoire_CDI :- uvCDI1 ,
uvCDI2 , uvCDI3 , uvCDI4.
par
cycle_Probatoire_CDI :- uvCDI1 ,
uv16472 , uvCDI3 , uvCDI4.
D'autre part l'atome uv10863 se retrouve, dans chacune
des règles de la procédure uvCDI1 , alors la spécification de uvCDI1 peut être
remplacée par :
uvCDI1 :- uv10863 , choix_Probatoire_CDI.
choix_Probatoire_CDI :- ... /* à définir */
QUESTION 2 : Transformer, simplifier le programme en
fonction des deux remarques précédentes (vous conserverez toutefois la règle
unique cycle_Probatoire_CDI :- ...) et enregistrer ce nouveau programme dans le
fichier dest_CDI_2.pl. (Ne pas oublier de définir choix_Probatoire_CDI)
(Répondre par un listing du Programme.)
QUESTION 3 : Quel est la base de Herbrand du
nouveau programme ?
Relisez soigneusement les contraintes syntaxiques pour
la rédaction des règles dans l'espace de travail de l'applet (fenêtre de
gauche). Notamment, ATTENTION,PAS d'espace après les points (.)
Nettoyer l'espace de travail (menu Menu>Clear). Chargez
le programme obtenu à la question 2 et les acquis de Bertrand (copier/coller
dans la fenêtre de Gauche).
L'étudiant Bertrand possède MOCA B2, le Projet CDI ,
I.A. B4 , Système et Réseaux B4. Enregistrer ces acquis dans le fichier
acquis_Bertrand.pl
QUESTION 4 : demandez une exécution en chaînage
avant du programme ainsi obtenu et demandez la réponse à question ?- dest. en
chaînage arrière.
(Répondre par le listing ou une image des 2 fenètres)
QUESTION 5 : modifier l'espace de travail
(couper/coller) pour prendre maintenant en compte les acquis de Pierre et
répondre à la question
?- cycle_Probatoire_CDI. et demander une
exécution en chaînage avant du programme ainsi obtenu.
(Répondre par le listing ou une image des 2 fenètres)
L'étudiant Pierre possède MOCA B2, le Projet CDI ,
I.A. B4 , MOCA B1 , Système et Réseaux B4 , CDL_B3. Enregistrer ces acquis dans
le fichier acquis_Pierre.pl
QUESTION 1 :
Vérification du bon fonctionnement de l'applette "Travaux Pratiques ProPlog".
1°/ Exécution en chaînage avant.
% Ours.pl
% base de règles
mammifere :- allaite.
dans_foret :- fourrure.
oiseau :- a_des_plumes.
ours :- lourd, dans_foret,mammifere.
baleine :- lourd, dans_l_eau,mammifere.
% base de faits
lourd.
fourrure.
allaite.
|
Tp1 = {allaite,fourrure,lourd}
Tp2 = {allaite,dans_foret,mammifere,fourrure,lourd}
Tp3 = {allaite,ours,dans_foret,mammifere,fourrure,lourd}
Tp4 = {allaite,ours,dans_foret,mammifere,fourrure,lourd}
denotation: {allaite,fourrure,lourd,dans_foret,mammifere,ours}
|
2°/ Exécution en chaînage arrière pour la question ?- baleine.
% Ours.pl
% base de règles
mammifere :- allaite.
dans_foret :- fourrure.
oiseau :- a_des_plumes.
ours :- lourd, dans_foret,mammifere.
baleine :- lourd, dans_l_eau,mammifere.
% base de faits
lourd.
fourrure.
allaite.
|
call: baleine
call: lourd
exit: lourd
call: dans_l_eau
fail: dans_l_eau
fail: baleine
|
?- baleine. |
QUESTION 2 :
Transformation et simplification du programme.
En substituant les atomes uvCDI2, uvCDI3, uvCDI4 , dans
cycle_Probatoire_CDI, par leur queue de clause, on obtient :
cycle_Probatoire_CDI :- , uv16472 , uv19339 , uv16392 ,
uvCDI1.
Mais uvCDI1 peut être remplacé par
- sa partie fixe uv10863.
- sa partie variable choix_Probatoire_CDI.
Ce qui donne:
cycle_Probatoire_CDI :- uv16472 , uv19339 , uv16392 , uv10863 ,
choix_Probatoire_CDI
fichier dest_CDI_2.pl.
cycle_Probatoire_CDI :- uv16472 , uv19339 , uv16392 , uv10863 , choix_Probatoire_CDI
% définir choix_Probatoire_CDI
choix_Probatoire_CDI :- uv10872.
choix_Probatoire_CDI :- uv16883.
choix_Probatoire_CDI :- uv16767.
choix_Probatoire_CDI :- uv19786.
QUESTION 3 :
Base d'Herbrand
{cycle_Probatoire_CDI , uv16472 , uv19339 , uv16392 , uv10863 ,
choix_Probatoire_CDI , uv10872, uv16883 , uv16767 , uv19786 }.
QUESTION 4 :
acquis_Bertrand.pl
uv19339.
uv16392.
uv10872.
uv19900.
Chaînage avant du programme avec les acquis de Bertrand.
cycle_Probatoire_CDI :- uv16472 , uv19339 , uv16392 ,
uv10863 , choix_Probatoire_CDI.
% définir choix_Probatoire_CDI
choix_Probatoire_CDI :- uv10872.
choix_Probatoire_CDI :- uv16883.
choix_Probatoire_CDI :- uv16767.
choix_Probatoire_CDI :- uv19786.
uv19339.
uv16392.
uv10872.
uv19900.
|
Tp1={uv10872,uv19339,uv19900,uv16392}
Tp2 = {uv10872,uv19339,uv19900,choix_Probatoire_CDI,uv16392}
Tp3 = {uv10872,uv19339,uv19900,choix_Probatoire_CDI,uv16392}
denotation: {uv10872,uv19339,uv19900,uv16392,choix_Probatoire_CDI}
|
Chaînage arrière de la question ?- dest.
cycle_Probatoire_CDI :- uv16472 , uv19339 , uv16392 ,
uv10863 , choix_Probatoire_CDI.
% définir choix_Probatoire_CDI
choix_Probatoire_CDI :- uv10872.
choix_Probatoire_CDI :- uv16883.
choix_Probatoire_CDI :- uv16767.
choix_Probatoire_CDI :- uv19786.
uv19339.
uv16392.
uv10872.
uv19900. |
call: dest
fail: dest
échec
|
?- dest. |
QUESTION 5 :
acquis_Pierre.pl
uv10872.
uv16392.
uv19900.
uv10863.
uv19339.
uv16472.
Execution de la semantique par chaînage arrière pour la question ?-
cycle_Probatoire_CDI. avec les acquis de Pièrre.
cycle_Probatoire_CDI :- uv16472 , uv19339 , uv16392 ,
uv10863 , choix_Probatoire_CDI.
% définir choix_Probatoire_CDI
choix_Probatoire_CDI :- uv10872.
choix_Probatoire_CDI :- uv16883.
choix_Probatoire_CDI :- uv16767.
choix_Probatoire_CDI :- uv19786.
% acquis de Pièrre.
uv10872.
uv16392.
uv19900.
uv10863.
uv19339.
uv16472.
|
call: cycle_Probatoire_CDI
call: uv16472
exit: uv16472
call: uv19339
exit: uv19339
call: uv16392
exit: uv16392
call: uv10863
exit: uv10863
call: choix_Probatoire_CDI
call: uv10872
exit: uv10872
exit: choix_Probatoire_CDI
exit: cycle_Probatoire_CDI
succès
|
?- cycle_Probatoire_CDI. |
Exécution en chaînage avant du programme obtenu.
cycle_Probatoire_CDI :- uv16472 , uv19339 , uv16392 ,
uv10863 , choix_Probatoire_CDI.
% définir choix_Probatoire_CDI
choix_Probatoire_CDI :- uv10872.
choix_Probatoire_CDI :- uv16883.
choix_Probatoire_CDI :- uv16767.
choix_Probatoire_CDI :- uv19786.
% acquis de Pièrre.
uv10872.
uv16392.
uv19900.
uv10863.
uv19339.
uv16472.
|
Tp1 =
{uv19339,uv10872,uv19900,uv16392,uv10863,uv16472} Tp2 =
{uv19339,uv10872,uv19900,choix_Probatoire_CDI,uv16392, uv10863,uv16472}
Tp3 = {uv19339,uv10872,uv19900,choix_Probatoire_CDI,uv16392,
uv10863,uv16472,cycle_Probatoire_CDI}
Tp4 = {uv19339,uv10872,uv19900,choix_Probatoire_CDI,uv16392,
uv10863,uv16472,cycle_Probatoire_CDI}
denotation: {uv19339,uv10872,uv19900,uv16392,uv10863,uv16472,
choix_Probatoire_CDI,cycle_Probatoire_CDI} |
|