Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) Technische Universität München Institut für Informatik Prof. Tobias Nipkow, Ph.D. Gerwin Klein Blatt 1 Sommersemester 2001 Lösungsvorschläge zu Blatt 1 26. 4. 2001 Übungen zur Logik Aufgabe 1 (Lösungsvorschlag) (a) Gültig. Einige M sind S, d.h. es gibt Elemente, die sowohl M als auch S sind. Wenn wir P , M und S als Mengen betrachten, heißt das, daß ein x ∈ M ∩ S existiert. Damit liegt x auch in M und da alle M P sind, gilt: x ∈ P . Da aber x auch in S liegt, gilt: einige S sind P . Dieser Syllogismus hat übrigens die Bezeichnung AII-3 oder Datisi. (b) Ungültig. Ein Gegenbeispiel könnte folgendermaßen lauten: nehmen wir an, M wären die Pflanzen, P die Vögel und S die Tiere. Dann ist keine Pflanze ein Vogel, kein Tier eine Pflanze, aber es gilt bestimmt nicht, daß kein Tier ein Vogel ist. (Anmerkung: in diesem Fall gibt es sogar schon ein Gegenbeispiel, wenn P und S die gleiche nichtleere Menge repräsentieren, die von M disjunkt ist. Also z.B. P = S = {1}, M = {2}.) Bezeichnung: EEE-1. (c) Ungültig. Für ein Gegenbeispiel nehmen wir an, daß M = {1, 2}, S = {2, 3} und P = {1, 2, 3}. Dann gibt es ein S, das kein M ist (nämlich 3), alle M sind P , aber es ist nicht der Fall, daß einige S nicht P sind (denn S ist ganz in P enthalten). Bezeichnung: AOO-1. (d) Gültig. Einige S sind nicht M , d.h. es gibt ein Element x für das gilt: x ∈ S und x 6∈ M . Angenommen, x läge in P : da alle P M sind, folgt daraus, daß x ∈ M , aber das ist ein Widerspruch zur Annahme. Also gibt es einige S (z.B. x), die nicht P sind. Bezeichnung: AOO-2 oder Baroco. Wer noch weiter mit Syllogismen herumexperimentieren will, findet die SyllogismenMaschine unter: http://home3.swipnet.se/~w-33039/Syllog.machine.html Aufgabe 2 (Lösungsvorschlag) (a) Ja. Wenn alle Vögel fliegen können und Tweety ein Vogel ist, dann kann auch Tweety fliegen. (b) Nein. Tweety könnte beispielsweise ein Strauß sein, dann bleibt die Aussage immer noch wahr, Tweety kann aber trotzdem nicht fliegen. Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) Blatt 1 (c) Nein. Diese Aussage bedeutet nur, daß die Teilmenge der Tiere, die fliegen können, in der Menge der Vögel enthalten ist. Sie sagt nichts darüber aus, ob jeder Vogel fliegen kann. Tweety könnte immer noch ein nicht-fliegender Vogel (z.B. Pinguin) sein. (d) Ja. Wir nehmen an, Tweety ist ein Adler und Tweety kann nicht fliegen. Daraus folgt aber, daß Tweety kein Adler sein kann, was ein Widerspruch ist. Aufgabe 3 (Lösungsvorschlag) Wir müssen, um den Mord aufklären zu können, zunächst herausfinden, wer wen haßt und wie reich die Beteiligten jeweils sind: Tante Agatha haßt jeden, außer dem Butler, d.h. sie haßt sich selbst. Charles jedoch haßt niemanden, den Tante Agatha haßt, d.h. er haßt Tante Agatha nicht. Weil aber ein Mörder immer sein Opfer haßt, folgt daraus, daß Charles nicht der Mörder sein kann. Der Butler haßt jeden, den Tante Agatha haßt, d.h. er haßt Tante Agatha und Charles. Weil aber niemand alle haßt, folgt daraus, daß er sich selbst nicht haßt. Nun haßt aber der Butler jeden, der nicht reicher als Tante Agatha ist, d.h. wenn er selbst nicht reicher als Tante Agatha wäre, dann müßte er sich hassen. Daraus leiten wir ab, daß der Butler reicher als Tante Agatha ist. Damit kann er aber nicht der Mörder sein, denn der Mörder ist niemals reicher als das Opfer. Weil aber jemand von den dreien der Mörder sein muß, bleibt nur noch eine Möglichkeit übrig: Tante Agatha hat Selbstmord begangen. Quelle: Hähnle/Sutcliffe Oben haben wir mit Hilfe natürlicher Sprache argumentiert. Die Logik bietet uns aber auch die Möglichkeit, das Problem formal zu lösen. Formalisierung der Problemstellung: Wir formalisieren zunächst die Problemstellung und benutzen folgende Boole’sche Variable (jeweils für X, Y ∈ {A,B,C}): MX : X ist der Mörder HXY : X haßt Y RXY : X ist reicher als Y Beschreibung der Bedingungen in konjunktiver Normalform: ^ F = (¬MX ∨ HXA ) (1) X∈{A,B,C} ∧ ^ (¬MX ∨ ¬RXA ) (2) ^ (¬HAX ∨ ¬HCX ) (3) X∈{A,B,C} ∧ X∈{A,B,C} ∧ HAA ∧ HAC ^ ∧ X∈{A,B,C} (4) (5) (RXA ∨ HBX ) (6) Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) ∧ Blatt 1 ^ (¬HAX ∨ HBX ) (7) ^ (¬HXA ∨ ¬HXB ∨ ¬HXC ) (8) X∈{A,B,C} ∧ X∈{A,B,C} ∧ (MA ∨ MB ∨ MC ) (9) Zu beweisen: Zu zeigen ist, daß G = F → MA eine Tautologie ist. Das ist genau dann der Fall, wenn ¬G unerfüllbar ist. Durch Einsetzen der Definition von → und mit der Regel von de Morgan erhält man F 0 = ¬G ≡ F ∧ ¬MA , was immer noch in konjunktiver Normalform ist. Häufig verwendete Umformungen: (L1 ∨ . . . ∨ Li ∨ . . . ∨ Ln ) ∧ ¬Li ≡ (L1 ∨ . . . ∨ Li−1 ∨ Li+1 ∨ . . . ∨ Ln ) ∧ ¬Li (R1) Beweisbar mit Kommutativität, Assoziativität, Distributivität, UnerfüllbarkeitsRegel. Daraus kann man zeigen, daß auch gilt: (L1 ∨ . . . ∨ ¬Li ∨ . . . ∨ Ln ) ∧ Li ≡ (L1 ∨ . . . ∨ Li−1 ∨ Li+1 ∨ . . . ∨ Ln ) ∧ Li (R2) (mit Doppelnegation) Beweis: Wir werden aus F 0 immer zwei Konjunktionen entnehmen und sie mithilfe (R1) und (R2) umformen, solange bis die entstehende Formel eine unerfüllbare Teilformel (in diesem Fall MA ∧ ¬MA ) enthält. (n) Wir bezeichnen im folgenden mit FZ die Disjunktion (n) (siehe oben), die durch Einsetzen von Z für X entsteht (bzw. F (n) , falls in der Formel kein X vorkommt). (3) (R2) (1) (R1) FA ∧ F (4) ≡ (¬HAA ∨ ¬HCA ) ∧ HAA FC ∧ F (10) ≡ (¬MC ∨ HCA ) ∧ ¬HCA ≡ ≡ (7) (R2) FC ∧ F (5) ≡ (¬HAC ∨ HBC ) ∧ HAC (7) (R2) FB ∧ F (12) ≡ (¬HBA ∨ ¬HBB ∨ ¬HBC ) ∧ HBA (R2) F (14) ∧ F (13) ≡ (¬HBB ∨ ¬HBC ) ∧ HBC (R2) FA ∧ F (4) ≡ (¬HAA ∨ HBA ) ∧ HAA (8) ≡ ≡ ≡ ≡ (6) (R1) (2) (R2) FB ∧ F (15) ≡ (RBA ∨ HBA ) ∧ ¬HBB FB ∧ F (16) ≡ (¬MB ∨ ¬RBA ) ∧ RBA ≡ ≡ ¬HCA ∧ HAA (10) ¬MC ∧ ¬HCA (11) HBA ∧ HAA (12) HBC ∧ HAC (13) (¬HBB ∨ ¬HBC ) (14) ∧ HBA ¬HBB ∧ HBC (15) RBA ∧ ¬HBB (16) ¬MB ∧ RBA (17) Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) Blatt 1 F (9) ∧ F (11) ≡ (MA ∨ MB ∨ MC ) ∧ ¬MC (R1) F (18) ∧ F (17) ≡ (MA ∨ MB ) ∨ ¬MB (R1) F (19) ∧ ¬MA ≡ MA ∧ ¬MA (R1) ≡ ≡ ≡ (MA ∨ MB ) ∧ ¬MC (18) MA ∧ ¬MB (19) ⊥ (20) Damit gilt F 0 ≡ G ∧ ⊥ für eine Formel G und mit der Unerfüllbarkeits-Regel gilt damit auch: F 0 ≡ ⊥. Eine weitere Möglichkeit ist der Einsatz eines SAT-Solvers. In diesem Fall befindet sich die Problembeschreibung (nämlich F ) bereits in konjunktiver Normalform. Folgendes CProgramm erzeugt eine Eingabe-Datei für semprop. /* Aunt Agatha Murder Mystery Variablen: M_X (X ist der Moerder), H_XY (X hasst Y), R_XY (X ist reicher als Y) X,Y,Z in {A,B,C} Formeln: M_X -> H_XA M_X -> ~ R_XA H_AX -> ~ H_CX H_AA H_AC ~ R_XA -> H_BX H_AX -> H_BX ~ H_XA v ~ H_XB v ~ H_XC M_A v M_B v M_C Kodierung: c(A) = 1, c(B) = 2, c(C) = 3 c(M_X) = c(X), c(H_XY) = 100 + c(X) * 10 + c(Y), c(R_XY) = 200 + c(X) * 10 + c(Y) */ # define N 3 /* Beginnt eine neue Disjunktion */ void start_clause() { printf("("); } /* F"ugt bei b=0 ein Lehrzeichen nach einem Literal ein, bei b=1 wird eine Disjunktion beendet */ void end_literal(int b) { if (b) printf(")\n"); else printf(" "); } Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) /* Bedeutung von i,j1,j2: M_X: i=0, j1=0, j2=1,2,3 je nachdem ob X=A,X=B,X=C H_XY: i=1, j1=1,2,3, j2=1,2,3 je nach Belegung von X,Y R_XY: i=2, j1=1,2,3, j2=1,2,3 je nach Belegung von X,Y Bedeutung von b: b=1 ergibt ein positives, b=0 ein negatives Literal */ void variable(int i,int j1,int j2,int b) { int a; a = i*100 + j1*10 + j2; if (b) printf("%d",a); else printf("-%d",a); } int main(void) { int j; /* M_X -> H_XA */ for (j=1;j<=N;j++) { start_clause(); variable(0,0,j,0); end_literal(0); variable(1,j,1,1); end_literal(1); } /* M_X -> ~ R_XA */ for (j=1;j<=N;j++) { start_clause(); variable(0,0,j,0); end_literal(0); variable(2,j,1,0); end_literal(1); } /* H_AX -> ~ H_CX */ for (j=1;j<=N;j++) { start_clause(); variable(1,1,j,0); end_literal(0); variable(1,3,j,0); Blatt 1 Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) end_literal(1); } /* H_AA */ start_clause(); variable(1,1,1,1); end_literal(1); /* H_AC */ start_clause(); variable(1,1,3,1); end_literal(1); /* ~ R_XA -> H_BX */ for (j=1;j<=N;j++) { start_clause(); variable(2,j,1,1); end_literal(0); variable(1,2,j,1); end_literal(1); } /* H_AX -> H_BX */ for (j=1;j<=N;j++) { start_clause(); variable(1,1,j,0); end_literal(0); variable(1,2,j,1); end_literal(1); } /* ~ H_XA v ~ H_XB v ~ H_XC */ for (j=1;j<=N;j++) { start_clause(); variable(1,j,1,0); end_literal(0); variable(1,j,2,0); end_literal(0); variable(1,j,3,0); end_literal(1); } /* M_A v M_B v M_C */ start_clause(); Blatt 1 Lösungsvorschläge Sommersemester 2001 (Stand: 26. 4. 2001) Blatt 1 variable(0,0,1,1); end_literal(0); variable(0,0,2,1); end_literal(0); variable(0,0,3,1); end_literal(1); } Eingabedateien dieser Größe kann man natürlich auch noch gut per Hand eingeben. Das Programm soll nur als Muster für spätere Aufgaben dienen. Etwas unangenehm ist die Kodierung der Atome in natürliche Zahlen. Wir müssen uns dabei jedoch nur merken, daß 1 für “Tante Agatha ist die Mörderin”, 2 für “Der Butler ist der Mörder” und 3 für “Charles ist der Mörder” steht. Wenden wir semprop -allmodels auf die Ausgabedatei an, so erhalten wir folgendes: positive part of model 1: 111 113 121 123 1 221 231 positive part of model 2: 111 113 121 123 1 221 positive part of model 3: 111 113 121 123 1 132 221 231 positive part of model 4: 111 113 121 123 1 132 221 satisfiable: 13 branches In allen vier Modellen ist also Tanta Agatha—und niemand sonst—die Mörderin.