DD1361 Programmeringsparadigm HT15

Relevanta dokument
DD1361 Programmeringsparadigm HT16

DD1361 Programmeringsparadigm HT17

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

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

DD1361 Programmeringsparadigm HT16

Grundläggande logik och modellteori

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

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

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

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

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.

*UXSS YQLQJ±/RJLNPHGWLOOlPSQLQJDUYW

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

En introduktion till predikatlogik

Prova på-laboration i Prolog

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

Grundläggande logik och modellteori (5DV102)

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

Lite om bevis i matematiken

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

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

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Deklarativt programmeringsparadigm

Relationskalkyl (RK)

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

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

Semantik och pragmatik

Grundläggande logik och modellteori

DD1350 Logik för dataloger

Grundläggande logik och modellteori

Semantik och pragmatik (Serie 4)

Kompletteringsmaterial. K2 Något om modeller, kompakthetssatsen

Om semantisk följd och bevis

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

Predikatlogik: Normalformer. Klas Markström

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

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

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

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

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

Hornklausuler i satslogiken

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

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

K2 Något om modeller, kompakthetssatsen

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

DD1361 Programmeringsparadigm Föreläsning 1: Intro

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

Artificiell Intelligens Lektion 4

Föreläsning 3: rekursion

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

Övningshäfte 2: Induktion och rekursion

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

DD1350 Logik för dataloger

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

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

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

Länkning av Prolog under C

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

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

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

Grundläggande logik och modellteori

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

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

Substitution och unifiering

Del : Paradigmer allmänt.

9. Predikatlogik och mängdlära

Logik: sanning, konsekvens, bevis

Logik och kontrollstrukturer

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

F. Drewes Datavetenskapens grunder, VT02. Lite logik

FUZZY LOGIC. Christopher Palm chrpa087

DD1361 Programmeringsparadigm Föreläsning 1: Intro

10. Mängder och språk

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

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

En introduktion till logik

Del : Paradigmer allmänt.

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

Artificial Intelligence

Robin Stenwall Lunds universitet

Övningshäfte 1: Induktion, rekursion och summor

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

+Ö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

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.

Våra enkla funktioner eller procedurer

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

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

Digital- och datorteknik

Transkript:

DD1361 Programmeringsparadigm HT15 Logikprogrammering 1 Dilian Gurov, TCS

Innehåll Logikprogrammering Kontrollflöde Unifiering Backtracking Negation Snitt Induktiva datatyper och rekursion Inbyggda datatyper: listor Datatyper med Prolog-termer: träd Programmeringtekniker med Prolog Generera-och-testa

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

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å har vi: f (a) = b om (a, b) f när f är en relation eller om f (a, b) när f är ett 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 granne 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 ett sådant 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 1-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 Query:?- farmor(anton, X). Kontrollflöde: Mål: farmor(anton, X). Skapar regelinstans: farmor(x1, Y1) :- far(x1, Z1), mor(z1, Y1). Unifierar X1=anton, Y1=X Nästa delmål: far(anton, Z1). Vid faktum 3 unifierar Z1=per Nästa delmål: mor(per, X). Vid faktum 5 unifierar X=annika Inga flera delmål: succé! Svar: X=annika

Kontrollflödet i Prolog: Exempel 2 Query:?- foralder(kia, X). Kontrollflöde: Mål: foralder(kia, X). Skapar regelinstans: foralder(x1, Y1) :- far(x1, Y1). Unifierar X1=kia, Y1=X Nästa delmål: far(kia, X). Lyckas inte: backtrackar! Skapar regelinstans: foralder(x2, Y2) :- mor(x2, Y2). Unifierar X2=kia, Y2=X Nästa delmål: mor(kia, X). Vid faktum 6 unifierar X=agnes Inga flera delmål: succé! Svar: X=annika

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). Fundera kring kontrollflödet: vad skulle hända om vi vänder på ordningen på de två reglerna, eller på de två konjunkterna?

Kontrollflödet i Prolog: Lådmodellen För att få ett bättre förståelse av kontrollflödet i Prolog, läs också om lådmodellen: Brna kap. 5, samt extra handouts.