Innehåll: Föreläsning 1-2. Hur kan vi nås? Kursens mål: Kursmaterial. Examination. Logik med tillämpningar

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

Föreläsning 5. Deduktion

DD1361 Programmeringsparadigm HT17

Imperativ programmering

DD1361 Programmeringsparadigm HT16

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

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

DD1361 Programmeringsparadigm HT15

Varför är logik viktig för datavetare?

Grundläggande logik och modellteori (5DV102)

Grundläggande logik och modellteori (5DV102)

Tommy Färnqvist, IDA, Linköpings universitet. 2 Strukturer Domäner Tolkningar... 3

Filosofisk Logik (FTEA21:4) föreläsningsanteckningar/kompendium. v. 2.0, den 29/ III. Metalogik 17-19

DD1350 Logik för dataloger. Fö 7 Predikatlogikens semantik

Hornklausuler i satslogiken

Formell logik Föreläsning 1. Robin Stenwall

Lite om bevis i matematiken

Klassdeklaration. Metoddeklaration. Parameteröverföring

Grundläggande logik och modellteori

DD1350 Logik för dataloger. Vad är logik?

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

Grundläggande logik och modellteori

p /\ q r DD1350 Logik för dataloger Kort repetition Fö 3 Satslogikens semantik

Om semantisk följd och bevis

Prova på-laboration i Prolog

Kursanalys för Programmeringsparadigm 2D1361, läsperiod 1 och 2 läsåret 2005/2006

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

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

Programmeringsteknik med C och Matlab

Traditionell Programmering

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Tommy Färnqvist, IDA, Linköpings universitet. 1 Kursadministration 1. 2 Introduktion Varför logik? Satslogik... 2

Formell logik Föreläsning 1. Robin Stenwall

Övningshäfte 1: Logik och matematikens språk

Grundläggande logik och modellteori

Viktiga frågor att ställa när ett argument ska analyseras och sedan värderas:

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

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

DD1350 Logik för dataloger

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

13. CHURCH S OCH GÖDELS SATSER. KORT ORIENTERING OM BERÄKNINGSBARHET, EFFEKTIV UPPRÄKNELIGHET OCH AVGÖRBARHET.

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

de var svåra att implementera och var väldigt ineffektiva.

Satslogik grundläggande definitioner 3. Satslogik. Uppgift 1. Satslogikens syntax (välformade formler) Satslogikens semantik (tolkningar)

DD1350 Logik för dataloger

TDIU01 - Programmering i C++, grundkurs

Semantik och pragmatik

Parameteröverföring. Exempel. Exempel. Metodkropp

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

7, Diskreta strukturer

NUMERISKA METODER HT01. Energiteknik & Teknisk fysik HT01. Institutionen för Datavetenskap Umeå Universitet

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Grundläggande logik och modellteori

Matematikens grundvalar och programmering av datorer

MATEMATIKENS SPRÅK. Avsnitt 1

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

7, Diskreta strukturer

Kompletteringsmaterial. K2 Något om modeller, kompakthetssatsen

Innehåll. Inblandade personer. ÿkurspresentation Inblandade personer Administration Målsättning Förkunskaper Kursutvärdering Upplägg Översikt

Tal till Solomon Feferman

8. Naturlig härledning och predikatlogik

Logik och kontrollstrukturer

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Lars-Henrik Eriksson

Grundläggande logik och modellteori

10. Mängder och språk

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

K2 Något om modeller, kompakthetssatsen

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

Filosofisk logik Kapitel 19. Robin Stenwall Lunds universitet

Grundläggande logik och modellteori

Sanning och lögnare. Rasmus Blanck VT2017. FT1200, LC1510 och LGFI52

Föreläsning 8. Innehåll. Satisfierbarhet hos en formel. Logik med tillämpningar

Programmering A. Johan Eliasson

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Objektorienterad Programmering (TDDC77)

Föreläsning 1: Introduktion till kursen

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

Normalisering av meningar inför resolution 3. Steg 1: Eliminera alla och. Steg 2: Flytta alla negationer framför atomära formler

729G06 Logik FÖRELÄSNING 1 ANDERS MÄRAK LEFFLER IDA/HCS

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Algebra I, 1MA004. Lektionsplanering

Övningshäfte 2: Induktion och rekursion

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Logik och modaliteter

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Filosofisk Logik. föreläsningsanteckningar/kompendium (FTEA21:4) v. 2.0, den 5/ Kompakthet och Löwenheim-skolemsatsen

Formell logik Kapitel 3 och 4. Robin Stenwall Lunds universitet

9. Predikatlogik och mängdlära

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

DD1350 Logik för dataloger. Fö 2 Satslogik och Naturlig deduktion

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

Datastrukturer och algoritmer

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Övningsuppgifter kapitel 8

Grundläggande logik och modellteori

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Transkript:

Innehåll: Föreläsning 1-2 Logik med tillämpningar 010215 Administration Registrering Den gamla kursutvärderingen Genomgång av kursmaterialet Laborationsinformation Försäljning av material Introduktion till kursen Prolog "Getting started" - LPAs programmeringsmiljö, manualer Fakta, regler, mål Prolog-programmens syntax och semantik Rekursiva regler, Terminering och ordning av regler och mål Kapitel 1-2: Topic 1-4 1 2 Hur kan vi nås? 3 1 = Johan Rokka rokka@cs.umu.se 090-786 57 63 2 = Lena Kallin Westin kallin@cs.umu.se 090-786 68 33 3 = Ulrika Hägglund ulrika@cs.umu.se 090-786 71 83 Kursens mål: Ge grundläggande kunskaper om och förståelse för formella logiska system, Ge grundläggande kunskaper i dess tillämpningar, exemplifierat med teorembevisning, tillämpningar inom AI, samt logikprogrammering (i språket Prolog). Kursmaterial Kurslitteratur: Logic and programming in logic, Ramin Yasdi. Hela boken ingår Kompendium med kompletterande artiklar (15:-) Övrigt kursmaterial: Laborationer, gruppövningar, gamla tentor, schema, etc. Websidor + lila kompendium (gratis) OH-bilder från föreläsningarna. Finns på websidorna senast dagen efter föreläsningen. Kan fås på papper (55:-) Examination Teorimoment 3p, betyg U, 3, 4, 5 Tentamen på 40p 2 tillfällen + uppsamlingstenta i augusti Praktiskt moment 2p, betyg U, G Tre stycken laborationer 2 Prolog-laborationer och 1 predikatlogik-laboration Båda momenten måste vara klar innan betyg på kursen ges

Vad händer med kursen? 4-5 år sedan: Två kursböcker, satslogik, predikatlogik, Prolog Senaste åren: En kursbok + kompendium, satslogik, predikatlogik, lite Prolog I år: En kursbok + kompendium, predikatlogik, Prolog Kursvärdering Vad har studenter tyckt tidigare? /~kursv välj rätt kurs och år Vad skulle förändras och vad har förändrats? Mer betoning på logikens tillämpningar Långsammare exempel på tavlan Byte av kursbok Vad händer med värderingen i år? Kursvärderingsamanuens (Therese Nylander) Schema och planering Notera att det finns en hel del förändringar! Ny handledare (Ulrika i stället för Andreas) Ny labsal (N310 i stället för MC343) Gruppövning 1 och 2 i labsal Gruppövning 2, 3 och 5 på andra tider/platser Föreläsningen 13/3 flyttad till 9/3 10-12 Laborationerna 3 stycken Samarbete två och två Sista datum och tid (12.00) måste hållas 28/2, 14/3 (12/3 för garanterad feedback före tenta) samt 19/3. Alla labbar kompletterade och godkända den 29/3. Uppsamlingslaborationer till hösten Rättningsbetyg G, K, O och U Momentet klart när alla tre labbar är klara Vad innehåller kursen? Prolog, syntax, semantik Sambandet mellan logiska formler och färdiga Prologprogram Logik Syntax och semantik, språket matematiska Satslogik och predikatlogik Hur man bevisar satser 400 200 0 200 400 600 800 1000 1200 1400 1600 1800 2000 x x x x x x xx xxxxxx Aristoteles William Chrysippius Petrus Abaelardus of Occam (280-206 (384-322 (1285-1349) fkr) el. fkr) * Peter Deduktiv Utvecklade Abelard logik modal satslogiken (1079-1142) * Syllogismer (möjlighet, Oanalyserade Rekonstruerade nödvändighet, satser mycket (eller avtro det och propositioner) tidigare (i) Every tvivel) arbetet Greek is som a person. var * Bidrog sammansatta (ii) Every till person begreppet med is mortal. konnektiv metaspråk analyserades (ett högnivå språk som Logik baserad på termer (iii) Every Greek is mortal. * diskuterar Var den som lingvistiska påpekadeenheter att ett Känt verk: Analytica posteriora som var också ord och ettpropositioner.) tal. Historisk återblick Augustus Gottlob René Giuseppe Charles Hobbes Descartes Frege Babbage (1588 Peano Morgan (1848-1925) -(1596-1650) 1679) (1858-1932) (1791-1871) (1806-1871) George * Endast matematik är säkert så allt måste Förste Utvecklade Uppfann SkrevBoole som i Leviathan: baseras (isa på teorin) (1815-1864) också att all matematik. ett första When matematik formellt datorn, språk, kan * Arbetade skrivas 1. dock Acceptera med man minne, reasoneth, mer som båda bara konventionellt logik. processor med he symbolisk does det otvetydiga. och äninput Freges. logik * 2. *Kändförsinaaxiomsom Ada Boole Lade nothing Dela Lovelace upp grunden utvecklade else frågor (1815-1852) but tillconceive det a i mindre denförsta moderna lyckosamma matematiska definierade sum total, from delar 3. * Börja Sägs vara med formella det den logiken enklaste förste naturliga systemet addition ochtalen of för gå till med * resonemang Utvecklade hjälp parcels; mer programmeraren, komplexa av mängder. or conceive ett kring logik a och saker. formellt översatte språk och remainder, from subtraction of 4.Granska mängdteori införde Babbages kvantifierare arbetet arbeten (bara tillräckligt satslogik!) grunden ofta för till one sum from another att Första kunna ordningens överblicka predikatlogik helheten. Gottfried Leibnitz (1646-1716) Utvecklade ett symboliskt språk (universal langauge) och ett sätt att beräkna (caclulus of reasoning) som blev grunden till boolsk algebra.

1860 1880 1900 1920 Alfred Kurt Thoralf Jacques David AlanGödel Turing Tarski Hilbert Whitehead Skolem Herbrand (1906-1978) (1912-1954) (1902-1983) (1862-1943) (1887 (1908-1931) (1861-1947) - 1963) Utvecklade * Bertrand Gerhard Alonzo Kullkastade Vidareutvecklade Herbrands Church Gentzen Russel teorem Hilberts komplett (1903-1995) (1872-1970) (1909-1945) är system ett arbete semantisk av degenom teori * Gentzen Fortsatte av viktigaste Visade för visa Löwenheim predikatlogiken att oberoende var Freges teoremen det Hilberts finns och och av student bevisade sanna inom Peanos varandra medutsagor mer jobb som precisa * Hilbert man Skrev Löwenheim-Skolem logikenprincipia ca 1900: Mathematica teoremetdär 1. de att Om Det omformulerar det inte definitioner inte för kanimplementation finns bevisa. än av teorembevisning ska en inte teori gå har att bevisa på all någon de funnits tidigare en dator. modell matematik falska så utsagor. till beslutsprocedur logik för 2. har Om predikatlogik den utsaga en ändlig är sann, modell så skall det * finnas Skolemfunktioner ett bevis för detta. och Skolemkonstanter kommer vi * Gentzen utvecklade natural deduction att stöta påoch under sekvensanalys kursen som går att automatisera 1940 http://home.bip.net/magnus.78/datorns_historia.htm 1960 1980 2000 1963-64 J. A. Robinson - Uppfann resolution och unifiering Tidigt 1970-tal Robert Kowalski, procedurell tolkning av Horn klausuler Alain Colemerauer, specialiserad teorembevisare i Fortran, som innehåller en speciell modul: Prolog (Programmation et Logique) Sent 1970-tal David Warren utvecklar dec-10 Prolog kompilatorn som gör att språket blir mer effektivt. Sent 80-tal, början av 90-talet Flera stora forskningsprojekt inom grundläggande logikprogrammeringsparadigmer och avancerade implementationstekniker 90-talet, till nu Constraint logic programming, parallella versioner, distribuerade system, objektorienterade versioner Under slutet av 1900-talet Fokusering på att skapa olika logiska system och på dess kompletthet och konsistens Vad är logik? Logik formaliserar (bland annat) hur slutsatser får dras från givna antaganden. Logiska deduktionsregler Antaganden Slutsatser Logiska deduktionsregler Antaganden Slutsatser Vad kan logik användas till? Automatisk teorembevisning Resolution Skapa en specifikation för ett program och bevisa dess korrekthet Representera och resonera om kunskap Expertsystem Satslogik En mening kan ha värdet sant eller falskt. Meningarna kallas utsagor eller satser. Utsagor kan kombineras med boolska operatorer till satslogiska uttryck. Logik är roligt. Jorden är rund. Logik är roligt och jorden är rund. Utsagan är sann eftersom de båda ingående satserna är sanna. Predikatlogik Utökning av satslogiken. Man kan definiera funktioner som har boolska värden som resultat och använda dessa i logiken. Man kan tala i termer av det existerar och för alla. Mest använda systemet inom datavetenskapen, Prolog bygger på resultat från predikatlogiken.

Det finns även andra typer av logik: Flervärd logik - sant, falskt och kanske Intuitionistisk logik - ett matematiskt objekt finns endast om det kan bevisas/konstrueras Modal logik - nödvändigt och möjligt Temporal logik - alltid och ibland Fuzzy logik - kontinuerlig flervärd logik (mer om det i slutet av kursen...) Logiska system Syntax - Definierar regler för vilka symboler vi kan använda och hur dessa kan kombineras och manipuleras Semantik - Ger en mening åt symbolerna och gör formlerna användbara. Viktiga beståndsdelar är: Alfabet Well-formed-formulas wffs Evaluering Deduktion och bevis Axiom och teorem Sundhet och fullständighet Vi vill kunna automatisera vårt logiska resonemang på ett bra sätt. I teorin utformar vi logikprogrammeringen på ett idealt sätt. I praktiken måste vissa begränsningar och krav införas för att inte beräkningar ska göra slut på minnet eller ta onödigt lång tid. Prolog vanligaste språket inom logikprogrammering. Andra logikprogramspråk: ALF, Babylon, Goedel, Janus, Lolli, Mercury, OPS5, De flesta programspråk utgår ifrån von Neumanns maskinmodell, dess instruktioner och dess begränsningar när de skapas. Arbetet delas upp på flera personer: de som löser problemet och de som implementerar lösningen. börjar med ett abstrakt tänkande som inte är beroende av en viss datormodell. Enda begränsningen är det mänskliga tänkandet... Antag att vi har en vektor A av heltal. Vi vill bevisa att det finns en annan vektor B, som är en permutation av A, men där elementen i B är ordnade i storleksordning Om datorn kan bevisa detta och samtidigt, givet ett A, producera motsvarande B, så har vi i praktiken ett program som sorterar heltal I det utopiska fallet: Program = mängd av axiom som beskriver kunskapen som finns om problemet tillsammans med gjorda antaganden Beräkning = programmet löser ett problem genom att producera ett konstruktivt bevis av formeln som beskriver problemet

Vanliga språk vs. Prolog Imperativa språk (Pascal, Fortran C, ) program = algoritm + data strukturer programmeraren måste veta lösningen på problemet Deklarativa språk program = logik + kontroll programmeraren presenterar fakta och regler Ett programs uppbyggnad Ett program består av en mängd satser.det finns tre typer av satser: Fakta Regler Frågor (kallas även mål) Ett fakta talar om att det existerar en relation mellan objekt. Kallas även predikat. mother(eva, kain). % Eva är mor till Kain. Uppbyggnad (2) Om man vill fråga om Eva är mor till Kain skriver man (:- är prompten i Prolog) :- mother(eva, kain). och trycker return. Frågor och fakta ser syntaktiskt likadana ut men kan skiljas åt av kontexten. Programmet kontrollerar om frågan är en logisk konsekvens av programmet. Uppbyggnad (3) En regel består av ett huvud och en kropp. grandmother(gmother, GChild):- mother(gmother, Child), mother(child, GChild). Ett predikat kan definieras med flera regler grandmother(gmother, GChild):- mother(gmother, Child), father(child, GChild). Hornklausuler De tre olika satserna i Prolog är Hornklausuler som är en speciell typ av predikatlogiska formler. Hornklausul är en klausul med endast en positiv literal A 1 A n Aeller(A 1 A n ) A eller A (A 1 A n ) Fakta är en Hornklausul med enbart den positiva literalen A. En Hornklausul utan den positiva literalen (A1 An) kallas ett mål Resolution Algoritmen för att lösa ett problem i Prolog bygger på en metod som kallas resolution. Man försöker visa något genom motsägelsebevis, dvs man antar negationen av det man vill visa och ser om man når en motsägelse. p och p är en motsägelse.

Programmeringsstil - fakta Fakta representeras av ett predikat som till exempel parent(x, Y). Betydelsen på predikatnamnet bestäms av programmeraren. Viktigt att bibehålla betydelsen i hela programmet och att dokumentera den! Namn på predikat och konstanter börjar med liten (gemen) bokstav. Namn på variabler börjar med stor (versal) bokstav. Programmeringsstil - fakta (2) Fakta består av predikatnamnet, följt av en argumentlista inom parenteser. Antalet argument 0 Kommatecken skiljer argumenten åt Ordningen mellan argumenten viktig Predikat med olika aritet (antal argument) representerar olika fakta Varje fakta avslutas med en punkt. Programmeringsstil - regler Man skriver regler på formen grandmother(gmother, GChild):- mother(gmother, Child), parent(child, GChild). Dvs, man skriver både regelns huvud och samtliga delmål på egen rad. Delmålen indenteras till exempel med en tab. Avsluta med en punkt., betyder och :- betyder Förklarande namn på predikat och argument är god stil. Programmeringsstil - regler (2) Man brukar normalt hålla samman definitionen av ett predikat; dvs, man skriver alla klausuler som definierar ett predikat efter varandra: parent( X, Y ) :- father( X, Y ). parent( X, Y ) :- mother( X, Y ). Frågor Frågan kan bestå av ett enda mål parent(diana, william). eller flera på en gång parent(diana, william),parent(charles, william). %AND parent(diana, william);parent(charles, william). %OR I stället för flera frågor kan variabler användas parent(person, william). LPA-Prolog, finns i labsalarna N310 och MA316. Finns gratisversioner av Prolog (tex SWI- Prolog), sök på webben! Utnyttja hjälpen och dokumentationen. win_ref.pdf Referensmanual MED exempel.

Syntax och semantik Ett Prologprogram består av objekt och predikat. Ett predikat definieras av sin functor (namnet) och ariteten. Objekten är inte datatyper! Finns ingen typkontroll eller typkonvertering i Prolog. Finns objekt som existerar genom sitt namn och som inte har något innehåll (diana, william, money). Symboler A,,Z,a,,z,0,,9,=,+,-,*,/,<,>,:-,?,$,_, %, and-operatorn,, or-operatorn ; Siffror Atomer Består av siffror, bokstäver och _ hej, ==, diana23 Om man använder kan valfritt tecken användas 20.april.1993 Konstanter Har ett fixt värde (atomer eller siffror). Variabler Börjar antingen med versal eller tecknet _ Variabeln med namnet _ kallas anonym variabel (jämför med ML!) Om en samma variabel används på flera ställen i en regel så är den bunden till samma värde. Har man _ på flera ställen står den för OLIKA variabler! Strukturer har ett namn och ett antal argument (jfr predikat) lives(x, adress(street, Postal_Code)). Termer kan vara konstanter, variabler, strukturer, listor Operatorer Matchning Två termer matchas och ses som identiska av systemet om de är lika eller kan unifieras (göras lika). Konstanter är lika om de är identiska Lena = Lena, diana = diana, a b, 1999 1998, Lena lena Variabler är lika om de är identiska, tilldelade samma värde båda utan värde endast en har ett värde och den andre kan unifieras med detta. Strukturer är lika om de har samma funktor och samma antal argument samt om argumenten matchar varandra Explicit tilldelning av variabler: X is 2+3 E B A on_table(x) on(x, y) top(x) En liten blockvärld: Eller med predikat: on_table(a) D on_table(c) on(d, c) C on(b, a) on(e, b) top(e) top(d) - är sann om x ligger på bordet -ärsannomxliggerovanpåy - är sann om x inte har något block ovanpå sig. Lite mer fakta + fråga BochDärtunga. Bäravträ Varje stort, blått block är på ett grönt block. Varje tungt block som är av trä är stort. Alla block som är överst är blåa. Alla block av trä är blåa. Finns det något grönt block? E B A D C

Den ideala världen I den ideala värden radar man upp sina fakta och regler i en lång rad. När man ska lösa ett problem hittar man alltid den rätta regeln i första försöket och tillämpar den på bästa sätt. Hur får man en dator att göra det? Prolog Två val måste göras för att skapa ett mer konkret programmeringsspråk. Det godtyckliga valet av vilket delmål i frågan som ska reduceras, the scheduling policy, måste specificeras. Det ickedeterministiska valet av regler från programmet måste implementeras. Pure Prolog Ordningen är definierad för både regler i programmet och för målen i regelkropparna. Välj målet längst till vänster Använd en sekventiell sökning efter en unifierbar regel Använd backtracking Backtracking Vi skiljer på grund och djup backtracking. Grund backtracking sker när unifiering av ett mål och en klausul misslyckas. Djup backtracking sker när unifiering av ett mål och den sista klausulen i en procedur misslyckas och kontrollen återgår till ett annat mål i beräkningsträdet. Rekursiva regler I vårt lilla släktträd kan vi vilja införa en ny relation förfader. En förfader är en person som finns högre upp i släktträdet. Dvs Om X är förälder till Y så är X förfader till Y. ancestor(x, Y):- parent(x, Y). Om X är förälder till Z och Z är förfader till Y så är X förfader till Y. ancestor(x, Y):- parent(x, Z), ancestor(z, Y). Ordning av regler Ordningen i vilken man ställer upp sina regler är viktig och kan inte bara i hög grad påverka effektiviteten hos ett prologprogram utan också om en regel terminerar eller ej. Jämför vad som hände med ancestorexemplet! ancestor(x, Y):- parent(x, Y). ancestor(x, Y):- parent(x, Z), ancestor(z, Y). ancestor(x, Y):- parent(x, Z), ancestor(z, Y). ancestor(x, Y):- parent(x, Y). ancestor(x, Y):- ancestor(z, Y), parent(x, Z). ancestor(x, Y):- parent(x, Y).

Terminering Prologs djupet-först traversering av sökträd medför ett allvarligt problem. Om sökträdet innehåller en oändlig gren så misslyckas beräkningen. Prolog kan även misslyckas att finna ett mål även om det finns en ändlig beräkning. Rekursiva regler som har det rekursiva målet som sitt första mål i kroppen kallas för vänsterrekursiva regler. Terminering Vänsterrekursiva regler ställer ofta till det i Prolog, de orsakar icketerminering om de anropas med olämpliga argument. Bästa lösningen är att undvika vänsterrekursion helt och hållet. Ett annat sätt, lätt att förbise, att få icketerminerande beräkningar är att skriva cirkulära definitioner. Ordning av mål Att ordna målen rätt är ännu mer viktigt än att ordna reglerna då målen bestämmer programflödet. Den optimala ordningen av mål beror på användande och programmässig kontext. Generellt sett, inom prologprogrammering är målet att misslyckas så tidigt som möjligt.ett tidigt misslyckande beskär sökträdet och för oss snabbare mot den korrekta lösningen.