Pr zy k la d y p ro st yc h zd a ´n i ic h re p re ze n ta cj a w Pr o lo g u
Zdaniawyra˙zaj֒acefaktymo˙znazapisa´cjakoklauzulePrologu.Zwr´o´cmyna pocz֒atekuwag֒e,bywszystkieklauzuleby lypisanezma lejlitery.Praktycznejest r´ownie˙zupraszczaniepolskiejfleksji: MamkolegeZdzicha. MamkolegeRycha. Zdzichmaksiazke. ZdzichmaMercedesa. ZdzichmaMariole. ZdzichlubiMercedesa. Rychulubiwino. ZonaRychalubiwino.kolega_zdzich. kolega_rychu. zdzich_ma_ksiazka. zdzich_ma_mercedes. zdzich_ma_mariola. zdzich_lubi_mercedes. rychu_lubi_wino. zona_rycha_lubi_wino. Prologmo˙zezapami֒eta´ctefakty,anast֒epniepytanyonieodpowietwierdz֒aco, apytanyojakiekolwiekinnefaktyodpowieprzecz ֒aco. ?-kolega_zdzich. yes?-kolega_roman. no Prolog—podstawowemechanizmy1 Jednaktenspos´obwyra˙zaniafakt´owposiadaszeregwad.Naprzyk lad, gdyby´smyzapytalioostatnifaktnali´sciewformie:rycha_zona_lubi_wino toPrologniezauwa˙zy lbyzwi֒azkutegofaktuzwcze´sniejwprowadzonym zona_rycha_lubi_wino: ?-zona_rycha_lubi_wino. yes ?-rycha_zona_lubi_wino. no Dlategodowyra˙zaniafakt´owlepieju˙zy´cstruktur: kolega(zdzich). kolega(rychu). ma(zdzich,ksiazka). ma(zdzich,mercedes). ma(zdzich,mariola). lubi(zdzich,mercedes). lubi(rychu,wino). lubi(zona(rychu),wino).
?-kolega(zdzich). yes ?-lubi(X,wino). X=rychu?; X=zona(rychu) yes Prolog—podstawowemechanizmy2
S tr u k tu ry i p re d yk a ty
Prologpozwalanawprowadzaniefakt´owstrukturalnych,codajedu˙z֒aswobod֒e. Wkorzystaniuztejswobody,podobniejakzinnychswob´od,wartostosowa´c jednakpewn ֒adyscyplin ֒e,np.: Czyzamiastpisa´ctak: kolega(zdzich). kolega(rychu). ma(zdzich,ksiazka). ma(zdzich,mercedes). ma(zdzich,mariola). lubi(zdzich,mercedes). lubi(rychu,wino). lubi(zona(rychu),wino).niemogliby´smyr´owniedobrzetak: kolega(zdzich). rychu(kolega). zdzich(ma,ksiazka). mercedes(ma,zdzich). ma(mariola,zdzich). zona(rychu,lubi,wino). zona(rychu,lubi(wino)). lubi(zona(rychu(wino))). lubi(zona,rychu,wino). Odpowied´z:formalnieowszem,praktycznieniebardzo. Prolog—podstawowemechanizmy3 Strukturanajwy˙zszegopoziomu(zewn֒etrzna)traktowanajestprzezPrologjako symbolrelacjiwyra˙zaj֒acejjaki´szwi֒azekmi֒edzyjejargumentami. Strukturywewn֒etrzne(mog֒aby´cdowolniezagnie˙zd˙zone)traktowanes֒ajako funkcjeokre´slaj֒aceobiektpozostaj֒acywzale˙zno´sciodinnychobiekt´ow. Zapisrelacjiwyra˙zafaktlogiczny,inazywanyjestpredykatem. Przekszta lcaj ֒acfaktywyra˙zonewnormalnymj ֒ezykunapredykatylogiczne najcz ֒e´scieju˙zywamyorzeczeniazdania(czasownika)jakosymbolupredykatu. Podmiotstajesi֒eargumentempredykatu,podobniejakdope lnienia. Zatempredykatpowinienmie´csta l֒aliczb֒eargument´ow,kt´orepowinnymie´c swojeokre´slonerole,aczkolwiekmog֒aistnie´cpodobnepredykatyzr´o˙zn֒aliczb֒a argument´ow,np.: ma2(kto,co) ma3(kto,co,kiedy) ma4(kto,co,kiedy,gdzie) WPrologutakiepredykatymog֒amie´cjednakow֒anazw֒e,poniewa˙zProlog potrafijeodr´o˙zni´cpoliczbieargument´ow:ma/2,ma/3,ma/4 Prolog—podstawowemechanizmy4
Z m ie n n e w Pr o lo g u
Symboltermurozpoczynaj֒acysi֒ewielk֒aliter֒a(lubpodkre´slnikiem)jest zawszezmienn֒awPrologu.Symbolpredykatuniemo˙zeby´czmienn֒ainiemo˙ze zaczyna´csi ֒ewielk ֒aliter ֒a.Zmiennawaksjomaciejesttraktowanajako kwantyfikowanauniwersalnie,azmiennawzapytaniujakokwantyfikowana egzystencjalnie.Zakresemzmiennychjestca laklauzulawkt´orejwyst ֒epuj ֒a. Zawarto´s´cbazydanych: /*somelikewine*/ likes(ed,wine). likes(wife(ed),wine). /*everyonelikesbeer*/ likes(X,beer). /*dicklikeshismerc*/ likes(dick,mercedes).Odpowiadanienapytania: ?-likes(X,wine). X=ed?; X=wife(ed) yes ?-likes(ed,X). X=wine?; X=beer yes ?-likes(X,beer),likes(X,mercedes). X=dick?; no Wpierwszychdw´ochzapytaniachzmiennaXjestzaka˙zdymrazeminn ֒a zmienn֒a.Natomiastwtrzecimzapytaniu(opiwieimercedesie),s֒adwa wyst֒apieniatejsamejzmiennejX,wi֒ecmusz֒amie´ct֒esam֒awarto´s´c. Prolog—podstawowemechanizmy5
Op e ra to r u n ifi k a cj i
Operatorunifikacji=por´ownujeoperandy.Je´sliobies֒atermamista lymi,zwraca logicznywynikpor´ownania(identyczneczynie).Je´slijedenlubobaoperandys֒a zmiennymi,wtedywynikjestzawszeprawd֒a,zefektemubocznymprzypisania zmiennejsta legooperandu.Gdyobaoperandyby lyzmiennymitopozostaj ֒a nimi,ales ֒azunifikowane,czylimusz ֒amie´cr´own ֒awarto´s´cwprzysz lo´sci. ?-wife(ed)=meg. no ?-wife(ed)=X. X=wife(ed) yes ?-wife(X)=wife(Y). Y=X yes/*noartihmetic*/ ?-2+3=5. no ?-2+3=X. X=2+3 yes /*donttry*/ ?-father(son(X))=X. Jakwida´cwprzyk ladachpolewejstronie,unifikacjajestelastycznaipor´ownuje wyra˙zeniastrukturalnie,przypisuj֒aczmiennebydopasowa´cwyra˙zenia.Jednak ˙zadneobliczeniaarytmetycznenies ֒awykonywane. Prolog—podstawowemechanizmy6
W p ro w a d za n ie fa k t´o w i o d p o w ia d a n ie n a p yt a n ia
Zapisanewpostaciklauzulfaktymo˙znawprowadzi´cdoPrologu,kt´ory przyjmujejejakoaksjomaty,umieszcza(pokolei)wswojejbaziedanych, izaczynawniewierzy´c(bezgranicznie). Mo˙znar´ownie˙zwprowadza´cfakty(wtymsamymformacie,zako´nczonekropk֒a) jakozapytania,nakt´orePrologmaodpowiedzie´c.Wczasienormalnejpracy Prologjestw la´sniewtakimtrybieodpowiadanianapytania.Abywprowadzi´c aksjomatyu˙zywamyspecjalnegopredykatuconsult/1,kt´orywczytujefakty zpodanegopliku,albozwej´scia:consult(user).Pojedynczefaktymo˙zna r´ownie˙zwprowadza´cpredykatamiassertaiassertz(patrzdalej). Prologodpowiadanapytaniaprzezprzeszukiwanieswojejbazydanych, wkolejno´sciwprowadzonychaksjomat´ow,dopasowuj֒acpredykatikolejne argumentyzapytaniadoargument´owaksjomat´ow. Prolog—podstawowemechanizmy7 Prolog—podstawowemechanizmy8P o s l u g iw a n ie si
֒e g p ro lo g -i e m
gprologjest latwodost֒epnyminterpreteremPrologu.Mo˙znagowywo la´c wtakispos´ob,˙zebyodrazunastarciewczyta lfaktyzawartewokre´slonympliku: >gprolog--init-goal"consult(’zdzich2.pro’)" compilingzdzich2.proforbytecode... zdzich2.procompiled,10linesread-1004byteswritten,15ms GNUProlog1.2.18 ByDanielDiaz Copyright(C)1999-2004DanielDiaz |?-kolega(zdzich). (1ms)yes Prolog—interpreteryPrologu9 gprologposiadaszeregrozszerze´nwodniesieniudostandarduPrologu,jak r´ownie˙zszeregzmiennychkonfiguracyjnych.Naprzyk lad,wprzypadku zapytaniaofakt,kt´oregosymbolpredykatuniejestznany,gprologdomy´slnie generujeb l֒ad. Mo˙znaustawi´cflag֒ekonfiguracyjn֒a,abytakiezapytanieotrzymywa lopoprostu odpowied´znegatywn֒a: |?-jest_fajnie. uncaughtexception:error(existence_error(procedure,jest_fajnie/0),top_level/0) |?-set_prolog_flag(unknown,fail). yes |?-jest_fajnie. no Poniewa˙zset_prolog_flagjestpredykatem(jakwszystkowPrologu),wi֒ec wywo lujesi֒egowtrybiezadawaniapyta´n.Pr´obawprowadzeniagozpliku wtrybieconsultby labyr´ownowa˙znapr´obieprzedefiniowaniapredykatu wbudowanego,cojestniedopuszczalne. Prolog—interpreteryPrologu10S W I Pr o lo g
Podobniemo˙znawywo la´cinnywygodnyinterpreterPrologu—SWIProlog: >pl-fzdzich2.pro %/home/witold/cla/ai/Prolog/zdzich2.procompiled0.00sec,2,768bytes WelcometoSWI-Prolog(Version5.6.6) Copyright(c)1990-2005UniversityofAmsterdam. SWI-PrologcomeswithABSOLUTELYNOWARRANTY.Thisisfreesoftware, andyouarewelcometoredistributeitundercertainconditions. Pleasevisithttp://www.swi-prolog.orgfordetails. Forhelp,use?-help(Topic).or?-apropos(Word). 1?-kolega(X). X=zdzich; X=rychu; No Prolog—interpreteryPrologu11´ C ic ze n ie w
´owlkaprostyfaktgu(zar´zmentamikichadstowruchomjaki´ssyUem,Pwprguloro .aZadajacpytanid´zsprawpoprano´s´cr)weasazbez)zapomocorcu(ltsnou ֒֒ zaw;(´srednika)ieymwy´swtlanieawisu´skldawprowazonychadny.Zapomocch֒ ej´scijakiej´szmienn.toarwichwsztkyshmo˙zliwyc roooglujkilkastzenzwprowadniemdoygw"olPhas lem"prodlooaritutg k lmadoweprograay,np.hni,przyoteujrologu.SkopiPznmalprostaneioez waczonymia´syjzanienmi.ia lzucispr´obujjeurhomi´czgodnie ֒ k l:adprzyNa oologn.worgp/rtn/rhp:/twaw.lew oc_gorlop/ru7se/se20.htmlhjpchttp:~/www./sc./k.ua.mahb reguloroPryterorptein—gloP12Re g u ly
Opr´oczfakt´owprostych,bezwarunkowych,mo˙zemywyra˙za´cwPrologufakty zawieraj ֒acesp´ojnikimplikacji(wstecznej): lubi(zdzich,X):-lubi(X,wino). Faktytegotypunazywasi֒eregu lami. Prologposzukujeodpowiedzinazadawanepytaniadopasowuj֒acpytaniedo kolejnychfakt´owwbaziedanych.Gdypytaniedopasowujesi֒edofaktuprostego, odpowied´zjestnatychmiastowa.Gdyfaktjestregu l ֒atoPrologpr´obuje dopasowa´cpytaniedojejlewejstrony.Gdybytosi ֒euda lo,Prologwywo lujesi ֒e rekurencyjnie,abyudowodni´cfaktypoprawejstronieregu ly.Sukceswywo lania rekurencyjnegooznaczaodpowied´zpozytywn֒anaoryginalnepytanie. likes(dick,X):-likes(X,wine). likes(dick,mercedes). likes(dick,wine). likes(ed,wine). likes(wife(ed),wine).?-likes(dick,X). X=dick; X=ed; X=wife(ed); X=mercedes; X=wine. Prolog—konstrukcjeProloga13
S p ´o jn ik i i k o n o ta cj e lo g ic zn e
Operator:-wyst ֒epuj ֒acywregu lachmo˙znatraktowa´cjakosp´ojnik,poniewa˙z pozwalaontworzy´cklauzulez lo˙zonezprostych.Wsensielogicznymodpowiada onimplikacjiskierowanejwstecz⇐.Implikacj֒emo˙znastosowa´ctylko wdefinicjachregu l(niewzapytaniach),itotylkoraz. WProloguistniej ֒ajeszczesp´ojnikikoniunkcji∧,zapisywanejprzecinkiem,oraz alternatywylogicznej∨,zapisywanej´srednikiem: ?-ma(zdzich,mercedes),ma(zdzich,alfa_romeo_8c). No ?-ma(zdzich,mercedes);ma(zdzich,alfa_romeo_8c). true Koniunkcj֒eialternatyw֒emo˙znastosowa´ctylkopoprawejstronieregu l (wpoprzednikachimplikacji).Lewastronaregu lymusiby´ctermematomowym. Takiformu lylogiczne,bezalternatyw,albozalternatywamiwy l ֒acznie negatywnychlitera l´ow,alboznajwy˙zejjednymlitera lempozytywnym,nazywa si֒eklauzulamiHorna. Zatemmo˙znastwierdzi´c,˙zePrologoperujejedynieklauzulamiHorna. Prolog—konstrukcjeProloga14W yj a´ sn ie n ie p ro ce d u ra ln e
Wyra˙zaniefakt´owpo l ֒aczonychkoniunkcj ֒ajestr´ownowa˙znezapisywaniutych fakt´owoddzielnie(bazadanychPrologujestjedn ֒awielk ֒akoniunkcj ֒alogiczn ֒a), awi ֒ecniejestdefactopotrzebne.Jednakwyra˙zaniefakt´owpo l ֒aczonych alternatyw֒adajemo˙zliwo´sci,kt´orychniedasi֒ebezalternatywyuzyska´c: ma(zdzich,pieniadze);ma(zdzich,alfa_romeo_8c). Tenfaktwyra˙zawa˙zn ֒aw lasno´s´cpieni ֒edzy:albosi ֒ejetrzyma,albosi ֒eje wydaje.AlejakPrologmia lbykorzysta´cztakiegofaktu,wwyszukiwaniu odpowiedzinazapytanie?Niemo˙zeaniskorzysta´czcz֒e´scipierwszej, iodpowiedzie´c,˙zeZdzichmagot´owk֒e,boniewietegonapewno,anizcz֒e´sci drugiej,ztegosamegopowodu. Takiegoproblemuniema,gdyalternatywawyst֒epujepoprawejstronieregu ly: jest_cool(X):-ma(X,pieniadze);ma(X,alfa_romeo_8c). Abyudowodni´c,˙zekto´sjest ”cool”(ktokolwiek,niekoniecznienaszbohater Zdzich),wystarczysprawdzi´c,˙zemakas֒e,lubalf֒e. Czylimo˙znazapisywa´cteklauzule,zkt´orymiradzisobiealgorytmwyszukiwania. Prolog—konstrukcjeProloga15 Prolog—konstrukcjeProloga16K o n w e rs ja fa k t´o w lo g ic zn yc h d o Pr o lo g u
Rozwa˙zmyproceszamianyfakt´owwyra˙zonychwj֒ezykupredykat´owpierwszego rz ֒edunaklauzulePrologu.Wog´olno´scinale˙zypami ֒eta´c,˙zesta le,funkcje,oraz symbolepredykat´owmusz ֒azaczyna´csi ֒eodma lejlitery,azmienneodwielkiej. Prolog—konstrukcjeProloga17 Prolog—konstrukcjeProloga18Ne g a cj a , a m o ˙ze ra cz e j je j b ra k
WProloguniemasp´ojnikanegacji.Jednakistniejewbudowanypredykatnot, kt´oregoznaczeniemo˙znaokre´sli´cjako: ”niedasi ֒eudowodni´c,˙ze...”. Wniekt´orychprzypadkachmo˙znagou˙zywa´cwcharakterzenegacji,aleniekiedy dajeonnieoczekiwanewyniki. Zawarto´s´cbazydanych: man(dick). dog(spot).?-man(X). X=dick? yes ?-not(man(spot)). yes ?-not(man(X)). no Mo˙znaby lobyoczekiwa´c,˙zePrologznajdzieindywiduum,kt´oreniejest cz lowiekiem. Mo˙znaby lobyoczekiwa´c,˙zeskoroda losi֒eudowodni´cnot(man(spot))totym bardziejpowinnoda´csi֒eudowodni´cnot(man(X)). Jednoidrugieoczekiwaniezawodzi.Mo˙znajedyniewyci ֒agn ֒a´cwniosek,˙zenot jestdziwn֒a,nieintuicyjn֒aform֒aprzeczenia. Prolog—konstrukcjeProloga19 Predykatunegacjinotmo˙znau˙zywa´ctylkowzapytaniach,anie wstwierdzeniachzapami֒etywanychwbaziedanych. Wyja´snieniedlaczegotylkotakaformaprzeczeniajestdost֒epnawPrologu pojawisi ֒ep´o´zniej,anaraziemusimyprzyj ֒a´c,˙zeobowi ֒azujemy´slenie pozytywne,istaramysi ֒enicnienegowa´c. Jednakzwr´o´cmyuwag֒e,˙zesamPrologjestna ladowanymy´sleniem negatywnym,bozaprzeczawszystkiemu,coniejestdlaniegooczywistepo sprawdzeniuswojejbazydanych.T֒ew lasno´s´c,negowaniawszystkiegoconie jestjawnieznane,nazywasi֒eza lo˙zeniem´swiatazamkni֒etego (Closed-WorldAssumption,CWA). WwieluinterpreterachPrologupredykatnotniewyst֒epujejakotaki.Zamiast niegojestdost֒epnyoperator\+otakimsamymdzia laniu. Prolog—konstrukcjeProloga20
Ob li cz e n ia n a st ru k tu ra ch
ToconazywamywPrologustruktur֒a,czylizapispredykatuzargumentami, mo˙znatraktowa´cjakostruktur ֒edanych,ibudowa´czichu˙zyciemobliczenia. Rozwa˙zamynast֒epuj֒ac֒aarytmetyk֒e,gdziewprowadzamyliczbyzapomoc֒a symboluzeroistrukturys(X),kt´oraoznaczanast֒epnik(nast֒epn֒aliczb֒epo) X.Jesttotzw.arytmetykaPeano.Naprzyk lad,liczb֒e5zapisujemywpostaci: s(s(s(s(s(zero))))).Chcemyzdefiniowa´cdodawaniezapomoc֒apredykatu dodaj(Skl1,Skl2,Suma)prawdziwegozawsze,gdySumajestsum ֒a podanychdw´ochsk ladnik´ow,ifa lszywegowpozosta lychprzypadkach: suma(zero,Skl2,Skl2). suma(s(X),Skl2,s(Suma)):-suma(X,Skl2,Suma). Abyprowadzi´cobliczeniawtejarytmetycemusimypos lugiwa´csi ֒enotacj ֒a nast֒epnik´ow,np.˙zebyobliczy´c3+4: ?-suma(s(s(s(zero))),s(s(s(s(zero)))),X). X=s(s(s(s(s(s(s(zero))))))) Zdefiniowaniemno˙zeniawymagatroch֒ewi֒ecejzachodu,spr´obuj! Prolog—typoweschematy21 Prolog—typoweschematy22Ob li cz e n ia ” w st e cz ”
Zauwa˙zmy,˙zewzdefiniowanympredykaciesumadwapierwszeargumenty stanowi ֒adane,atrzeciargumentstanowiwynikoblicze´n.Jesttak,podobniejak winnychj ֒ezykachprogramowania,wkt´orychfunkcjemog ֒amie´cargumenty typu ”out”izwraca´cwnichwyniki.Podobnie,jakwtychinnychj ֒ezykach ”funkcja”niejestdok ladniefunkcj֒awsensiematematycznym,takwPrologu predykatniejestdok ladniepredykatemwsensielogicznym. JednakPrologniemamechanizmudeklarowania,kt´oryargumentjesttypu ”out”,zatemcobysi ֒esta lo,gdyby´smyzamiastzadawa´cprostepytaniatypu 3+4=?zacz ֒elizadawa´cr´ownaniadorozwi ֒azania,typu3+?=4: ?-suma(s(s(s(zero))),X,s(s(s(s(zero))))). X=s(zero); No Dobrze,jedynymrozwi ֒azaniempowy˙zszegor´ownaniajests(zero),inic innego.Tazdolno´s´cdoprowadzeniaoblicze´n ”wstecz”jestefektemubocznym prologowegoalgorytmuprzeszukiwaniabazydanychidopasowywaniawzorc´ow. Prolog—typoweschematy23 Oczywi´sciemo˙zemyposun֒a´csi֒edalej,izada´cpytanie,nakt´oreodpowied´znie jestjednoznaczna:?+?=4.Uzyskamywszystkierozk ladyliczby4nask ladniki: ?-suma(X,Y,s(s(s(s(zero))))). X=zero Y=s(s(s(s(zero)))); X=s(zero) Y=s(s(s(zero))); X=s(s(zero)) Y=s(s(zero)); X=s(s(s(zero))) Y=s(zero); X=s(s(s(s(zero)))) Y=zero; No Maj֒aczdefiniowanemno˙zeniemogliby´smydokonywa´cfaktoryzacjiliczb,anawet wyci ֒aga´cpierwiastki!Spr´obuj. Prolog—typoweschematy24Pr aw d zi w e li cz b y
Prologpotrafipos lugiwa´csi֒eprawdziwymiliczbami,por´ownywa´cje,ioblicza´c wyra˙zenialiczbowe,cho´ctoostatnierobiniech ֒etnie.Sprawd´zmyto, wykorzystuj ֒acoperatorpor´ownania=. ?-0=0. Yes ?-0=1. No ?-2+2=4. No ?-2+2=X. X=2+2 Yes Prolog—obliczenialiczbowe25 Prologuwa˙za,˙zejegopodstawowymzadaniemjestprzeszukiwaniebazydanych idopasowywanieterm´ow,inieb֒edziezawraca lsobieg lowyobliczaniem warto´sci,gdykt´ory´szterm´owjestwyra˙zeniemliczbowym.Zakl֒eciem,kt´ore zmuszaPrologdowykonaniaoblicze´njestoperatoris,kt´oryobliczawyra˙zenie poprawejstronieipodstawia(lubpor´ownuje)podzmienn ֒apolewejstronie: rowna_sie2(X,Y):-X1isX,X1=Y. Mamyterazwynikidobre: ?-rowna_sie(2+2,4). Yes ?-rowna_sie(2+2,X). X=4aler´ownie˙znadalnieakceptowalne,albob l ֒edy: ?-rowna_sie(2+2,2+2). No ?-rowna_sie(X,2+2). ERROR:(user://4:136): is/2:Argumentsarenotsufficientlyinstantiated Pora˙zkawpierwszymprzyk ladziepoprawejwynikaznieobliczeniadrugiego argumentu.Jednakjakpokazujeostatniprzyk lad,obliczeniaprowadzoneprzez isnietoleruj֒aniepodstawionegoargumentupoprawejstronie,zatemismusi by´cstosowaneostro˙znie,pozbadaniupostaciposiadanychargument´ow:czys֒a warto´sciami,czywyra˙zeniami,czypodstawione,czynie.Prologposiadaszereg mechanizm´owdosprawdzaniatejpostaci(patrzdalej). Prolog—obliczenialiczbowe26