Kuidas loomuliku keelt tõlkida Prologi? (muud sugulassuhted)
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). Eelneva
reegli oleks võinud kirjutada ka kujul:
titaan(Isik):-
- laps(uranos,Isik).
--Loomulikult piisab programmis ühest neist kahest sama
reegli kujust!
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).
Kellegi järglased on selle isiku 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),
- ei(Isik=demeter).
Isik Vend on isiku Vend
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),
- ei(Isik=Vend).
Analoogiliselt kirjeldame predikaadi ode:
ode(Isik, Ode):-
- laps(Vanem, Isik),
- tytar_on(Vanem, Ode),
- ei(Isik=Ode).
Ülesandeid
- Määra predikaadid
- onu(Onu,Isik) (s.t. isik Onu
on isiku Isik onu);
- lapselaps(Isik, Lapselaps);
- onupoeg(Isik, Onupoeg)
jne
- Kuidas (minimaalsete lisadega) ülaltoodud programmis saaks
kirjeldada isikute soo, s.t. predikaadid meessoost(Isik)
ja naissoost(Isik) (poegade ja tütarde
sugu järeldub vastav atest predikaatidest; lisada tulevad faktid nende
isikute kohta, kes ülaltoodud andmebaasis ei ole kellegi pojad ega
tütred)
- 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) ?
- 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!
- 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:
jaak@cc.ttu.ee
Tagasi loengute sisukorra juurde