Diese Präsentation zeigt einige der in mathGUIde eingebauten Funktionen der Aussagenlogik
Aussagenlogische Formeln, die den Klassenmethoden der Klasse Logic
übergeben werden, müssen wie folgt aufgebaut sein:
not
, and
, or
,
xor
, ->
, <->
.Wir testen die De Morgan'sche Regeln durch Fallunterscheidung, indem wir sie für alle möglichen Wahrheitswerttafeln prüfen.
Im folgenden Programmstück werden in der ersten Zeile alle vier möglichen Wahrheitswerttafeln
für die Variablen a und b erzeugt.
In der zweiten Zeile stehen vier logische Ausdrücke, deren Wahrheitswerte für alle vier Fälle
in einer Tabelle ausgegeben werden.
Anschließend wird eine Wahrheitswerttafel mit Hilfe der mathGUIde-Funktion
printTable angezeigt.
table = [{"a":a, "b":b} for a in (False, True) for b in (False, True)] expr = ["a", "b", "not(a or b)", "not a and not b"] printTable(4,4, lambda i,k: Logic.satisfies(expr[k], table[i]), colHeadFn = lambda i: expr[i])
Man sieht, dass in jedem der vier Falle beide logischen Folrmeln den gleichen Wahrheitswert haben. Bitte überprüfen Sie ebenso die andere De Morgan'sche Regel!
Wir haben soeben folgende aussagenlogische Äquivalenz gezeigt:
Das kann mathGUIde auch direkt überprüfen:
# De Morgan'sche Regeln: Logic.equivalent("not(a or b)", "not a and not b") Logic.equivalent("not(a and b)", "not a or not b") # Eine ungültige Regel: Logic.equivalent("not(a or b)", "not a or not b")
Logic.equivalent("a -> b", "not a or b") # Subjunktion Logic.implies("a", "a or b") # Implikation Logic.implies("a", "a and b") # Ungültige Implikation
Logic.valid("a or not a") # Allgemeingültige Formel Logic.satisfiable("a and not a") # Unerfüllbare Formel # De Morgan'sche Regeln Logic.valid("not(a or b) <-> (not a and not b)") Logic.valid("not(a and b) <-> (not a or not b)")