DD1361 Programmeringsparadigm HT17

Relevanta dokument
DD1361 Programmeringsparadigm HT16

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

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

DD1361 Programmeringsparadigm HT17

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Traditionell Programmering

Grundläggande logik och modellteori

DD1361 Programmeringsparadigm HT16

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

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

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

Grundläggande logik och modellteori (5DV102)

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

Grundläggande logik och modellteori (5DV102)

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

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

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

DD1350 Logik för dataloger

Lite om bevis i matematiken

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

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

En introduktion till predikatlogik

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

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

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

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.

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

*UXSS YQLQJ±/RJLNPHGWLOOlPSQLQJDUYW

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Grundläggande logik och modellteori

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

Deklarativt programmeringsparadigm

Grundläggande logik och modellteori

Prova på-laboration i Prolog

Relationskalkyl (RK)

Kompletteringsmaterial. K2 Något om modeller, kompakthetssatsen

Om semantisk följd och bevis

Semantik och pragmatik

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

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

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

Semantik och pragmatik (Serie 4)

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

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Predikatlogik: Normalformer. Klas Markström

Länkning av Prolog under C

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

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

Robin Stenwall Lunds universitet

Hornklausuler i satslogiken

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

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

Grundläggande logik och modellteori

Föreläsning 5. Deduktion

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

K2 Något om modeller, kompakthetssatsen

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

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Föreläsning 3: rekursion

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

DD1350 Logik för dataloger

Grundläggande programmering med C# 7,5 högskolepoäng

Rekursiva algoritmer sortering sökning mönstermatchning

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

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Artificial Intelligence

Programmering A. Johan Eliasson

Övningshäfte 2: Induktion och rekursion

FUZZY LOGIC. Christopher Palm chrpa087

Artificiell Intelligens Lektion 4

Logik och modaliteter

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

Grundläggande logik och modellteori

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

Lektion 8: Konstruktion av semantiska tablåer för PTL-formler

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

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

Robin Stenwall Lunds universitet

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

Lösning av tentamensskrivning i Diskret Matematik för CINTE och CMETE, SF1610, tisdagen den 27 maj 2014, kl

F. Drewes Datavetenskapens grunder, VT02. Lite logik

Probabilistisk logik 2

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

Kompositionell semantik och λ-kalkyl

Logik: sanning, konsekvens, bevis

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

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.

Transkript:

DD1361 Programmeringsparadigm HT17 Logikprogrammering 1 Dilian Gurov, KTH

Delkursinnehåll Logisk versus procedurell läsning Kontrollflöde: Unifiering, Backtracking, Snitt 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 med relationer Fakta och regler 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 Se kurswebbsidorna: Före kursstart, Kursmaterial Kursbok: Learn Prolog Now! P. Blackburn, J. Bos, och K. Striegnitz Free online version: www.learnprolognow.org SWI-Prolog manual Föreläsningsanteckningar Prolog-fil: *.pl

Idag Ämnen Deklarativ- och logik-programmering Satser: fakta och regler Logisk versus procedurell läsning Unifiering Backtracking 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 som beskriver relationer mellan objekt 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 (a, b) f 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 variablerna är (implicit) universiellt kvantifierade 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)

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.

Prolemdomänbeskrivning: Grafer En riktad graf består av en mängd noder och en mängd riktade bågar mellan noderna. Hur kan vi representera grafer i Prolog? Representation som Prolog-fakta: node(a). edge(a, b). deklarerar en nod deklarerar en båge Varför inte bara Edge-deklarationer? Representationen kan vara svårt att arbetas med, t.e.x., att skickas som argument till ett predikat.

Prolemdomänbeskrivning: Grafer Representation som Prolog-term: noder är atomer a, b, c,... bågar är termer edge(a, b) grafer är termer graph(nodes, Edges) där Nodes är en lista över noder, och Edges är en lista över bågar

Term-unifiering Två termer kan unifieras om det finns en substitution (med termer) för variablerna i termerna, så att 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 Kan far(x, petter) och far(agnes, X) unifiera?

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

Kontrollflödet i Prolog: Exempel 1 Mål: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). unifierar X1=anton, Y1=X Delmål: far(anton, Z1). unifierar Z1=per Delmål: mor(per, X). unifierar X=annika Svar: X=annika

Kontrollflödet i Prolog: Exempel 2 Mål: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). unifierar X1=kia, Y1=X Delmål: far(kia, X). Kan inte unifieras. Backtrackar till nästa regel. Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2). unifierar X2=kia, Y2=X Delmål: mor(kia, X). unifierar X=agnes Svar: 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 andra svaret? ( ; leder till backtracking!) Vad skulle hända om vi vänder om 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.