¨Ubungen zur Logik

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