V07 - Logik

Werbung
Algorithmen & Programmierung
Logik
Aussagenlogik
Gegenstand der Untersuchung
Es werden Verknüpfungen zwischen Aussagen untersucht.
Aussagen
Was eine Aussage ist, wird nicht betrachtet, aber jede Aussage besitzt genau einen
Wahrheitswert.
Wahrheitswerte
• Aussage ist wahr ➔ Wahrheitswert true
• Aussage ist falsch ➔ Wahrheitswert false
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
206
So sollte man es nicht machen!
?
Aussage 1
Pinguine sind schwarz-weiß.
Aussage 2
Alte Filme sind schwarz-weiß.
Verknüpfung der beiden Aussagen
Pinguine sind alte Filme.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
207
Verknüpfung von Aussagen
Gegeben seien zwei Aussagen A und B
Konjunktion (logisches Und)
Die Verknüpfung A∧B ist eine Aussage.
Disjunktion (logisches Oder)
Die Verknüpfung A∨B ist eine Aussage.
Negation (logisches Nicht)
¬A ist eine Aussage.
Prinzip der Extensionalität
Der Wahrheitswert einer Aussageverknüpfung hängt ausschließlich von
den Wahrheitswerten ihrer Teilaussagen ab.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
208
Negation ¬
Bedeutung
Die Negation negiert eine Aussage:
¬A ist genau dann wahr, wenn A nicht wahr (d.h. falsch) ist.
Alternative Darstellung
Wahrheitstabelle ¬
Ā
A
¬A
false
true
true
false
Alternative Bezeichnungen
• Komplement
• NOT
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
209
Konjunktion ∧
Bedeutung
A∧B ist nur dann wahr, wenn Aussage A und Aussage B wahr sind.
Alternative Bezeichnungen
• Und
• AND
Dr. Frank Seifert
Wahrheitstabelle ∧
A
B
A∧B
false
false
false
false
true
false
true
false
false
true
true
true
Vorlesung Algorithmen & Programmierung WS 2015/2016
210
Disjunktion ∨
Bedeutung
A∨B ist wahr, wenn mindestens eine der beiden
Aussagen A oder B wahr ist.
Alternative Bezeichnungen
• Oder
• OR
Dr. Frank Seifert
Wahrheitstabelle ∨
A
B
A∨B
false
false
false
false
true
true
true
false
true
true
true
true
Vorlesung Algorithmen & Programmierung WS 2015/2016
211
Verknüpfung von Aussagen
Es gibt weitere Aussageverknüpfungen, die sich jedoch mit
Wahrheitstabelle ∧
Negation und Konjunktion bzw. Negation und Disjunktion darstellen
A
B
A∧B
false
false
false
false
true
false
true
false
false
true
true
true
lassen:
• Antivalenz
•
Äquivalenz
• Implikation
Wahrheitstabelle ¬
A
¬A
false
true
true
false
Wahrheitstabelle ∨
Logische Vollständigkeit
Alle logischen Verknüpfungsvarianten lassen sich ausschließlich
mit Negation und wahlweise Konjunktion oder Disjunktion
ausdrücken.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
A
B
A∨B
false
false
false
false
true
true
true
false
true
true
true
true
212
Antivalenz ⊕
Bedeutung
A⊕B ist genau dann wahr, wenn ausschließlich Aussage A wahr ist oder
ausschließlich Aussage B wahr ist.
Anders ausgedrückt: A und B müssen entgegengesetzte Wahrheitswerte
aufweisen.
Alternative Bezeichnung
• Exklusives Oder
• XOR
Dr. Frank Seifert
Wahrheitstabelle ⊕
A
B
A⊕B
false
false
false
false
true
true
true
false
true
true
true
false
Vorlesung Algorithmen & Programmierung WS 2015/2016
213
Äquivalenz
Bedeutung
A B ist nur dann wahr, wenn Aussage A den selben Wahrheitswert
wie Aussage B aufweist.
Hierbei spielt es keine Rolle, welcher Wahrheitswert dies konkret ist.
Wahrheitstabelle
Dr. Frank Seifert
A
B
A B
false
false
true
false
true
false
true
false
false
true
true
true
Vorlesung Algorithmen & Programmierung WS 2015/2016
214
Implikation
Bedeutung
A B (Sprechweise A impliziert B oder B folgt aus A) ist nur dann wahr,
wenn entweder Aussage B wahr ist oder beide Aussagen falsch sind.
Wahrheitstabelle
Dr. Frank Seifert
A
B
A B
false
false
true
false
true
true
true
false
false
true
true
true
Vorlesung Algorithmen & Programmierung WS 2015/2016
215
Logische Vollständigkeit
Es gibt zwei weitere Verknüpfungsvarianten, die ebenfalls nur eine Kombination aus Negation und
Konjunktion bzw. Negation und Disjunktion sind:
NAND (NOT AND)
Wahrheitstabelle NAND
Es gilt: A NAND B = ¬(A ∧ B)
NOR (NOT OR)
Es gilt: A NOR B = ¬(A ∨ B)
Wahrheitstabelle NOR
A
B
A NAND B
A
B
A NOR B
false
false
true
false
false
true
false
true
true
false
true
false
true
false
true
true
false
false
true
true
false
true
true
false
Bedeutung
Sowohl NAND als auch NOR sind logisch vollständig, d.h. dass man lediglich mit einer
dieser beiden Verknüpfungsvarianten jede andere logische Verknüpfung ausdrücken kann.
NAND-Gatter stellen die Basis digitaler Technik dar.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
216
Logische Vollständigkeit
Beispiel
Wahrheitstabelle NAND
¬A
A NAND A
A ∧ B
(A NAND B) NAND (A NAND B)
A
B
A NAND B
false
false
true
false
true
true
true
false
true
true
true
false
A ∨ B
(A NAND A) NAND (B NAND B)
A ⊕ B
(A NAND (B NAND B)) NAND ((A NAND A) NAND B)
A
B
(A NAND B) NAND ((A NAND A) NAND (B NAND B))
A
B
A NAND (B NAND B)
A NOR B
Dr. Frank Seifert
((A NAND A) NAND (B NAND B)) NAND ((A NAND A) NAND (B NAND B))
Vorlesung Algorithmen & Programmierung WS 2015/2016
217
Boolesche Algebra
Begriff
Der Begriff geht auf George Boole (1815-1869) zurück, dessen Logikkalkül
von 1847 die Grundlage der heute verwendeten Form darstellt.
Inhalt
Beschrieben werden eine Menge von Axiomen auf der Menge der
Wahrheitswerte 0 (false) und 1 (true) sowie der einstelligen Verknüpfung
„Negation“ und den zweistelligen Verknüpfungen „Konjunktion“ und
„Disjunktion“.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
218
Boolesche Algebra
Kommutativgesetze
De Morgansche Regeln
Assoziativgesetze
Absorptionsregeln
Dr. Frank Seifert
Idempotenz
Distributivgesetze
Konstantensubstitution
Vorlesung Algorithmen & Programmierung WS 2015/2016
219
Logik in C
Verknüpfungsoperationen
C unterstützt die boolesche Algebra direkt durch die Bereitstellung der Verknüpfungsoperationen
Konjunktion, Disjunktion und Negation.
Wahrheitswerte
Des Weiteren gelten für die Bereitstellung der Wahrheitswerte folgende Regeln:
• Der Integerwert 0 entspricht dem Wahrheitswert false
• Ein Integerwert ungleich 0 entspricht dem Wahrheitswert true
Bessere Modellierung
Ab dem C99 Standard gibt es einen vordefinierten Datentyp bool, der die ebenfalls vordefinierte
Wertemenge true und false bereitstellt. Allerdings muss zu seiner Nutzung die Bibliothek
<stdbool.h> vorher eingebunden werden.
In C++ ist der Datentyp bool standardmäßig in das Sprachkonzept integriert.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
220
Logik in C
Wir haben bereits (unwissentlich) mit logischen Ausdrücken in C gearbeitet:
Selektion
Iteration
if ( Bedingung ) while ( Bedingung )
Anweisung1 Anweisung
else Anweisung2
Bedingung
Eine Bedingung (Vergleichsoperation) ist eigentlich ein logischer Ausdruck, dessen
Auswertung einen Wahrheitswert produziert (Bedingung erfüllt ➔ true, Bedingung
nicht erfüllt ➔ false).
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
221
Verknüpfung
Verknüpfungsoperationen
Mit Hilfe dieser Operatoren können logische Ausdrücke gemäß der booleschen Algebra
miteinander verknüpft werden:
• logisches Und
&&
(Konjunktion)
• logisches Oder
||
(Disjunktion)
• Komplement
!
(Negation)
Ergebnis der Verknüpfung
Ist ein logischer Ausdruck, dessen Wahrheitswert aus der Wahrheitstabelle der gewünschten
Verknüpfungsoperation und den Wahrheitswerten der zu verknüpfenden Teilausdrücke resultiert.
Anwendung
Kompakte Darstellung komplexer Bedingungen.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
222
Verknüpfung - Beispiel
int ggT(int a, int b) {
if (a > 0 && b > 0) {
Die Vorbedingung des
while (a != b) {
Euklidischen Algorithmus lautete,
if (a > b)
dass der größte gemeinsame
a = a - b;
Teiler nur von natürlichen Zahlen
else
gebildet werden kann.
b = b - a;
}
Mit Hilfe der logischen
}
Verknüpfungsoperatoren können
else
// 0 als Fehlercode, da
a = 0; // kein Teiler 0 möglich
wir diese Forderung jetzt
}
bequem formulieren:
return a;
}
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
223
Verknüpfung - Beispiel
Gregorianischer Kalender
Der in der westlichen Welt seit 1582 gültige Gregorianische Kalender definiert eine Jahreslänge
von 365,2425 Tagen. Weil die nächste ganzzahlige Jahreslänge von 365 Tagen zu kurz ist, wird
aller vier Jahre ein zusätzlicher Tag - der Schalttag 29. Februar - eingeführt.
Um weiteren Rechenungenauigkeiten (wie bei dem im römischen Reich gebräuchlichen
Julianischen Kalender) vorzubeugen, gilt ergänzend noch folgende Regel: Durch 100 teilbare
Jahre stellen nur dann Schaltjahre dar, wenn sie auch durch 400 teilbar sind.
Aufgabe
Wir wollen herausfinden, ob ein beliebiges Jahr ein Schaltjahr ist.
Bedingungen für Schaltjahre
1. Wenn ein Jahr durch 400 teilbar ist, dann ist es ein Schaltjahr
2. Wenn ein Jahr durch 100 teilbar ist, dann ist es kein Schaltjahr (außer wenn 1. gilt)
3. Wenn ein Jahr durch vier teilbar ist, dann ist es ein Schaltjahr (außer wenn 2. gilt)
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
224
Komplementäre Ausdrücke
Selektionen der Form
if ( logischer Ausdruck )
Anweisung1
// Wenn logischer Ausdruck nach true ausgewertet werden kann
// wird Anweisung1 ausgeführt
// sonst
else
Anweisung2
// wird Anweisung2 ausgeführt
können wir durch Negation des Selektionskriteriums umformen in
if (! logischer Ausdruck )
Anweisung2
// Wenn logischer Ausdruck nach false ausgewertet werden kann
// wird Anweisung2 ausgeführt
// sonst
else
Anweisung1
// wird Anweisung1 ausgeführt
Anwendung
Unter Umständen bessere Modellierung bzw. Verständnis einer zu formulierenden Bedingung.
Dr. Frank Seifert
Vorlesung Algorithmen & Programmierung WS 2015/2016
225
Äquivalenz von Vergleichen
Der Vergleich zweier Werte lässt sich auf verschiedene Art und Weise beschreiben.
Nutzen
• äquivalente Umformungen können verständlicher sein
• Weniger Rechenoperationen durch Wegfall der Negation
Äquivalente Vergleichsoperationen
Dr. Frank Seifert
x < y
!(x >= y)
y > x
!(y <= x)
x <= y
!(x > y)
y >= x
!(y < x)
x == y
!(x != y)
y == x
!(y != x)
x >= y
!(x < y)
y >= x
!(y < x)
x > y
!(x <= y)
y < x
!(y >= x)
x != y
!(x == y)
y != x
!(y == x)
Vorlesung Algorithmen & Programmierung WS 2015/2016
226
Ende der Vorlesung
Herunterladen