Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avLars-Erik Isaksson
1
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 2 Teori –Unifiering –Unifiering i Prolog –Sökning efter bevis Övningar –Ett lite större exempel: kampsport.pl –Praktisk träning (hemläxa)
2
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Målet med denna föreläsning Diskutera unifiering i Prolog –Visa hur Prologs unifiering skiljer sig från standardunifiering Förklara den sökstrategi som Prolog använder sig av när den försöker härleda ny information från redan existerande dito, mha modus ponens
3
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Tänk på exemplet från förra FL, där vi konstaterade att Prolog unifierar woman(X) med woman(mia) och instantierar därmed variabeln X med atomen mia.
4
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Terms Simple TermsComplex Terms ConstantsVariables AtomsNumbers Repetition: Prologs termer
5
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering “Working definition”: Två termer unifierar om de är samma term eller om de innehåller variabler som kan uniformt instantieras med termer på så sätt att de resulterande termerna är lika.
6
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Detta betyder att: mia och mia unifierar 42 och 42 unifierar woman(mia) och woman(mia) unifierar Detta betyder också att: vincent och mia inte unifierar woman(mia) och woman(jody) inte unifierar
7
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Hur går det med... mia och X X
8
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Hur går det med... woman(Z) och woman(mia) miaz
9
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Hur går det med... loves(mia,X) och loves(X,vincent) X mia vincent X X kan ej bindas till två olika värden samtidigt! loves(vincent, vincent) loves(mia,mia) loves(mia, vincent)
10
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Instantieringar När Prolog unifierar två termer, utför det alla de nödvändiga instantieringarna, så att termerna därefter är lika Detta gör unifieringen en kraftig programmingsmekanism
11
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Reviderad definition 1/3 1.Om T 1 och T 2 är konstanter, så unifierar T 1 och T 2 ifall de är samma atom eller samma tal. 2 mia
12
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Reviderad definition 2/3 1.... 2.Om T 1 är en variabel och T 2 är vilken som helst term (any type of term), så unifierar T 1 och T 2, och T 1 instantieras till T 2. (och vice versa) X Y mia woman(mia)
13
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Reviderad definition 3/3 1.... 2.... 3.Om T 1 och T 2 är komplexa termer så unifierar de ifall: a)De har samma funktor och aritet, och b)alla deras motsvarande argument unifierar, och c)variabelinstantieringarna är kompatibla.
14
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prologs unifiering: =/2 ?- mia = mia. yes ?- = unifierings- operator (inbyggt predikat)
15
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prologs unifiering: =/2 ?- mia = mia. yes ?- mia = vincent. no ?-
16
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prologs unifiering: =/2 ?- mia = X. X=mia yes ?- Kan mia unifieras med X? Ja, och X instantieras då till mia.
17
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Hur kommer Prolog att reagera? ?- X=mia, X=vincent. X miavincent ?
18
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Hur kommer Prolog att reagera? ?- X=mia, X=vincent. no ?- Varför? Efter att ha jobbat genom det första delmålet har Prolog instantierat X till mia, så att det nu inte längre kan unifiera X med vincent. Därför misslyckas det andra delmålet. ‘,’ = and
19
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel med komplexa termer ?- k(s(g),Y) = k(X,t(k)).
20
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel med komplexa termer ?- k(s(g),Y) = k(X,t(k)). X=s(g) Y=t(k) yes ?-
21
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel med komplexa termer ?- k(s(g),t(k)) = k(X,t(Y)).
22
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example with complex terms ?- k(s(g),t(k)) = k(X,t(Y)). X=s(g) Y=k yes ?-
23
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett sista exempel... ?- loves(X,X) = loves(marsellus,mia).
24
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett sista exempel... ?- loves(X,X) = loves(marsellus,mia). no. loves(X,X) = loves(marsellus,marsellus). loves(X,X) = loves(mia,mia).... skulle fungera.
25
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prolog och unifiering Prolog använder inte en standard unifieringsalgoritm Betrakta följande förfrågning: ?- father(X) = X. Unifierar dessa termer eller ej?
26
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Infinita termer ?- father(X) = X. X=father(father(father(father(father(father (father(father(father(father(father(father( father(father(father(father(father(father(f ather(father(father(father(father(father(f ather(father(father(father(father(father(f ather(father(father(father(father(father(f ather(father(father(father(father(father(f ather(father(father(father(father(father(
27
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Infinita terms ?- father(X) = X. X=father(father(father(…)))) yes ?-
28
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Obs! swipl på tuxedo: ?- father(X) = X. X = father(X) ?-
29
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Occurs Check En standard unifieringsalgoritm utför en occurs check Om den ombes att unifiera en variabel med en annan term kontrollerar den ifall variabeln ifråga ingår i termen I Prolog: ?- unify_with_occurs_check(father(X), X). no
30
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Occurs Check Prolog på tuxedo: ?- father(X) = X. X = father(X). ?- man(X) = X. X = man(X). ?- unify_with_occurs_check(father(X),X). false.
31
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Att programmera med unifiering vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ° ° ° ° X Y
32
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Att programmera med unifiering vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ?-
33
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Programming with Unification vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ?- vertical(line(point(1,1),point(1,3))). yes ?-
34
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Att programmera med unifiering vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ?- vertical(line(point(1,1),point(1,3))). yes ?- vertical(line(point(1,1),point(3,2))). no ?-
35
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Att programmera med unifiering vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ?- horizontal(line(point(1,1),point(1,Y))). Y = 1; no ?-
36
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Att programmera med unifiering vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ?- horizontal(line(point(2,3),Point)). Point = point(_554,3); no ?-
37
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prolog på tuxedo... vertical( line(point(X,Y), point(X,Z))). horizontal( line(point(X,Y), point(Z,Y))). ?- horizontal(line(point(2,3),Point)). Point = point(_G8, 3). ?-
38
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Att söka efter bevis Nu när vi vet om unifiering, kan vi börja se hur Prolog söker genom sin kunskapsbas för att se om ett mål kan satisfieras. Med andra ord: vi är redo att börja lära oss sökning efter bevis (proof search)
39
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). För vilket/vilk a Y gäller k?
40
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Vi börjar med målet som ställdes.
41
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- f(X), g(X), h(X). Y=X matcha Y mot X Nu får vi en hel del nya delmål från regelns kropp att bevisa
42
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). X=a Y=X matcha X mot a Gäller dessa också?
43
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a Y=X
44
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a † Y=X Misslyckade s bevisa h(a)
45
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b † Y=X Ett nytt försök: x binds till b
46
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b ?- h(b). † Y=X
47
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=b ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b ?- h(b). † Y=X NU!
48
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=b; no ?- ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b ?- h(b). † Y=X Inga andra svar
49
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y).
50
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y).
51
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y). ?- loves(A,C), loves(B,C). X=AY=B Vem är svartsjuk på vem...
52
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia X=AY=B Vilket/vilka B älskar mia?
53
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y). X=vincent Y=vincent ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia B=vincent X=AY=B Ingenting hindrar A = B
54
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y). X=vincent Y=vincent; X=vincent Y=marsellus ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia B=vincent B=marsellus X=AY=B Nu binds B till marsellus
55
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). ?- jealous(X,Y). X=vincent Y=vincent; X=vincent Y=marsellus; ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia ?- loves(B,mia). A=marsellus C=mia B=vincent B=marsellus X=AY=B A och C binds på nytt
56
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). …. X=vincent Y=marsellus; X=marsellus Y=vincent ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia ?- loves(B,mia). A=marsellus C=mia B=vincent B=marsellus X=AY=B
57
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). …. X=marsellus Y=vincent; X=marsellus Y=marsellus ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia ?- loves(B,mia). A=marsellus C=mia B=vincent B=marsellus X=AY=B
58
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(A,B):- loves(A,C), loves(B,C). …. X=marsellus Y=vincent; X=marsellus Y=marsellus; no ?- jealous(X,Y). ?- loves(A,C), loves(B,C). ?- loves(B,mia). A=vincent C=mia ?- loves(B,mia). A=marsellus C=mia B=vincent B=marsellus X=AY=B
59
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl
60
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl /* Ett litet expertsystem om olika kampsporter - kan med fördel utvidgas */ kampart(kungfu). /* en gemensam benämning för ett flertal kinesiska kamparter */ kampart(karate). /* den tomma handens väg */ kampart(sumo). /* De välberömda massiva brottarna */ kampart(ninjutsu). /* ninjornas hemliga kampkonster */ kampart(aikido). /* den harmoniska vägen */ kampart(judo). /* den mjuka vägen (med hårda fall =) */ kampart(kendo). /* japansk svärd med parkamp */ kampart(iaido). /* konsten att dra det japanska svärdet - ensam */ kampart(kyudo). /* bågskyttets väg */ kampart(taido). /* kroppens väg - extremt akrobatiskt */ kampart(taekwondo)./* koreansk kampsport */ kampart(hapkido). /* mjukare koreansk kampsport */ kampart(kobudo). /* traditionella vapen från Okinawa */ kampart(tessenjutsu). /* den japanska kampsolfjäderns teknik */ kampart(katorishintoryu). /* vapenskola från 1400-talet */
61
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl delGrenAv(taiji, kungfu). delGrenAv(wingchun, kungfu). delGrenAv(prayingmantis, kungfu). delGrenAv(choylifut, kungfu). delGrenAv(shotokan, karate). delGrenAv(shotokai, karate). delGrenAv(goryu, karate). delGrenAv(sankukai, karate). delGrenAv(yuishinkai, karate).
62
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harstammarFran(kungfu, kina). harstammarFran(kobudo, okinawa). harstammarFran(karate, okinawa). harstammarFran(sumo, japan). harstammarFran(ninjutsu, japan). harstammarFran(aikido, japan). harstammarFran(judo, japan). harstammarFran(kendo, japan). harstammarFran(iaido, japan). harstammarFran(kyudo, japan). harstammarFran(taido, japan). harstammarFran(tessenjutsu, japan). harstammarFran(katorishintoryu, japan). harstammarFran(taekwondo, korea). harstammarFran(hapkido, korea). harstammarFran(X,Y) :- delGrenAv(X,Z), harstammarFran(Z,Y).
63
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harstammarFran(X,Y) :- delGrenAv(X,Z), harstammarFran(Z,Y). ?- harstammarFran(karate, X). X = okinawa. ?- harstammarFran(goryu, X). X = okinawa ; false. ?- harstammarFran(X, okinawa). X = kobudo ; X = karate ; X = shotokan ; X = shotokai ; X = goryu ; X = sankukai ; X = yuishinkai ; false.
64
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl vapen(sabel). /* det breda svärdet */ vapen(svard). /*smalare svärd, ex. katana */ vapen(spjut). /* ex. japansk yari */ vapen(kapp). /* hanbo, jo, bo */ vapen(bage). /* en lång båge för kyudo */ vapen(nunchaku). /* korta käppar med kedja emellan */ vapen(kusarifundo). /* en viktad kedja */ vapen(kusarigama). /* kedjevapen med en hacka i ena ändan */ vapen(shuriken). /* kaststjarna */ vapen(solfjader). /* japansk tessen eller taijishan */ vapen(naginata). /* tank dig en lång ishockeylatka, skarpt */ vapen(sai). /* en kort trespiksgaffel */ harVapen(X,Y) :- har(X,Y), vapen(Y).
65
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl ?- harVapen(aikido, X). X = kapp ; X = svard ; false. ?- harVapen(aikido, _). true ; false. ?- harVapen(X, svard). X = kungfu ; X = ninjutsu ; X = taiji ; X = aikido ; X = kendo ; X = iaido ; X = katorishintoryu. Jag vill veta vilka vapen aikido har Jag vill veta om aikido har vapen överhuvudtaget Jag vill veta vilka grenar som tränar med svärd
66
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harEjVapen(X) :- kampart(X), not(harVapen(X,_)). /* X binds har till de olika kamparterna som sedan testas för vapen. Man skulle också kunna ställa frågan till systemet, och då får man samma svar. Vad man INTE kan ha är definitionen eller frågan not(harVapen(X,_)) ensam; systemresponsen blir "fail". not kan inte här användas för att generera de önskade svaren. Så fort harVapen(X,_) kan bevisas med något X och något vapen, misslyckas not. */
67
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl /* not(harVapen(X,_)) ensam; systemresponsen blir "fail". not kan inte här användas för att generera de önskade svaren. Så fort harVapen(X,_) kan bevisas med något X och något vapen, misslyckas not. */ ?- not(harVapen(X, _)). false.
68
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harEjVapen(X) :- kampart(X), not(harVapen(X,_)). /* X binds har till de olika kamparterna som sedan testas för vapen. Man skulle också kunna ställa frågan till systemet, och då får man samma svar. */ ?- harEjVapen(X). X = karate ; X = sumo ; X = judo ; X = taido ; X = taekwondo ; X = hapkido ; false. Detta stämmer ju inte med verkligheten, men nog med vår slutna värld, där man inte explicit har registrerat några vapen för karate.
69
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harEjVapen(X) :- kampart(X), not(harVapen(X,_)). /* X binds har till de olika kamparterna som sedan testas för vapen. Man skulle också kunna ställa frågan till systemet, och då får man samma svar. */ ?- harEjVapen(X). X = karate ; X = sumo ; X = judo ; X = taido ; X = taekwondo ; X = hapkido ; false. Regeln harVapen borde korrigeras så, att om X är delgren av Y, och harVapen gäller för X, så gäller harVapen även för Y. Då räknas kobudos vapen som karates.
70
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harEjFall(X) :- kampart(X), not(har(X, fallteknik)). ?- harEjFall(X). X = karate ; X = kendo ; X = iaido ; X = kyudo ; X = taido ; X = taekwondo ; X = kobudo ; X = tessenjutsu ; X = katorishintoryu. Om du inte gillar ukemin... Ljuger igen... taidos kast har inte blivit registrerade, och åtm goryu bland karategrenar förutsätter både kast och fall.
71
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl har(yuishinkai, kast). har(sumo, kast). har(ninjutsu, kast). har(kungfu, kast). har(aikido, kast). har(judo, kast). har(jujutsu, kast). har(hapkido, kast). har(karate, sparkar). har(kungfu, sparkar). har(taekwondo, sparkar). har(jujutsu, sparkar). har(karate, slag). har(kungfu, slag). har(taekwondo, slag). har(jujutsu, slag). har(ninjutsu, slag). har(taido, slag). har(aikido, slag). har(ninjutsu, struptag). har(jujutsu, struptag). har(karate, tavlingar). har(kungfu, tavlingar). har(jujutsu, tavlingar). har(sumo, tavlingar). har(judo, tavlingar). har(kendo, tavlingar). har(taido, tavlingar). har(taekwondo, tavlingar). har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut). har(kobudo, kapp). har(kobudo, nunchaku). har(kobudo, sai). har(ninjutsu, kapp). har(ninjutsu, nunchaku). har(ninjutsu, kusarifundo).
72
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl har(ninjutsu, kusarigama). har(ninjutsu, shuriken). har(ninjutsu, svard). har(taiji, solfjader). har(taiji, svard). har(taiji, sabel). har(aikido, kapp). har(aikido, svard). har(kendo, svard). har(iaido, svard). har(kyudo, bage). har(tessenjutsu, solfjader). har(katorishintoryu, kapp). har(katorishintoryu, spjut). har(katorishintoryu, svard). har(katorishintoryu, naginata). har(X, fallteknik) :- har(X, kast). har(X, blockeringar) :- har(X, slag). har(X, blockeringar) :- har(X, sparkar).
73
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl ?- har(X, sparkar). X = karate ; X = kungfu ; X = taekwondo ; X = jujutsu. ?- har(X, blockeringar). X = karate ; X = kungfu ; X = taekwondo ; X = jujutsu ; X = ninjutsu ; X = taido ; X = aikido ; X = karate ; X = kungfu ; X = taekwondo ; X = jujutsu. för att dom har slag för att dom har sparkar Obs! Igen, ofullständig beskrivning; också ex. ninjutsu har både slag och sparkar...
74
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl harJuniorVerksamhet(aikido). harJuniorVerksamhet(karate). harJuniorVerksamhet(judo). harJuniorVerksamhet(taido). harJuniorVerksamhet(taekwondo). harJuniorverksamhet(jujutsu). ejForBarn(X) :- harVapen(X, _), not(harJuniorVerksamhet(X)). ejForBarn(X) :- har(X, struptag), not(harJuniorVerksamhet(X)). Strypningar tränas inte med barn under 15 år. När det tränas bland vuxna, ska åtm. en lärare med svart bälte vara närvarande.
75
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl ?- ejForBarn(karate). false. ?- ejForBarn(aikido). false. ?- ejForBarn(kungfu). true ; false. har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut).
76
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl ?- ejForBarn(kungfu). true ; false. ?- trace. true. [trace] ?- ejForBarn(kungfu). Call: (6) ejForBarn(kungfu) ? creep Call: (7) harVapen(kungfu, _G393) ? creep Call: (8) har(kungfu, _G393) ? creep Exit: (8) har(kungfu, kast) ? creep Call: (8) vapen(kast) ? creep Fail: (8) vapen(kast) ? creep Redo: (8) har(kungfu, _G393) ? creep... har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut).
77
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl Exit: (8) har(kungfu, sparkar) ? creep Call: (8) vapen(sparkar) ? creep Fail: (8) vapen(sparkar) ? creep Redo: (8) har(kungfu, _G393) ? creep Exit: (8) har(kungfu, slag) ? creep Call: (8) vapen(slag) ? creep Fail: (8) vapen(slag) ? creep Redo: (8) har(kungfu, _G393) ? creep Exit: (8) har(kungfu, tavlingar) ? creep Call: (8) vapen(tavlingar) ? creep Fail: (8) vapen(tavlingar) ? creep Redo: (8) har(kungfu, _G393) ? creep Exit: (8) har(kungfu, sabel) ? creep Call: (8) vapen(sabel) ? creep Exit: (8) vapen(sabel) ? creep Exit: (7) harVapen(kungfu, sabel) ? creep ^ Call: (7) not(harJuniorVerksamhet(kungfu)) ? creep Call: (8) harJuniorVerksamhet(kungfu) ? creep Fail: (8) harJuniorVerksamhet(kungfu) ? creep ^ Exit: (7) not(user:harJuniorVerksamhet(kungfu)) ? creep Exit: (6) ejForBarn(kungfu) ? creep true ; har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut).
78
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl Redo: (8) har(kungfu, _G393) ? creep Exit: (8) har(kungfu, svard) ? creep Call: (8) vapen(svard) ? creep Exit: (8) vapen(svard) ? creep Exit: (7) harVapen(kungfu, svard) ? creep ^ Call: (7) not(harJuniorVerksamhet(kungfu)) ? creep Call: (8) harJuniorVerksamhet(kungfu) ? creep Fail: (8) harJuniorVerksamhet(kungfu) ? creep ^ Exit: (7) not(user:harJuniorVerksamhet(kungfu)) ? creep Exit: (6) ejForBarn(kungfu) ? creep true ; har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut).
79
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl Redo: (8) har(kungfu, _G393) ? creep Exit: (8) har(kungfu, spjut) ? creep Call: (8) vapen(spjut) ? creep Exit: (8) vapen(spjut) ? creep Exit: (7) harVapen(kungfu, spjut) ? creep ^ Call: (7) not(harJuniorVerksamhet(kungfu)) ? creep Call: (8) harJuniorVerksamhet(kungfu) ? creep Fail: (8) harJuniorVerksamhet(kungfu) ? creep ^ Exit: (7) not(user:harJuniorVerksamhet(kungfu)) ? creep Exit: (6) ejForBarn(kungfu) ? creep true ; har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut).
80
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl Redo: (8) har(kungfu, _G393) ? creep Call: (9) har(kungfu, kast) ? creep Exit: (9) har(kungfu, kast) ? creep Exit: (8) har(kungfu, fallteknik) ? creep Call: (8) vapen(fallteknik) ? creep Fail: (8) vapen(fallteknik) ? creep Redo: (9) har(kungfu, kast) ? creep Fail: (9) har(kungfu, kast) ? creep Redo: (8) har(kungfu, _G393) ? creep Call: (9) har(kungfu, slag) ? creep Exit: (9) har(kungfu, slag) ? creep Exit: (8) har(kungfu, blockeringar) ? creep Call: (8) vapen(blockeringar) ? creep Fail: (8) vapen(blockeringar) ? creep Redo: (9) har(kungfu, slag) ? creep Fail: (9) har(kungfu, slag) ? creep Redo: (8) har(kungfu, _G393) ? creep Call: (9) har(kungfu, sparkar) ? creep Exit: (9) har(kungfu, sparkar) ? creep Exit: (8) har(kungfu, blockeringar) ? creep har(X, fallteknik) :- har(X, kast). har(X, blockeringar) :- har(X, slag). har(X, blockeringar) :- har(X,sparkar).
81
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl Call: (8) vapen(blockeringar) ? creep Fail: (8) vapen(blockeringar) ? creep Redo: (9) har(kungfu, sparkar) ? creep Fail: (9) har(kungfu, sparkar) ? creep Fail: (8) har(kungfu, _G393) ? creep Fail: (7) harVapen(kungfu, _G393) ? creep Redo: (6) ejForBarn(kungfu) ? creep Call: (7) har(kungfu, struptag) ? creep Fail: (7) har(kungfu, struptag) ? creep Fail: (6) ejForBarn(kungfu) ? creep false. [trace] ?- notrace. true. [debug] ?- nodebug. true. ?- Inga ytterligare sätt att bevisa varför kungfu inte lämpar sig för barn.
82
Det var det... © Patrick Blackburn, Johan Bos & Kristina Striegnitz
83
Sammandrag av dagens FL Under denna föreläsning har vi –definierat unifiering –tittat på skillnaden mellan standard unifiering och Prologs unifiering –introducerat sökträd (resolutionsträd)
84
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Nästa föreläsning Diskuterar rekursion i Prolog –Introducerar rekursiva definitioner i Prolog –Visar att det kan finnas diskrepanser mellan den deklarativa betydelsen av ett Prologprogram och dess procedurala betydelse.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.