Kuidas loomuliku keelt tõlkida Prologi?
Algajatel tekitab alati probleeme Prologi maailmakirjeldamise viis - milline (sõna)
on suhe (predikaat), milline (sõna) on objekt (konstant või muutuja). Tegelikult vastavad Prologi programmi
laused üsna täpselt loomuliku keele lausetele; tuleb ainult hoolikalt vahet teha objektide (konstantide ja muutujate)
ja nendevaheliste suhete, predikaatide vahel (predikaadid on Prologis alati konstandid, s.t. predikaadi kohal ei saa
kunagi kasutada muutujat).
Täiendame poegi ja tütreid kirjeldavat programmi:
tytar_on(uranos,rhea).
tytar_on(kronos,hera).
poeg_on(uranos,okeanos).
poeg_on(uranos,iapetos).
poeg_on(uranos,kronos).
poeg_on(kronos,zeus).
poeg_on(iapetos,atlas).
pojapoeg(Vanaisa,Pojapoeg) :-
poeg_on(Vanaisa,Isa),
poeg_on(Isa,Pojapoeg).
Titaanid olid jumalate soo esi-isa Uranose lapsed:
titaan(Titaan):-
laps(uranos,Titaan).
Siin titaan on predikaadi
nimi, Titaan - objekt (muutuja); loomulikult oleks siin muutuja tähistusena
võinud kasutada ükskõik millist sõna, kuid näiteks X oleks palju halvem, sest selles tähistuses ei ole semantikat, hiljem programmi lugedes on palju raskem aru saada, mida
X tegelikult peaks tähistama.
Et seda reeglit kasutada, tuleb defineerida predikaat laps. Lapsed on kas pojad või
tütred:
laps(Vanem,X):-
poeg_on(Vanem,X).
laps(Vanem,X):-
tytar_on(Vanem,X).
Kõik titaanide järglased olid (nn. uued) jumalad:
jumal(Isik):-
titaan(Titaan),
jarglane(Titaan,Isik).
Järglased on lapsed ja laste järglased (matemaatiliselt:
suhe jarglane on suhte
laps
transitiivne sulund):
jarglane(Isik,Järglane):-
laps(Isik,Järglane).
jarglane(Isik,Järglane):-
laps(Isik,Laps),
jarglane(Laps,Järglane).
Olümplased olid Olümpose mäel asuvad peajumal Zeus ja tema vennad ja õed,
välja arvatud Demeter (Demeter lahkus Olümposelt, kui Zeus lubas allmaailmajumalal Hadesel röövida tema tütre):
olymplane(zeus).
olymplane(Isik):-
vend(zeus,Isik).
olymplane(Isik):-
õde(zeus,Isik),
not(Isik=demeter).
Isik Vend on isiku Isik
vend (s.t. nende vahel on suhe vend), kui
leidub keegi kolmas isik Vanem , kellele
isik Vend on poeg ja isik Isik
- laps (kas poeg või tütar); kuna tavaliselt ennast keegi ei loe oma vennaks või
õeks, peab veel nõudma, et isikud Vend ja
Isik oleksid erinevad:
vend(Isik, Vend):-
laps(Vanem, Isik),
poeg_on(Vanem, Isik),
not(Isik = Vend).
Analoogiliselt kirjeldame predikaadi õde:
õde(Isik, Õde):-
laps(Vanem, Isik),
tytar_on(Vanem, Õde),
not(Isik = Õde).
Ülesandeid:
1.
Määra predikaadid
- onu(Onu,Isik) (s.t. isik Onu
on isiku Isik onu);
- lapselaps(Isik, Lapselaps);
- onupoeg(Isik, Onupoeg);
- käli(Isik, Käli)
jne
2.
Kuidas (minimaalsete lisadega)
ülaltoodud programmis saaks kirjeldada isikute soo, s.t. predikaadid meessoost(Isik)
ja naissoost(Isik) (poegade ja tütarde
sugu järeldub vastavatest predikaatidest; lisada tulevad faktid nende isikute
kohta, kes ülaltoodud andmebaasis ei ole kellegi pojad ega tütred)
3.
Kuidas muutuksid kõigi
predikaatide (näiteks soo) definitsioonid, kui põhifaktid oleksid
predikaatide poeg_on(Isik, Poeg) ja tytar_on(Isik,
Tytar) asemel kirjeldatud predikaat idega
isa(Isa, Laps) ja ema(Ema, Laps)
?
4.
Suhe "sugulane" määratakse
tavaliselt (näiteks sugupuud joonistades) nii: sugulased on kõik
eellased (vanemad, vanavanemad jne) ja nende järglased ja nende nn veresugulaste
(minu veresugulane on isik, kelle jaoks meil mõlemal on yhine eellane,
s.t. meie mõlema soonis voolab selle ühise eellase verd) abikaasad,
kuid mitte enam abikaasade eellased (nende järglased loomulikult on kõik
sugulased, sest nad on veresugulased); erandina loetakse sageli sugulasteks
ka isiku enda abikaasa vanemad, s.t. ämm ja äi. Määra Prologi
predikaat sugulane(Isik, Sugulane)
NB: suhe "sugulane" (selle definitsiooni
järgi) ei ole sümmeetriline: minu pojapoja naine on minu sugulane,
kuid mina ei ole tema sugulane!
5.
Paljud predikaadid (vajab,
kasutab, põlveneb
jne) sarnanevad oma omadustelt predikaatidega poeg_on(Isik,
Poeg), tytar_on(Isik, Tytar) (s.t.
nendest tuletatakse uusi predikaate transitiivse sulundi abil). Kuidas kirjeldada
näiteks ökosüsteemis kehtivaid sõltuvussuhteid?
Küsimused, probleemid:
©2004
Jaak Henno