diff --git a/info4/kapitel-0/Logik.ipynb b/info4/kapitel-0/Logik.ipynb index 1655a9d0164dc75281fa3625eb7d3ec51fbfa6e9..86f827479cbc3f82966c90ba05523626714438b6 100644 --- a/info4/kapitel-0/Logik.ipynb +++ b/info4/kapitel-0/Logik.ipynb @@ -6,9 +6,10 @@ "source": [ "# Theoretische Informatik - Vorlesung 0 - Teil 1 Logik\n", "\n", - "April 2020\n", - "Michael Leuschel\n", - "Heinrich-Heine Universität Düsseldorf\n", + "* April 2020\n", + "* Michael Leuschel\n", + "* Lehrstuhl Softwaretechnik und Programmiersprachen\n", + "* Heinrich-Heine Universität Düsseldorf\n", "\n", "Grundlagen der Logik und Mengentheorie sind nicht im Skript.\n", "Hier definieren wir einige Grundlagen und Notationen die im Skript verwendet werden.\n", @@ -69,7 +70,7 @@ "source": [ "# Was ist Logik?\n", "\n", - "Quelle [https://de.wikipedia.org/wiki/Logik]:\n", + "Quelle [Wikipedia](https://de.wikipedia.org/wiki/Logik):\n", "* vernünftiges Schlussfolgern, Denklehre\n", "* In der Logik wird die Struktur von Argumenten im Hinblick auf ihre Gültigkeit untersucht, unabhängig vom Inhalt der Aussagen\n", "* Traditionell ist die Logik ein Teil der Philosophie.\n", @@ -83,7 +84,7 @@ "# Warum Logik studieren?\n", "\n", "* Hardware: logische Schaltkreise\n", - "* Wissensdarstellung und intelligentes Denken: künstliche Intelligenz, deklarative Darstellung von Wissen, semantisches Web, ...\n", + "* Wissensdarstellung und intelligentes Denken: Künstliche Intelligenz, deklarative Darstellung von Wissen, semantisches Web, ...\n", "* Überlegungen über Programme: Verifikation, statische Programmanalyse, Programmoptimierung,...\n", "* Universale Vorrichtung zur Berechnung: Datenbanken, logische Programmierung, ...\n", "* Grundlage der Mathematik und auch der theoretischen Informatik\n", @@ -104,8 +105,8 @@ "* Relevanzlogik, lineare Logik\n", "* eine nichtmonotone Logik\n", "\n", - " Wir werden die klassische, zweiwertige, monotone Aussagenlogik\n", - " und Prädikatenlogik studieren (zusammen mit Mengentheorie)." + " Wir werden die klassische, zweiwertige, monotone **Aussagenlogik**\n", + " und **Prädikatenlogik** studieren (zusammen mit Mengentheorie)." ] }, { @@ -115,8 +116,14 @@ "# Aussagenlogik\n", "\n", "Eine Aussage ist endweder wahr (TRUE) oder falsch (FALSE).\n", + "Hier sind vier Aussagen:\n", + "1. Siegfried ist ein Ritter\n", + "2. Alle Ritter sagen die Wahrheit\n", + "3. Siegfried sagt \"Ich habe den Drachen getötet\"\n", + "4. Siegfried hat den Drachen getötet.\n", "\n", - "Die Logik interessiert sich weniger ob Aussagen wie wahr oder falsch sind, sondern mehr um Zusammenhänge zwischen möglichen Wahrheitswerten verschiedener Aussagen und Formeln.\n", + "Die Logik interessiert sich weniger ob Aussagen wahr oder falsch sind, sondern mehr um Zusammenhänge zwischen möglichen Wahrheitswerten verschiedener Aussagen und Formeln.\n", + "Zum Beispiel, wenn wir die Aussagen 1,2 und 3 als wahr annehmen, dann müssen wir auch die Aussage 4 als wahr annehmen.\n", "\n", "Einige Aussagen haben manchmal vordefinierte Wahrheitswerte.\n", "Wir zum Beispiel benutzen Arithmetik und Mengetheorie in unseren logischen Formeln, ohne diese selber in Logik zu formalisieren.\n", @@ -199,7 +206,7 @@ "source": [ "# Junktoren und Formeln\n", "\n", - "Jede Aussage ist auch eine Formel.\n", + "Jede Aussage ist auch eine Formel der Aussagenlogik.\n", "Mit den Junktoren kann man Aussagen und Formeln zu grösseren Formeln der Aussagenlogik kombinieren.\n", "\n", "Die Negation ```¬(F)``` einer Formel F ist auch eine Formel. Die negierte Formel ist wahr genau dann wenn (gdw) die ursprünglihe Formel falsch ist:" @@ -228,6 +235,13 @@ "¬(2<1)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In diesen Notebooks muss der Inhalt der Negation immer geklammert werden. Im Skript ist das nicht immer nötig." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -258,6 +272,29 @@ "2>1 ∧ 1>0" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "$\\mathit{FALSE}$" + ], + "text/plain": [ + "FALSE" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2>1 ∧ 1>2" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -288,6 +325,29 @@ "2>1 ∨ 1>2" ] }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "$\\mathit{TRUE}$" + ], + "text/plain": [ + "TRUE" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2>1 ∨ 3>1" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -341,6 +401,29 @@ "2<1 ⇒ 1+1 = 5" ] }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "$\\mathit{FALSE}$" + ], + "text/plain": [ + "FALSE" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2>1 ⇒ 1+1=5" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -689,7 +772,7 @@ "source": [ "# Wahrheitstabellen\n", "\n", - "Die Bedeutung dieser Junktoren kann man in folgender Wahrheitstabelle zusammenfassen:\n", + "Die Bedeutung der Junktoren der Aussagenlogik kann man in folgender Wahrheitstabelle zusammenfassen:\n", "\n", "<img src=\"./img/wahrheitstabelle.png\" width=\"600\">\n", "\n", @@ -784,14 +867,18 @@ "$\\equiv$ ist transitiv und kommutativ.\n", "\n", "# Wichtige Äquivalenzen\n", - "Für alle Formeln $\\phi, \\psi$ gilt:\n", + "Für alle Formeln $\\phi, \\psi$ der Aussagenlogik gilt:\n", + "* $\\phi \\wedge \\psi \\equiv \\psi \\wedge \\phi$ (Kommutativität)\n", + "* $\\phi \\vee \\psi \\equiv \\psi \\vee \\phi$ (Kommutativität)\n", + "\n", + "Mit diesen Regeln kann man $\\Rightarrow$ und $\\Leftrightarrow$ umwandeln:\n", "* $\\phi \\Rightarrow \\psi \\equiv (\\neg \\phi) \\vee \\psi$\n", "* $\\phi \\Leftrightarrow \\psi \\equiv (\\phi \\Rightarrow \\psi) \\wedge (\\psi \\Rightarrow \\phi)$\n", + "\n", + "Mit diesen Regeln kann man die Negation zu den atomaren Aussagen verschieben:\n", "* $\\neg \\neg \\phi \\equiv \\phi$\n", "* $\\neg(\\phi \\wedge \\psi) \\equiv (\\neg \\phi) \\vee (\\neg \\psi)$ (De Morgan)\n", "* $\\neg(\\phi \\vee \\psi) \\equiv (\\neg \\phi) \\wedge (\\neg \\psi)$ (De Morgan)\n", - "* $\\phi \\wedge \\psi \\equiv \\psi \\wedge \\phi$\n", - "* $\\phi \\vee \\psi \\equiv \\psi \\vee \\phi$\n", "\n", "Hier illustrieren wir die Äquivalenz $\\neg(\\phi \\vee \\psi) \\equiv (\\neg \\phi) \\wedge (\\neg \\psi)$ als Wahrheitstabelle:" ] @@ -894,7 +981,8 @@ "* Wir schreiben dies als $p \\wedge q \\models p$\n", "* Formal bedeutet dies, dass alle Modelle von $q \\wedge p$ auch Modelle von $p$ sind.\n", "\n", - "Die Tabelle zeigt, dass $p \\Leftrightarrow q \\models p \\Rightarrow q$. Die Formeln sind nicht äquivalent." + "Die Tabelle zeigt, dass $p \\Leftrightarrow q \\models p \\Rightarrow q$.\n", + "Die beiden Formeln sind nicht äquivalent." ] }, { @@ -933,14 +1021,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Wichtige logische Schlussfolgerungen}\n", + "# Wichtige logische Schlussfolgerungen\n", + "\n", "Für alle Formeln $\\phi, \\psi$ gilt:\n", "* $\\phi \\wedge \\psi \\models \\phi$\n", + "\n", "* $(\\phi \\Rightarrow \\psi) \\wedge \\phi \\models \\psi$ (Modus Ponens)\n", "* $(\\phi \\Rightarrow \\psi) \\wedge \\neg\\psi \\models \\neg\\phi$ (Modus Tollens)\n", + "\n", + "Beispiel: $\\phi$ = \"Es regnet\", $\\psi$ = \"Die Straße wird nass\".\n", + "\n", "* $(\\phi \\Leftrightarrow \\psi) \\wedge \\psi \\models \\phi$\n", "* $(\\phi \\Leftrightarrow \\psi) \\wedge \\neg\\psi \\models \\neg\\phi$\n", - "* Achtung $\\phi \\wedge \\neg \\phi \\models \\psi$ für beliebiges $\\psi$ !" + "\n", + "Achtung $\\phi \\wedge \\neg \\phi \\models \\psi$ für beliebiges $\\psi$ !\n", + "Also:\n", + "* $1>2 \\models 1+1=100$\n" ] }, { @@ -1445,18 +1541,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Quantoren: Einige Gesetze\n", + "# Quantoren: Einige Gesetze der Prädikatenlogik\n", + "\n", + "Mit diesen beiden Gesetzen kann man die Negation zu den atomaren Aussagen und Prädikaten verschieben:\n", "* $\\neg \\exists x. P \\equiv \\forall x. \\neg P$\n", " * $\\neg \\exists x. (x>0 \\wedge x<0) \\equiv \\forall x. \\neg (x>0 \\wedge x<0) \\equiv$ $\\forall x. (x\\leq 0 \\vee x\\geq 0)$\n", "\n", "* $\\neg \\forall x. P \\equiv \\exists x. \\neg P$\n", "\n", + "Diese Gesetze erlauben es einem Quantoren zu vertauschen:\n", "* $\\forall x.( \\forall y. P) \\equiv \\forall y.( \\forall x. P)$ \n", - " * $\\forall x. (\\forall y. (x \\leq y \\vee x>y)) \\equiv \\forall y. (\\forall x. (x \\leq y \\vee x>y))$\n", + " * Beispiel: $\\forall x. (\\forall y. (x \\leq y \\vee x>y)) \\equiv \\forall y. (\\forall x. (x \\leq y \\vee x>y))$\n", + "\n", + "* $\\exists x.( \\exists y. P) \\equiv \\exists y.( \\exists x. P)$\n", + " * Beispiel: $\\exists x. (\\exists y. (x+y=0)) \\equiv \\exists y. (\\exists x. (x+y=0))$\n", "\n", + "Aber Achtung:\n", "* $\\forall x.( \\exists y. P) \\not\\equiv \\exists y.( \\forall x. P)$\n", - " * $\\forall x. (\\exists y. (y > x)) \\not\\equiv \\exists y. (\\forall x. (y > x)$\n", - "* $\\exists x.( \\exists y. P) \\equiv \\exists y.( \\exists x. P)$" + " * Beispiel: $\\forall x. (\\exists y. (y > x)) \\not\\equiv \\exists y. (\\forall x. (y > x)$" ] }, { @@ -1510,12 +1612,13 @@ "\n", "# Zusammenfassung Logik\n", " \n", - "* Aussagenlogik und Prädikatenlogik\n", + "* Formeln der Aussagenlogik und Prädikatenlogik\n", "* Interpretation, Modell, Äquivalenz ($\\equiv$), logisches Schließen ($\\models$)\n", "* Deduktiver Beweis, Äquivalenzbeweis\n", "* Beweis durch Widerspruch\n", "* Äquivalenzen (Kommutativität, de Morgan, ...)\n", - "* logische Formeln verstehen und erstellen können" + "* Ziel: logische Formeln verstehen und erstellen können\n", + "* Nächste Vorlesung: Grundlagen der Mengentheorie" ] }, {