DD1361 Programmeringsparadigm HT16

Relevanta dokument
DD1361 Programmeringsparadigm HT17

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT17

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

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

DD1361 Programmeringsparadigm HT16

Traditionell Programmering

Grundläggande logik och modellteori

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

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

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

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

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

Grundläggande logik och modellteori (5DV102)

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

*UXSS YQLQJ±/RJLNPHGWLOOlPSQLQJDUYW

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

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

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

Grundläggande logik och modellteori

Grundläggande logik och modellteori (5DV102)

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

Deklarativt programmeringsparadigm

Lite om bevis i matematiken

En introduktion till predikatlogik

Prova på-laboration i Prolog

DD1350 Logik för dataloger

Om semantisk följd och bevis

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

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

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

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

Kompletteringsmaterial. K2 Något om modeller, kompakthetssatsen

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Relationskalkyl (RK)

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

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.

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

Predikatlogik: Normalformer. Klas Markström

Logik I. Åsa Hirvonen Helsingfors universitet. Våren 2013

Semantik och pragmatik

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

Hornklausuler i satslogiken

Grundläggande logik och modellteori

Semantik och pragmatik (Serie 4)

Föreläsning 5. Deduktion

DD1361 Programmeringsparadigm Föreläsning 1: Intro

DD1350 Logik för dataloger

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

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

K2 Något om modeller, kompakthetssatsen

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

Övningshäfte 2: Induktion och rekursion

Föreläsning 3: rekursion

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

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

Grundläggande logik och modellteori

Artificial Intelligence

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

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

Länkning av Prolog under C

Logik: sanning, konsekvens, bevis

Filosofisk logik Kapitel 19. Robin Stenwall Lunds universitet

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

En introduktion till logik

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

DD1361 Programmeringsparadigm Föreläsning 1: Intro

FTEA12:2 Filosofisk metod. Att värdera argumentation I

Robin Stenwall Lunds universitet

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

Artificiell Intelligens Lektion 4

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

FUZZY LOGIC. Christopher Palm chrpa087

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

Övningshäfte 1: Induktion, rekursion och summor

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

Grundläggande logik och modellteori

Logik och modaliteter

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Föreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Detta är ett ofärdigt utdrag ur ovanstående text. Vänligen sprid inte!

Substitution och unifiering

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

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

F. Drewes Datavetenskapens grunder, VT02. Lite logik

D. x 2 + y 2 ; E. Stockholm ligger i Sverige; F. Månen är en gul ost; G. 3 2 = 6; H. x 2 + y 2 = r 2.

Robin Stenwall Lunds universitet

Programmering A. Johan Eliasson

MATEMATIKENS SPRÅK. Avsnitt 1

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

9. Predikatlogik och mängdlära

Logik och kontrollstrukturer

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Robin Stenwall Lunds universitet

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

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

Transkript:

DD1361 Programmeringsparadigm HT16 Logikprogrammering 1 Dilian Gurov, TCS

Delkursinnehåll Logikprogrammering Logisk versus procedurell läsning Kontrollflöde Unifiering, Backtracking, Snitt Negation Induktiva datatyper och rekursion Inbyggda datatyper: listor Datatyper med Prolog-termer: träd Programmeringtekniker med Prolog Generera-och-testa

Lärandemål Den deklarativa aspekten: Prolemdomänbeskrivning i termer av relationer Fakta och regler Sundhet och fullständighet av beskrivningen Antagandet om en sluten värld, Prolog-negation Induktiva datatyper som termer Inbyggda och implicita i Prolog Strukturell induktion: en princip att garantera well-definedness Den procedurella aspekten: Kontrollflödet Unifiering Backtrackning Typisk programstruktur: generera-och-testa Snitt

Delkurslitteratur och -material Kursbok: Learn Prolog Now! P. Blackburn, J. Bos, och K. Striegnitz Free online version: www.learnprolognow.org SWi-Prolog manual Prolog-fil: *.pl Föreläsningsanteckningar Se kurswebbsidorna: Före kursstart, Kursmaterial

Idag Ämnen Deklarativ- och logik-programmering Satser: fakta och regler Logisk versus procedurell läsning Kontrollflöde, Lådmodellen Rekursion Läsmaterial Boken: kap. 1-3 Prolog-fil: intro.pl Föreläsningsanteckningar

Deklarativ- och logik-programmering Deklarativ programmering Programmet är en beskrivning av problemdomänen Exekveringar resulterar från frågor (queries) Logikprogrammering En konkret realisering av deklarativ programmering med hjälp av predikat Domänen beskrivs som en sammansättning av predikatlogiska formler i så-kallad Horn-klausul form Frågor besvaras med en sök-algoritm som kallas för resolution

Från funktioner till predikat Om f är en funktion så kan vi skriva: f (a) = b eller (a, b) f eller f (a, b) (funktion) (relation) (predikat) Relationer är dock mer generella: inte varje relation är en funktion. Exempel: Fadern till a är b kan deklareras: som funktion: far(a) = b som predikat: far(a, b) Däremot är a är dotter till b en relation men ingen funktion!

Satser: fakta Relationer kan deklareras explicit, varje tupel för sig själv. Sådana definitioner kallas för fakta: far(agnes, petter). far(per, petter). far(anton, per). mor(agnes, annika). mor(per, annika). mor(kia, agnes). mor(anton, agnes).

Queries Nu när vi har skapat en relationell databas, vill vi kunna ställa frågor (queries) till den.?- far(agnes, per).?- far(anton, per).?- far(monika, per). % Closed world assumption! Notera att Prolog inte vet vad vi menar med alla symboler: den resonerar helt symboliskt, utan interpretation! Så vet Prolog inte om far(a, b) betyder fadern till a är b, eller a är fader till b, eller t.o.m. att himlen har färgen a och det är b stycken moln på den.

Fler queries Vi kan också ställa frågor som involverar variabler:?- far(agnes, X). % Vem är far till agnes? % Eller, för vilka X är det sant % att fadern till agnes är X??- far(x, petter). % Vems fader är petter? % Flera svar möjliga! % Fås fram med n eller ";"?- far(x, Y).

Satser: regler Relationer kan också definieras med regler: farmor(x, Y) :- far(x, Z), mor(z, Y). Läs: farmodern till X är Y om fadern till X är (någon) Z och modern till Z är Y. Vi kan observera att: :- läses som om, dvs implikation i omvänd riktning, läses som och, dvs konjunktion variabler läses universellt Formler (satser) i en sådan form kallas för Horn-klausuler

Satser: regler Disjunktiva regler kan ges som separata regler: foralder(x, Y) :- far(x, Y). foralder(x, Y) :- mor(x, Y). Läs: en förälder till X är Y (OBS: relation fast inte funktion!) om fadern till X är Y eller modern till X är Y. Följer logiska ekvivalensen: p q r (p r) (q r)

Logisk versus procedurell läsning Logisk läsning som en predikatlogisk formel, deklarativt Procedurell läsning proceduren som Prolog följer för att hitta ett bevis Prolog läser fakta och regler uppifrån och ned, och klausuler från vänster till höger Prolog försöker instansiera variablerna med termer så att målet blir sant: unifiering om detta misslyckas med ett faktum eller en regel, går Prolog till föregående klausul inom regelns kropp om en sådan finns, och annars till nästa faktum eller regel i programmet: backtracking

Prolog-termer Predikatlogikens syntax har både predikatsymboler såsom funtionssymboler, tagna från olika syntaktiska mängder. I Prolog däremot finns det tyvärr ingen syntaktisk skillnad mellan dem, och båda representeras som atomer. Det är kontexten som bestämmer hur symbolerna tolkas. Tex i satsen: a(b, c(x)). är a en 2-ställig predikatsymbol, c en 1-ställig funktionssymbol, b en konstant (dvs en 0-ställig funktionssymbol), och X en variabel.

Unifiering Två termer kan unifieras om det finns en substitution av variabler med termer för vilken båda termer blir syntaktiskt identiska. Exempel: X och agnes unifierar med substitution X = agnes far(x, petter) och far(agnes, petter) unifierar med substitution X = agnes far(agnes, Y) och far(agnes, petter) unifierar med substitution Y = petter far(x, petter) och far(agnes, Y) unifierar med substitution X = agnes, Y = petter

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X).

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1).

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X far(anton, Z1).

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X far(anton, Z1). vid faktum 3 unifierar Z1=per

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X far(anton, Z1). vid faktum 3 unifierar Z1=per mor(per, X).

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X far(anton, Z1). vid faktum 3 unifierar Z1=per mor(per, X). vid faktum 5 unifierar X=annika

Kontrollflödet i Prolog: Exempel 1 Fråga: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X far(anton, Z1). vid faktum 3 unifierar Z1=per mor(per, X). vid faktum 5 unifierar X=annika Svar: X=annika

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X).

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1).

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X).

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X). Lyckas inte: backtrackar till nästa regel.

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X). Lyckas inte: backtrackar till nästa regel. Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2).

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X). Lyckas inte: backtrackar till nästa regel. Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2). unifierar X2=kia, Y2=X

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X). Lyckas inte: backtrackar till nästa regel. Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2). unifierar X2=kia, Y2=X mor(kia, X).

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X). Lyckas inte: backtrackar till nästa regel. Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2). unifierar X2=kia, Y2=X mor(kia, X). vid faktum 6 unifierar X=agnes

Kontrollflödet i Prolog: Exempel 2 Fråga: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X far(kia, X). Lyckas inte: backtrackar till nästa regel. Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2). unifierar X2=kia, Y2=X mor(kia, X). Svar: X=agnes vid faktum 6 unifierar X=agnes

Rekursion Regler kan vara rekursiva, dvs referera till sig själv: forfader(x, Y) :- foralder(x, Y). forfader(x, Y) :- foralder(x, Z), forfader(z, Y). Betrakta frågan:?- forfader(kia, X). Vad blir kontrollflödet tills första svaret? Och till ansdra svaret? ( ; leder till backtrackning!) Vad skulle hända om vi vänder på ordningen på de två reglerna? Och på de två konjunkterna i andra regeln?

Kontrollflödet i Prolog: Lådmodellen För att få ett bättre förståelse av kontrollflödet i Prolog och trace-funktionen, läs också om lådmodellen: se handouts.