Cvičenia 4 -- nemonotónnosť

Negácia (defaultová)

Poznámka: ak by ste mali pocit, že by sa vám niekde hodila silná negácia, odsimulujte si ju :-) ako napríklad pri generovaní možností: predikat(X) :- not non_predikat(X). non_predikat(X) :- not predikat(X)..

Def. negácia sa zapisuje jednoducho s not:

neg1.sm
a.

c :- not b.

Z predndnášky by vám mala byť jasná sémantika (čo sú stabilné modely tohoto programu).

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číť aby bola jasná doména:

neg2.sm
a(1..5).
b(1..2).

c(X) :- not b(X).
neg3.sm
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).

Choice

Napíšte program, ktorý bude mať dva stabilné modely: jeden v ktorom platí predikát a/0 a jeden v ktorom neplatí.

Vieme vytvoriť program, ktorého stabilnými modelmi by boli práve {a} a {}?

Choice 2

Napíšte program, ktorý bude mať pre nejaký vstupný predikát option/1 stabilné modely, z ktorých v každom bude predikát selected/1 platný pre nejakú podmožinu X z { X | option(X)}. Teda pre

option(1). option(2).

dostaneme modely ( predikát a vynechávam ):

Ináč povedané pre každé X z option(X) sa chceme nezávisle na ostatných rozhodnúť či v modeli bude alebo nebude selected(X).

Choose

Napíšte program, tak aby v každom modeli bol chosen(X) pravdivý práve pre jedno X z option(X).

N-Queens

Máme šachovnicu NxN políčok, rozmiestnite na ňu N dám tak aby sa žiadne neohrozovali. Riešenie cez predikát q(X,Y) znamenajúci, že na políčku X,Y je kráľovná. Ideálne si spravte konštantu n, ktorá bude hovoriť rozmery a počet kráľovien.

V smodels sa da zadeklarovat konstanta suboru #const n=8

V dlv cez predikat, tak ako sme to robili: cislo(1..8)

Vim logo FireFox logo CSS XHTML
Jozef Siska @ KAI FMFI UK YoYo @ KSP KAI (DAI) KSP