Lösungen zur Probeklausur zur Vorlesung Informatik A ( F. Hoffmann) /5+3+2 Aufgabe 1 Logisches (a) Testen Sie mit dem Resolutionskalkül(!), ob die Boolesche Formel t = ¬x4 ∨ (x1 ∧ ¬x3 ) ∨ (¬x1 ∧ ¬x3 ∧ x4 ) eine Folgerung aus t1 = x1 ∨ ¬x2 ∨ ¬x3 und t2 = (x1 ∨ x2 ∨ x3 ) ∧ ¬x3 ist. Es ist also zu prüfen, ob t1 ∧ t2 ⇒ t eine Tautologie ist. Lösung: t1 ∧ t2 ⇒ t ist genau dann Tautologie, wenn ¬(t1 ∧ t2 ) ∨ t Tautologie ist und das ist genau dann der Fall, wenn t1 ∧ t2 ∧ ¬t Kontratiktion ist. Wir bilden die zugehörige Klauselmenge und wenden den Resolutionskalkül an: {x1 , ¬x2 , ¬x3 } {x1 , x2 , x3 } {¬x3 } {x4 } {¬x1 } {¬x1 , x3 } {x1 , x3 , ¬x4 } {x1 , x3 } {x3 } Abbildung 1: Ableitung der leeren Klausel Damit ist die Formel eine Kontradiktion und t1 ∧ t2 ⇒ t eine Tautologie. (b) Seien F und G Boolesche Terme. Beweisen Sie die folgenden Aussagen oder geben Sie Gegenbeispiele an! (a) Falls (F ⇒ G) gültig (d.h. Tautologie) ist und F ist gültig, so ist G gültig. (b) Falls (F ⇒ G) erfüllbar ist und F ist erfüllbar, so ist auch G erfüllbar. (c) Falls (F ⇒ G) gültig ist und F erfüllbar ist, so ist G gültig. Lösung: (a) Sei Iβ die Interpretation bezüglich Belegung β der Variablen in F und G. Nach Annahme ist Iβ (F ⇒ G) konstant 1 ebenso wie Iβ (F ). Das heißt: Iβ (1 ⇒ G) = 1. Das ist aber nur der Fall, wenn für alle β gilt: Iβ (G) = 1 Also ist G gültig. (b) Die Formel x → x ∧ ¬x ist ein Gegenbeispiel, also Aussage nicht richtig. (c) Aussage ist falsch, wie man an der Formel x ⇒ x sieht. (c) Bilden Sie aus den Variablen x, y, z eine Boolesche Formel t, die genau dann zu 1 ausgewertet wird, wenn eine ungerade Anzahl der ursprünglichen Variablen mit 1 belegt ist. Benutzen Sie dabei nur {¬, ∨}. Lösung: Wir bilden die DNF und formen mit de Morganscher Regel um. t = (x ∧ ¬y ∧ ¬z) ∨ (¬x ∧ y ∧ ¬z) ∨ (¬x ∧ ¬y ∧ z) ∨ (x ∧ y ∧ z) ≡ ≡ ¬(¬x ∨ y ∨ z) ∨ ¬(x ∨ ¬y ∨ z) ∨ ¬(x ∨ y ∨ ¬z) ∨ ¬(¬x ∨ ¬y ∨ ¬z) Probeklausur zur Vorlesung Informatik A WS 2012/2013 Blatt 2/9 /6+4 Aufgabe 2 Beweisbares (a) Definieren Sie die allgemeine map–Funktion rekursiv. Des weiteren kennen Sie sicher die folgende Indexfunktion !!: ( x : _ ) !! 0 = x ( _ : xs )!! n = xs !! (n-1) [] !! n = error --Index.1 --Index.2 --Index.3 Beweisen Sie mit vollständiger Induktion, dass für alle Funktionen f, für Listen xs und für natürliche Zahlen n gilt (map f xs) !! n = f ( xs!!n ) Lösung: Hier nochmal die map-Funktion: map:: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = (f x) : (map f xs) --Map.1 --Map.2 Wir beweisen die Aussage mit vollständiger Induktion nach n und machen im Anker und im Induktionsschritt noch die Fallunterscheidung, ob es eine leere oder nichtleere Liste ist. Induktionsanfang: n= 0 Für xs=[]: (map f []) !! 0 = [] !! 0 = error f ([] !! 0) = error --Index.3 --Map.1,Index.3 Für Listen x:xs: (map f (x:xs))!! 0 = ((f x) : (map f xs)) !! 0 = f x f ((x:xs) !! 0)= f x --Index.1 --Map.2, Index.1 Induktionsschritt: Wir nehmen an, die Aussage gilt für n. Für xs=[]: (map f []) !! (n+1) = [] !! (n+1) = error --Map.1,Index.3 f ([] !! (n+1)) = error --Index.3 Für Listen x:xs: (map f (x:xs))!! (n+1) = ((f x) : (map f xs)) !! (n+1) --Map.2 = (map f xs)) !! n = f( xs !! n) --Index.2, Ind.voraussetzung f( (x:xs) !! (n+1)) = f ( xs !! n) --Index.2 Nach dem Prinzip der vollständigen Induktion ist damit die Aussage für alle n und alle Listen xs bewiesen. Probeklausur zur Vorlesung Informatik A WS 2012/2013 Blatt 3/9 (b) (i) Zeigen Sie, dass jede Boolesche Formel semantisch äquivalent zu einer ist, die nur Operatoren aus {¬, ⇒} benutzt. Lösung: Wir simulieren die vollständige Signatur {¬, ∨}. x ∨ y ≡ ¬x → y (ii)Beweisen Sie, dass {⇔} keine vollständige Signatur ist. Lösung: Sei t ein Term, in dem Variable x1 , . . . , xn und ausschließlich der Operator ⇔ auftritt. belegt man alle Variable mit 1, so wird der Term zu 1 ausgewertet. Eine Boolesche Funktion f : Bn → B mit f (1, . . . , 1) = 0 kann man so also nicht realisieren. Probeklausur zur Vorlesung Informatik A WS 2012/2013 Blatt 4/9 Aufgabe 3 Haskell /4+2+2+2 (a) Schreiben Sie eine Funktion isZigZag einschließlich Signatur , die für Listen von ganzen Zahlen feststellt, ob diese in Zig–Zag–Form sind. Eine Liste ist in Zig–Zag–Form, falls keine zwei aufeinanderfolgende Elemente gleich sind und keine drei aufeinanderfolgende Elemente auf– oder absteigend sortiert sind. Bsp.: [],[3], [2,1,3],[1,4,3,4,2,10] sind Listen in Zig–Zag–Form. Vergessen Sie die Kommentare nicht. Lösung: Wir machen Fallunterscheidung nach Listenlänge und ab Länge 3 muss man die ersten 3 Elemente vergleichen. isZigZag :: [Int] -> Bool isZigZag [] = True isZigZag [x] = True isZigZag [x,y] = (x/=y) isZigZag x:y:z:xs | (x<y)&&(y>z) = isZigZag y:z:xs | (x>y)&&(y<z) = isZigZag y:z:xs | otherwise = False (b) Finden Sie partielle Operatoranwendungen sec1, sec2 derart dass die Anwendung von map sec1 . filter sec2 denselben Effekt hat wie filter (>0) . map (+1). Geben Sie eine kurze Begründung. Lösung: filter (>0) . map (+1) liefert Liste aller Einträge die nach dem Erhöhen um 1 echt größer als 0, also mindestens 1 sind. Dieselben Elemente erhält man, wenn man zuerst die Einträge ≥ 0 rausfiltert und dann 1 addiert, also map (+1) . filter (>=0) (c) Geben Sie Signatur und Definition der Funktion foldr foldr : (a -> b -> b) -> b -> [a] -> b foldr f y [] = y foldr f y (x:xs) = f x (foldr f y xs) (d) Was ist der Wert des folgenden Ausdrucks? (foldr f 0 ls, foldl f 0 ls) where ls = [6,9,8,3,10] f x y = div (x+y) 2 Antwort: (6,7) Probeklausur zur Vorlesung Informatik A WS 2012/2013 Blatt 5/9 /2+2+3+3 Aufgabe 4 Verschiedenes (a) Schreiben Sie die folgenden Formeln in Negationsnormalform, das heißt, die verwendeten Negationen beziehen sich nur auf atomare Teilformeln und es werden außer den Quantoren nur die Junktoren ¬, ∨, ∧ benutzt. (i) ¬∃x ∃y (P (x, y) ∧ Q(x, y) ∧ R(x, y)) (ii) ¬∀y (∃x (P (x, y) ⇒ Q(x, y)) ∧ ∃z R(x, z)) Lösung: zu (i) ∀x∀y (¬P (x, y) ∨ ¬Q(x, y) ∨ ¬R(x, y)) zu (ii) ∃y∀xP (x, y) ∧ ¬Q(x, y) ∨ ∀z¬R(x, z) (b) Der Ausdruck (x:xs) ist äquivalent zu (i) x ++ xs (ii) [x] ++ xs (iii) [x] ++ [xs] (iv) alles richtig Antwort: (ii) (c) Sei C = {c1 , . . . , cn } ein binärer Präfixcode für die Zeichen a1 , . . . , an . Sei n = 8. Konstruieren Sie ein C mit den Codewortlängen l1 = l2 = 2, l3 = l4 = 3, l5 = l6 = l7 = l8 = 4. Lösung: Mit der Ungleichung von Kraft testen wir, ob dies geht: 2· 1 1 1 +2· +4· ≤1 4 8 16 Wir wählen nacheinander die lexikographisch kleinsten noch nicht verbotenen Wörter: Dies ergibt die Codewörter: 00, 01, 100, 101, 1100, 1101, 1110, 1111 (d) Wir betrachten einen 0–1–Blockcode der Länge 15, der 1–fehlerkorrigierend ist. Wie viele Codewörter kann dieser höchstens haben und warum? Lösung: Der Minimalabstand zwischen den |C| Codewörtern muss mindestens 3 sein. Das heißt, die Kugeln mit Radius 1 um die Codewörter sind disjunkt und passen alle in die Menge aller 215 potenziellen Codewörter der Länge 15 hinein. D.h., |C|(1 + 15) ≤ 215 . Daraus folgt |C| ≤ 211 . Probeklausur zur Vorlesung Informatik A WS 2012/2013 Blatt 6/9