1 / 24

Föreläsning 15

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?.

shyla
Télécharger la présentation

Föreläsning 15

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Innehåll • Programmeringsstil i Prolog • Expertsystem • Att kunna inför tentan • Kapitel 13 och 14.3 i Sterling/Shapiro.

  3. 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.

  4. 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).

  5. 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).

  6. 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.

  7. 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!

  8. 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]

  9. 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

  10. 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).

  11. 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).

  12. 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.

  13. 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

  14. 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.

  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”

  16. 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 …

  17. 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.

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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)  • () = () 

  23. 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

  24. 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

More Related