Lösungen zur Probeklausur zur Vorlesung Informatik A

Werbung
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
Herunterladen