Logik med tillämpningar

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Visual Basic - Genomgång
Talföljder formler och summor
Formulär Tänkte nu gå igenom vad ett formulär är och hur man kan skapa dem i Access.
Relationsdatabasdesign
Access med Sebastian och Robert
Funktioner och programorganisation
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Prolog, Mån 16/9 Rebecca Jonson.
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
Föreläsning 2 21 jan 2008.
Logikprogrammering Ons, 25/9
Dcg-notation 21.2 G 2.3 M (BBS 8). dagens föreläsning extra argument i dcg-notation prolog-anrop i dcg-notation avslutande kommentarer om dcg.
Introduktion Logikprogrammering HT-02 Staffan Larsson.
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Grundläggande programmering
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 3: rekursion Teori –Introducera rekursiva definitioner i Prolog –Fyra exempel –Visa att.
Datamodellering med E/R-diagram
Programmering B PHP Lektion 2
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Logikprogrammering och Prolog
Programmering B PHP Lektion 3
Formell logik Kapitel 1 och 2
Felkalkyl Ofta mäter man inte direkt den storhet som är den intressanta, utan en grundläggande variabel som sedan används för att beräkna det som man är.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Semantik – introduktion
Grundläggande programmering
Det finns i V en operation kallad addition, betecknad + sådan att
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Logikprogrammering 21/10 Binära träd
Kenneth Wilhelmsson 1 Logikprogrammering 10 P Onsdag 20 november 2002.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Formell logik Kapitel 9 Robin Stenwall Lunds universitet.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Logikprogrammering 16/ : operatorer Staffan Larsson.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
Föreläsning 4-5 Logik med tillämpningar
Föreläsning 11 Logik med tillämpningar Innehåll u Generell resolution u Kapitel i Ben-Ari.
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
Föreläsning 9 Logik med tillämpningar Innehåll u Semantiska tablåer i predikatlogiken u Klausulform u Herbrandmodeller u Kapitel 3.5,
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Föreläsning 15 Logik med tillämpningar Innehåll u Programmeringsstil i Prolog u Expertsystem u Att kunna inför tentan u Kapitel 13 och 14.3.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
Negativa tal – några exempel
Föreläsning 16 Logik med tillämpningar Innehåll u Information kring kursvärdering och tentagenomgång u Genomgång av övningstenta 2.
Logik med tillämpningar
1 Semantik – introduktion Semantik = läran om mening Tvärvetenskapligt filosofi lingvistik psykologi AI Lingvistik motsägelser mångtydighet metaforer Filosofi.
Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
Föreläsning 1-2 Logik med tillämpningar
Logikprogrammering ons 4/9 Rebecca Jonson.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 13: Resolution Resolution i satslogiken Resolution i predikatlogiken.
Lars Madej  Talmönster och talföljder  Funktioner.
Manada.se Kapitel 4 Ekvationer och formler. 4.1 Ekvationer och uttryck.
KPP053, HT2015 MATLAB, Föreläsning 4
Formell logik Kapitel 1 och 2
Filosofisk logik Kapitel 15
Presentationens avskrift:

Logik med tillämpningar 97-11-18 Föreläsning 7-8 Logik med tillämpningar 97-11-18 1

Innehåll Predikatlogik, relationer, formler Logikprogrammering Logik med tillämpningar 1996-11-19 Innehåll Predikatlogik, relationer, formler Logikprogrammering Kapitel 3.1-3.4 i Ben-Ari Kapitel 1-3 i Shapiro 2

Satslogiken är för ”grov” Försök uttrycka detta i satslogik: Alla män är dödliga. Sokrates är en man. Därför är Sokrates dödlig Intuitivt förstår vi att utsagan är valid men i satslogiken skulle formeln se ut så här: A SD och det är inte en valid formel.

Samma sak i predikatlogik: x(man(x)  dödlig(x)) man(Sokrates) dödlig(Sokrates) Hela implikationen uttrycks som man(Sokrates)  x(man(x)  dödlig(x))  dödlig(Sokrates)

Relationer och predikat En n-relation är en delmängd av den kartesiska produkten D1 x ... x Dn där varje Di är en mängd. Definition (3.1.1) D är en mängd. R är en n-relation på domän D om R är en relation på Dn. R är en n-relation på domän D. Predikatet R associerat med R är: R(d1,..., dn) = T omm {d1,..., dn}R

Det vi har lärt oss om satslogiken kan nu överföras på predikatlogiken. Vi har infört domäner och predikat, vilket komplicerar detaljerna, men de underliggande mekanismerna kvarstår. För att undvika att behöva referera till element i specifika domäner inför vi kvantifierare för att kunna uttrycka att ett predikat är sant för några eller alla element i en domän.

Definition (3.2.1)  är allkvantor och uttalas "för alla",  är existens-kvantor och uttalas "det existerar". I en kvantifierad formel som (x A) kallas x för kvantifierad variabel eller bunden variabel och formeln A är räckvidden för x. x måste inte förekomma i A. Kvantifierare binder lika starkt som negation

Exempel på formler xy(p(x, y)  p(y, x)) y p(x, y) xy(p(x)  p(y)) xp(a, x)

Definition: Låt A vara en formel, x en variabel och a en konstant Definition: Låt A vara en formel, x en variabel och a en konstant. A[xa] är en substitution av a för x i A, och definieras induktivt: Om A är en atomisk formel (predikat, variabel eller konstant), byt ut alla x mot a i A. Om A = B, A[x  a] = B[x  a] Om A = B op C, A[x  a] = B[x  a] op C[x  a] Om A = xB, A[x  a] = A. Lika för A = xB. Om A = yB, y  x, A[xa] = yB[x  a]. Lika för A = xB.

Fria variabler och stängda formler Definition (3.2.3) Om A[x  a]  A, dvs subtitutionen av a för x i A har medfört en förändrad formel, så kallas x för en fri variabel i A. En formel utan fria variabler är stängd. Lemma (3.2.4) Om A är en stängd formel så är även A [x  a] stängd.

Instansiering Definition (3.2.5) xA(x) är en kvantifierad formel och a är en konstant. A[x  a] eller A(a) är en instans av xA(x). Att substituera en konstant för en kvantifierad variabel kallas för instansiering.

Definition: A är en formel och {P1, …, Pn} är alla predikat i A och {a1, ..., ak} är alla konstanter i A. En interpretation (tolkning) I är en trippel (D,{R1, ..., Rn}, {d1, …, dk}) innehållande: D, en icke-tom domän. En tilldelning av en n-relation Ri på D till varje n- predikat pi En tilldelning av ett element dj D till varje konstant aj.

Definition (3. 3. 3) A är en stängd formel Definition (3.3.3) A är en stängd formel. v(A), värdet av A under en tolkning I, fås genom att först ersätta varje konstant i A med motsvarande element ur I, och därefter genom induktion över A: Om A = pi(c1, …, cn) är en atomisk formel (inga variabler) så är v(A) = T omm {c1, ..., cn}  Ri, där Ri är den relation som tilldelats pi av I. v(A1) = T omm v(A1) = F. v(A1 op A2) följer sanningstabellen för op. v(xA1) = T omm för alla c  D, v(A1[x  c]) = T. v(xA1) = T omm för något c  D, v(A1[x  c]) = T.

Modeller, satisfierbarhet,validitet Definition (3.3.4) A är sann för I, eller I är en modell för A, om v(A) = T under I. Notation IA Definition (3.3.5) En formel A är satisfierbar om det finns en tolkning I så att I  A. A är valid om I  A för alla tolkningar I. Notation A.

Sanningsvärden för öppna formler då? Teorem 3.3.7 säger: En öppen formel är satisfierbar omm dess existensial closure är satisfierbar. En öppen formel är valid omm dess universial closure är valid.

Figur 3.2 i Ben-Ari är viktig! För att kunna göra substitutioner måste antalet fria variabler vara detsamma i båda formlerna. Kvantifikatorerna kan definieras i termer av varandra: xA(x)  xA(x) xA(x)  xA(x) xA(x) xA(x)

Logikprogrammering De flesta programspråk utgår ifrån von Neumanns maskinmodell, dess instruktioner och dess begränsningar när de skapas. Arbetet delas upp på flera personer: de som löser problemet och de som implementerar lösningen. Logikprogrammering börjar med ett abstrakt tänkande som inte är beroende av en viss datormodell. Enda begränsningen är det mänskliga tänkandet... 23

Logikprogrammering I det utopiska fallet: Program = mängd av axiom som beskriver kunskapen som finns om problemet tillsammans med gjorda antaganden Beräkning = programmet löser ett problem genom att producera ett konstruktivt bevis av formeln som beskriver problemet 24

Ett programs uppbyggnad Ett program består av en mängd satser. Det finns tre typer av satser: Fakta Regler Frågor (kallas även mål) Ett fakta talar om att det existerar en relation mellan objekt. Kallas även predikat. Ex: mother(eva, kain). % Eva är mor till Kain. 25

Uppbyggnad forts… Om man vill fråga om Eva är mor till Kain skriver man mother(eva, kain). och trycker return. Svaret man får i detta fall är yes. Frågor och fakta ser syntaktiskt likadana ut men kan skiljas åt av kontexten. Programmet kontrollerar om frågan är en logisk konsekvens av programmet. 26

Logisk variabel plus(0, 0, 0). plus(0, 1, 1). plus(1, 0, 1). … plus(X, Y, 2). plus(X, X, 2) X = 0, Y = 2; X = 1; X = 2, Y = 0; no X = 1, Y = 1; no

Variabler kan summera fakta också: plus(0, X, X) times(0, X, 0) Variabler som bara förekommer en gång i ett fakta eller en regel kan göras anonyma: times(0, _, 0)

Term En term definieras induktivt: konstanter och variabler är termer en sammansatt term består av en funktor och argument En term som inte innehåller variabler kallas för en grund term.

Regler Man kan definiera nya relationer ur gamla med hjälp av regler: man(kain). man(adam). kvinna(eva). far(adam, kain). mor(eva, kain). förälder(X, Y) far(X, Y). förälder(X, Y) mor(X, Y). son(X, Y) förälder(Y, X), man(X).

Logikprogram består av klausuler med högst en positiv literal: B1  Logikprogram består av klausuler med högst en positiv literal: B1  ... Bn  A Vi skriver normalt dessa klausuler på formen A  B1, ..., Bn. Den positiva literalen (A) kallas för huvud, och de negativa (Bi) för kropp. En enhetsklausul A. kallas för fakta (då inget behöver vara uppfyllt för att den ska vara sann). En klausul utan huvud kallas för mål.  B1, …, Bn.

Program, procedur, databas Ett program består av ett antal procedurer. En procedur är en mängd regler och fakta med samma predikatnamn. Om proceduren består av enbart grunda fakta (utan variabler) kallas den för en databas.

Frågor Grunda frågor - inferens genom identitet plus(0, 2, 1) plus(0, 2, 2) no yes Existensiella frågor - inferens genom generalisering plus(0, X, 2) X plus(0, X, 2) X = 2; no Konjunktiva frågor mor(anna, X), mor(X, Y).

Universella fakta Variabler är förstås användbara i fakta också, där är de dock implicit allkvantifierade. plus(0, X, X).x plus(0, X, X) Inferens genom instansiering: xp(x) p(a)

Regler Intressanta konjunktiva frågor introducerar nya relationer: mormor(X,Y):- mor(X,Z),mor(Z,Y). Disjunktiva regler - alternativa regler: dotter(X, Y):- far(Y, X), kvinna(X). dotter(X, Y):- mor(Y, X), kvinna(X). Rekursiva regler forfader(X, Y):- foralder(X, Z), forfader(Z, Y). forfader(X, X).

Definition: Meningen med ett logikprogram P, M(P), är mängden grunda enhetsmål härledbara från P. Definition: Ett program P är korrekt i hänseende till en tänkt mening M om meningen med P, M(P), är en delmängd av M. D.v.s. ett korrekt program säger inte saker som inte var tänkt. Definition: Ett program P är komplett i hänseende till en tänkt mening M, om M är en delmängd av M(P). D.v.s. ett komplett program säger allt som är tänkt.

Listor Listan är den fundamentala rekursiva strukturen inom logikprogrammering. Tomma listan, kallad nil, betecknas här med []. Vi behöver också en listkonstruerare, en funktor av aritet två. Historiskt betecknas den med "." Vi betecknar dock .(X,Y) med [X | Y]. X kallas huvud och Y kallas svans. list([]). list([X | Xs]) :- list(Xs).

Member member(X, [X | Xs]). member(X, [Y | Ys]) :- member(X, Ys). Exempel på frågor member(b,[a, b, c]). member(X, [a, b, c]). member(b, X).

Att skriva logikprogram Hur skriver vi då ett logikprogram, som exempelvis delete, som givet frågan delete([a,b,c,b] ,b ,X). returnerar det intuitivt korrekta svaret X= [a,c]

Determinism vs ickedeterminism Givet programmet son(X,Y) :- far(Y,X), man(X). far(olle, kalle). far(olle, pelle). man(kalle). så kan vi visa son(S, olle) på två sätt. Vi kan först visa far(olle, S) med S=kalle och sedan man(kalle), eller vi kan visa man(S) med S=kalle och därefter far(olle, kalle). 28

Vilken Prolog använder vi? Sicstus version3#6 finns uppkompilerad på alla RS6000-burkar. Kan köras direkt i emacs… Manual finns på www: http://www.sics.se/ps/sicstus/sicstus_toc.html Man kan antingen skriva programmet direkt i Sicstus eller också läsa in en fil. 32

Enkla kommandon: Starta Sicstus Prolog sicstus (vid prompten) run-prolog (i emacs) Läsa in en textfil med namnet filename: [filename]. Spåra en körning och se hur Prolog arbetar trace.Stänga av spårningen notrace. Avsluta Sicstus ^D (dvs ctrl-D)