© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 2 Teori –Unifiering –Unifiering i Prolog –Sökning efter bevis Övningar –Ett lite större.

Slides:



Advertisements
Liknande presentationer
Introduktion till dagens övning
Advertisements

F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
När man skjuter ett skott i innebandy är det framförallt två faktorer som påverkar hur långt ut i sidled bollen kommer att gå: Kroppens läge och lutning.
det är den här processen det är fråga om… fortsätt bildspel.
Att dras in mot föremålets mitt
Vi karlar får alltid höra om “reglerna” som gäller från våra kvinnor
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Talföljder formler och summor
F3 Matematikrep Summatecknet Potensräkning Logaritmer Kombinatorik.
Högtidstal Retorik.
Ungas frågor om alkohol och droger
hej och välkomna EKVATIONER Ta reda på det okända talet.
Kropp och kläder En resa i tiden.
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Prolog, Mån 16/9 Rebecca Jonson.
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 4: Listor (kap. 4 & 6) Teori –Introducera listor, en viktig rekursiv datastruktur som ofta används.
Föreläsning 2 21 jan 2008.
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
Multiplicera lika tal med 3 siffror som slutar på 55
Rörelse Kapitel 7.
Emil Eriksson 5/5 -08 Judo är från Japan och grundades av Jigoro Kano...
Föreläsning 2 Datalogi för E1 2D1343
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
Community Readiness Baseras på teorier om Community Developement -Organisationsteori -Psykologiteorier Har använts inom alkohol och drogmissbruk, våld.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 3: rekursion Teori –Introducera rekursiva definitioner i Prolog –Fyra exempel –Visa att.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 6: Definite Clause Grammars (kap. 7) Teori –Introducerar kontextfria grammatikor och några besläktade.
ATTRAKTIVARE ARBETSGIVARE
Vi karlar får alltid höra om “reglerna” som gäller från våra kvinnor. Här följer nu några regler från oss karlar.
Logikprogrammering och Prolog
Fotosyntesen Hur fungerar den?.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Informationskompetens. Eleven ska kunna… orientera sig i en komplex verklighet med stort informationsflöde och snabb förändringstakt. Deras förmåga att.
Ekvationer Det är inte så svårt?.
Kemins grunder 1 Kemi förr och nu.
Att sälja Lions Quest-kurser till skolor /14.
Frågor om elevinflytande till elever i åk 3 – 9 i grundskolan
Känna till och ha provat metoder och verktyg för processledning
Att besöka skolor Camilla Bergvall, ordförande Djurens Rätt Helsingborg & Hanna Eriksson, vice ordförande Djurens Rätt Helsingborg
Namnrum, räckvidd och rekursion Linda Mannila
En mycket vanlig frågeställning gäller om två storheter har ett samband eller inte, många gånger är det helt klart: y x För en mätserie som denna är det.
Logikprogrammering 21/10 Binära träd
En guide för arbeten i SO
Formell logik Kapitel 9 Robin Stenwall Lunds universitet.
Naturvetenskaplig undersökning
Logikprogrammering 16/ : operatorer Staffan Larsson.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Logikprogrammering –Undervisningsmaterialet NYTT för 2013: –Learn Prolog Now! –SWI Prolog-tolk, startas.
Föreläsning 7 Fysikexperiment 5p Poissonfördelningen Poissonfördelningen är en sannolikhetsfördelning för diskreta variabler som är mycket.
”strid” med ord, meningsbyte
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
Logikprogrammering ons 4/9 Rebecca Jonson.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 13: Resolution Resolution i satslogiken Resolution i predikatlogiken.
Love, love, love Bibelstudium, Love Each Other,
Vad tycker du? När man diskuterar berättar man vad man tycker om något. När jag tycker något har jag en åsikt. Ett finare ord för att säga något är att.
Kort omvärldsanalys Budosport ID problem | Budo ID problem | Kampsport med ID | Budosport med ID Livskraftig Budo & Kampsport - medlemsutveckling Kategori.
Ska Sverige ha dödsstraff eller inte?
Sundsvalls DFF Tips hur vi förbereder våra målvakter till träning och match el Psst! Kolla detta!
Formell logik Kapitel 7 och 8
Presentationens avskrift:

© 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)

© 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

© 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.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Terms Simple TermsComplex Terms ConstantsVariables AtomsNumbers Repetition: Prologs termer

© 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.

© 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

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Hur går det med... mia och X X

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Unifiering Hur går det med... woman(Z) och woman(mia) miaz

© 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)

© 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

© 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

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Reviderad definition 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)

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Reviderad definition 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.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prologs unifiering: =/2 ?- mia = mia. yes ?- = unifierings- operator (inbyggt predikat)

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prologs unifiering: =/2 ?- mia = mia. yes ?- mia = vincent. no ?-

© 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.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Hur kommer Prolog att reagera? ?- X=mia, X=vincent. X miavincent ?

© 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

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel med komplexa termer ?- k(s(g),Y) = k(X,t(k)).

© 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 ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exempel med komplexa termer ?- k(s(g),t(k)) = k(X,t(Y)).

© 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 ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett sista exempel... ?- loves(X,X) = loves(marsellus,mia).

© 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.

© 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?

© 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(

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Infinita terms ?- father(X) = X. X=father(father(father(…)))) yes ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Obs! swipl på tuxedo: ?- father(X) = X. X = father(X) ?-

© 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

© 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.

© 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

© 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))). ?-

© 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 ?-

© 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 ?-

© 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 ?-

© 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 ?-

© 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). ?-

© 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)

© 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?

© 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.

© 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

© 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å?

© 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

© 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)

© 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

© 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

© 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!

© 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

© 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).

© 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).

© 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...

© 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?

© 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

© 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

© 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

© 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

© 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

© 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

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett nytt exempel: kampsport.pl

© 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 */

© 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).

© 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).

© 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.

© 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).

© 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

© 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. */

© 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.

© 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.

© 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.

© 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.

© 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).

© 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).

© 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...

© 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.

© 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).

© 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).

© 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).

© 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).

© 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).

© 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).

© 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.

Det var det... © Patrick Blackburn, Johan Bos & Kristina Striegnitz

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)

© 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.