Cvičenia 3 -- nemonotónnosť
∃x
Zadefinujte predikát exists_a_and_b/0, ktorý bude pravdivý ak sú oba predikáty a/1 a b/1 pravdivé naraz pre nejaké X. Teda exists_a_and_b ≡ ∃X(a(X) ∧ b(X)).
Negácia (defaultová)
Def. negácia sa zapisuje jednoducho s not:
neg1.lpa. c :- not b.
Def. negáciu čítame ako "nevieme, že platí X", "nepodarilo sa nám/nevieme odvodiť X".
Keďže ide o closed world assumption (CWA) prináša to drobné komplikácie: nad akou doménou ju chceme robiť? Robiť ju totižto nad množinou všetkých termov (ako to vlastne robí teoretická sémantika) je príliš zložité. Preto musíme zabezpečiť aby bola jasná doména:
- SMODELS: každá premenná, ktorá sa vyskytuje v negovanom predikáte alebo v hlave, sa musí v tom pravidle vyskytovať ešte v nejakom kladnom doménovom predikáte v tele. Doménový predikát je zjednodušene taký, ktorý vieme odvodiť bez rekurzívnej negácie, respektíve iba stratifikovanou negáciou (tj vie ho vyrobiť lparse pri groundovaní)
- DLV: každá premenná z negatívneho predikátu alebo aj hlavy, sa musí vyskytovat v (ľubovoľnom) pozitívnom predikáte.
a(1..5). b(1..2). c(X) :- not b(X).neg3.lp
a(1..5). b(1..2). c(X) :- a(X), not b(X).neg3.dlv
#maxint=7. a(1..5). b(1..2). c(X) :- #int(X), not b(X).
Vydáš sa za mňa?
Napíšte program, ktorý definuje predikáty blood_relative
a can_marry/2
. X
je pokrvným príbuzným Y
,
ak majú spoločného predka. X
a Y
sa môžu vziať,
ak sú slobodní (nevieme preukázať, že je ženatý/vydatá) a nie sú (nevieme
preukázať, že sú) pokrvní príbuzní.
man(anakin). man(luke). man(han). %man(ben)man(jacen). woman(shmi). woman(padme). woman(leia). %woman(mara). mother(shmi,anakin). father(anakin,luke). mother(padme,luke). father(anakin,leia). mother(padme,leia). %father(luke,ben). mother(mara,ben). %father(han,jacen). mother(leia,jacen). married(anakin, padme). %married(luke,mara). %married(leia,han).
Zlodeji
Príklad z https://www.doc.ic.ac.uk/~mjs/teaching/KnowledgeRep491/ :- Pravidlo 1: Až na výnimky podľa pravidla 2, každý zlodej musí byť potrestatný.
- Pravidlo 2: Až na výnimky podľa pravidla 3, mladistvým zlodejom má byť trest odpustený.
- Pravidlo 3: Každý zlodej s násilníckymi sklonmi musí byť potrestaný.
Zistite, čo to znamená pre zlodeja Juraja, ktory je/nie je mladistvý a má/nemá násilnícke sklony.
Futbal
Príklad z https://www.doc.ic.ac.uk/~mjs/teaching/KnowledgeRep491/ :- Európania sú zvyčajne civilizovaný, až na ....
- Fanúšikovia futbalu nie sú civilizovaný, pokiaľ nie sú vzdelaný.
- Aj vzdelaný fanúšikovia futbalu nie sú veľmi civilizovaný, ak sú opitý.
∀x
Zadefinujte predikát forall_a_and_b/0, ktorý bude pravdivý ak sú oba predikáty a/1 a b/1 pravdivé naraz pre všetky X. Teda forall_a_and_b ≡ ∀ X( a(X) ∧ b(X)). Zamyslite sa nad tým, pre všetky X z akej domény to vaša deklarácia definuje.
Small and strong
Príklad z https://www.doc.ic.ac.uk/~mjs/teaching/KnowledgeRep491/ :Represent the following default rules as a normal logic program:
- A person who is big is assumed to be strong, unless there is reason to think (s)he is weak.
- A person who is small is assumed to be weak, unless there is reason to think that (s)he is strong, except that: a person who is small and muscular is assumed to be strong unless there is reason to think that (s)he is weak.
What conclusions does your representation give for the various combinations of big/small and muscular/not muscular?