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

Föreläsning 6: Induktion

Länkning av Prolog under C

Trädstrukturer och grafer

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

Träd Hierarkiska strukturer

Rekursiva algoritmer sortering sökning mönstermatchning

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

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

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

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

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

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

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

Traditionell Programmering

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

Programkonstruktion och. Datastrukturer

Tentamen, Algoritmer och datastrukturer

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

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

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.

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

Del : Paradigmer allmänt.

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

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

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

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

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

Övningshäfte 2: Induktion och rekursion

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

Filosofisk logik Kapitel 19. Robin Stenwall Lunds universitet

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tentamen Datastrukturer D DAT 036/INN960

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

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

Obligatorisk uppgift 5

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

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)

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å

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

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

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 4 Datastrukturer (DAT037)

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

DD1350 Logik för dataloger

Syntaktisk parsning (Jurafsky & Martin kapitel 13)

FL 5: Aritmetik. Teori

Föreläsning 9 Innehåll

Grundläggande logik och modellteori

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

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

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

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

Föreläsning 9 Innehåll

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

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

Data, typ, selektion, iteration

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

K3 Om andra ordningens predikatlogik

Grundläggande logik och modellteori

Tentamen i TDDC75 Diskreta strukturer , lösningsförslag

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

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

Föreläsning 9: 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

Tentamen i. Programmering i språket C

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

Grundläggande logik och modellteori (5DV102)

Seminarium 13 Innehåll

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

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

Programmering II (ID1019) :00-11:00

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Tillämpad Programmering (ID1218) :00-13:00

Induktion och rekursion

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Grundläggande datalogi - Övning 9

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

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.

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

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Informationsteknologi Tom Smedsaas 19 augusti 2016

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 13. Träd

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

Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Algebra I, 1MA004. Lektionsplanering

Innehållsförteckning

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är leaf och branch kallas för konstruktörer. 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, N) 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, N) 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.

Problemdomänbeskrivningsexempel: Mjukvarusystem Datatypen mjukvarusystem kan definieras induktivt med två regler: ett mjukvarusystem är antingen en funktion (som i språket Haskell), eller en sammansättning av mjukvarusystem (dvs delsystem). Föreslå ett sätt att representera mjukvarusystem som Prolog-termer, där funktionerna representeras som atomer med samma namn som funktionen. Ge två exempel på termer som representerar mjukvarusystem med flera nivåer av nästlande. För din representation av datatypen mjukvarusystem, skriv ett predikat funcs(?s,!ff) som är sant omm FF är en lista som innehåller alla funktioner i systemet (med möjlig upprepning).

Mjukvarusystem: Prolog-termer Sammansättningar går enklast att representeras som listor. En möjlig BNF-grammatik vore: <MVS> ::= func(<name>) samm(<mvslist>) <MVSList> ::= [] [<MVS> <MVSList>] Exempel-termer: func(foo) samm([func(main), samm([func(min), func(max), func(avg)])])

Mjukvarusystem: funcs(?s,!ff) Om vi följer strukturella induktionsprincipen för ömsesidigt rekursiva datatyper får vi: funcsmvs(func(n), [N]). funcsmvs(samm(sl), FL) :- funcsmvslist(sl, FL). funcsmvslist([], []). funcsmvslist([s SL], FL) :- funcsmvs(s, FL1), funcsmvslist(sl, FL2), append(fl1, FL2, FL).

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.