Aussagenlogik in der Schule

Posted on Fri 20 September 2024 in Bildung

"Aussagenlogik" wird in der Schule behandelt, weil sie eine wesentliche Voraussetzung für den Bau von Computern ist. Wie du sicher weißt, haben wir dieses Problem aber schon seit ein paar Jahrezehnten ziemlich gut gelöst. So gut sogar, dass man Computer heute in die Tasche stecken oder sogar am Handgelenk tragen kann. Für die Benutzung von Computern hat Aussagenlogik keinen echten praktischen Nutzen und ihr Verständnis bietet auch keine Einsichten, die sich auf andere relevante Themen übertragen lassen. Oder kurz gesagt: Als Schüler*in musst du da durch, weil alte Menschen es so beschlossen haben. Vermutlich aus einer Mischung aus verklärter Nostalgie und Faulheit, sich mit aktuelleren Themen zu beschäftigen. Einen wirkliche Sinn dafür gibt es in meinen Augen in jedem Fall nicht.

An schlechten Lehrplänen und Unterricht kann ich leider nichts ändern, aber hoffentlich kann ich dir helfen besser mit dem Thema klar zu kommen.

Der Zusammenhang zwischen Aussagenlogik und einer "Rechenmaschine" ist nicht ganz einfach zu greifen. Daher müssen wir leider zuerst einige Grundlagen klären, bevor wir zum großen Finale kommen. Es ist vollkommen normal, dass diese Ideen eine Weile brauchen um sich zu "setzen". Ich empfehle dir, einmal bis zum Schluss zu lesen und dir erstmal einen Überblick zu verschaffen. Mach dir keine großen Gedanken, wenn du etwas nicht sofort verstehst. Beim zweiten Lesen und mit besserem Überblick wird alles schon mehr Sinn ergeben. Falls nicht: Schreib' mir wo genau du hängst und ich versuche, es besser zu erklären. Vermutlich geht es anderen genau so wie dir und du hilfst auch ihnen damit.

Aussagen, boolsche Logik und das Binärsystem

Im Kontext von "Aussagenlogik" geht es ausschließlich um mathematische bzw. logisch Aussagen, die ausschließlich entweder wahr oder falsch sein können. Es gibt nur diese zwei Möglichkeiten, die sich gegenseitig ausschließen, d.h. eine Aussage kann nicht gleichzeitig wahr und falsch sein. Und auch nicht "vielleicht" oder "weiß noch nicht".

Das ist nicht so selbstverständlich, wie es sich anhört. Schaue dir die Aussage "Das Wetter ist schön." an. Diese Aussage kann für dich wahr und für mich falsch sein. Bei menschlicher Kommunikation - wozu wir Sprache ja normalerweise verwenden - gibt es immer einen Kontext. Wenn ich zur dir sage "Das Wetter ist schön." weiß du, dass ich meine Meinung ausdrücke und zwar über das Wetter bei mir vor Ort. All das spielt für unser Thema aber keine Rolle. Wir reden nur über logische bzw. mathematische Aussagen wie "drei ist kleiner als fünf". Das ist wahr. Immer. Egal, ob du es magst oder nicht oder ob es bei mir gerade regnet. Und "drei ist größer als fünf" ist falsch. Auch bei Sonnenschein.

Da wir auf den Bau eines Computers hinaus wollen, werden ich "wahr" (oder "true") ab sofort als "1" schreiben und "falsch" (oder "false") als "0". Du kannst die verschiedenen Schreibweisen als gleichwertig ansehen, aber 0 und 1 ist später für den Umgang mit binären Zahlen praktischer.

Operatoren

Wahrheitswerte, die nur zwei unterschiedliche Werte haben, sind erstmal nicht sonderlich spektakulär. Um etwas Sinnvolles mit ihnen anzustellen, müssen wir sie irgendwie kombinieren, transformieren, ... Wir starten mit sogenannten "Operatoren", die Wahrheitswerte in andere Werte übersetzen. Aus überraschend wenigen und einfachen Operatoren lassen sich "spannende" Kombinationen erzeugen. Und am Ende sogar ein Computer.

Unärer Operator

Von einem unären Operator redet man, wenn es nur einen Eingabewert gibt, der in einen Ausgabewert übersetzt wird. Das einzige relevante Beispiel für uns ist NOT, also die Negation, die den Wahrheitswert einfach umdreht: Aus 0 wird 1 und aus 1 wird 0. Das war's. Mehr mögliche Werte gibt's ja nicht. Man kann den Operator auch als Tabelle schreiben:

NOT
01
10

In die ersten Spalten schreibst du alle möglichen Wertekombinationen, die du in den Operator hineinstecken kannst. In diesem Fall ist es nur eine Spalte, weil wir nur einen Eingabewert haben, aber gleich werden es mehrere sein. In die letzte Spalte schreibst du das Ergebnis, das der Operator aus den Werten macht. Diese Darstellung nennt man je nach Kontext Wertetabelle, Belegungstabelle, Wahrheitstabelle, ....

Ich verwende für Operatoren die englische Schreibweise in Großbuchstaben (NOT, AND, OR, ...). Du musst in der Schule vermutlich die mathematischen Zeichen verwenden, die du hier unter "Verknüpfungen" in der ersten Tabelle findest. Dort findest du auch die Bezeichnung "Negation" für NOT, "Konjunktion" für AND und "Disjunktion" für OR. Du musst die Begriff vermutlich auswendig lernen, aber in der Realität werden sie meines Wissens nur von Spezialisten und eingebildeten Akademikern benutzt.

Binäre Operatoren

Binäre Operatoren haben zwei Eingabewerte, die in einen Ausgabewert übersetzt werden. OR wird zu 1 wenn mindestens einer der zwei Eingabewerte 1 ist. Sind beide Werte 0 ist auch das Ergebnis 0. Hier ist die Tabelle:

OR
000
011
101
111

Binäre Operatoren verknüpfen zwei Werte. Daher haben wir jetzt zwei Eingabespalten und es ergeben sich vier Eingabemöglichkeiten, d.h. die Tabelle bekommen vier Zeilen.

AND wird nur zu 1, wenn beide Eingabewerte 1 sind. Ansonsten zur 0. Hier ist die Tabelle:

AND
000
010
100
111

Es gibt noch weitere binäre Operatoren, aber in Schule wirst du vermutlich nur diese brauchen. Also letztes Beispiel zeige ich dir noch die Tabelle für XOR, der für den Bau von Computern recht wichtig ist:

XOR
000
011
101
110

XOR steht für "eXclusive OR", d.h. "entweder oder" oder "ausschließendes oder". Das Ergebnis ist 1 wenn eine Eingabe 1 ist, aber - im Unterschied zu OR - nicht, wenn beide 1 sind.

"Rechnen" mit Operatoren

Die Operatoren kannst du nun genau wie PLUS, MINUS, MAL und GETEILT kombinieren und dabei wie gewohnt Klammern setzen. Also zum Beispiel:

(0 OR NOT 1) AND (1 OR 0)

Den Ausdruck kannst du wie üblich von "innen nach außen" auswerten:

  • In der ersten Klammer wird "NOT 1" zur "0" und dann "0 OR 0" zu "0".
  • In der zweiten Klammer wird "1 OR 0" zu "1".
  • Somit bleibt "0 AND 1" und das Ergebnis ist "0".

Wie in der "normalen Mathematik" verwendet man Variablen für Werte die man noch nicht kennt und bekommt dann Ausdrücke wie:

(NOT A OR B) AND (C OR B)

Solche Ausdrücke lassen sich wie mathematische Formeln umformen. Die Regeln findest du hier unter "Definition".

Kunststücke

Aus diesem Handwerkszeug lassen sich jede Menge sinnloser und stupfsinniger Augaben ableiten, mit denen man die Lebenszeit von Schüler*innen vergeuden kann. Wir gehen die übliche Auswahl kurz durch:

Erstelle die Belegungstabelle

Für einen vorgegebenen Ausdruck wie "(NOT A OR B) AND (C OR B)" kann man eine Tabelle erstellen lassen. Der Ausdruck hat drei Variablen (oder Aussagen), d.h. die Tabelle bekommt drei Eingabespalten, je eine für A, B und C. In diese Spalten schreibst du alle möglichen Kombinationen von 0 und 1. Wie findet man alle Möglichkeiten ohnen eine zu vergessen? Genau so, wie du es bei "normalen" Zahlen machen würdest: Der Reihe nach!

Die drei Spalten kannst du als eine dreistellige Zahl im Binärsystem ansehen. Die kleinste Zahl ist 000 und die größte 111. Alle Zahlen dazwischen bekommst du, wenn du mit der kleinsten anfängst und immer 1 dazu addierst, also: 000, 001, 010, 011, 100, 101, 110, 111. Genau das gleiche hatten wir schon einer und zwei Spalten. Nur war es eben so einfach, dass du dir keine Gedanken darum machen mußtest. Bei einer Spalte bleibt nur 0 und 1. Bei zwei Spalten 00, 01, 10, 11. Das Schema funkioniert mit jeder beliebigen Anzahl Spalten, es können nur schnell sehr viele Zeilen werden. 10 Spalten ergeben 2^10 = 1024 Zeilen.

Hast du alle möglichen Zeilen, mußt sie eine nach der anderen in deinen Ausdruck einsetzen und das Ergebnis berechnen. Vollkommen stupide und sinnlos, aber einfach. Bei längeren Ausdrücken kannst du dir natürlich Spalten mit Zwischenergebnissen anlegen um dir das Leben so etwas leichter zu machen. Hier ist das Ergebnis mit Zwischenschritten als Beispiel:

ABC NOT A OR BC OR B (NOT A OR B) AND (C OR B)
000 10 0
001 11 1
010 11 1
011 11 1
100 10 0
101 11 1
110 01 0
111 01 0

Finde den Ausdruck

Die Aufgabenstellung lässt sich natürlich umdrehen. Die Tabelle wird vorgegeben und du sollst den Ausdruck finden. Es gibt vermutlich Verfahren, wie man das schematisch erledigen kann, aber mir ist keines bekannt und vermutlich sind sie auch nicht für Menschen geeignet.

Du wirst suchen und experimentieren müssen. Für komplexe Ausdrücke mit vielen Variablen würde es in der Schule vermutlich den Rahmen sprengen, d.h. in der Regel wirst du einach ein paar Kombinationen von NOT, AND und OR durchprobieren müssen und eine wird dann schon passen.

Alternativen

Die Frage "Für welche Eingabewerte wird der Ausdruck ... wahr?" ist im Prinzip die Aufforderung, die Wertetabelle aufzuschreiben und nachzuschauen. Wenn du eine andere Möglichkeit siehst, solltest du genau das machen.

Du musst natürlich damit rechnen, dass Lehrer*innen dich hereinlegen wollen. Wie oben beschrieben, kann die Anzahl der Möglichkeiten (aka Tabellenzeilen) schnell groß werden, wenn mehrere Variablen (Aussagen) im Spiel sind. Die letzte Tabelle hat acht Zeilen, was machbar ist. Trotzdem ist es bei stupiden und sinnlosen Aufgaben recht leicht "Struddelfehler" zu machen.

Den Ausdruck "(A AND NOT B) AND C" könntest du genau so lösen. Du kannst aber auch genau hinschauen und erkennen, dass C in jedem Fall wahr sein muß, ebenso wie die Klammer als Ganzes. Damit die Klammer wahr wird muss zum einen A wahr sein und zum anderen muss NOT B wahr, also B falsch sein. Die einzige Möglichkeit ist also: A=1, B=0, C=1.

Dieses Beispiel war extrem einfach und dankbar. In der Realität wirst du antizipieren müssen, was dein*e Lehrer*in sehen will und dann genau dieses Kunstück aufführen. Nur darum geht's ja eigentlich.

Volladdierer oder "Wie baue ich einen Computer?"

Lass uns mit deinem neuen Wissen mal einen genauen Blick auf die Addition binärer Zahlen werfen. Evtl. wirst du überrascht und kannst dem Ganzen hier doch noch eine positive Facette abgewinnen.

Ich gehe davon aus, du weiß, wie du

0110
0011

schriftlich addierst: Zuerst addieren wir in der letzten Spalte 0 und 1 sowie den Übertrag, der in dieser Spalte natürlich noch 0 ist. Daraus ergibt sich die letzte Ziffer (hier: 1) des Ergebnisses und der Übertrag (hier: 0) für die nächte Spalte. Als nächstes folgt die vorletzte Spalte (1 + 1 + Übertrag 0), womit wir 0 als nächsten Teil des Ergebnisses bekommen und 1 als Übertrag für die nächste Spalte usw.

In jedem Schritt haben wir also drei Werte (die zwei Ziffern der jeweiligen Spalte und der Übertrag) und bekommen zwei neue (Ziffer im Ergebnis und neuer Übertrag) raus. Betrachtest du die zwei Ergebnisse getrennt, kannst du einfach jeweils eine Wahrheitstabelle für beide schreiben:

Belegungstabelle für den Übertrag

ABÜ alt Ü neu
000 0
001 0
010 0
011 1
100 0
101 1
110 1
111 1

Belegungstabelle für die Ergebnisziffer

ABÜ E
000 0
001 1
010 1
011 0
100 1
101 0
110 0
111 1

Zu diesen Tabellen gibt es logische Ausdrücke. Wie sie genau aussehen, ist für uns für den Moment nicht so wichtig. Hauptsache es gibt sie, aber wenn du neugierig bist, kannst du hier mehr erfahren.

Um uns das Leben leichter zu machen, definieren wir uns jetzt einfach einen neuen "Baustein", den man "Volladdierer" nennt (nicht meine Idee ;-)) und der die letzten beiden Tabellen zusammenfasst:

ABÜ alt EÜ neu
000 00
001 10
010 10
011 01
100 10
101 01
110 01
111 11

Streng genommen ist der Volladdierer kein Operator, weil er mehrere Ausgaben hat. Vermutlich hilft es deinem Verständnis aber, wenn du es dir genau so vorstellst: Wir haben uns gerade einen eigenen "fetten Operator" aus einfacheren Operatoren zusammengebaut, damit wir uns nicht um die lästigen Details kümmern müssen. Und wir werfen einfach zwei statt nur einem Ergebnis raus.

Von diesen Volladdierern nimmst du jetzt einen pro Spalte - also vier in unserem Beispiel oben -und verknüpfst die Eingänge mit den Ziffern der jeweiligen Spalte. Den Eingang mit dem Übertrag verknüpfst du mit dem Übertragergebnis des vorherigen Volladdierers. Beim ersten ist da nichts, d.h. er bleibt einfach leer, also 0. Die anderen Ausgänge (und der letzte Übertrag) ergeben die Ziffern des Ergebnisses. Nochmal schematisch:

  • Volladdierer in Spalte 4 bekommt: Ziffern aus Spalte 4, Übertrag 0
  • Volladdierer in Spalte 3 bekommt: Ziffern aus Spalte 3, Übertrag von Volladdierer aus Spalte 4
  • Volladdierer in Spalte 2 bekommt: Ziffern aus Spalte 2, Übertrag von Volladdierer aus Spalte 3
  • Volladdierer in Spalte 1 bekommt: Ziffern aus Spalte 1, Übertrag von Volladdierer aus Spalte 2

Uff! Das war jetzt vermutlich recht viel, aber die Idee ist schon arg schlau. Also kurz durchatmen und ich fasse nochmal zusammen:

  • Schriftliche Addition erfolgt spaltenweise von rechts nach links.
  • Pro Spalte haben wir drei Werte als Eingabe und bekommen zwei neue Werte raus.
  • Den Zusammenhang zwischen Ein- und Ausgabe können wir als Wahrheitstabelle aufschreiben und logische Ausdrücke dazu finden.
  • Von den zwei Ausgabewerten wandert einer als Übertrag in die nächste Spalte, der andere ist die Ziffer des Ergebnisses in dieser Spalte.

Hier machst du am besten eine kurze Pause und lässt erstmal alles sacken. Immerhin hast du jetzt einen - ziemlich großen und verschachtelten - logischen Ausdruck, in den du zwei binäre Zahlen rein stecken kannst und hinten fällt ihre Summe raus.

Computer funktionieren wirklich genau so. Für größere Zahlen musst du nur mehr Volladdierer zusammenstecken. Andere Rechenoperationen (Subtraktion, Multiplikation, ...) lassen sich genau so schematisch ausführen, als Tabellen schreiben, Ausdrücke dazu finden, ... All das lässt sich mit winzigen Transistoren als elektronische Schaltungen bauen. Ein paar Transistoren werden zu AND, OR, XOR, NOT, ... Schaltungen (auch "logische Gatter" genannt). Mehrere logische Gatter werden zu unserem Volladdierer zusammengesetzt. Mehrere Volladdierer führen eine Addition durch. Oder natürlich Subtraktion, Multiplikation, Division, ...

Damit du eine grobe Vorstellung von der Größenordnung hast: Der Chip eines halbwegs aktuellen Smartphones hat mindestens 10 Milliarden Transistoren, eine PS5 (mit 3D Hardware) deutlich mehr.

Es ist vollkommen normal, wenn es eine Weile dauert, bis diese Idee im Kopf "klack" macht. Immerhin ist sie so groß und mächtig, dass sie die ganze Welt verändert hat. Ohne sie könntest du diesen Text nicht lesen, weil es keine Computer und somit kein Internet gäbe. Trotzdem halte ich es für Unsinn, Jugendlichen dieses Wissen aufzuzwingen. Es gibt keinen wirklichen Transfer in eurer Realität und auch keine praktische Anwendbarkeit. Zeit und Aufwand dafür wären in Pythonprogrammierung, SQL, HTML, ... deutlich besser investiert.

An deine Eltern

Wie ich oben beschrieben habe, halte ich das Thema für vollkommen nutzlos und aus der Zeit gefallen. Das war es schon, als ich 1992 mein Abitur gemacht hatte. Selbst unter ITlern gibt es nur einen verschwindend kleinen Anteil, der jemals mit Chipentwicklung in Berührung kommt.

Oft wird von Laien phantasiert, solches Wissen sei hilfreich, um besseren und effizienteren Code zu schreiben. In meinem Regal steht eine Originalausgabe von Michael Abrash's Black Book of Graphics Programming. Das letzte Kapitel des Buches prognostiziert, dass schon die nächste Generation von Prozessoren so komplex sein wird, dass sinnvolle low level Optimierung von Code durch Menschen praktisch unmöglich wird. Mit "nächste Generation" war der ersten Pentium Chip gemeint. Das Buch wurde 1997 veröffentlicht. Google wurde noch nicht gegründet. Facebook und Youtube werden noch mehr als fünf Jahre auf sich warten lassen. Ich hoffe, das macht deutlich, wie weit in der Vergangenheit wir uns bewegen.

Aber selbst wenn man dem Thema zwanghaft eine historische Relevanz andichten oder sich verquerer Nostalie hingeben will will: Sollte man dem Stoff dann auch entsprechende pädagogische Liebe zukommen lassen? Ihn angemessen und verständlich aufbereiten? Offensichtlich war das in den 30+ Jahren seit meinem Abitur nicht möglich oder zuviel Aufwand. Und das, obwohl das Thema und die Bildung unserer Kinder doch angeblich so wichtig sind?!

Die Realität zeigt eher das Gegenteil. Das saarländische Kultusministerium führt Informatik als Pflichtfach ein und klopft sich selbst dafür auf die Schulter, Vorreiterin zu sein. Gleichzeitig wird man vollkommmen unvorbereitet von der Tatsache erwischt, dass man Lehrer*innen für dieses Fach braucht. Gerade werden Lehrer*innen in Crashkursen zu Informatikerlehrer*innen umgeschult. Teilweise zwangsweise, z.B. Kunstlehrer*innen kurz vor der Pensionierung. D.h. fachfremde Lehrer*innen im Alter von 60+ Jahren werden jungen Menschen moderne Technologie nahebringen. Was soll da schon schief gehen?

Mich treiben dabei immer wieder die gleichen Fragen um: Mit welchem Recht tut man Jugendlichen das an? Wieso lassen wir das als Eltern zu?

Nachtrag

Der Artikel wurde auf die Schnelle und unter dem Einfluß von Corona veröffentlicht. Jede Kritik am Bildungssystem ist genau so gemeint, aber der Text enthält sicher noch Rechtschreibfehler und unklare Formulierungen. Für Hinweise bin ich dankbar.