Föreläsning 2. Teori. Övningar. Unifiering Unifiering i Prolog Sökning efter bevis. Ett lite större exempel: kampsport.pl Praktisk träning (hemläxa)

Relevanta dokument
Logikprogrammering. Undervisningsmaterialet NYTT för 2013: Learn Prolog Now! SWI Prolog-tolk, startas under tuxedo/ pingvinerna med swipl!

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Föreläsning 9 i programmeringsparadigm. Unifiering (Brna Chapter 4.1).

Föreläsning 3: rekursion

FL 5: Aritmetik. Teori

Traditionell Programmering

DD1361 Programmeringsparadigm HT17

DD1361 Programmeringsparadigm HT15

Ett Logikprogram. Logik och Programmering. Introduktion till PROLOG, dvs. PROgramming in LOGic. Viktiga begrepp/områden i Prolog. Framtiden?

DD1361 Programmeringsparadigm HT16

Prova på-laboration i Prolog

Sommarlägret På Visingsö

FL 6: Definite Clause Grammars (kap. 7)

Svensk biblioteksförenings kommitté för Klassifikationssystem för svenska bibliotek (SAB-systemet)

Semantik och pragmatik (Serie 4)

Våra enkla funktioner eller procedurer

FUZZY LOGIC. Christopher Palm chrpa087

Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

*UXSS YQLQJ±/RJLNPHGWLOOlPSQLQJDUYW

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Innehåll. Föreläsning 7. Satslogiken är för grov. Samma sak i predikatlogik: Första ordningens predikatlogik. Logik med tillämpningar

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

DD1361 Programmeringsparadigm HT15

TATA42: Föreläsning 9 Linjära differentialekvationer av ännu högre ordning

Innehållsförtekning Sida. Inledning 3 Vad är fuzzy logic? 3 Mängder 3 Medlemsfunktioner 5 Operationer 6 Fuzzification 8 Litteraturförteckning 9

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Grundläggande logik och modellteori

Grundläggande logik och modellteori (5DV102)

MAA7 Derivatan. 2. Funktionens egenskaper. 2.1 Repetition av grundbegerepp

Svenska Budo & Kampsportsförbundet Bilaga 2. Organisationsnummer

Vad behövs för att skapa en tillståndsrymd?

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

SF1626 Flervariabelanalys

Motion till riksdagen. 1987/88:Ju810 av Göran Ericsson (m) om karateklubbar. Bakgrund. Kampsportens egenskaper

TATA42: Föreläsning 8 Linjära differentialekvationer av högre ordning

DD1361 Programmeringsparadigm HT15

Grundläggande logik och modellteori

Programmering II (ID1019) :00-17:00

ÖVN 6 - DIFFERENTIALEKVATIONER OCH TRANSFORMMETODER - SF Nyckelord och innehåll. a n (x x 0 ) n.

Robin Stenwall Lunds universitet

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska ni kunna?

Länkning av Prolog under C

3 Deriveringsregler. Vi ska nu bestämma derivatan för dessa fyra funktioner med hjälp av derivatans definition

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Det finns både SM (varje år), EM (vartannat år) och VM (vartannat år). Sverige

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Verbal judo. "Den mjuka vägen" är en modern japansk kampsport skapad av Jigoro Kano ur olika jujutsustilar vid talets slut

Lådmodellen....eller procedure box control flow model. Dynamisk bild av ett prologprogram Förklarar i detalj procedurell läsning av ett program.

TATA42: Föreläsning 7 Differentialekvationer av första ordningen och integralekvationer

Anteckningar för kursen "Analys i en Variabel"

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Modul 1 Mål och Sammanfattning

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska kunnas?

Matematik 5 Kap 3 Derivator och Integraler

Shotokan Karateklubb

FÖRELÄSNING 3 ANDERS MÄRAK LEFFLER IDA/HCS

LEDARE KALENDARIUM I DETTA NUMMER

DD1361 Programmeringsparadigm HT17

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

SF1625 Envariabelanalys

Nada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

Kontinuitet och gränsvärden

Föreläsning 6. SF1625 Envariabelanalys. Hans Thunberg, 9 november 2018

Perunas mjölksyrade grönsaker

Styrelsemöte nr. 16. Datum: Plats: Ölandsgatan 42, Svenska Budo & Kampsportsförbundets kansli Tid: Kl.14:00-18:00

Läsanvisningar till kapitel

5 Blandade problem. b(t) = t. b t ln b(t) = e

DD1361 Programmeringsparadigm. Carina Edlund

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

Robin Stenwall Lunds universitet

Del : Paradigmer allmänt.

Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

Konsten att lösa icke-linjära ekvationssystem

Mer om generaliserad integral

Sidor i boken KB 6, 66

SB&K-nr Röster Antal medlemmar Ombudets namn 019 Boxing gym Idrottsförening Abada Capoeira Göteborg IF Abada Capoeira Umeå -IF

10.1 Linjära första ordningens differentialekvationer

Manual för att arrangera tävling i wushu

M0038M Differentialkalkyl, Lekt 17, H15

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Väl mött! /Ulf Nilsson, red. I DETTA NUMMER. Taekwondo fighting från Korea sid 2. Från Grästorp till Lund sid 3. Ordlista: Grader sid 6 KALENDARIUM

Kapitel 7. Kontinuitet. 7.1 Definitioner

Exempel på ett litet Ada-program

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

13 Potensfunktioner. Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till

Facit till Några extra uppgifter inför tentan Matematik Baskurs. x 2 x

Föreläsninsanteckningar till föreläsning 3: Entropi

Konvertering från sträng. Winstrand Development

DD1350 Logik för dataloger

PIA. Publicerat med.llstånd Titel Text Bild Förlag

Programkonstruktion och Datastrukturer

Grundläggande logik och modellteori (5DV102)

15. Ordinära differentialekvationer

PIA. Publicerat med tillstånd Taekwondo är tuffast Text Lise Blomquist Bild Stina Lövkvist Opal 2006

Buddhismen, lä xä till fredäg 6 feb

Transkript:

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)

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

Unifiering Tänk på exemplet från förra FL, där vi konstaterade att Prolog unifierar med woman(x) woman(mia) och instantierar därmed variabeln X med atomen mia.

Repetition: Prologs termer Terms Simple Terms Constants Variables Atoms Numbers Complex Terms

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.

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

Unifiering Hur går det med... mia och X X

Unifiering Hur går det med... woman(z) och woman(mia) mia z

Unifiering Hur går det med... loves(mia,x) och loves(x,vincent) mia X loves(mia,mia) loves(mia, vincent) X kan ej bindas till två olika värden samtidigt! loves(vincent, vincent) X vincent

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

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 2 mia mia

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)

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.

Prologs unifiering: =/2?- mia = mia. yes?- = unifieringsoperator (inbyggt predikat)

Prologs unifiering: =/2?- mia = mia. yes?- mia = vincent. no?-

Prologs unifiering: =/2?- mia = X. X=mia yes?- Kan mia unifieras med X? Ja, och X instantieras då till mia.

Hur kommer Prolog att reagera??- X=mia, X=vincent. X? mia vincent

Hur kommer Prolog att reagera??- X=mia, X=vincent. no?-, = and 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.

Exempel med komplexa termer?- k(s(g),y) = k(x,t(k)).

Exempel med komplexa termer?- k(s(g),y) = k(x,t(k)). X=s(g) Y=t(k) yes?-

Exempel med komplexa termer?- k(s(g),t(k)) = k(x,t(y)).

Example with complex terms?- k(s(g),t(k)) = k(x,t(y)). X=s(g) Y=k yes?-

Ett sista exempel...?- loves(x,x) = loves(marsellus,mia).

Ett sista exempel...?- loves(x,x) = loves(marsellus,mia). no. loves(x,x) = loves(marsellus,marsellus). loves(x,x) = loves(mia,mia).... skulle fungera.

Prolog och unifiering Prolog använder inte en standard unifieringsalgoritm Betrakta följande förfrågning:?- father(x) = X. Unifierar dessa termer eller ej?

Infinita termer?- father(x) = X. X=father(father(father(father(father(father (father(father(father(father(father(father (father(father(father(father(father(father (father(father(father(father(father(father (father(father(father(father(father(father (father(father(father(father(father(father (father(father(father(father(father(father (father(father(father(father(father(father (

Infinita terms?- father(x) = X. X=father(father(father( )))) yes?-

Obs! swipl på tuxedo:?- father(x) = X. X = father(x)?-

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

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.

Att programmera med unifiering vertical( line(point(x,y), point(x,z))). horizontal( line(point(x,y), point(z,y))). Y X

Att programmera med unifiering vertical( line(point(x,y), point(x,z))). horizontal( line(point(x,y), point(z,y))).?-

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

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

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

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

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

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)

Exempel f(a). f(b). g(a). g(b). h(b). k(x):- f(x), g(x), h(x).?- k(y). För vilket/ vilka Y gäller k?

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).?- k(y). Vi börjar med målet som ställdes.

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). matcha Y mot X Y=X?- k(y).?- f(x), g(x), h(x). Nu får vi en hel del nya delmål från regelns kropp att bevisa

Exempel: sökträd (resolutionsträd) f(a). f(b). g(a). Y=X?- k(y). g(b). h(b). k(x):- f(x), g(x), h(x).?- k(y). matcha X mot a?- f(x), g(x), h(x). X=a?- g(a), h(a). Gäller dessa också?

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).?- k(y). Y=X?- f(x), g(x), h(x). X=a?- g(a), h(a).?- h(a).

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).?- k(y). Y=X?- f(x), g(x), h(x). X=a?- g(a), h(a).?- h(a). Misslyckades bevisa h(a)

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).?- g(a), h(a).?- h(a).?- k(y).?- f(x), g(x), h(x). X=a Y=X X=b?- g(b), h(b). Ett nytt försök: x binds till b

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).?- k(y). Y=X?- f(x), g(x), h(x). X=a X=b?- g(a), h(a).?- g(b), h(b).?- h(a).?- h(b).

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). Y=X?- f(x), g(x), h(x). X=a X=b?- g(a), h(a).?- g(b), h(b).?- h(a).?- h(b). NU!

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). Y=X?- f(x), g(x), h(x). X=a X=b?- g(a), h(a).?- g(b), h(b).?- h(a).?- h(b). Inga andra svar

Ett annat exempel loves(vincent,mia). loves(marsellus,mia). jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y).

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y).

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y).?- loves(a,c), loves(b,c). Vem är svartsjuk på vem...

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y).?- loves(a,c), loves(b,c). A=vincent C=mia?- loves(b,mia). Vilket/vilka B älskar mia?

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y). X=vincent Y=vincent?- loves(a,c), loves(b,c). A=vincent C=mia?- loves(b,mia). B=vincent Ingenting hindrar A = B

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y). X=vincent Y=vincent; X=vincent Y=marsellus?- loves(a,c), loves(b,c). A=vincent C=mia?- loves(b,mia). B=vincent B=marsellus Nu binds B till marsellus

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c), loves(b,c).?- jealous(x,y). X=vincent Y=vincent; X=vincent Y=marsellus;?- loves(a,c), loves(b,c). A=vincent C=mia?- loves(b,mia). B=vincent B=marsellus A=marsellus C=mia?- loves(b,mia). A och C binds på nytt

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c),. loves(b,c). X=vincent Y=marsellus; X=marsellus Y=vincent?- loves(a,c), loves(b,c). A=vincent A=marsellus C=mia C=mia?- loves(b,mia).?- loves(b,mia). B=vincent B=vincent B=marsellus

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c),. loves(b,c). X=marsellus Y=vincent; X=marsellus Y=marsellus?- loves(a,c), loves(b,c). A=vincent A=marsellus C=mia C=mia?- loves(b,mia).?- loves(b,mia). B=vincent B=vincent B=marsellus B=marsellus

Ett annat exempel loves(vincent,mia). loves(marsellus,mia).?- jealous(x,y). X=A Y=B jealous(a,b):- loves(a,c),. loves(b,c). X=marsellus Y=vincent; X=marsellus Y=marsellus; no?- loves(a,c), loves(b,c). A=vincent A=marsellus C=mia C=mia?- loves(b,mia).?- loves(b,mia). B=vincent B=vincent B=marsellus B=marsellus

Ett nytt exempel: kampsport.pl

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

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

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

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.

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

Ett nytt exempel: kampsport.pl?- harvapen(aikido, X). X = kapp ; X = svard ; false. Jag vill veta vilka vapen aikido har?- harvapen(aikido, _). true ; true ; false.?- harvapen(x, svard). X = kungfu ; X = ninjutsu ; X = taiji ; X = aikido ; X = kendo ; X = iaido ; X = katorishintoryu. Jag vill veta om aikido har vapen överhuvudtaget Jag vill veta vilka grenar som tränar med svärd

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.

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.

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.

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.

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.

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

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

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. Obs! Igen, ofullständig beskrivning; också ex. ninjutsu har både slag och sparkar... för att dom har slag för att dom har sparkar

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.

Ett nytt exempel: kampsport.pl?- ejforbarn(karate). false.?- ejforbarn(aikido). false.?- ejforbarn(kungfu). true ; true ; true ; false. har(kungfu, sabel). har(kungfu, svard). har(kungfu, spjut).

Ett nytt exempel: kampsport.pl?- ejforbarn(kungfu). true ; true ; 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).

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

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

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

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

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

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)

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.