föreläsning 15

24
Föreläsning 15 Logik med tillämpningar 97-12-12

Upload: shyla

Post on 12-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

Föreläsning 15. Logik med tillämpningar 97-12-12. Innehåll. Programmeringsstil i Prolog Expertsystem Att kunna inför tentan Kapitel 13 och 14.3 i Sterling/Shapiro. Hur ska man skriva program i Prolog?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Föreläsning 15

Föreläsning 15

Logik med tillämpningar

97-12-12

Page 2: Föreläsning 15

Innehåll

Programmeringsstil i Prolog Expertsystem Att kunna inför tentan Kapitel 13 och 14.3 i Sterling/Shapiro.

Page 3: Föreläsning 15

Hur ska man skriva program i Prolog?

Man skriver klausuler på formensort(Xs, Ys) :-

permutation(Xs, Ys), ordered(Ys).

Dvs, man skriver både klausulens huvud och samtliga delmål på egen rad. Delmålen indenteras till exempel med en tab.

Page 4: Föreläsning 15

Man brukar normalt hålla samman definitionen av ett predikat; dvs, man skriver alla klausuler som definierar ett predikat efter varandra:

permutation([], []).permutation([X|Xs], Ys) :- permutation(Xs, Zs), insert(X, Zs, Ys).

Programstil forts.

Page 5: Föreläsning 15

Anonyma variabler

De flesta prologsystem tillåter att man ersätter de variabler som förekommer endast en gång i en regel med en anonym variabel, för att understryka de variabler som är relevanta vid unifieringen.

member(X,[X | Xs]). member(X,[Y | Ys]) :- member(X,Ys).

member(X,[X | _]). member(X,[_ | Ys]) :- member(X,Ys).

Page 6: Föreläsning 15

Kommentarer Alltid viktigt att kommentera koden! Allt som står mellan % och radslut är en kommentar. Allt

som står mellan /* och */ (inklusive radslut) är en kommentar.

Det är inte alltid nödvändigt att tala om hur en procedur fungerar, men man ska alltid tala om vad samtliga predikat i ett program gör.

Detta görs lämpligen på raden innan definitionen av relationen.

Page 7: Föreläsning 15

Läsbarheten hos ett program Beror på layout och namn på variabler. Predikatnamnen beskriver relationer mellan

objekt i programmet. Man har standardardiserade variabelnamn tex

Xs, Ys etc för listor och X, Y för element. ett_predikat och EnVariabel - man visar på två

ord på olika sätt för predikat och variabler. Det viktigaste är att man är konsekvent!

Page 8: Föreläsning 15

setof och bagof

Alla lösningar till en fråga kan samlas i en lista med hjälp av setof eller bagof. Skillnaden är att setof tar bort duplikat medan bagof verkligen ger alla lösningar.

setof(X,member(X,[a,b,d,a,e,b,c],Y) . Y= [a,b,c,d,e]

bagof(X,member(X,[a,b,d,a,e,b,c] ,Y) . X=_0, Y= [a,b,d,a,e,b,c]

Page 9: Föreläsning 15

Egna operatorer Egna operatorer kan definieras med op. op tar tre

argument, ett precedensvärde, operatorns associativ-itet samt operatornamnet.

Exempel: op(200, xfy, ^) Precedensvärdet måste vara mellan 0 och 25000

(systemberoende). Associativiteten specificeras som en avfx, fy prefixoperator xf, yf postfixoperator xfx, xfy, yfx, yfy infixoperator

Page 10: Föreläsning 15

Egna operatorer forts.

Nuvarande precedens och associativitet kan efterfrågas med current_op. Varför inte prova lista alla op:ar med

bagof((X,Y,Z),current_op(X,Y,Z),Ls).

Page 11: Föreläsning 15

Systematiskt programmerande? Kan vara enklare att programmera om man utgår

från en skelettkod som byggs ut. list([X|Xs]) :- list(Xs).list([]).

Kan byggas ut till:length([X|Xs], N) :-

length(Xs, N1),N is N1+1.

length([], 0).

Page 12: Föreläsning 15

Expertsystem Ska härma en mänsklig expert och fatta de beslut

hon skulle ha gjort. Kan likna ett expertsystem med en svart låda. Vi

skickar in ett antal input och vill få ett (eller flera) svar.

Hur fyller man lådan på bästa sätt?Logiska regelbaser, fuzzy logik, artificiella neurala nätverk, statistiska formler m.m.

En tillämpning inom AI - Artificiell Intelligens.

Page 13: Föreläsning 15

Några andra tillämpningar inom AI

Behandling av naturligt språk Teorembevisning Robotar Automatisk programmering Kombinatoriska och schemaläggnings problem Perception - syn, hörsel etc

Page 14: Föreläsning 15

Eliza

En utmaning: Kan man programmera en dator så att den beter sig som en människa? eller Kan man se skillnad på en dators konversation och en människas?

Joseph Weizenbaum skrev ett program som skulle härma en psykoterapeuts sätt att närma sig en patient.

Page 15: Föreläsning 15

Eliza

Referens: Weizenbaum: ”Eliza - A computer program for the study of natural langauage communication between man and machine.”Communications of the ACM, Volym 9, Nummer 1, Januari 1966.

Finns implementerad i Emacs som kommandot ”doctor”

Page 16: Föreläsning 15

Exempel på dialog:

I am unhappy.

How long have you been unhappy?

Six months. Can you help me?

What makes you think I can help you?

You remind me of my father and brother.

Please tell me more about father

Page 17: Föreläsning 15

Hur fungerar Eliza?

Matcha det som ges som input mot ett mönster som bildar ett standardsvar.Ex.I am (*). How long have you been (*)?I like (*). Does anyone else in your family like (*)?(*) you (**) me. What makes you think I (**) you?

Finns som Prolog-program sidan 275 i Shapiro.

Page 18: Föreläsning 15

Att kunna inför tentan

Följande kapitel ingår: – Ben-Ari:

1, 2.1- 2.10, 3.1 - 3.5, 3.7 - 3.9, 4.1 - 4.6– Sterling-Shapiro:

1 - 3, 5.4 - 5.5, 6 - 11, 12.1, 12.4 - 12.5, 13, 14.1, 14.3

Page 19: Föreläsning 15

Samtliga definitioner, speciellt viktiga är– Tolkning (interpretation)

– Logisk ekvivalens

– Satisfierbarhet, validitet, falsifierbarhet, motsägelse, tautologi

– Beslutsprocedur

– Satisfierbar mängd, modell

– Logisk konsekvens

– Teori, teorem, axiom

– Atom, literal, kompletterande par

– Sundhet och fullständighet

– Gentzen och Hilbertsystem (dvs kunna beskriva dem inte bevisa i dem) Bevis, bevisbarhet

– CNF, PCNF

Page 20: Föreläsning 15

Definitioner forts.– Klausul, klausulform, klausulmängd, enhetsklausul– S S’, subsumering– Tomma klausulen– Resolutionsproceduren– Relation, predikat, kvantifierare, funktioner, termer, stängda

termer– Substitution– Fria och bundna variabler, universell och existensiell closure– Instansiering– Herbranduniversum, herbrandtolkning, herbrandbas,

herbrandmodell– Grund term, grund klausul, grund literal, grund atom, horn

klausuler

Page 21: Föreläsning 15

Definitioner forts,– Mgu– Fakta, regler, mål (fråga), program– Meningen med ett logikprogram– Korrekt program, fullständigt program– Databas, rekursiva regler– Lista, träd– Negation as failure, closed world assumption, not i Prolog– Backtracking – Redundanta lösningar– =, ==, =:=, is, =/=, \==, =<, >=, etc– typredikaten integer, atom, compound, constant, symbol, list– målordning, regelordning och hur det påverkar körningen av

programmet

Page 22: Föreläsning 15

Förstå samtliga teorem och deras bevis, speciellt:– Sambandet mellan och – Sammanhanget mellan validitet och osatisfierbarhet och

mellan satisfierbarhet och falsifierbarhet– Teoremen sidan 32-33– Sambandet mellan och – De fyra lemmana som beskriver hur man minskar en

klausulmängd så att S S’– E() = (E) () = ()

Page 23: Föreläsning 15

Boolska operatorer och deras sanningsvärden. Använda sanningstabeller Skriva om en formel med hjälp av logiska ekvivalenser (bl. a. fig 2.9

och fig 3.2) Semantiska tablåer för sats- och predikatlogik Veta vad en refuteringsmetod är Omvandla en godtycklig formel till CNF, PCNF eller klausulform Minska en klausulmängd S så att S S’ Utföra resolution Kunna se på en formel vad som är variabler, konstanter, funktioner

och predikat. Utföra substitution, unifiering Robinsons unifieringsalgoritm

Page 24: Föreläsning 15

Standardisera isär variabler SLD-resolution Förklara vilka skillnader som finns mellan logikprogrammering i teorin

och Prolog Kunna tolka ett Prologprogram procedurellt och deklarativt (och veta

skillnaden mellan detta!) Kunna bygga ett sökträd för ett logikprogram Följa konventionen när man programmerar i Prolog Programmera i Prolog… Veta vad som menas med rekursiva och iterativa program i Prolog Skriva om ett rekursivt program till ett iterativt eller tvärtom. functor/3, arg/3, =../2, var, nonvar !, röda och gröna cut