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