240 likes | 405 Views
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?.
E N D
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? • 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.
Programstil forts. • 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).
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).
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.
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!
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]
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
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).
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).
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.
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
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.
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”
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 …
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.
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
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
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
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
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) • () = ()
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
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