DD1361 Programmeringsparadigm HT15

Relevanta dokument
DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT17

DD1361 Programmeringsparadigm HT16

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT16

DD1361 Programmeringsparadigm HT17

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Grundläggande logik och modellteori

Trädstrukturer och grafer

Träd Hierarkiska strukturer

Föreläsning 6: Induktion

Länkning av Prolog under C

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

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Traditionell Programmering

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

Rekursiva algoritmer sortering sökning mönstermatchning

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

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

Del : Paradigmer allmänt.

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

Programkonstruktion och. Datastrukturer

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

Krafts olikhet. En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om. 2 l i. 1 i=1

Föreläsning 4 Datastrukturer (DAT037)

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Obligatorisk uppgift 5

Tentamen Datastrukturer D DAT 036/INN960

Övningshäfte 2: Induktion och rekursion

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

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.

Informationsteknologi Tom Smedsaas 19 augusti 2016

Föreläsning 9 Innehåll

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

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

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 4 Datastrukturer (DAT037)

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tentamen, Algoritmer och datastrukturer

Filosofisk logik Kapitel 19. Robin Stenwall Lunds universitet

FL 5: Aritmetik. Teori

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

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

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

Föreläsning 9 Innehåll

Algebra I, 1MA004. Lektionsplanering

TDIU01 / 725G

Föreläsning Datastrukturer (DAT036)

Träd. Rot. Förgrening. Löv

Lösningar och kommentarer till uppgifter i 1.1

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Introduktion till MATLAB

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

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

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Dagens föreläsning Programmering i Lisp Fö 5

Föreläsning 5 Datastrukturer (DAT037)

Syntaktisk parsning (Jurafsky & Martin kapitel 13)

Föreläsning 12 i programmeringsparadigm. Negering.

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

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

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Seminarium 13 Innehåll

Grundläggande logik och modellteori

Källkodning. Egenskaper hos koder. Några exempel

Grundläggande logik och modellteori (5DV102)

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Robin Stenwall Lunds universitet

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

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

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Föreläsning 5: Summor (forts) och induktionsbevis

Semantik och pragmatik (Serie 4)

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Digital Aritmetik Unsigned Integers Signed Integers"

Trolleri med villkorsprogrammering. Mats Carlsson

Facit Tentamen TDDC (7)

Föreläsning 9: NP-fullständighet

Tentamen TEN1 HI

Transkript:

DD1361 Programmeringsparadigm HT15 Logikprogrammering 3 Dilian Gurov, TCS

Idag Induktiva datatyper: Träd (inte inbyggd) Binära träd utan data Binära träd med data Prolog-specifika konstruktioner Negation, snitt Aritmetik, I/O Kontrollpredikat, metapredikat Läsmaterial Boken: Brna, kap. 7, 9 Prolog-fil: tree.pl, misc.pl (se kurswebbsida) Handouts: Föreläsningsanteckningar (se kurswebbsida)

Binära träd utan data Induktiv definition Binära träd utan data utgör en oändlig mängd av Prolog-termer: Ett binärt träd utan data är antingen ett löv, leaf, eller ett sammansatt träd, branch(t1, t2), som består av ett vänster delträd t1 och ett höger delträd t2. BNF-definition: T ::= leaf branch(t, T) Därmed matchar varje binärt träd utan data t antingen leaf eller branch(tl, TR). Exempel på (stängda) träd-termer: leaf, branch(leaf, leaf), branch(leaf, branch(leaf, leaf)). Träd-termer kan också innehålla variabler: branch(x, leaf).

Strukturell induktion För att definiera ett predikat över binära träd utan data med strukturell induktion: för löv leaf, definiera predikatet explicit; för sammansatta trädet branch(t1, t2), definiera predikatet med användning av samma predikat beräknat över delträden t1 och t2. Då blir predikatet väldefinierad för alla binära träd utan data!

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv. Definition med strukturell induktion?

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv. Definition med strukturell induktion? höjden på ett löv leaf är 0; höjden på ett sammansatta träd branch(t1, t2) är maximum av höjdena på delträden t1 och t2 plus 1.

Höjden på ett träd: height(t, N) max(x, Y, X) :- Y<X. max(x, Y, Y). height(leaf, 0). height(branch(tl, TR), N) :- height(tl, NL), height(tr, NR), max(nl, NR, M), N is M+1.

Kompletta träd: complete(t) Ett träd är komplett om det har alla sina löv på samma höjd. Definition med strukturell induktion?

Kompletta träd: complete(t) Ett träd är komplett om det har alla sina löv på samma höjd. Definition med strukturell induktion? complete(leaf). complete(branch(tl, TR)) :- complete(tl), complete(tr), height(tl, N), height(tr, N).

Binära träd med data Induktiv definition Ett binärt träd med data är antingen ett löv leaf(d) med en data-term d, eller ett sammansatt träd branch(d, t1, t2) med en data-term d, ett vänster delträd t1, och ett höger delträd t2. BNF-definition: T ::= leaf(d) branch (D, T, T) Därmed matchar varje binärt träd med data t antingen leaf(d) eller branch(d, TL, TR). Exempel: branch(-3,branch(4,leaf(8),leaf(-2)),leaf(7)).

Medlemskap i ett träd: lookup(d, T) Som member(x, L), fast för träd med data. Definition med strukturell induktion?

Medlemskap i ett träd: lookup(d, T) Som member(x, L), fast för träd med data. Definition med strukturell induktion? lookup(d, leaf(d)). lookup(d, branch(d, _, _)). lookup(d, branch(_, TL, _)) :- lookup(d, TL). lookup(d, branch(_, _, TR)) :- lookup(d, TR).

Summering i ett träd: treesum(t) Beräknar summan av alla tal i trädet (antar att allt data är tal). Definition med strukturell induktion?

Summering i ett träd: treesum(t) Beräknar summan av alla tal i trädet (antar att allt data är tal). Definition med strukturell induktion? treesum(leaf(n), N). treesum(branch(n, TL, TR), N1) :- treesum(tl, NL), treesum(tr, NR), N1 is NL+NR+N.

Negation i Prolog Kom ihåg den closed world assumption som Prolog utgår ifrån: allt som Prolog inte lyckas bevisa betraktas som falskt! Negation i Prolog betraktas som bevis-teoretisk negation, och inte som logisk negation: snygg(kia). osnygg(x) :- \+ snygg(x). Vad blir svaret på:?- osnygg(nisse).

Snitt Snitt (eng: cut) skär bort backtrackingen för predikatet. Exempel: max(x, Y, X) :- Y<X. max(x, Y, Y). Vad blir första och andra svaret på frågan:?- max(5, 3, X).

Snitt Snitt (eng: cut) skär bort backtrackingen för predikatet. Exempel: max(x, Y, X) :- Y<X. max(x, Y, Y). Vad blir första och andra svaret på frågan:?- max(5, 3, X). För att eliminera flera än ett svar: maxcut(x, Y, X) :- Y<X,!. maxcut(x, Y, Y).

Exempel från www.learnprolognow.org s(x, Y) :- q(x, Y). s(0, 0). q(x, Y) :- i(x),!, j(y). q(4, 4). i(1). i(2). j(1). j(2). j(3). Vad blir svaren på frågan:?- s(x, Y).

Grönt och rött snitt Vi skiljer mellan två typer av snitt: grönt snitt: ändrar inte programmets logiska läsning, utan bara undviker onödiga sökningar; rött snitt: påverkar utdata!

Exempel på grönt snitt: lookup(d, T)

Exempel på grönt snitt: lookup(d, T) lookupcut(d, leaf(d)) :-!. lookupcut(d, branch(d, _, _)) :-!. lookupcut(d, branch(_, TL, _)) :- lookupcut(d, TL),!. lookupcut(d, branch(_, _, TR)) :- lookupcut(d, TR).

Exempel på rött snitt Vad åstadkommer predikatet isnygg? snygg(kia). isnygg(x) :- snygg(x),!, fail. isnygg(x). Vad blir svaret på:?- isnygg(nisse).?- isnygg(kia).

Aritmetik i Prolog Vanlig likhet = betyder syntaktiskt likhet, inte samma värde! Speciella predikatet is utvärderar andra termen och unifierar med första. Obs: andra termen måste vara tillräcklig instansierad! Dubbelsidig utvärdering och jämförelse: =:=. Aritmetiska operatörer: +, -, *, /, //, mod, etc. Olikheter: <, >, =<, >=, etc.

I/O i Prolog Två nödvändiga predikat: read(t): läs en term fram till nästa punkt och unifiera termen X med den; write(t): skriv ut termen X till terminalen.

Kontrollpredikat Vi betraktade redan fail, ett predikat som alltid misslyckas. Predikatet call(x) betraktar termen som X är unifierad med som ett predikat. snygg(kia). not(x) :- call(x),!, fail. not(x). Vad blir svaret på:?- not(snygg(nisse)).

Metapredikat Två predikat: assert(t): lägga till klausulen t till databasen/programmet; retract(t): ta bort klausulen t från databasen/programmet. Båda predikat finns i flera varianter.