7


Mis päev on täna?

Lewis Carolli raamatust "Alice mõistatustemaal" pärinev probleem on heaks konseptuaalse analüüsi harjutusülesandeks.
Ühel päeval ei suutnud Alice kuidagi meenutada, milline nädalapäev on täna. Ta oleks saanud seda küsida oma sõpradelt lõvilt või ükssarvelt, kuid nende vastusele ei võinud kunagi kindel olla, sest igal esmaspäeval, teisipäeval ja kolmapäeval lõvi vale tas (teistel päevadel ta rääkis tõtt); ükssarv taas valetas igal neljapäeval, reedel ja laupäeval.
Alice oli nutikas tüdruk ja esitas sõpradele küsimuse:
"Mida sa tegid eile - valetasid või rääkisid tõtt?"
Vastuse põhjal (mõlemad väitsid, et olid eile valetanud) suutis Alice otsustada, mis nädalapäev parajasti on.
Probleemi esitamisel Prologile tuleb kindlasti kirjeldada, kes millal valetas:

valetab(lovi, esmaspaev).

valetab(lovi, teisipaev).
valetab(lovi, kolmapaev).
valetab(ykssarv, neljapaev).
valetab(ykssarv, reede).
valetab(ykssarv, laupaev).

Lahenduse otsimiseks on oluline ka nädalapäevade järjekord (muidu ei ole mõistetav muutuja Eile).

eelmine(esmaspäev, pyhapaev).

eelmine(teisipäev, esmaspaev).
eelmine(kolmapaev, teisipaev).
eelmine(neljapaev, kolmapaev).
eelmine(reede,neljapaev).
eelmine(laupaev, reede).
eelmine(pyhapaev,laupaev).

Tundmatul nädalapäeval Tana võib keegi Olend (lõvi või ükssarv) väita, et ta eile valetas kahel juhul:
a) kui ta täna ei valeta, siis pidi ta eile tõesti valetama

ytleb_et_valetas(Olend,Tana):-

eelmine(Tana,Eile),
not(valetab(Olend, Tana)),
valetab(Olend, Eile).

b) ta valetab täna ja rääkis eile tegelikult tõtt:

ytleb_et_valetas(Olend,Tana):-

valetab(Olend, Tana),
eelmine(Tana,Eile),
not(valetab(Olend, Eile)).


Eelnevas on oluline lausete järjekord. Eituse argumendis ei või (sellel hetkel, kui Prologi otsimismehhanism jõuab eitust sisaldava lauseni) kunagi esineda muutujaid (mis on muutuja tõeväärtus?), sellepärast peab lausele
not(valetab(Olend, Täna)) eelnema lause eelmine(Täna,Eile), sest selle lausega saavad muutujad Tana, Eile konkreetsed väärtused.
Tundmatu nädalapäeva Tana
leidmiseks jääb üle vaid anda päring:

? ytleb_et_valetas(lovi,Tana), ytleb_et_valetas(ykssarvi,Tana).

Mis tuleb muutuja Tana väärtuseks?


Ülesanne

Millisel päeval (päevadel) oleks Alice saanud küsimusele "Kas Sa räägid homme tõtt?" mõlematelt kinnituse, et nad räägivad homme tõtt? (koosta lahendamiseks vajalik predikaat)


Küsimused, probleemid:

jaak@cc.ttu.ee

Tagasi loengute sisukorra juurde