Ladda ner presentationen
1
Logik med tillämpningar 97-11-18
Föreläsning 7-8 Logik med tillämpningar 1
2
Innehåll Predikatlogik, relationer, formler Logikprogrammering
Logik med tillämpningar Innehåll Predikatlogik, relationer, formler Logikprogrammering Kapitel i Ben-Ari Kapitel 1-3 i Shapiro 2
3
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 SD och det är inte en valid formel.
4
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)
5
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
6
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.
7
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
8
Exempel på formler xy(p(x, y) p(y, x)) y p(x, y)
xy(p(x) p(y)) xp(a, x)
9
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[xa] ä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[xa] = yB[x a]. Lika för A = xB.
10
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.
11
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.
12
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.
13
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.
14
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 IA 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.
15
Sanningsvärden för öppna formler då?
Teorem säger: En öppen formel är satisfierbar omm dess existensial closure är satisfierbar. En öppen formel är valid omm dess universial closure är valid.
16
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) xA(x) xA(x) xA(x) xA(x) xA(x)
17
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
18
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
19
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
20
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
21
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
22
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)
23
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.
24
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).
25
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.
26
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.
27
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).
28
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)
29
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).
30
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.
31
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).
33
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).
34
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]
35
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
36
Vilken Prolog använder vi?
Sicstus version3#6 finns uppkompilerad på alla RS6000-burkar. Kan köras direkt i emacs… Manual finns på www: Man kan antingen skriva programmet direkt i Sicstus eller också läsa in en fil. 32
37
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)
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.