Correção dos exercícios de engenharia
do conhecimento em Prolog
Jacques Robin, DI-UFPE
www.di.ufpe.br/~jr
Estudo de caso: a terrível novela
Requisitos em Inglês
1. A soap opera is a TV show whose characters include a husband, a wife and a
mailman such that:
2. the wife and the mailman blackmail each other
3. everybody is either alcoholic, drug addict or gay
4. Dick is gay, Jane is alcoholic and Harry is a drug addict
5. the wife is always an alcoholic and the long-lost sister of her husband
6. the husband is always called Dick and the lover of the mailman
7. the long-lost sister of any gay is called either Jane or Cleopatra
8. Harry is the lover of every gay
9. Jane blackmails every drug addicted lover of Dick
10. soap operas are invariably terrible!
0. Who are the characters of a terrible TV show?
Correção do exercício 1:
A terrível novela em L1
((X , ( soapOpera ( X )
 (tvShow( X ) 
(C , ( character ( X , C )  ( gay (C )  alcoholic (C )  drugAddict (C )))) 
%3
( W , M , ( husband ( X , dick )  wife( X , W )  mailman ( X , M ) 
%1
blackmail (W , M ) 
%2
alcoholic (W )  longLostSi ster (W , dick ) 
%5
H  dick  lovers ( dick , M ))) 
%6
(S , G , ((longLostSi ster ( S , G )  gay (G ))  ( S  jane  S  cleopatra )))  %7
(L , ( gay ( L )  lovers ( L , harry ))) 
(A, ((drugAddict ( A)  lovers ( dick , A))  blackmail ( jane, A))) 
%8
%9
terrible ( X )))) 
(X , (tvShow( X )  ((H , ( husband ( X , H ))  character ( X , H )) 
%10
%1
(W , ( wife( X , W ))  character ( X , W )) 
%1
(M , ( mailman ( X , M ))  character ( X , M )) 
%1
(H , W , ((husband ( X , H )  wife( X , W ))  married ( H , W ))))) 
gay ( dick )  alcoholic ( jane )  drugAddict ( harry ))
%4
X , H , W , M , (tvShow( X )  terrible ( X ) 
character ( X , H )  character ( X , W )  character ( X , M ))
%0
Correção do exercício 2:
A terrível novela em Prolog
tvShow(Cast,Qual) :soapOpera(Cast,Qual).
soapOpera([dick,W,M],terrible) :soapCast([dick,W,M]),
blackmail(W,M), alcoholic(W),
longLostSister(W,dick),
lover(M,dick).
soapCast([]).
soapCast([H|T]) :- soapChar(H),
soapCast(T).
soapChar(C) :- alcoholic(C).
soapChar(C) :- drugAddict(C).
soapChar(C) :- gay(C).
gay(dick).
alcoholic(jane).
drugAddict(harry).
lover(harry,G) :- gay(G).
longLostSister(jane,G) :- gay(G).
longLostSister(cleopatra,G) :- gay(G).
blackmail(jane,M) :- lover(M,dick),
drugAddict(M).
?-tvShow(Cast,terrible).
 Cast = [dick,jane,harry].
Estudo de caso: o BD acadêmico
Requisitos em Inglês
1. Bob is 40 and the manager of the CS
department.
2. His assistants are John and Sally.
3. Mary’s highest degree is an MS and she works
at the CS department.
4. She co-authored with her boss and her
friends, John and Sally, a paper published in
the Journal of the ACM.
5. Phil is a faculty, who published a paper on FLogic at a Conference of the ACM, jointly
with Mary and Bob.
6. Every faculty is a midaged person who writes
article, makes in the average $50,000 a year
and owns a degree of some kind, typically a
PhD.
7. One is considered midage if one is between 30
and 50 years old.
8. A faculty’s boss is both a faculty and a
manager.
9. Friends and children of a person are also
persons.
10. Every department has a manager who is an
employee and assistants who are both
employees and students
11. A boss is an employee who is the manager of
another employee of the same department.
12. A joint work is a paper that is written by two
faculties
13. There are three types of papers: technical
reports, journal papers and conference
papers
0a: Who are the midaged employees of the CS
department and who are their boss?
0b: Who published jointly with Mary in the
Journal of the ACM?
0c: Where did Mary published joint work with
Phil?
Correção do exercício 3:
O banco de dados acadêmico em Prolog
1/ fatos ground
person(bob).
age(bob,40).
works(bob,cs,faculty).
manager(cs,bob).
dept(cs).
works(john,cs,assistant).
study(john,cs).
works(sally,cs,assistant).
study(sally,cs).
hiDeg(mary,ms).
works(mary,cs,faculty).
friends(mary,bob).
friends(mary,sally).
works(phil,cs,faculty).
degree(phd).
degree(ms).
journal(jacm).
conf(cacm).
article(flogic,[john,sally,mary,bob],jacm).
article(florid,[phil,mary,bob],cacm).
Correção do exercício 3:
O banco de dados acadêmico em Prolog
2/ regras de dedução
hiDeg(F,phd) :- works(F,_,faculty),
not hiDeg(F,ms).
salary(P,5000) :- works(F,_,faculty), not
salary(F,_).
midaged(F) :- age(F,A), !, integer(A),
A >= 30, A =< 50.
midaged(F) :- works(F,_,faculty).
works(B,D,faculty) :- manager(D,B),
works(E,D,faculty), !.
activity(F,paperWriting) :works(F,_,faculty).
works(S,D,assistant) :- study(S,D), dept(D),
works(S,D,_), !.
works(M,D,_) :- manager(M,D).
boss(B,E) :- manager(D,B), works(E,D,_).
person(P2) :- friends(P1,P2), person(P1).
person(C) :- parent(A,C), person(A).
person(P) :- study(P,D), dept(D).
person(P) :- works(P,_,D), dept(D).
report(T,Al,J) :- article(T,Al,J), journal(J).
report(T,Al,C) :- article(T,Al,C), conf(C).
report(T,Al,D) :- techrep(T,Al,D), dept(D).
jointWork(W,F1,F2,P) :- works(F1,_,faculty),
works(F2,_,faculty), F1 \= F2,
report(W,Fl,P), member(F1,Fl),
member(F2,Fl).
member(H,[H|T]).
member(X,[H|T]) :- member(X,T).
Correção do exercício 3:
O banco de dados acadêmico em Prolog
3/ consultas
midagedWorkerOf(E,D) :- works(E,D,_),
midaged(E).
bossOfMidagedWorkerOf(B,D) :midagedWorkerOf(E,D), boss(B,E).
? setof(E,midagedWorkerOf(E,cs),Le),
setof(B,bossOfMidagedWorkerOf(B,cs),Lb).
 E = _20, Le = [bob,mary],
B = _51, Lb = [bob];
 no.
? setof(F,jointWork(_,F,mary,jacm),Lf).
 F = _20, Lf = [bob];
 no.
? setof(P,jointWork(_,phil,mary,P),Lp).
 P = _20, Lp = [cacm];
 no
Correção do exercício 4:
O banco de dados acadêmico em L1
1/ formulas ground
person(bob)  age(bob,40)  works(bob,cs,faculty)  manager(cs,bob) 
works(phil,cs,faculty)  works(john,cs,assist ant)  study(john,cs) 
works(sally,cs,assis tant)  study(sally,cs) 
hiDeg(mary,ms)  works(mary,cs,faculty)  friends(mary,bob)  friends(mary,sally) 
article(flogic,john,jacm)  article(f logic,sall y,jacm) 
article(flogic,mary,jacm)  article(f logic,bob, jacm) 
article(florid,phil, cacm) article(florid ,mary,cacm)  article(f logic,bob, cacm) 
dept(cs)  degree(phd)  degree(ms)  journal(jacm)  conf(cacm) 
Correção do exercício 4:
O banco de dados acadêmico em L1
2/ formulas quantificadas
(F , D, (( works( F , D, faculty)  (midaged( F ) 
((hiDeg( F , ms))  hiDeg( F , phd )) 
(R, P, article( R, F , P )) 
avgSalary( F ,50000)))) 
(F , B, (((D, works( F , D, faculty))  boss( B, F ))  works( B, D, faculty)))) 
(P, F , C , (( person( P )  friends( P, F )  parent( P, C ))  ( person( F )  person(C )))) 
(E1, ((D, F , works( E1, D, F ))  ((B, boss( B, E1 ))  (E2 , W , joinWork (W , E1, E2 )))) 
(D, ((dept ( D )  ((M , P, (manager( D, M )  works( M , D, P )) 
(A1, ( works( A1, D, assistant)  study( A1, D )) 
(A2 , ( works( A2 , D, assistant)  study( A2 , D ))))) 
(B, E , (boss( B, E )  (D, P1, P2 ( works( E , D, P1 )  works( B, D, P2 )  manager( D, B ))))) 
(W , F1, F2 ( joinWork (W , F1, F2 )  ((P, (report(W , F1, P )  report(W , F2 , P ))) 
(D1, works( F1, D1, faculty)) 
(D2 , works( F1, D1, faculty))))) 
(W , A, P, (((report(W , A, P )  ( journal( P )  conf ( P )))  article(W , A, P )) 
((report(W , A, P )  journal( P )  conf ( P ))  techrep(W , A, P )))).
%5
%6
%7
%8
%9
%10
%11
Correção do exercício 4:
O banco de dados acadêmico em L1
3/ consultas
E , B, (midaged( E )  (P, works( E , cs, P))  boss( B, E ))
%0a
F , W , ( joinWork(W , F , mary)  article(W , mary, jacm)) %0b
P, W , ( joinWork(W , phil, mary)  article(W , mary, P))
%0b
Estudo de caso:
A curiosidade matou o gato?

Requisitos em inglês
1. Jack owns a dog.
2. Every dog owner is an animal lover.
3. No animal lover kills an animal.
4. Either Jack or curiosity killed Tuna
5. Tuna is a cat
A. Did curiosity kill the cat?
B. Quem matou o gato?

Em L1
1. x Dog(x)  Owns(Jack,x)
2. x (y Dog(y)  Owns(x,y)) 
AnimalLover(x)
3. x,y (AnimalLover(x)  Animal(y))
 Kills(x,y)
4. (Kills(Jack, Tuna) 
Kills(Curiosity, Tuna)) 
Kills(Jack, Tuna) 
Kills(Curiosity, Tuna))
5. Cat(Tuna)
6. x Cat(x)  Animal(x)
0. Kills(Curiosity,Tuna)
B.  X, Kills(X,Tuna)
Exercício 5:
A curiosidade matou o gatou? em Prolog
owns(jack,dog1).
dog(dog1).
animalLover(H) :- owns(H,A), animal(A).
notKills(X,A) :- animalLover(X), animal(A), !.
notKills(X,A) :- not kills(X,A).
kills(curiosity,tuna) :- notKills(jack,tuna).
kills(jack,tuna) :- notKills(curiosity,tuna).
cat(tuna).
animal(A) :- cat(A).
animal(A) :- dog(A).
?- kills(curiosity,tuna).
yes
?- kills(curiosity,X).
X = tuna
More (y/n)? y
no
?
/* 1 */
/* 1 */
/* 2 */
/* 3 */
/* 3 */
/* 4 */
/* 4 */
/* 5 */
/* 6 */
/* 7 */
Exercício 6:
A curiosidade matou o gato? em LIFE

Arquivo da curiosidade e tuna
load("glOnto.lf")?
animal := {cat; dog}.
dog1 <| dog.
tuna <| cat.
feeling <| abstObj.
curiosity <| feeling.
owns(jack,dog1).
love(H,animal) :- owns(H,dog).
notKills(X,Y) :- love(X,Y), !.
notKills(X,Y) :- not kills(X,Y).
% 6-7
%1
%5
%1
%2
%3
%3
kills(curiosity,tuna) :- notKills(jack,tuna). % 4
kills(jack,tuna) :- notKills(curiosity,tuna). % 4

Arquivo da ontologia geral
entities := {situation; object; quality; quantity;
place; time}.
situation := {event; relation}.
event := {action; happening}.
object := {physObj; abstObj}.
physObj := {liveBeing; artefact}.
person <| liveBeing.
checkList([],Sort) -> true.
checkList([Sort|Tail],Sort) -> checkList(Tail).
Consultas:
> kills(curiosity,tuna)?
*** Yes
--1> *** No
> kills(X,Y)?
*** Yes, X = curiosity, Y = tuna.
--1> *** No
Estudo de caso: Coloração de mapa

Colorir mapa tal que:

• países adjacentes
• de cores diferentes
A
Instância de problema de
resolução de restrições
A
B
B
C
C
D
D
E
F
E
F
Exercício 7: Coloração de mapa em Prolog
Exercício 8: Coloração de mapa em LIFE
Download

prolog-exos