Post on 19-Mar-2016
description
Föreläsning 16
Logik med tillämpningar020319
Innehåll
Information kring kursvärdering och tentagenomgång
Genomgång av övningstenta 2
Kursvärdering och tentagenomgång
Kursvärdering öppnas torsdag 21/3– Sammanfattning på webben
Lösningsförslag på webben Tentamensresultat via mail Tentagenomgång
– ska vi ha det?– när? (Tis 2/4 enda vettiga alternativet…)
Övningstentan
Gavs 010421 av mig – omtenta på DV-prog. Täcker samma material som kommande
tentamen. Maxpoäng 40p (3, 4, 5 på 20, 26
respektive 32p) Är en ”normalsvår” tenta.
Uppgift 1 Redovisa stegen i algoritmen inte bara svaret. Förklara vad du gör i varje steg med några ord.
– Kan dock göra flera likadana omskrivningar i varje steg. Exempelvis flytta in alla negationer på en gång.
Visa tydligt vad i ditt svar som är slutsatsen.– Dvs vilken formel du anser vara ditt svar– (Läs noga är det PCNF eller klausulmängd som efterfrågas?)
Använd gärna olika parenteser för att visa vad som hör ihop med vad. {[()]}
Svar: {p(x1) q(x1,f(x1)) q(x1, g(x1)), p(x2) q(x2,f(x2)) r(g(x2), z2)}
Döp om variablerx(p(x) {y q(x, y) v[q(x, v) z r(v, z)]})Ta bort konnektiv utom , och x(p(x) {y q(x, y) v[q(x, v) z r(v, z)]})Flytta in negationerx(p(x) {y q(x, y) v[q(x, v) z r(v, z)]})Flytta ut kvantifierarexyvz (p(x) {q(x, y) [q(x, v) r(v, z)]})Gör om matrisen till CNFxyvz (p(x) {[q(x, y) q(x, v)] [q(x, y) r(v, z)]})xyvz ([p(x) q(x, y) q(x, v)] [p(x) q(x, y) r(v, z)])Skolemiseraxvz ([p(x) q(x, f(x)) q(x, v)] [p(x) q(x, f(x)) r(v, z)])xz((p(x) q(x,f(x)) q(x, g(x))) (p(x) q(x,f(x)) r(g(x), z))) Mängden: {p(x1) q(x1,f(x1)) q(x1, g(x1)), p(x2) q(x2,f(x2)) r(g(x2), z2)}
Uppgift 2 Måste förklara hur och varför roten i tablån ser ut
som den gör. Varför negera? Måste dra en slutsats från trädet, kan inte bara visa
trädet. Det är inte ett svar. Om tablån för negationen av formeln är öppen måste
en ny tablå göras. Inga förenklingar av formeln får göras varken före,
under eller efter man applicerar algoritmen. Svar: Formeln valid
Formeln är valid eftersom negationen är en motsägelse.
xy(p(x, y) (y p(y, x) r(y)))
y(p(a, y) (y p(y, a) r(y)))
y(p(a, y) (yp(y, a) r(y))), (p(a, a) (y p(y, a) r(a)))
y(p(a, y) (yp(y, a) r(y))), p(a, a), (y p(y, a) r(a)))
y(p(a, y) (yp(y, a) r(y))), p(a, a), y p(y, a), r(a)))
y(p(a, y) (yp(y, a) r(y))), p(a, a), yp(y, a), r(a))), p(a, a)
X
Uppgift 3 Var noga att kolla vad ni ska göra och att svara på alla
deluppgifter.E = p(x, y) q(f(x), z) r(v, u) = { xf(y), y f(a), z u} = { y g(a), u z, v f(f(a))}
E = p(f(y),f(a)) q(f(f(y)), u) r(v,u) E = p(x, g(a)) q(f(x), z) r(f(f(a)), z) E = p(f(g(a)),f(a)) q(f(f(g(a))), z) r(f(f(a)),z) = { x f(g(a)), y f(a), u z, v f(f(a))}
Uppgift 4
För att veta om den fungerar så gör man en sanningstabell för uttrycket
Uttrycket blev inte lika som output. Alltså fungerar inte kretskortet som etiketten säger. För att få en formel kan man ta de rader där output är T.
p q r q r p (q r) T T T T T T T F F T T F T F T T F F F T F T T T T F T F F F F F T F F F F F F F
Vi får då:(p q r) (p q r) (p q r)
den kan förenklas (alla formler från och med ovanstående är OK som svar, man behöver inte förenkla…)
(p r) (q q) (p q r)(p r) (p q r)(p (p q)) r(p p) (p q) r(p q) r
Uppgift 5a)
bar(1,N)
1 >= 2 (f)
bar(2,N)
2 >= 2 (s)
bar(3,N)
3 >= 2 (s)
foo(M, N)
p(M), bar(M,N) p(Z), N is Z*3
N is 1*3 (s)
N is 2*3 (s)
N is 3*3 (s)
{M=1} {M=2} {M=3} {Z=1} {Z=2} {Z=3}
{N=1} {N=2} {N=3}
M = 2 M = 3 N = 3; N = 6; N = 9; noN = 2; N = 3;
5b)
!, bar(1,N)
1 >= 2 (f)
foo(M, N)
p(M), bar(M,N) p(Z), N is Z*3
!, N is 1*3 (s)
{M=1} {Z=1}
{N=1}
SVAREN blirN = 3; no
Uppgift 6
Skriv vad du tänker, det kan i princip aldrig bli för mycket text…
Antag att U är en mängd satslogiska formler, dvs U = {A1, A2, ..., An}, antag dessutom att A och B också är satslogiska formler. Visa att om U {A} |= B så gäller att U |= A B.
Svar Om U {A} |= B så innebär det att för alla tolkningar v så att v(U {A} ) = T så är v(B) = T Om v(U {A} ) = T så är v(U) = T och v(A) = T. Enda tillfället då U |= A B inte gäller är om det finns en tolkning v så att v(U) =v(A) =T och v(B) = F. Men om v(U) =v(A) =T så är v(U {A} ) = T och då vet vi att v(B) = T. Alltså gäller påståendet.
Uppgift 7
Kom ihåg att om det står omm måste man bevisa ”åt båda hållen”.
Svar– Antag att S' satisfierbar då finns en modell v så att v(C) =
T för alla klausuler C i S'. Lägg till i tolkningen att v(l) = T. Då blir v(C) = T för alla klausuler C i mängden S- S'.
– Om S satisfierbar så är S' satisfierbar eftersom S' är en delmängd av S.
Uppgift 8Ett exempel på lösning är:% everynth(N, L1, L2)% Tar var N:te element ur listan L1% och returnerar det i L2...everynth(_, [], []).everynth(N, Xs, Ys) :-
everynth(N, 1, Xs, Ys).
everynth(_, _, [], []).everynth(N, M, [X | Xs], [X | Ys]):-
A is M mod N,A == 0,M1 is M + 1,everynth(N, M1, Xs, Ys).
everynth(N, M, [X |Xs], Ys) :- A is M mod N,A \== 0,M1 is M + 1,everynth(N, M1, Xs, Ys).
Vilka lösningar ger ditt program på frågan everynth(3, X, [1, 2])?
X = [_A,_B,1,_C,_D,2] ? ;X = [_A,_B,1,_C,_D,2,_E] ? ;X = [_A,_B,1,_C,_D,2,_E,_F] ? ;No Där _A till _F är namn på anonyma variabler
Uppgift 9 Läs uppgiften noga, kan finnas flera frågor i en fråga. Kortfattade svar:
a) En algoritm är en beslutsprocedur om den terminerar och ger svaret 'yes' om formeln A tillhör U och 'no' om den ej tillhör U.b) Negera formeln och om den är osatisfierbar så är den falsk i alla tolkningar. Om v(A) = F i alla tolkningar så är v(A) = T i alla tolkningar dvs A är valid.
Uppgift 9c) Om X förekommer flera gånger i listan kommer programmet att lyckas
flera gånger. Detta kan undvikas antingen genom att skriva om programmet member(X, [X |Xs]).member(X, [Y|Xs]) :- X \== Y, member(X, Xs).
eller genom att lägga till ett rött cutmember(X, [X |Xs]):- !.member(X, [Y|Xs]) :- member(X, Xs).
Det går att argumentera för båda varianterna. Huvudargument alt.1 är att det fortfarande är ett logiskt korrekt program. Den andra varianten är mer effektiv med avseende på exekveringshastigheten.
Uppgift 10 Det finns tre typer av studenter: vanliga, exjobbare
och forskarstudenter. x(fostud (x) vanlig(x) exjobbare(x))
Studenter är inte forskarstudenter om det finns studenter som läst mer än dem. xy(läst_mer(x, y) fostud (y))
De studenter som läst mer än andra studenter är inte vanliga studenter. xy(läst_mer(x, y) vanlig(x))
Uppgift 10
Studenter är inte exjobbare om det finns andra studenter som läst mer och som är exjobbare. xy(läst_mer(x, y) exjobbare(x) exjobbare(y))
Jane har läst mer än Jill som i sin tur har läst mer än Mary läst_mer(Jane,Jill) läst_mer(Jill,Mary)
Sedan vet vi också att egenskapen ”läst mer” är transitiv, dvs att följande förhållande gäller:xyz(läst_mer(x,y) läst_mer(y,z) läst_mer(x,z))
b)1. läst_mer(x1,y1) fostud (y1) 2. läst_mer(x2,y2) vanlig(x2)3. fostud (x3) vanlig(x3) exjobbare(x3)4. läst_mer(x4,y4) läst_mer(y4,z4) läst_mer(x4,z4)5. läst_mer(x5,y5) exjobbare(x5) exjobbare(y5)6. läst_mer(Jane,Jill)
7. läst_mer(Jill,Mary)
c)
8. exjobbare(Jane)9. läst_mer(Jane,y5) exjobbare(y5) {x5Jane} 5 o 810. exjobbare(Jill) {y5 Jill} 6 o 911. fostud (Jill) vanlig(Jill) {x3 Jill} 3 o 1012. läst_mer(x1,Jill) vanlig(Jill) {y1 Jill} 1 o 1113. läst_mer(x1,Jill) läst_mer(Jill, y2) {x2 Jill} 2 o 1214. läst_mer(Jill, y2) {x1 Jane} 6 o 1315. [] {y2 Mary} 7 o 14