250 likes | 371 Views
Föreläsning 16. Logik med tillämpningar 020319. 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
E N D
Föreläsning 16 Logik med tillämpningar 020319
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 variabler x(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 negationer x(p(x) {y q(x, y) v[q(x, v) z r(v, z)]}) Flytta ut kvantifierare xyvz (p(x) {q(x, y) [q(x, v) r(v, z)]}) Gör om matrisen till CNF xyvz (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)]) Skolemisera xvz ([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
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.
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) M = 2 M = 3 N = 3; N = 6; N = 9; no N = 2; N = 3;
5b) 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 8 Ett 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 9 c) 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 Marylä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 8 10. exjobbare(Jill) {y5 Jill} 6 o 9 11. fostud (Jill) vanlig(Jill) {x3 Jill} 3 o 10 12. läst_mer(x1,Jill) vanlig(Jill) {y1 Jill} 1 o 11 13. läst_mer(x1,Jill) läst_mer(Jill, y2) {x2 Jill} 2 o 12 14. läst_mer(Jill, y2) {x1 Jane} 6 o 13 15. [] {y2 Mary} 7 o 14