From 9822b910e15d1bbbaad9deee06f734305aa0bfee Mon Sep 17 00:00:00 2001 From: Robert Jeutter Date: Wed, 28 Jul 2021 12:19:38 +0200 Subject: [PATCH] Vorlesung 19+20 --- Assets/Logik-ableitungsbaum-beispiel.png | Bin 0 -> 95364 bytes Logik und Logikprogrammierung.md | 578 +++++++++++++++++++---- 2 files changed, 475 insertions(+), 103 deletions(-) create mode 100644 Assets/Logik-ableitungsbaum-beispiel.png diff --git a/Assets/Logik-ableitungsbaum-beispiel.png b/Assets/Logik-ableitungsbaum-beispiel.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3406965906afdb2df41c4d32994030c9b66123 GIT binary patch literal 95364 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

Q_|kjy=1e-Z*PEV+K9_0%p&c0g7KFH1`|HCkFf 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

?YuB#C}|ux)HNrc)wxMF0N%X5-g|$cmDuj)S%X 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:(a-\epsilon,a+\epsilon)\subseteq A$, d.h., wenn $A$ abzählbare Vereinigung von offenen Intervallen $(x,y)$ ist. @@ -487,7 +487,7 @@ Zur Beantwortung dieser Frage benötigen wir eine Funktion $\vee_W :W\times W\ri Beispiel 1. Sei $\leq$ übliche Ordnung auf $\mathbb{R}$und $W\subseteq\mathbb{R}$. Dann ist $(W,\leq)$ partiell geordnete Menge. 2. Sei $X$ eine Menge und $W\subseteq P(X)$. Dann ist $(W,\subseteq)$ partiell geordnete Menge. -3. Sei $W=P(\sum ∗)$ und $\leq_p$ die Relation „es gibt Polynomialzeitreduktion“ (vgl. „Automaten, Sprachen und Komplexität“). Diese Relation ist reflexiv, transitiv, aber nicht +3. Sei $W=P(\sum ∗)$ und $\leq_p$ die Relation "es gibt Polynomialzeitreduktion" (vgl. "Automaten, Sprachen und Komplexität"). Diese Relation ist reflexiv, transitiv, aber nicht antisymmetrisch (denn $3-SAT\leq_p HC$ und $HC\leq_p_3-SAT$). > Definition: Sei $(W,\leq)$ partiell geordnete Menge, $M\subseteq W$ und $a\in W$. @@ -579,7 +579,7 @@ Wahrheitstafel für den Booleschen Wahrheitswertebereich B: Wir erhalten also $\{(AK\vee BK),(AK\rightarrow BK), ((BK\wedge RL)\rightarrow \lnot AK),RL\} \Vdash_B \lnot AK$ und können damit sagen: -„Wenn die Aussagen „Bauteil A oder Bauteil B ist kaputt“ und „daraus, dass Bauteil A kaputt ist, folgt, dass Bauteil B kaputt ist“ und... wahr sind, ... dann kann man die Folgerung ziehen: die Aussage „das Bauteil A ist heil“ ist wahr.“ +"Wenn die Aussagen "Bauteil A oder Bauteil B ist kaputt" und "daraus, dass Bauteil A kaputt ist, folgt, dass Bauteil B kaputt ist" und... wahr sind, ... dann kann man die Folgerung ziehen: die Aussage "das Bauteil A ist heil" ist wahr." Erinnerung aus der ersten Vorlesung: $\{(AK\vee BK),(AK\rightarrow BK), ((BK\wedge RL)\rightarrow \lnot AK),RL\} \vdash \lnot AK$ @@ -626,9 +626,9 @@ Zusammenfassung der Beispiele | | B | $B_R$ | $K_3$ | F | $H_R$ | | | -------------------------------------------------- | --- | ----- | ----- | --- | ----- | ------------------------------------------------- | -| $\varnothing\Vdash_W\lnot\lnot\phi\rightarrow\phi$ | √ | √ | – | – | – | $\varnothing\vdash \lnot\lnot\phi\rightarrow\phi$ | -| $\varnothing\Vdash_W\phi\vee\lnot\phi$ | √ | √ | – | – | – | $\varnothing\vdash\phi\vee\lnot\phi$ | -| $\{\lnot\phi\rightarrow\bot\}\Vdash_W\phi$ | √ | √ | √ | √ | – | $\{\lnot\phi\rightarrow\bot\}\vdash\phi$ | +| $\varnothing\Vdash_W\lnot\lnot\phi\rightarrow\phi$ | √ | √ | - | - | - | $\varnothing\vdash \lnot\lnot\phi\rightarrow\phi$ | +| $\varnothing\Vdash_W\phi\vee\lnot\phi$ | √ | √ | - | - | - | $\varnothing\vdash\phi\vee\lnot\phi$ | +| $\{\lnot\phi\rightarrow\bot\}\Vdash_W\phi$ | √ | √ | √ | √ | - | $\{\lnot\phi\rightarrow\bot\}\vdash\phi$ | | $\{\phi\}\Vdash_W\lnot\phi\rightarrow\bot$ | √ | √ | √ | √ | √ | $\{\phi\}\vdash\lnot\phi\rightarrow\bot$ | - $√$ in Spalte W:W-Folgerung gilt @@ -637,11 +637,11 @@ Zusammenfassung der Beispiele > Überblick: Wir haben definiert - $\Gamma\vdash\phi$ syntaktische Folgerung - - Theorem („hypothesenlos ableitbar“) + - Theorem ("hypothesenlos ableitbar") - $\Gamma\Vdash_W \phi$ (semantische) W-Folgerung - - W-Tautologie („wird immer zu $1_W$ ausgewertet“) + - W-Tautologie ("wird immer zu $1_W$ ausgewertet") -Frage: Was ist die Beziehung zwischen diesen Begriffen, insbes. zwischen „Theorem“ und „W-Tautologie“? Da z.B. B-Folgerung $\not =K_3$-Folgerung, hängt die Anwort von W ab. +Frage: Was ist die Beziehung zwischen diesen Begriffen, insbes. zwischen "Theorem" und "W-Tautologie"? Da z.B. B-Folgerung $\not =K_3$-Folgerung, hängt die Anwort von W ab. ## Korrektheit Können wir durch mathematische Beweise zu falschen Aussagenkommen? @@ -776,12 +776,12 @@ Frage für diese Vorlesung: Für welche Wahrheitswertebereiche $W$ gilt $\Gamma\ > > Sei $\Gamma$ eine Menge von Formeln und $\varphi$ eine Formel. Dann gilt $\Gamma\not\vdash\varphi \Leftrightarrow \Gamma\cup\{\lnot\varphi\}$ konsistent. -Beweis: Wir zeigen „$\Gamma\vdash\varphi\Leftrightarrow \Gamma\cup\{\lnot\varphi\}$ inkonsistent“: -- Richtung „$\Rightarrow$“, gelte also $\Gamma \vdash \varphi$. +Beweis: Wir zeigen "$\Gamma\vdash\varphi\Leftrightarrow \Gamma\cup\{\lnot\varphi\}$ inkonsistent": +- Richtung "$\Rightarrow$", gelte also $\Gamma \vdash \varphi$. - $\Rightarrow$ es gibt Deduktion $D$ mit Hypothesen in $\Gamma$ und Konklusion $\varphi$ - $\Rightarrow$ Wir erhalten die folgende Deduktion mit Hypothesen in $\Gamma\cup\{\lnot\varphi\}$ und Konklusion $\bot$: $\frac{\lnot\varphi\quad\varphi}{\bot}$ - $\Rightarrow\Gamma\cup\{\lnot\varphi\}\vdash\bot$, d.h.$\Gamma\cup\{\lnot\varphi\}$ ist inkonsistent. -- Richtung „$\Leftarrow$“, sei also $\Gamma\cup\{\lnot\varphi\}$ inkonsistent. +- Richtung "$\Leftarrow$", sei also $\Gamma\cup\{\lnot\varphi\}$ inkonsistent. - $\Rightarrow$ Es gibt Deduktion $D$ mit Hypothesen in $\Gamma\cup\{\lnot\varphi\}$ und Konklusion $\bot$. - $\Rightarrow$ Wir erhalten die folgende Deduktion mit Hypothesen in $\Gamma$ und Konklusion $\varphi$: $\frac{\bot}{\varphi}$ - $\Gamma\vdash\varphi$ @@ -789,7 +789,7 @@ Beweis: Wir zeigen „$\Gamma\vdash\varphi\Leftrightarrow \Gamma\cup\{\lnot\varp ### Maximal konsistente Mengen > Definition > -> Eine Formelmenge $\Delta$ ist maximal konsistent, wenn sie konsistent ist und wenn gilt „$\sum\supseteq\Delta$ konsistent $\Rightarrow\sum = \Delta$“. +> Eine Formelmenge $\Delta$ ist maximal konsistent, wenn sie konsistent ist und wenn gilt "$\sum\supseteq\Delta$ konsistent $\Rightarrow\sum = \Delta$". > Satz > @@ -945,7 +945,7 @@ Beweis: indirekt Beweis: Folgt unmittelbar aus Korrektheitssatz und Vollständigkeitssatz. > Bemerkung: -> - gilt für jede „Boolesche Algebra“, z.B. $B_R$ +> - gilt für jede "Boolesche Algebra", z.B. $B_R$ > - $\Gamma\vdash\varphi$ ohne ($raa$) $\Leftarrow\Rightarrow\Gamma\Vdash_{H_R} \varphi$ (Tarksi 1938) @@ -1094,7 +1094,7 @@ Berühmtes Beispiel: Mit diesen 11 Kacheln kann die Ebene gefüllt werden, aber > Definition > -> Ein Kachelsystem besteht aus einer endlichen Menge C von „Farben“ und einer Menge K von Abbildungen $\{N,O,S,W\}\rightarrow C$ von „Kacheln“. +> Ein Kachelsystem besteht aus einer endlichen Menge C von "Farben" und einer Menge K von Abbildungen $\{N,O,S,W\}\rightarrow C$ von "Kacheln". > Eine Kachelung von $G\subseteq Z\times Z$ ist eine Abbildung $f:G\rightarrow K$ mit > - $f(i,j)(N) =f(i,j+ 1 )(S)$ für alle $(i,j),(i,j+ 1 )\in G$ > - $f(i,j)(O) =f(i+ 1 ,j)(W)$ für alle $(i,j),(i+ 1 ,j)\in G$ @@ -1110,8 +1110,8 @@ Beweis: Für alle $(i,j)\in Z$ enthält $\Gamma$ die folgenden Formeln: - eine der Kacheln aus $K$ liegt an der Stelle $(i,j):\bigvee_{k\in K} p_{k,i,j}$ - es liegen nicht zwei verschiedene Kacheln an der Stelle $(i,j): \bigwedge_{k,k′\in K,k\not=k′} \lnot(p_{k,i,j}\wedge p_{k′,i,j})$ - - Kacheln an Stellen $(i,j)$ und $(i,j+1)$ „passen übereinander“: $\bigvee_{k,k′\in K,k(N)=k′(S)} (p_{k,i,j}\wedge p_{k′,i,j+1})$ - - Kacheln an Stellen $(i,j)$ und $(i+1,j)$ „passen nebeneinander“: $\bigvee_{k,k′\in K,k(W)=k′(O)} (p_{k,i,j}\wedge p_{k′,i+1,j})$ + - Kacheln an Stellen $(i,j)$ und $(i,j+1)$ "passen übereinander": $\bigvee_{k,k′\in K,k(N)=k′(S)} (p_{k,i,j}\wedge p_{k′,i,j+1})$ + - Kacheln an Stellen $(i,j)$ und $(i+1,j)$ "passen nebeneinander": $\bigvee_{k,k′\in K,k(W)=k′(O)} (p_{k,i,j}\wedge p_{k′,i+1,j})$ Sei nun $\Delta\subseteq\Gamma$ endlich. - $\Rightarrow$ es gibt $n\in N$, so dass $\Delta$ nur atomare Formeln der Form $p_{k,i,j}$ mit $|i|,|j|\leq n$ enthält. @@ -1144,11 +1144,11 @@ Bemerkung: Der Kompaktheitssatz gilt auch, wenn die Menge der atomaren Formeln n > Frage: existiert eine B-Belegung $B$ mit $B(\Gamma) = 1_B$. - offensichtlicher Algorithmus: probiere alle Belegungen durch (d.h. stelle Wahrheitswertetabelle auf)$\rightarrow$ exponentielle Zeit -- „Automaten, Sprachen und Komplexität“: das Problem ist NP-vollständig +- "Automaten, Sprachen und Komplexität": das Problem ist NP-vollständig - nächstes Ziel:spezielle Algorithmen für syntaktisch eingeschränkte Formeln $\Gamma$ -- Spätere Verallgemeinerung dieser Algorithmen (letzte Vorlesung des Logik-Teils von „Logik und Logikprogrammierung“) bildet Grundlage der logischen Programmierung. +- Spätere Verallgemeinerung dieser Algorithmen (letzte Vorlesung des Logik-Teils von "Logik und Logikprogrammierung") bildet Grundlage der logischen Programmierung. -### Hornformeln (Alfred Horn, 1918–2001) +### Hornformeln (Alfred Horn, 1918-2001) > Definition > > Eine Hornklausel hat die Form $(\lnot\bot\wedge p_1\wedge p_2\wedge ... \wedge p_n)\rightarrow q$ für $n\geq 0$, atomare Formeln $p_1 ,p_2 ,... ,p_n$ und $q$ atomare Formel oder $q=\bot$. @@ -1162,15 +1162,15 @@ Schreib- und Sprechweise Bemerkung, in der Literatur auch: - $\{\lnot p_1,\lnot p_2 ,... ,\lnot p_n,q\}$ für $\{p_1 ,... ,p_n\}\rightarrow q$ mit $q$ atomare Formel - $\{\lnot p_1,\lnot p_2 ,... ,\lnot p_n\}$ für $\{p_1 ,... ,p_n\}\rightarrow\bot$ -- $\Box$ für $\varnothing\rightarrow\bot$, die „leere Hornklausel“ +- $\Box$ für $\varnothing\rightarrow\bot$, die "leere Hornklausel" ### Markierungsalgorithmus - Eingabe: eine endliche Menge $\Gamma$ von Hornklauseln. 1. while es gibt in $\Gamma$ eine Hornklausel $M\rightarrow q$, so dass alle $p\in M$ markiert sind und $q$ unmarkierte atomare Formel ist: do markiere $q$ (in allen Hornklauseln in $\Gamma$) 2. if $\Gamma$ enthält eine Hornklausel der Form $M\rightarrow\bot$, in der alle $p\in M$ markiert sind - then return „unerfüllbar“ - else return „erfüllbar“ + then return "unerfüllbar" + else return "erfüllbar" Beweis einer Folgerung: Beispiel - Ziel ist es, die folgende Folgerung zu zeigen: $\{(AK\vee BK),(AK\rightarrow BK),(BK\wedge RL\rightarrow\lnot AK),RL\}\Vdash\lnot AK$ @@ -1204,18 +1204,18 @@ Nach unserer Herleitung folgern wir, dass das Teil $A$ heil ist. - I.A. Die Aussage gilt offensichtlich für $n=0$. - I.S. werde die atomare Formel $q$ in einem der ersten $n$ Schleifendurchläufe markiert. Dann gibt es eine Hornklausel $\{p_1,p_2 ,... ,p_k\}\rightarrow q$, so dass $p_1 ,... ,p_k$ in den ersten $n-1$ Schleifendurchläufen markiert wurden. Also gilt $B(p_1)=...=B(p_k) = 1_B$ nach IV. Da $B$ alle Hornformeln aus $\Gamma$ erfüllt, gilt insbesondere $B(\{p_1 ,p_2 ,... ,p_k\}\rightarrow q) = 1_B$ und damit $B(q) = 1_B$. -3. Wenn der Algorithmus „unerfüllbar“ ausgibt, dann ist $\Gamma$ unerfüllbar. - Beweis: indirekt, wir nehmen also an, dass der Algorithmus „unerfüllbar“ ausgibt, $B$ aber eine B-Belegung ist, die $\Gamma$ erfüllt. - Sei $\{p_1 ,... ,p_k\}\rightarrow\bot$ die Hornklausel aus $\Gamma$, die die Ausgabe „unerfüllbar“ verursacht (d.h. die atomaren Formeln $p_1 ,... ,p_k$ sind markiert). +3. Wenn der Algorithmus "unerfüllbar" ausgibt, dann ist $\Gamma$ unerfüllbar. + Beweis: indirekt, wir nehmen also an, dass der Algorithmus "unerfüllbar" ausgibt, $B$ aber eine B-Belegung ist, die $\Gamma$ erfüllt. + Sei $\{p_1 ,... ,p_k\}\rightarrow\bot$ die Hornklausel aus $\Gamma$, die die Ausgabe "unerfüllbar" verursacht (d.h. die atomaren Formeln $p_1 ,... ,p_k$ sind markiert). Nach 2. gilt $B(p_1) =...=B(p_k) = 1_B$, also $B(\{p_1 ,p_2 ,... ,p_k\}\rightarrow\bot) = 0_B$ im Widerspruch zur Annahme, dass $B$ alle Hornklauseln aus $\Gamma$ erfüllt. Also kann es keine erfüllende B-Belegung von $\Gamma$ geben. -4. Wenn der Algorithmus „erfüllbar“ ausgibt, dann erfüllt die folgende B-Belegung alle Formeln aus $\Gamma$: +4. Wenn der Algorithmus "erfüllbar" ausgibt, dann erfüllt die folgende B-Belegung alle Formeln aus $\Gamma$: $B(p_i)=\begin{cases} 1_B \quad\text{ der Algorithmus markiert } p_i \\ 0_B \quad\text{ sonst} \end{cases}$ Beweis: - Sei $M\rightarrow q$ eine beliebige Hornklausel aus $\Gamma$. - Ist ein $p\in M$ nicht markiert, so gilt $B(\bigwedge_{p\in M} p) = 0_B$ und damit $B(M\rightarrow q) = 1_B$. - Sind alle $p\in M$ markiert, so wird auch $q$ markiert, also $B(q) = 1_B$ und damit $B(M\rightarrow q) = 1_B$. - - Gilt $q=\bot$, so existiert unmarkiertes $p\in M$ (da der Algorithmus sonst „unerfüllbar“ ausgegeben hätte), also $B(M\rightarrow\bot) = 1_B$ wie im ersten Fall. + - Gilt $q=\bot$, so existiert unmarkiertes $p\in M$ (da der Algorithmus sonst "unerfüllbar" ausgegeben hätte), also $B(M\rightarrow\bot) = 1_B$ wie im ersten Fall. Also gilt $B(M\rightarrow q) = 1_B$ für alle Hornklauseln aus $\Gamma$, d.h. $\Gamma$ ist erfüllbar. > Satz @@ -1226,7 +1226,7 @@ Beweis: Die Aussagen 1.-4. beweisen diesen Satz. Bemerkungen: - Mit einer geeigneten Implementierung läuft der Algorithmusin linearer Zeit. -- Wir haben sogar gezeigt, dass bei Ausgabe von „erfüllbar“ eine erfüllende B-Belegung berechnet werden kann. +- Wir haben sogar gezeigt, dass bei Ausgabe von "erfüllbar" eine erfüllende B-Belegung berechnet werden kann. ### SLD-Resolution > Definition @@ -1264,14 +1264,14 @@ Beweis: > > Sei $\Gamma$ eine (u.U. unendliche) unerfüllbare Menge von Hornklauseln. Dann existiert eine SLD-Resolution $(M_0\rightarrow\bot,...,M_m\rightarrow\bot)$ aus $\Gamma$ mit $M_m=\varnothing$. -Beweis: Endlichkeitssatz: es gibt $\Delta\subseteq\Gamma$ endlich und unerfüllbar. Bei Eingabe von$\Delta$ terminiert Markierungsalgorithmus mit „unerfüllbar“ +Beweis: Endlichkeitssatz: es gibt $\Delta\subseteq\Gamma$ endlich und unerfüllbar. Bei Eingabe von$\Delta$ terminiert Markierungsalgorithmus mit "unerfüllbar" - $r\geq 0...$ Anzahl der Runden - $q_i...$ Atomformel, die in $i$ Runde markiert wird $(1\leq i\leq r)$ Behauptung: Es gibt $m\leq r$ und SLD-Resolution $(M_0\rightarrow\bot,...,M_m\rightarrow\bot)$ aus $\Delta$ mit $M_m=\varnothing$ und $M_n\subseteq\{q_1,q_2,... ,q_{r-n}\}$ f.a. $0\leq n\leq m$. (5) Beweis der Behauptung: Wir konstruieren die Hornklauseln $M_i\rightarrow\bot$ induktiv: -- I.A.: Da der Markierungsalgorithmus mit „unerfüllbar“ terminiert, existiert eine Hornklausel $(M_0\rightarrow\bot)\in\Gamma$ mit $M_0\subseteq\{q_1,... ,q_{r- 0}\}$. $(M_0\rightarrow\bot)$ ist SLD-Resolution aus $\Delta$, die (5) erfüllt. +- I.A.: Da der Markierungsalgorithmus mit "unerfüllbar" terminiert, existiert eine Hornklausel $(M_0\rightarrow\bot)\in\Gamma$ mit $M_0\subseteq\{q_1,... ,q_{r- 0}\}$. $(M_0\rightarrow\bot)$ ist SLD-Resolution aus $\Delta$, die (5) erfüllt. - I.V.: Sei $n\leq r$ und $(M_0\rightarrow\bot,... ,M_n\rightarrow\bot)$ SLD-Resolution, so dass (5) gilt. - I.S.: wir betrachten drei Fälle: 1. Fall $M_n=\varnothing$: mit $m:=n$ ist Beweis der Beh. abgeschlossen. @@ -1300,8 +1300,8 @@ Die Suche nach einer SLD-Resolution mit $M_m=\varnothing$ kann grundsätzlich au - findet existierende SLD-Resolution mit $M_m=\varnothing$ nicht immer (siehe Beispiel) ## Zusammenfassung Aussagenlogik -- Das natürliche Schließen formalisiert die „üblichen“ Argumente in mathematischen Beweisen. -- Unterschiedliche Wahrheitswertebereiche formalisieren unterschiedliche Vorstellungen von „Wahrheit“. +- Das natürliche Schließen formalisiert die "üblichen" Argumente in mathematischen Beweisen. +- Unterschiedliche Wahrheitswertebereiche formalisieren unterschiedliche Vorstellungen von "Wahrheit". - Das natürliche Schließen ist vollständig und korrekt für den Booleschen Wahrheitswertebereich. - Der Markierungsalgorithmus und die SLD-Resolution sind praktikable Verfahren, um die Erfüllbarkeit von Hornformeln zu bestimmen. @@ -1321,25 +1321,25 @@ Beispiel: Datenbanken - Dietrich Kuske ist Professor. - Kein Student ist Professor. - Jeder Student ist jünger als jeder Professor. - - Es gibt eine Person, die an den Veranstaltungen „Logik und Logikprogrammierung“ und „Algorithmen und Datenstrukturen“ teilnimmt. + - Es gibt eine Person, die an den Veranstaltungen "Logik und Logikprogrammierung" und "Algorithmen und Datenstrukturen" teilnimmt. - Es gibt eine Person, die kein wissenschaftlicher Mitarbeiter ist und nicht an beiden Veranstaltungen teilnimmt. - Jeder Student ist jünger als die Person, mit der er am besten über Informatik reden kann. -- Um sie in der Aussagenlogik machen zu können, müssen wir atomare Aussagen für „Hans ist Student“, „Otto ist jünger als Ottilie“ usw. einführen. Dies ist nur möglich, wenn +- Um sie in der Aussagenlogik machen zu können, müssen wir atomare Aussagen für "Hans ist Student", "Otto ist jünger als Ottilie" usw. einführen. Dies ist nur möglich, wenn 1. alle involvierten Personen bekannt sind und fest stehen und 2. es nur endlich viele involvierte Personen gibt. - Sollen analoge Aussagen für das vorige oder das kommende Jahr gemacht werden, so ist die gesamte Kodierungsarbeit neu zu machen. -## Kodierung in einer „Struktur“ +## Kodierung in einer "Struktur" - Grundmenge: Die Studenten und die Lehrenden in Veranstaltungen zur Theoretischen Informatik in diesem Sommersemester - Teilmengen: - - $S(x)$ „x ist Student“ - - $LuLP(x)$ „x nimmt an der Veranstaltung LuLP teil“ - - $AuD(x)$ „x nimmt an der Veranstaltung AuD teil“ - - $Pr(x)$ „x ist Professor“ - - $WM(x)$ „x ist wissenschaftlicher Mitarbeiter“ + - $S(x)$ "x ist Student" + - $LuLP(x)$ "x nimmt an der Veranstaltung LuLP teil" + - $AuD(x)$ "x nimmt an der Veranstaltung AuD teil" + - $Pr(x)$ "x ist Professor" + - $WM(x)$ "x ist wissenschaftlicher Mitarbeiter" - Relationen: - - $J(x,y)$ „x ist jünger als y“ + - $J(x,y)$ "x ist jünger als y" - Funktion: - $f(x)$ ist diejenige Person (aus dem genannten Kreis), mit der x am besten über Informatik reden kann. - Konstante: @@ -1357,16 +1357,16 @@ Die in der Aussagenlogik nur schwer formulierbaren Aussagen werden nun Bemerkung: Diese Formulierungen sind auch brauchbar, wenn die Grundmenge unendlich ist. Sie sind auch unabhängig vom Jahr (im nächsten Jahr können diese Folien wieder verwendet werden). Ziel -- Wir wollen in der Lage sein, über Sachverhalte in „Strukturen“ (Graphen, Datenbanken, relle Zahlen, Gruppen... ) zu reden. -- Dabei soll es „Relationen“ geben, durch die das Enthaltensein in einer Teilmenge oder Beziehungen zwischen Objekten ausgedrückt werden können (z.B. $S(x),J(x,y),...$ ) -- Weiter soll es „Funktionen“ geben, durch die Objekte (oder Tupel von Objekten) auf andere Objekte abgebildet werden (z.B. $f$) +- Wir wollen in der Lage sein, über Sachverhalte in "Strukturen" (Graphen, Datenbanken, relle Zahlen, Gruppen... ) zu reden. +- Dabei soll es "Relationen" geben, durch die das Enthaltensein in einer Teilmenge oder Beziehungen zwischen Objekten ausgedrückt werden können (z.B. $S(x),J(x,y),...$ ) +- Weiter soll es "Funktionen" geben, durch die Objekte (oder Tupel von Objekten) auf andere Objekte abgebildet werden (z.B. $f$) - Nullstellige Funktionen (ohne Argumente): Konstante (z.B. $dk$) Fragen - Nach welchen Regeln bildet man korrekte Formeln? - Was ist eine Struktur? -- Wann hat eine Aussage in einer Struktur eine Bedeutung (ist „sinnvoll“)? -- Wann „gilt“ eine Aussage in einer Struktur? +- Wann hat eine Aussage in einer Struktur eine Bedeutung (ist "sinnvoll")? +- Wann "gilt" eine Aussage in einer Struktur? - Gibt es Formeln, die in allen Strukturen gelten? - Kann man solche Formeln algorithmisch identifizieren? Gibt es einen Beweiskalkül wie das natürliche Schließen oder die SLD-Resolution? - ......... @@ -1481,8 +1481,8 @@ Was sind die freien Variablen der folgenden Formeln? Welche Formeln sind Sätze? | $\exists x\forall x Q(x,x)$ | nein | ja | Semantik der Prädikatenlogik -- Erinnerung: Die Frage „Ist die aussagenlogische Formel $\varphi$ wahr oder falsch?“ war sinnlos, denn wir wissen i.a. nicht, ob die atomaren Aussagen wahr oder falsch sind. -- Analog: Die Frage „Ist die prädikatenlogische Formel $\varphi$ wahr oder falsch?“ ist sinnlos, denn wir wissen bisher nicht, über welche Objekte, über welche „Struktur“ $\varphi$ spricht. +- Erinnerung: Die Frage "Ist die aussagenlogische Formel $\varphi$ wahr oder falsch?" war sinnlos, denn wir wissen i.a. nicht, ob die atomaren Aussagen wahr oder falsch sind. +- Analog: Die Frage "Ist die prädikatenlogische Formel $\varphi$ wahr oder falsch?" ist sinnlos, denn wir wissen bisher nicht, über welche Objekte, über welche "Struktur" $\varphi$ spricht. > Definition > @@ -1505,14 +1505,14 @@ Im folgenden sei $\sum$ eine Signatur, A eine $\sum$-Struktur und $\rho:Var\righ Wir definieren eine Abbildung $\rho′:T\sum\rightarrow U_A$ induktiv für $t\in T_{\sum}$: - ist $t\in Var$, so setze $\rho′(t) =\rho(t)$ - ansonsten existieren $f\in\Omega$ mit $ar(f)=k$ und $t_1,...,t_k\in T_{\sum}$ mit $t=f(t_1,...,t_k)$. Dann setze $\rho′(t) =f^A(\rho′(t_1),...,\rho′(t_k))$. -Die Abbildung $\rho′$ ist die übliche „Auswertungsabbildung“. +Die Abbildung $\rho′$ ist die übliche "Auswertungsabbildung". Zur Vereinfachung schreiben wir auch $\rho(t)$ an Stelle von $\rho′(t)$. Beispiel: - Seien $A=(R,f^A,a^A)$ mit $f^A$ die Subtraktion und $a$ nullstelliges Funktionssymbol mit $a^A=10$. Seien weiter $x,y\in Var$ mit $\rho(x)=7$ und $\rho(y)=-2$. Dann gilt $\rho(f(a,f(x,y))) =\rho(a)-(\rho(x)-\rho(y)) =a^A-(\rho(x)-\rho(y)) = 1$ - Seien $A= (Z,f^A,a^A)$ mit $f^A$ die Maximumbildung, $a$ nullstelliges Funktionssymbol mit $a^A=10$. Seien weiter $x,y\in Var$ mit $\rho(x)=7$ und $\rho(y)=-2$. In diesem Fall gilt $\rho(f(a,f(x,y))) = max(\rho(a),max(\rho(x),\rho(y)) = max(a^A,max(\rho(x),\rho(y))) = 10$ -Bemerkung: Wir müssten also eigentlich noch vermerken, in welcher Struktur $\rho(t)$ gebildet wird – dies wird aber aus dem Kontext immer klar sein. +Bemerkung: Wir müssten also eigentlich noch vermerken, in welcher Struktur $\rho(t)$ gebildet wird - dies wird aber aus dem Kontext immer klar sein. Für eine $\sum$-Formel $\varphi$ definieren wir die Gültigkeit in einer $\sum$-Struktur $A$ unter der Variableninterpretation $\rho$ (in Zeichen: $A\Vdash_\rho\varphi$) induktiv: - $A\Vdash_\rho\bot$ gilt nicht. @@ -1629,7 +1629,7 @@ Für $\sum$ -Formeln $\varphi$ und $\Psi$ und $y\in Var$: Beispiel: $(\exists x P(x,f(y))\vee\lnot\forall yQ(y,g(a,h(z))))[y:=f(u)] = (\exists x P(x,f(f(u)))\vee\lnot\forall yQ(y,g(a,h(z))))$ -$\varphi [x:=t]$ „soll das über $t$ aussagen, was $\varphi$ über $x$ ausgesagt hat.“ +$\varphi [x:=t]$ "soll das über $t$ aussagen, was $\varphi$ über $x$ ausgesagt hat." Gegenbeispiel: Aus $\exists y$ $Mutter(x) =y$ mit Substitution $[x:=Mutter(y)]$ wird $\exists y$ Mutter$(Mutter(y)) =y$. @@ -1743,8 +1743,8 @@ zulässig, d.h. in $\varphi$ wird über keine Variable aus $s$ oder $t$ quantifi - Da $A$ und $\rho$ beliebig waren mit $A\Vdash_p\gamma$ für alle $\gamma\in\Gamma$ haben wir $\Gamma\Vdash\varphi[x:=t]$ gezeigt. ### $\forall$ in math. Beweisen -Ein mathematischer Beweis einer Aussage „für alle $x$ gilt $\varphi$“ sieht üblicherweise so aus: - "Sei $x$ beliebig, aber fest. Jetzt zeige ich $\varphi$ (hier steckt die eigentliche Arbeit). Da $x$ beliebig war, haben wird „für alle $x$ gilt $\varphi$“ gezeigt. qed“ +Ein mathematischer Beweis einer Aussage "für alle $x$ gilt $\varphi$" sieht üblicherweise so aus: + "Sei $x$ beliebig, aber fest. Jetzt zeige ich $\varphi$ (hier steckt die eigentliche Arbeit). Da $x$ beliebig war, haben wird "für alle $x$ gilt $\varphi$" gezeigt. qed" > $\forall$ -Einführung > @@ -1769,8 +1769,8 @@ Beweis: Betrachte die folgende Deduktion $D$ - Da $A$ und $\rho$ beliebig waren mit $A\Vdash_\rho\Gamma$ für alle $\gamma\in\Gamma$ haben wir also $\Gamma\Vdash\forall x\varphi$ gezeigt. ### $\forall$ -Elimination in math. Beweisen -Ein mathematischer Beweis einer Aussage „t erfüllt $\varphi$“ kann so aussehen: - „Zunächst zeige ich $\forall x\varphi$ (hier steckt die eigentliche Arbeit). Damit erfüllt insbesondere $t$ die Aussage$\varphi$ , d.h., wir haben „$t$ erfüllt $\varphi$“ gezeigt. qed“ +Ein mathematischer Beweis einer Aussage "t erfüllt $\varphi$" kann so aussehen: + "Zunächst zeige ich $\forall x\varphi$ (hier steckt die eigentliche Arbeit). Damit erfüllt insbesondere $t$ die Aussage$\varphi$ , d.h., wir haben "$t$ erfüllt $\varphi$" gezeigt. qed" > $\forall$ -Elimination > @@ -1787,8 +1787,8 @@ Ein mathematischer Beweis einer Aussage „t erfüllt $\varphi$“ kann so ausse Beweis: Analog zum Beweis von Lemma V2. ### $\exists$ in math. Beweisen -Ein Beweis von „$\sigma$ gilt“ kann so aussehen: - „Zunächst zeige ich $\exists x\varphi$ (hier steckt Arbeit). Jetzt zeige ich, dass $\sigma$ immer gilt, wenn$\varphi$ gilt (mehr Arbeit). Damit gilt $\sigma$. qed“ +Ein Beweis von "$\sigma$ gilt" kann so aussehen: + "Zunächst zeige ich $\exists x\varphi$ (hier steckt Arbeit). Jetzt zeige ich, dass $\sigma$ immer gilt, wenn$\varphi$ gilt (mehr Arbeit). Damit gilt $\sigma$. qed" > $\exists$ -Elimination > @@ -1811,7 +1811,7 @@ Beweis: Sei $D$ die folgende Deduktion - Da $A$ und $\rho$ beliebig waren mit $A\Vdash_\rho\gamma$ für alle $\gamma\in\Gamma$ haben wir also $\Gamma\Vdash\sigma$ gezeigt. ### $\exists$ -Einführung in math. Beweisen -Ein mathematischer Beweis einer Aussage „es gibt ein $x$, das $\varphi$ erfüllt“ sieht üblicherweise so aus: „betrachte dieses $t$ (hier ist Kreativität gefragt). Jetzt zeige ich, daß $t\varphi$ erfüllt (u.U. harte Arbeit). Also haben wir „es gibt ein $x$, das $\varphi$ erfüllt“ gezeigt. qed“ +Ein mathematischer Beweis einer Aussage "es gibt ein $x$, das $\varphi$ erfüllt" sieht üblicherweise so aus: "betrachte dieses $t$ (hier ist Kreativität gefragt). Jetzt zeige ich, daß $t\varphi$ erfüllt (u.U. harte Arbeit). Also haben wir "es gibt ein $x$, das $\varphi$ erfüllt" gezeigt. qed" > $\exists$ -Einführung > @@ -1838,11 +1838,11 @@ Beweis: analog zu obigen Beweisen. > Definition > -> Für eine Menge $\Gamma$ von $\sum$-Formeln und eine $\sum$-Formel $\varphi$ schreiben wir $\Gamma\vdash\varphi$ wenn es eine Deduktion gibt mit Hypothesen in $\Gamma$ und Konklusion $\varphi$. Wir sagen „$\varphi$ ist eine syntaktische Folgerung von $\Gamma$“. +> Für eine Menge $\Gamma$ von $\sum$-Formeln und eine $\sum$-Formel $\varphi$ schreiben wir $\Gamma\vdash\varphi$ wenn es eine Deduktion gibt mit Hypothesen in $\Gamma$ und Konklusion $\varphi$. Wir sagen "$\varphi$ ist eine syntaktische Folgerung von $\Gamma$". > Eine Formel $\varphi$ ist ein Theorem, wenn $\varnothing\vdash\varphi$ gilt. Bemerkung: $\Gamma\vdash\varphi$ sagt (zunächst) nichts über den Inhalt der Formeln in $\Gamma\cup\{\varphi\}$ aus, sondern nur über den Fakt, dass $\varphi$ mithilfe des natürlichen Schließens aus den Formeln aus $\Gamma$ hergeleitet werden kann. -Ebenso sagt „$\varphi$ ist Theorem“ nur, dass $\varphi$ abgeleitet werden kann, über „Wahrheit“ sagt dieser Begriff (zunächst) nichts aus. +Ebenso sagt "$\varphi$ ist Theorem" nur, dass $\varphi$ abgeleitet werden kann, über "Wahrheit" sagt dieser Begriff (zunächst) nichts aus. Wir haben aber "en passant" das folgende gezeigt: > Korrektheitssatz @@ -1891,7 +1891,7 @@ und setzen dann - $\sum^+ =\bigcup_{n\geq 0} \sum_n$ und $\Delta^+ = \bigcup_{n\geq 0} \Delta_n$ 1. IA: $\sum_0 := \sum$ , $\Delta_0:=\Delta$ -2. IV: Sei $n\geq 0$ und $\Delta_n$ maximal konsistente Menge von $\sum_n$-Formeln. $\psi=\exists x\varphi$, ein „neues“ Konstantensymbol $c_{\psi}$ +2. IV: Sei $n\geq 0$ und $\Delta_n$ maximal konsistente Menge von $\sum_n$-Formeln. $\psi=\exists x\varphi$, ein "neues" Konstantensymbol $c_{\psi}$ 3. IS: $\sum_{n+1}$: alle Symbole aus $\sum_n$ und, für jede Formel $\psi\in\Delta_n$ der Form $\Delta′_{n+1}:= \Delta_n\cup\{\varphi[x:=c_{\psi}]|\psi=\exists x\varphi\in\Delta_n\}$ - ohne Beweis: $\Delta′_{n+1}$ ist konsistent - Idee: Ist $\varphi$ $\sum_n$-Formel mit $\Delta′_{n+1}\vdash\varphi$, so gilt $\Delta_n\vdash\varphi$. @@ -2034,12 +2034,12 @@ Beweis:Sei$\varphi$ $\sum$-Formel. Dann gilt - $\Leftrightarrow$ Es gibt hypothesenlose Deduktion mit Konklusion $\varphi$ Ein Semi-Entscheidungsalgorithmus kann also folgendermaßen vorgehen: -Teste für jede Zeichenkette $w$ nacheinander, ob sie hypothesenlose Deduktion mit Konklusion $\varphi$ ist. Wenn ja, so gib aus „$\varphi$ ist allgemeingültig“. Ansonsten gehe zur nächsten Zeichenkette über. +Teste für jede Zeichenkette $w$ nacheinander, ob sie hypothesenlose Deduktion mit Konklusion $\varphi$ ist. Wenn ja, so gib aus "$\varphi$ ist allgemeingültig". Ansonsten gehe zur nächsten Zeichenkette über. ### Der Satz von Church Jetzt zeigen wir, daß dieses Ergebnis nicht verbessert werden kann: Die Menge der allgemeingültigen $\sum$-Formeln ist nicht entscheidbar. Wegen $\varphi$ allgemeingültig $\Leftrightarrow\lnot\varphi$ unerfüllbar reicht es zu zeigen, dass die Menge der erfüllbaren Sätze nicht entscheidbar ist. -Genauer zeigen wir dies sogar für „Horn-Formeln“: +Genauer zeigen wir dies sogar für "Horn-Formeln": > Definition > @@ -2106,7 +2106,7 @@ Nach den vorherigen Lemmata ist sie eine Reduktion von PCP auf die Menge der une Beweis: Eine $\sum$-Formel $\varphi$ ist genau dann unerfüllbar, wenn $\lnot\varphi$ allgemeingültig ist. Also ist $\varphi\rightarrow\lnot\varphi$ eine Reduktion der unentscheidbaren Menge der unerfüllbaren $\sum$-Formeln auf die Menge der allgemeingültigen $\sum$-Formeln, die damit auch unentscheidbar ist. -Allgemeingültige $\sum$-Formeln gelten in allen Strukturen. Was passiert, wenn wir uns nur auf „interessante“ StrukturenAeinschränken (z.B. auf eine konkrete), d.h. wenn wir die Theorie $Th(A)$ von $A$ betrachten? +Allgemeingültige $\sum$-Formeln gelten in allen Strukturen. Was passiert, wenn wir uns nur auf "interessante" StrukturenAeinschränken (z.B. auf eine konkrete), d.h. wenn wir die Theorie $Th(A)$ von $A$ betrachten? ## Theorie der natürlichen Zahlen @@ -2247,7 +2247,7 @@ Bemerkung: Betrachte die Formel $\exists x\exists y E(x,y)$. Es gibt keine Forme > Seien $Q\in\{\exists ,\forall\}$ und $\oplus\in\{\wedge,\vee,\rightarrow,\leftarrow\}$. Sei $\varphi= (Qx \alpha)\oplus\beta$ und sei $y$ eine Variable, die weder in $\alpha$ noch in $\beta$ vorkommt. Dann gilt > $\varphi \equiv \begin{cases} Qy(\alpha[x:=y]\oplus\beta) \text{ falls } \oplus\in\{\wedge,\vee,\leftarrow\}\\ \forall y(\alpha[x:=y]\rightarrow\beta) \text{ falls } \oplus=\rightarrow,Q=\exists \\ \exists y(\alpha[x:=y]\rightarrow\beta) \text{ falls }\oplus=\rightarrow,Q=\forall\end{cases}$ -Notwendigkeit der Bedingung „$y$ kommt weder in $\alpha$ noch in $\beta$ vor“: +Notwendigkeit der Bedingung "$y$ kommt weder in $\alpha$ noch in $\beta$ vor": - $(\exists x:f(x) \not =f(y))\wedge\beta \not\equiv\exists y: (f(y) \not =f(y)\wedge\beta)$ - $(\exists x:\lnot P(x))\wedge P(y)\not\equiv \exists y: (\lnot P(y) \wedge P(y))$ @@ -2301,7 +2301,7 @@ Offensichtlich hat $\varphi$′einen Existenzquantor weniger als $\varphi$. Auß > > Die Formeln $\varphi$ und $\varphi′$ sind erfüllbarkeitsäquivalent. -Beweis: „$\Leftarrow$“ Sei $A′$ Struktur und $\rho′$ Variableninterpretation mit $A′\vdash_{\rho′}\varphi′$. Wir zeigen $A′\vdash_{\rho′}\varphi$. Hierzu seien $a_1,...,a_m\in U_{A′}$ beliebig. +Beweis: "$\Leftarrow$" Sei $A′$ Struktur und $\rho′$ Variableninterpretation mit $A′\vdash_{\rho′}\varphi′$. Wir zeigen $A′\vdash_{\rho′}\varphi$. Hierzu seien $a_1,...,a_m\in U_{A′}$ beliebig. > Satz > @@ -2375,7 +2375,7 @@ Jedes Herbrand-Modell A von $\varphi$ - erfüllt $f^A(f^n(a))= f^{n+1} (a)$ für alle $n\geq 0$ Um ein Herbrand-Modell zu konstruieren, müssen (bzw. können) wir für alle Elemente $s,t,u\in D(\sum)$ unabhängig und beliebig wählen, ob $(s,t)\in P^A$ und $u\in R^A$ gilt. -Wir fassen dies als „aussagenlogische B-Belegung“ B der „aussagenlogischen atomaren Formeln“ $P(s,t)$ bzw. $R(u)$ auf. +Wir fassen dies als "aussagenlogische B-Belegung" B der "aussagenlogischen atomaren Formeln" $P(s,t)$ bzw. $R(u)$ auf. Jede solche aussagenlogische B-Belegung $B$ definiert dann eine Herbrand-Struktur $A_B$: - $P^{A_B} = \{(s,t)\in D(\sum)^2 |B(P(s,t))= 1\}$ @@ -2391,7 +2391,7 @@ Also hat $\varphi$ genau dann ein Herbrand-Modell, wenn es eine erfüllende B-Be Beispiellösung: Setzt $B(P(s,t))= 1$ und $B(R(s))= 0$ für alle $s,t\in D(\sum)$. -Diese B-Belegung erfüllt $E(\varphi)$ und „erzeugt“ die Herbrand-Struktur $A_B$ mit $P^{A_B}=D(\sum)^2$ und $R^{A_B}=\varnothing$. +Diese B-Belegung erfüllt $E(\varphi)$ und "erzeugt" die Herbrand-Struktur $A_B$ mit $P^{A_B}=D(\sum)^2$ und $R^{A_B}=\varnothing$. Nach obiger Überlegung gilt $A_B\Vdash\varphi$, wir haben also ein Herbrand-Modell von $\varphi$ gefunden. @@ -2456,11 +2456,11 @@ n:=0; repeat n := n +1; until { alpha_1, alpha_2,..., alpha_n } ist unerfüllbar; (dies kann mit Mitteln der Aussagenlogik, z.B. Wahrheitswertetabelle, getestet werden) -Gib „unerfüllbar“ aus und stoppe. +Gib "unerfüllbar" aus und stoppe. ``` Folgerung: Sei $\varphi$ eine gleichungsfreie Aussage in Skolemform. Dann gilt: -- Wenn die Eingabeformel $\varphi$ unerfüllbar ist, dann terminiert der Algorithmus von Gilmore und gibt „unerfüllbar“ aus. +- Wenn die Eingabeformel $\varphi$ unerfüllbar ist, dann terminiert der Algorithmus von Gilmore und gibt "unerfüllbar" aus. - Wenn die Eingabeformel $\varphi$ erfüllbar ist, dann terminiert der Algorithmus von Gilmore nicht, d.h. er läuft unendlich lange. Beweis: unmittelbar mit Satz von Herbrand @@ -2480,9 +2480,9 @@ Beispiel - $R^A = \mathbb{N}^2 \backslash\{( 0 , 0 )\}$ - Gibt es variablenfreie Terme $s$ und $t$ mit $\{\gamma\}\Vdash R(s,t)$? - ja: z.B. $(s,t)=(g(f(a)),g(a))$ oder $(s,t)=(g(a),g(a))$ oder $(s,t)=(a,f(b))$ -- Kann die Menge aller Termpaare $(s,t)$ (d.h. aller „Lösungen“) mit $\{\gamma\}\Vdash R(s,t)$ effektiv und übersichtlich angegeben werden? +- Kann die Menge aller Termpaare $(s,t)$ (d.h. aller "Lösungen") mit $\{\gamma\}\Vdash R(s,t)$ effektiv und übersichtlich angegeben werden? - Wegen $\{\gamma\}\Vdash R(s,t) \Leftrightarrow\gamma\wedge\lnot R(s,t)$ unerfüllbar ist die gesuchte Menge der variablenfreien Terme $(s,t)$ semi-entscheidbar, d.h. durch eine Turing-Maschine beschrieben. -- Im Rest des Logikteils der Vorlesung „Logik und Logikprogrammierung“ wollen wir diese Menge von Termpaaren „besser“ beschreiben (zumindest in einem Spezialfall, der die Grundlage der logischen Programmierung bildet). +- Im Rest des Logikteils der Vorlesung "Logik und Logikprogrammierung" wollen wir diese Menge von Termpaaren "besser" beschreiben (zumindest in einem Spezialfall, der die Grundlage der logischen Programmierung bildet). > Erinnerung > @@ -2528,7 +2528,7 @@ Substitutionen sind also ein Spezialfall der verallgemeinerten Substitutionen. Beispiel: Die verallgemeinerte Substitution $\sigma$ mit $Def(\sigma)=\{x,y,z\}$ und $\sigma(x) =f(h(x′)), \sigma(y) =g(a,h(x′)), \sigma(z) =h(x′)$ ist gleich der verallgemeinerten Substitution $[x:=f(h(x′))] [y:=g(a,h(x′))] [z:=h(x′)] = [x:=f(z)] [y:=g(a,z)] [z:=h(x′)]$. Es kann sogar jede verallgemeinerte Substitution $\sigma$ als Verknüpfung von Substitutionen der Form $[x:=t]$ geschrieben werden. -Vereinbarung: Wir sprechen ab jetzt nur von „Substitutionen“, auch wenn wir „verallgemeinerte Substitutionen“ meinen. +Vereinbarung: Wir sprechen ab jetzt nur von "Substitutionen", auch wenn wir "verallgemeinerte Substitutionen" meinen. > Lemma > @@ -2580,10 +2580,10 @@ Wegen $Def(\rho)\subseteq Def(\tau_1)$ ist $Def(\rho)$ endlich, also $\rho$ eine - while $\alpha\sigma\not =\beta\sigma$ do - Suche die erste Position, an der sich $\alpha\sigma$ und $\beta\sigma$ unterscheiden - if keines der beiden Symbole an dieser Position ist eine Variable - - then stoppe mit „nicht unifizierbar“ + - then stoppe mit "nicht unifizierbar" - else sei $x$ die Variable und $t$ der Term in der anderen Atomformel (möglicherweise auch eine Variable) - if $x$ kommt in $t$ vor - - then stoppe mit „nicht unifizierbar“ + - then stoppe mit "nicht unifizierbar" - else $\sigma:=\sigma[x:=t]$ - endwhile - Ausgabe: $\sigma$ @@ -2591,7 +2591,7 @@ Wegen $Def(\rho)\subseteq Def(\tau_1)$ ist $Def(\rho)$ endlich, also $\rho$ eine > Satz > > - (A) Der Unifikationsalgorithmus terminiert für jede Eingabe. -> - (B) Wenn die Eingabe nicht unifizierbar ist, so terminiert der Unifikationsalgorithmus mit der Ausgabe „nicht unifizierbar“. +> - (B) Wenn die Eingabe nicht unifizierbar ist, so terminiert der Unifikationsalgorithmus mit der Ausgabe "nicht unifizierbar". > - (C) Wenn die Eingabe $(\alpha,\beta)$ unifizierbar ist, dann findet der Unifikationsalgorithmus einen allgemeinsten Unifikator von $\alpha$ und $\beta$. (C) besagt insbesondere, daß zwei unifizierbare gleichungsfreie Atomformeln (wenigstens) einen allgemeinsten Unifikator haben. Nach dem Lemma oben haben sie also genau einen allgemeinsten Unifikator (bis auf Umbenennung der Variablen). @@ -2608,11 +2608,11 @@ Hierbei kommt $x$ in $\alpha\sigma$ oder in $\beta\sigma$ vor und der Term $t$ e Also kommt $x$ weder in $\alpha\sigma[x:=t]$ noch in $\beta\sigma[x:=t]$ vor. > Lemma (B) -> Wenn die Eingabe nicht unifizierbar ist, so terminiert der Unifikationsalgorithmus mit der Ausgabe „nicht unifizierbar“. +> Wenn die Eingabe nicht unifizierbar ist, so terminiert der Unifikationsalgorithmus mit der Ausgabe "nicht unifizierbar". Beweis: Sei die Eingabe $(\alpha,\beta)$ nicht unifizierbar. Falls die Bedingung $\alpha\sigma\not=\beta\sigma$ der while-Schleife irgendwann verletzt wäre, so wäre $(\alpha,\beta)$ doch unifizierbar (denn $\sigma$ wäre ja ein Unifikator). -Da nach Lemma (A) der Algorithmus bei Eingabe $(\alpha,\beta)$ terminiert, muss schließlich „nicht unifizierbar“ ausgegeben werden. +Da nach Lemma (A) der Algorithmus bei Eingabe $(\alpha,\beta)$ terminiert, muss schließlich "nicht unifizierbar" ausgegeben werden. > Lemma (C1) > Sei $\sigma′$ ein Unifikator der Eingabe $(\alpha,\beta)$, so dass keine Variable aus $\alpha$ oder $\beta$ auch in einem Term aus $\{y\sigma′|y\in Def(\sigma′)\}$ vorkommt. Dann terminiert der Unifikationsalgorithmus erfolgreich und gibt einen Unifikator $\sigma$ von $\alpha$ und $\beta$ aus. Außerdem gibt es eine Substitution $\tau$ mit $\sigma′=\sigma\tau$. @@ -2646,7 +2646,7 @@ Da $\sigma′$ ein beliebiger Unifikator von $\alpha$ und $\beta$ war und da die > Satz > > - (A) Der Unifikationsalgorithmus terminiert für jede Eingabe. -> - (B) Wenn die Eingabe nicht unifizierbar ist, so terminiert der Unifikationsalgorithmus mit der Ausgabe „nicht unifizierbar“. +> - (B) Wenn die Eingabe nicht unifizierbar ist, so terminiert der Unifikationsalgorithmus mit der Ausgabe "nicht unifizierbar". > - (C) Wenn die Eingabe $(\alpha,\beta)$ unifizierbar ist, dann findet der Unifikationsalgorithmus immer einen allgemeinsten Unifikator von $\alpha$ und $\beta$. (C) besagt insbesondere, daß zwei unifizierbare gleichungsfreie Atomformeln(wenigstens) einen allgemeinsten Unifikator haben. Damit haben sie aber genau einen allgemeinsten Unifikator (bis auf Umbenennung der Variablen). @@ -2710,7 +2710,7 @@ $\Gamma =\{\varphi_1,...,\varphi_n\},M_0 =\{\psi(x_1,...,x_{\iota})\}=\{R(t_1,t_ $\{\varphi_1,...,\varphi_n\}\Vdash\psi (s_1,...,s_{\iota})$ ## Zusammenfassung Prädikatenlogik -- Das natürliche Schließen formalisiert die „üblichen“ Argumente in mathematischen Beweisen. +- Das natürliche Schließen formalisiert die "üblichen" Argumente in mathematischen Beweisen. - Das natürliche Schließen ist vollständig und korrekt. - Die Menge der allgemeingültigen Formeln ist semi-entscheidbar, aber nicht entscheidbar. - Die Menge der Aussagen, die in $(\mathbb{N},+,*,0,1)$ gelten, ist nicht semi-entscheidbar. @@ -2734,7 +2734,7 @@ Grundidee (nach G.W. Leibniz) - Sprach- und Bildverarbeitung ## Logische Grundlagen -### PROLOG – ein „Folgerungstool“ +### PROLOG - ein "Folgerungstool" Sei $M$ eine Menge von Aussagen, $H$ eine Hypothese. $H$ folgt aus $M(M \Vdash H)$, falls jede Interpretation, die zugleich alle Elemente aus $M$ wahr macht (jedes Modell von M), auch $H$ wahr macht. @@ -2761,7 +2761,7 @@ Effekte der Beschränkung auf HORN-Logik 1. Über HORN-Klauseln gibt es ein korrektes und vollständiges Ableitungsverfahren. - $\{K_1, ...,K_n\} \Vdash H$ , gdw. $\{K_1,...,K_n\} \vdash_{ROB} H$ 1. Die Suche nach einer Folge von Resolutionsschritten ist algorithmisierbar. - - Das Verfahren „Tiefensuche mit Backtrack“ sucht systematisch eine Folge, die zur leeren Klausel führt. + - Das Verfahren "Tiefensuche mit Backtrack" sucht systematisch eine Folge, die zur leeren Klausel führt. - Rekursive und/oder metalogische Prädikate stellen dabei die Vollständigkeit in Frage. 3. Eine Menge von HORN-Klauseln mit nichtleeren Klauselköpfen ist stets erfüllbar; es lassen sich keine Widersprüche formulieren. - $K_1 \wedge K_2...\wedge K_n \not= false$ @@ -2783,8 +2783,8 @@ Die systematische Erzeugung von (HORN-) Klauseln Heißt das etwa, die HORN-Logik ist eine echte Beschränkung der Ausdrucksfähigkeit? Richtig, das heißt es. Im Logik-Teil dieser Vorlesung lernten Sie eine Resolutionsmethode für Klauseln kennenlernen -- ... deren Algorithmisierbarkeit allerdings an der „kombinatorischen Explosion“ der Resolutionsmöglichkeiten scheitert, aber ... -- ... in der LV „Inferenzmethoden“ können Sie noch ein paar „Tricks“ kennenlernen, die „Explosion“ einzudämmen +- ... deren Algorithmisierbarkeit allerdings an der "kombinatorischen Explosion" der Resolutionsmöglichkeiten scheitert, aber ... +- ... in der LV "Inferenzmethoden" können Sie noch ein paar "Tricks" kennenlernen, die "Explosion" einzudämmen ### Inferenz in PROLOG: Resolution nach ROBINSON @@ -2800,7 +2800,7 @@ Es gebe eine Substitution (Variablenersetzung) $\nu$ für die $A$ und eines der $M\equiv \bigwedge_{i=1}^n K_i\wedge \lnot(\bigwedge_{i=1}^m H_i)$ ist kontradiktorisch ($kt\ M‘$), gdw. $M‘$ nach Ersetzen von $H$ durch $\bigwedge_{i=1}^{l-1}\nu(H_i)\wedge\bigwedge_{k=1}^p\nu(B_k)\wedge\bigwedge_{i=l+1}^m \nu(H_i)$ noch immer kontradiktorisch ist. -Jetzt wissen wir also, wie man die zu zeigende Kontradiktorizität auf eine andere – viel kompliziertere Kontradiktorizität zurückführen kann. +Jetzt wissen wir also, wie man die zu zeigende Kontradiktorizität auf eine andere - viel kompliziertere Kontradiktorizität zurückführen kann. Für $p=0$ und $m=1$ wird es allerdings trivial. Die sukzessive Anwendung von Resolutionen muss diesen Trivialfall systematisch herbeiführen: @@ -2830,7 +2830,7 @@ Die Unifizierbarkeit zweier Terme richtet sich nach deren Sorte: 3. Eine Variable $t_1$ ist mit einer Konstanten oder einem strukturierten Term $t_2$ unifizierbar. $t_1$ wird durch $t_2$ ersetzt (instanziert): $t_1:= t_2$ 4. Zwei Variablen $t_1$ und $_2$ sind unifizierbar und werden gleichgesetzt: $t_1:=t_2$ bzw. $t_2:= t_1$ -Genügt „irgendein“ Unifikator? +Genügt "irgendein" Unifikator? - ein Beispiel - $K_1: p(A,B)\leftarrow q(A)\wedge r(B)$ - $K_2:q(c)\leftarrow true$ @@ -2843,7 +2843,7 @@ Genügt „irgendein“ Unifikator? - $\nu^4=\{[A,X],[B,Y]\}$ ... - Obwohl $\{K_1, K_2, K_3\}\Vdash H$, gibt es bei Einsetzung von $\nu^1$, $\nu^2$ und $\nu^3$ keine Folge von Resolutionsschritten, die zur leeren Klausel führt. - Bei Einsetzung von $\nu^4$ hingegen gibt es eine solche Folge. -- Die Vollständigkeit des Inferenzverfahrens hängt von der Wahl des „richtigen“ Unifikators ab. +- Die Vollständigkeit des Inferenzverfahrens hängt von der Wahl des "richtigen" Unifikators ab. - Dieser Unifikator muss möglichst viele Variablen variabel belassen. Unnötige Spezialisierungen versperren zukünftige Inferenzschritte. - Ein solcher Unifikator heißt **allgemeinster Unifikator** bzw. "most general unifier" (m.g.u.). @@ -2879,13 +2879,13 @@ Algorithmus zur Bestimmung des allgemeinsten Unifikators 2er Terme ### Einordnung des logischen Paradigmas ![](Assets/Logik-logische-programmierung-einordnung.png) -„deskriptives“ Programmierparadigma = +"deskriptives" Programmierparadigma = 1. Problembeschreibung - Die Aussagenmenge $M =\{K_1,...,K_n\}$, über denen gefolgert wird, wird in Form von Fakten und Regeln im PK1 notiert. - Eine mutmaßliche Folgerung (Hypothese) $H$ wird in Form einer Frage als negierte Hypothese hinzugefügt. 2. (+) Programmverarbeitung - Auf der Suche eines Beweises für $M \Vdash H$ werden durch mustergesteuerte Prozedur-Aufrufe Resolutions-Schritte zusammengestellt. - - Dem „Programmierer“ werden (begrenzte) Möglichkeiten gegeben, die systematische Suche zu beeinflussen. + - Dem "Programmierer" werden (begrenzte) Möglichkeiten gegeben, die systematische Suche zu beeinflussen. ### Syntax Syntax von Klauseln @@ -2899,7 +2899,7 @@ Syntax von Termen | | | Syntax | Beispiele | | --- | --- | --- | --- | Konstante | Name | Zeichenfolge, beginnend mit Kleinbuchstaben, die Buchstaben, Ziffern und \_ enthalten kann. | otto\_1 , tisch, hund -|| beliebige Zeichenfolge in “...“ geschlossen | “Otto“, “r@ho“ +|| beliebige Zeichenfolge in "..." geschlossen | "Otto", "r@ho" || Sonderzeichenfolge | €%&§$€ | Zahl | Ziffernfolge, ggf. mit Vorzeichen, Dezimalpunkt und Exponentendarstellung | 3, -5, 1001, 3.14E-12 Variable | allg. | Zeichenfolge, mit Großbuchstaben oder \_ beginnend | X, Was, _alter @@ -2926,7 +2926,7 @@ Was muss der Programmierer tun? - Formulierung einer negierten Hypothese (Frage, Ziel) $\lnot H\equiv\bigwedge_{i=1}^m H_i \equiv false\leftarrow \bigwedge_{i=1}^m H_i$ Was darf der Programmierer erwarten? -- Dass das „Deduktionstool“ PROLOG $M \Vdash H$ zu zeigen versucht, d.h. $kt(\bigwedge_{i=1}^n K_i\wedge \lnot H)$ ) +- Dass das "Deduktionstool" PROLOG $M \Vdash H$ zu zeigen versucht, d.h. $kt(\bigwedge_{i=1}^n K_i\wedge \lnot H)$ ) - ..., indem systematisch die Resolutionsmethode auf $\lnot H$ und eine der Klauseln aus $M$ angewandt wird, solange bis $\lnot H\equiv false\leftarrow true$ entsteht #### Formulierung von Wissensbasen @@ -2954,13 +2954,13 @@ domains person = symbol predicates vater_von(person,person) % bei nichtdeterministischen Prädikaten - mutter_von(person,person). % kann man „nondeterm“ vor das + mutter_von(person,person). % kann man "nondeterm" vor das grossvater_von(person,person) % Prädikat schreiben, um die geschwister(person,person) % Kompilation effizienter zu machen clauses < Wissensbasis einfügen und Klauseln gleichen Kopfprädikates gruppieren> goal - < Frage ohne „?-“ einfügen> + < Frage ohne "?-" einfügen> ``` 2. Beispiel 2 (BSP2.PRO) @@ -3015,7 +3015,7 @@ Zusätzliche Markierung der Kanten mit der Variablenersetzung (dem Unifikator). ### PROLOG aus prozeduraler Sicht -Beispiel: die „Hackordnung“ +Beispiel: die "Hackordnung" 1. chef_von(mueller,mayer). 2. chef_von(mayer,otto). 3. chef_von(otto,walter). @@ -3045,9 +3045,9 @@ Klauseln mit gleichem Kopfprädikat | Prozedur-varianten Klauselkopf | Prozedurkopf Klauselkörper | Prozedurrumpf -Die Gratwanderung zwischen Wünschenswertem und technisch Machbarem erfordert mitunter „Prozedurales Mitdenken“, um +Die Gratwanderung zwischen Wünschenswertem und technisch Machbarem erfordert mitunter "Prozedurales Mitdenken", um 1. eine gewünschte Reihenfolge konstruktiver Lösungen zu erzwingen, -2. nicht terminierende (aber – deklarativ, d.h. logisch interpretiert - völlig korrekte) Programme zu vermeiden, +2. nicht terminierende (aber - deklarativ, d.h. logisch interpretiert - völlig korrekte) Programme zu vermeiden, 3. seiteneffektbehaftete Prädikate sinnvoll einzusetzen, 4. (laufzeit-) effizienter zu programmieren und 5. das Suchverfahren gezielt zu manipulieren. @@ -3112,7 +3112,7 @@ Listen als kompakte Wissensrepräsentation: ein bekanntes Beispiel (BSP5.PRO) **Rekursion** in der Logischen Programmierung Eine Prozedur heißt (direkt) rekursiv, wenn in mindestens einem der Klauselkörper ihrer Klauseln ein erneuter Aufruf des Kopfprädikates erfolgt. -Ist der Selbstaufruf die letzte Atomformel des Klauselkörpers der letzten Klausel dieser Prozedur - bzw. wird er es durch vorheriges „Abschneiden“ nachfolgender +Ist der Selbstaufruf die letzte Atomformel des Klauselkörpers der letzten Klausel dieser Prozedur - bzw. wird er es durch vorheriges "Abschneiden" nachfolgender Klauseln mit dem Prädikat $!/0$ - , so spricht man von Rechtsrekursion ; anderenfalls von Linksrekursion. Eine Prozedur heißt indirekt rekursiv, wenn bei der Abarbeitung ihres Aufrufes ein erneuter Aufruf derselben Prozedur erfolgt. @@ -3150,3 +3150,375 @@ goal 1. Zwei nichtleere Listen $[K_1|R_1]$ und $[K_2|R_2]$ sind miteinander unifizierbar, wenn ihre Köpfe ($K_1$ und $K_2$) und ihre Restlisten ($R_1$ und $R_2$) jeweils miteinander unifizierbar sind. 3. Eine Liste $L$ und eine Variable $X$ sind miteinander unifizierbar, wenn die Variable selbst nicht in der Liste enthalten ist. Die Variable $X$ wird bei erfolgreicher Unifikation mit der Liste $L$ instanziert: $X:=L$. + +**Differenzlisten:** eine intuitive Erklärung +Eine Differenzliste $L_1 - L_2$ besteht aus zwei Listen $L_1$ und $L_2$ und wird im allgemeinen als $[L_1,L_2]$ oder (bei vorheriger Definition eines pre- bzw. infix notierten Funktionssymbols +-/2) als $-(L_1,L_2)$ bzw. $L_1-L_2$ notiert. + +Sie wird (vom Programmierer, nicht vom PROLOG-System!) als eine Liste interpretiert, deren Elemente sich aus denen von $L_1$ abzüglich derer von $L_2$ ergeben. Differenzlisten verwendet man typischerweise, wenn häufig Operationen am Ende von Listen vorzunehmen sind. + +Eine Definition +1. Die Differenz aus einer leeren Liste und einer (beliebigen) Liste ist die leere Liste: $[] - L = []$ +2. Die Differenz aus einer Liste $[E|R]$ und der Liste $L$, welche $E$ enthält, ist die Liste $D$, +wenn die Differenz aus $R$ und $L$ (abzügl. $E$) die Liste $D$ ist: $[E|R]-L = D$, wenn $E\in L$ und $R-(L-[E]) = D$ +3. Die Differenz aus einer Liste $[E|R]$ und einer Liste $L$, welche $E$ nicht enthält, ist die Liste $[E|D]$, wenn die Differenz aus $R$ und $L$ die Liste $D$ ist: $[E|R] - L = [E|D]$, wenn $E\in L$ und $R-L=D$ + +Differenzlisten: Ein Interpreter $interpret(Differenzliste,Interpretation)$ (BSP6.PRO) +1. $interpret([[],_],[]).$ +2. $interpret([[E|R],L] , D ) :- loesche(E , L, L1),! , interpret( [ R , L1 ] , D ).$ +3. $interpret([[E|R],L] , [E|D] ) :- interpret([R,L],D).$ +4. $loesche(E, [E|R], R) :-!.$ +5. $loesche(E, [K|R], [K|L]) :- loesche(E,R,L).$ + +### Prolog-Fallen +#### Nicht terminierende Programme +Ursache: "ungeschickt" formulierte (direkte oder indirekte) Rekursion + +##### Alternierende Zielklauseln +Ein aktuelles Ziel wiederholt sich und die Suche nach einer Folge von Resolutionsschritten endet nie: +1. $liegt_auf(X,Y) :- liegt_unter(Y,X).$ +2. $liegt_unter(X,Y) :- liegt_auf(Y,X).$ +- $?- liegt_auf( skript, pult ).$ +- logisch korrekte Antwort: nein +- tatsächliche Antwort: keine +Logische Programmierung + +oder die Suche nach Resolutionsschritten endet mit einem Überlauf des Backtrack-Kellers: (BSP8.PRO) +1. $liegt_auf(X,Y) :- liegt_unter(Y,X).$ +2. $liegt_auf( skript , pult ).$ +3. $liegt_unter(X,Y) :- liegt_auf(Y,X).$ +- $?- liegt_auf( skript , pult ).$ +- logisch korrekte Antwort: ja +- tatsächliche Antwort: keine + +##### Expandierende Zielklauseln +Das erste Teilziel wird in jeden Resolutionsschritt durch mehrere neue Teilziele ersetzt; die Suche endet mit einem Speicherüberlauf: (BSP9.PRO) +1. $liegt_auf( notebook , pult ).$ +2. $liegt_auf( skript , notebook ).$ +3. $liegt_auf(X,Y) :- liegt_auf(X,Z), liegt_auf(Z,Y).$ +- $?- liegt_auf( handy , skript ).$ +- logisch korrekte Antwort: nein +- tatsächliche Antwort: keine + +Auch dieses Beispiel lässt sich so erweitern, dass die Hypothese offensichtlich aus der Wissensbasis folgt, die Umsetzung der Resolutionsmethode aber die Vollständigkeit zerstört: +1. $liegt_auf( notebook , pult ).$ +2. $liegt_auf( skript , notebook ).$ +3. $liegt_auf(X,Y) :- liegt_auf(X,Z), liegt_auf(Z,Y).$ +4. $liegt_auf( handy , skript ).$ +- $?- liegt_auf( handy , pult ).$ +- logisch korrekte Antwort: ja +- tatsächliche Antwort: keine + +Auch dieses Beispiel zeigt, dass das Suchverfahren "Tiefensuche mit Backtrack" die Vollständigkeit des Inferenzverfahrens zerstört. + +#### Metalogische Prädikate und konstruktive Lösungen +Das Prädikat $not/1$ hat eine Aussage als Argument und ist somit eine Aussage über eine Aussage, also metalogisch. +I.allg. ist $not/1$ vordefiniert, kann aber mit Hilfe von $call/1$ definiert werden. $call/1$ hat Erfolg, wenn sein Argument - als Ziel interpretiert - Erfolg hat. + +Beispiel (BSP10.PRO): +1. $fleissig(horst).$ +2. $fleissig(martin).$ +3. $faul(X) :- not( fleissig(X) ).$ +4. $not(X) :- call(X), !, fail.$ +5. $not( _ ).$ +- $?- faul(horst).$ Antwort: nein +- $?- faul(alex).$ Antwort: ja +- $?- faul(Wer).$ Antwort: nein + +Widerspruch ... und Beweis der Unvollständigkeit durch Metalogik + +### Typische Problemklassen für die Anwendung der Logischen Programmierung +#### Rekursive Problemlösungsstrategien +> Botschaft 1 +> Man muss ein Problem nicht in allen Ebenen überblicken, um eine Lösungsverfahren zu programmieren. Es genügt die Einsicht, +> 1. wie man aus der Lösung eines einfacheren Problems die Lösung des präsenten Problems macht und +> 2. wie es im Trivialfall zu lösen ist. + +**Türme von Hanoi** +Es sind N Scheiben von der linken Säule auf die mittlere Säule zu transportieren, wobei die rechte Säule als Zwischenablage genutzt wird. Regeln: +1. Es darf jeweils nur eine Scheibe transportiert werden. +2. Die Scheiben müssen mit fallendem Durchmesser übereinander abgelegt werden. + +(doppelt) rekursive Lösungsstrategie: +- $N = 0:$ Das Problem ist gelöst. +- $N > 0:$ + 1. Man löse das Problem für N-Scheiben, die von der Start-Säule zur Hilfs-Säule zu transportieren sind. + 2. Man lege eine Scheibe von der Start- zur Ziel-Säule. + 3. Man löse das Problem für N-Scheiben, die von der Hilfs-Säule zur Ziel-Säule zu transportieren sind. + +Prädikate +- $hanoi(N)$ löst das Problem für N Scheiben +- $verlege(N,Start,Ziel,Hilf)$ verlegt N Scheiben von Start nach Ziel unter Nutzung von Hilf als Ablage + +Die Regeln zur Kodierung der Strategie (BSP11.PRO) +- $hanoi( N ) :- verlege( N , s1 , s2 , s3 ).$ +- $verlege( 0 , _ , _ , _ ).$ +- $verlege( N , S , Z , H ) :-$ + - $N1 = N - 1,$ + - $verlege( N1 , S , H , Z ),$ + - $write("Scheibe von ", S," nach ", Z),$ + - $verlege( N1 , H , Z , S ).$ + +#### Sprachverarbeitung mit PROLOG +> Botschaft 2 +> Wann immer man Objekte mit Mustern vergleicht, z.B. +> 1. eine Struktur durch "Auflegen von Schablonen" identifiziert, +> 2. Gemeinsamkeiten mehrerer Objekte identifiziert, d.h. "eine Schablone entwirft" oder +> 3. "gemeinsame Beispiele für mehrere Schablonen" sucht, +> mache man sich den Unifikations-Mechanismus zu nutzen. + +- Eine kontextfreie Grammatik (Chomsky-Typ 2) besteht aus + 1. einem Alphabet A, welches die terminalen (satzbildenden) Symbole enthält + 2. einer Menge nichtterminaler (satzbeschreibender) Symbole N (= Vokabular abzüglich des Alphabets: $N = V \backslash A$) + 3. einer Menge von Ableitungsregeln $R\subseteq N\times (N\cup A)^*$ + 4. dem Satzsymbol $S\in N$ +- ... und in PROLOG repräsentiert werden durch + 1. 1-elementige Listen, welche zu satzbildenden Listen komponiert werden: $[der],[tisch],[liegt],...$ + 2. Namen, d.h. mit kleinem Buchstaben beginnende Zeichenfolgen: $nebensatz,subjekt,attribut,...$ + 3. PROLOG-Regeln mit $l\in N$ im Kopf und $r\in(N\cup A)^*$ im Körper + 4. einen reservierten Namen: $satz$ + +Ein Ableitungsbaum beschreibt die grammatische Struktur eines Satzes. Seine Wurzel ist das Satzsymbol, seine Blätter in Hauptreihenfolge bilden den Satz. +![](Assets/Logik-ableitungsbaum-beispiel.png) + +1. Alphabet $ministerium, rektorat, problem, das, loest, ignoriert, verschaerft$ +2. nichtterminale Symbole $satz, subjekt, substantiv, artikel, praedikat,objekt$ +3. Ableitungsregeln (in BACKUS-NAUR-Form) + - $satz ::= subjekt praedikat objekt$ + - $subjekt ::= artikel substantiv$ + - $objekt ::= artikel substantiv$ + - $substantiv ::= ministerium | rektorat | problem$ + - $artikel ::= das$ + - $praedikat ::= loest | ignoriert | verschaerft$ +4. Satzsymbol $satz$ + +Verketten einer Liste von Listen +``` +% die Liste ist leer +verkette( [ ] , [ ] ) . + +% das erste Element ist eine leere Liste +verkette( [ [ ] | Rest ] , L ) :- + verkette( Rest , L ). + +% das erste Element ist eine nichtleere Liste +verkette([ [K | R ] | Rest ] , [ K | L ] ) :- + verkette( [ R | Rest ] , L ).4 +``` + +#### Die "Generate - and - Test" Strategie +> Botschaft 3 +> Es ist mitunter leichter (oder überhaupt erst möglich), für komplexe Probleme +> 1. eine potentielle Lösung zu "erraten" und dazu +> 2. ein Verfahren zu entwickeln, welches diese Lösung auf Korrektheit testet, +> als zielgerichtet die korrekte Lösung zu entwerfen. Hierbei kann man den Backtrack-Mechanismus nutzen. + +Strategie: Ein Prädikat $moegliche_loesung(L)$ generiert eine potentielle Lösung, welche von einem Prädikat $korrekte_loesung(L)$ geprüft wird: +- Besteht $L$ diesen Korrektheitstest, ist eine Lösung gefunden. +- Fällt $L$ bei diesem Korrektheitstest durch, wird mit Backtrack das Prädikat $moegliche_loesung(L)$ um eine alternative potentielle Lösung ersucht. +(vgl.: Lösen NP-vollständiger Probleme, Entscheidung von Erfüllbarkeit) + +ein Beispiel: konfliktfreie Anordnung von $N$ Damen auf einem $N\times N$ Schachbrett (BSP13.PRO) +- eine Variante: Liste strukturierter Terme + - $[dame(Zeile,Spalte),...,dame(Zeile,Spalte)]$ + - $[dame(1,2), dame(2,4), dame(3,1), dame(4,3) ]$ +- noch eine Variante: Liste von Listen + - $[[Zeile, Spalte] , ... , [Zeile,Spalte] ]$ + - $[ [1,2] , [2,4] , [3,1] , [4,3] ]$ +- ... und noch eine (in die Wissensdarstellung etwas "natürliche" Intelligenz investierende, den Problemraum enorm einschränkende) Variante: Liste der Spaltenindizes + - $[ Spalte_zu_Zeile_1, ..., Spalte_zu_Zeile_N ]$ + - $[ 2, 4, 1, 3 ]$ + +#### Heuristische Problemlösungsmethoden +> Botschaft 4 +> Heuristiken sind +> 1. eine Chance, auch solche Probleme einer Lösung zuzuführen, für die man keinen (determinierten) Lösungsalgorithmus kennt und +> 2. das klassische Einsatzgebiet zahlreicher KI-Tools - auch der Logischen Programmierung. + +Was ist eine Heuristik? Worin unterscheidet sich eine heuristische Problemlösungsmethode von einem Lösungsalgorithmus? + +Heuristiken bewerten die Erfolgsaussichten alternativer Problemlösungsschritte. Eine solche Bewertung kann sich z.B. ausdrücken in +- einer quantitativen Abschätzung der "Entfernung" zum gewünschten Ziel oder der "Kosten" für das Erreichen des Ziels, +- einer quantitativen Abschätzung des Nutzens und/oder der Kosten der alternativen nächsten Schritte, +- eine Vorschrift zur Rangordnung der Anwendung alternativer Schritte, z.B. durch Prioritäten oder gemäß einer sequenziell abzuarbeitenden Checkliste. + +Ein Beispiel: Das Milchgeschäft meiner Großeltern in den 40er Jahren +- Der Milchhof liefert Milch in großen Kannen. +- Kunden können Milch nur in kleinen Mengen kaufen. +- Es gibt nur 2 Sorten geeichter Schöpfgefäße; sie fassen 0.75 Liter bzw. 1.25 Liter. +- Eine Kundin wünscht einen Liter Milch. +1. Wenn das große Gefäß leer ist, dann fülle es. +2. Wenn das kleine Gefäß voll ist, dann leere es. +3. Wenn beides nicht zutrifft, dann schütte so viel wie möglich vom großen in das kleine Gefäß. + +Prädikat $miss_ab(VolGr, VolKl, Ziel, InhGr, InhKl)$ mit +- VolGr - Volumen des großen Gefäßes +- VolKl - Volumen des kleinen Gefäßes +- Ziel - die abzumessende (Ziel-) Menge +- InhGr - der aktuelle Inhalt im großen Gefäß +- InhKl - der aktuelle Inhalt im kleinen Gefäß + +Beispiel-Problem: $?- miss_ab( 1.25 , 0.75 , 1 , 0 , 0 )4$ + +#### Pfadsuche in gerichteten Graphen +> Botschaft 5 +> 1. Für die systematische Suche eines Pfades kann der Suchprozess einer Folge von Resolutionsschritten genutzt werden. Man muss den Suchprozess nicht selbst programmieren. +> 2. Für eine heuristische Suche eines Pfades gilt Botschaft 4: Sie ist das klassische Einsatzgebiet zahlreicher KI-Tools - auch der Logischen Programmierung. + +Anwendungen +- Handlungsplanung, z.B. + - Suche einer Folge von Bearbeitungsschritten für ein Produkt, eine Dienstleistung, einen "Bürokratischen Vorgang" + - Suche eines optimalen Transportweges in einem Netzwerk von Straßen-, Bahn-, Flugverbindungen +- Programmsynthese = Handlungsplanung mit ... + - ... Schnittstellen für die Datenübergabe zwischen "Handlungsschritten" (= Prozeduraufrufen) und + - ... einem hierarchischen Prozedurkonzept, welches die Konfigurierung von "Programmbausteinen" auf mehreren Hierarchie-Ebenen + +Ein Beispiel: Suche einer zeitoptimalen Flugverbindung (BSP15.PRO) +- Repräsentation als Faktenbasis $verbindung(Start,Zeit1,Ziel,Zeit2,Tag).$ +- Start - Ort des Starts +- Zeit1 - Zeit des Starts +- Ziel - Ort der Landung +- Zeit2 - Zeit der Landung +- Tag - 0, falls Zeit1 und Zeit2 am gleichen Tag und 1 ansonsten +- möglich: + - $verbindung(fra,z(11,45),ptb,z(21,0),0).$ + - $verbindung(fra,z(11,15),atl,z(21,25),0).$ + - $verbindung(ptb,z(24,0),orl,z(2,14),1).$ + - $verbindung(atl,z(23,30),orl,z(0,54),1).$ + +In einer dynamischen Wissensbasis wird die bislang günstigste Verbindung in Form eines Faktes $guenstigste([ v(Von,Zeit1,Nach,Zeit2,Tag), ... ], Ankunftszeit, Tag ).$ festgehalten und mit den eingebauten Prädikaten $assert()$ - zum Einfügen des Faktes - und $retract ()$ - zum Entfernen des Faktes - bei Bedarf aktualisiert. +Zum Beispiel $guenstigste([v(fra,z(11,45),ptb,z(21,00),0),v(ptb,z(24,0),orl,z(2,14),1)],z(2,14),1).$ erklärt den Weg über Pittsburgh zum bislang günstigsten gefundenen Weg. + +#### "Logeleien" als Prolog-Wissensbasen +> Botschaft 6 +> 1. "Logeleien" sind oft Aussagen über Belegungen von Variablen mit endlichem Wertebereich, ergänzt um eine Frage zu einem nicht explizit gegebenen Wert. +> 2. Dabei handelt es sich um Grunde um eine Deduktionsaufgabe mit einer Hypothese zu einem mutmaßlichen Wert der gesuchten Variablen. Deshalb ist es oft auch mit dem "Deduktionstool" Prolog lösbar, denn Prolog tut im Grunde nichts anderes als ein ziel-gerichtetes "Durchprobieren" legitimer Deduktionsschritte im "Generate - and - Test" - Verfahren. + +Beispiel das "Zebra-Rätsel"(BSP16.PRO): +1. Es gibt fünf Häuser. +2. Der Engländer wohnt im roten Haus. +3. Der Spanier hat einen Hund. +4. Kaffee wird im grünen Haus getrunken. +5. Der Ukrainer trinkt Tee. +6. Das grüne Haus ist (vom Betrachter aus gesehen) direkt rechts vom weißen Haus. +7. Der Raucher von Atem-Gold-Zigaretten hält Schnecken als Haustiere. +8. Die Zigaretten der Marke Kools werden im gelben Haus geraucht. +9. Milch wird im mittleren Haus getrunken. +10. Der Norweger wohnt im ersten Haus. +11. Der Mann, der Chesterfields raucht, wohnt neben dem Mann mit dem Fuchs. +12. Die Marke Kools wird geraucht im Haus neben dem Haus mit dem Pferd. +13. Der Lucky-Strike-Raucher trinkt am liebsten Orangensaft. +14. Der Japaner raucht Zigaretten der Marke Parliament. +15. Der Norweger wohnt neben dem blauen Haus. + +Jedes Haus ist in einer anderen Farbe gestrichen und jeder Bewohner hat eine andere Nationalität, besitzt ein anderes Haustier, trinkt ein von den anderen Bewohnern verschiedenes Getränk und raucht eine von den anderen Bewohnern verschiedene Zigarettensorte. Fragen: +- Wer trinkt Wasser? +- Wem gehört das Zebra? +``` +loesung(WT, ZB) :- + haeuser(H), nationen(N), getraenke(G), tiere(T), zigaretten(Z),aussagentest(H,N,G,T,Z), !, wassertrinker(N,G,WT), zebrabesitzer(N,T,ZB). +tiere(X) :- permutation([fuchs, hund, schnecke, pferd, zebra],X). +nationen([norweger|R]) :- permmutation([englaender, spanier, ukrainer, japaner], R). % erfüllt damit Aussage 10 +getraenke(X) :- permutation([kaffee, tee, milch, osaft, wasser], X), a9(X). % erfüllt damit Aussage 9 +zigaretten(X) :- permmutation([atemgold,kools,chesterfield, luckystrike, parliament], X). +haeuser(X) :- permutation([rot, gruen, weiss, gelb, blau], X), a6(X). +% parmutation/2, fuege_ein/3: siehe BSP13-PRO +wassertrinker([WT| _ ], [wasser| _ ], WT ) :- !. +wassertrinker([ _ |R1], [ _ |R2],WT) :- wassertrinker(R1, R2, WT). +zebrabesitzer([ZB| _ ], [zebra| _ ], ZB) :- !. +zebrabesitzer([ _ |R1], [ _ |R2],ZB) :- zebrabesitzer(R1, R2, ZB). +aussagentest(H,N,G,T,Z) :- + a2(H,N), a3(N,T), a4(H,G), a5(N,G), a7(Z,T), a8(H,Z), a11(Z,T), a12(Z,T),a13(Z,G), a14(N,Z), a15(H,N). + +a2([rot| _ ], [englaender| _ ]) :- ! +.a2([ _ |R1], [ _ |R2]) :- a2(R1, R2). +a3([spanier| _ ], [hund| _ ]) :- !. +a3([ _ |R1], [ _ |R2]) :- a3(R1, R2). +a4([gruen| _ ], [kaffee| _ ]) :- !. +a4([ _ |R1], [ _ |R2]) :- a4(R1, R2). +a5([ukrainer| _ ], [tee| _ ]) :- !. +a5([ _ |R1], [ _ |R2]) :- a5(R1, R2). +a6([weiss, gruen| _ ]) :- !. +a6([weiss| _ ]) :- !, fail.a6([ _ |R]) :- a6(R). +a7([atemgold| _ ], [schnecke| _ ]) :- !. +a7([ _ |R1], [ _ |R2]) :- a7(R1, R2). +a8([gelb| _ ], [kools| _ ]) :- !. +a8([ _ |R1], [ _ |R2]) :- a8(R1, R2). +a9([ _ , _ , milch, _ , _ ]). +a11([chesterfield| _ ], [ _ ,fuchs| _ ]) :-!. +a11([ _ , chesterfield| _ ], [fuchs| _ ]) :- !. +a11([ _ |R1], [ _ |R2]) :- a11(R1, R2). +a12([kools| _ ], [ _ , pferd| _ ]) :- !. +a12([ _ , kools| _ ], [pferd| _ ] ) :- !. +a12([ _ |R1], [ _ |R2]) :- a12(R1, R2). +a13([luckystrike| _ ], [osaft| _ ]) :- !. +a13([ _ |R1], [ _ |R2]) :- a13(R1, R2). +a14([japaner| _ ], [parliament| _ ]) :- !. +a14([ _ |R1], [ _ |R2]) :- a14(R1, R2). +%a15([blau| _ ], [ _, norweger| _ ]) :- !. +a15([ _ , blau| _ ], [norweger| _ ]) :- !. +%a15([ _ |R1], [ _ |R2]) :- a15(R1, R2). + +?- loesung(Wassertrinker, Zebrabesitzer). +``` + +Beispiel SUDOKU (BSP17.PRO): +- Liste 9-elementliger Listen, die (von links nach rechts) die Zeilen (von oben nach unten)repräsentieren +- Elemente einer jeden eine Zeile repräsentierenden Liste: + - Ziffer, falls dort im gegebenen Sudoku eine Ziffer steht + - Anonyme Variable andernfalls + +#### Tools für die formale Logik +> Botschaft 7 +> Auch in der formalen Logik gibt es Deduktionsaufgaben, bei der Variablenbelegungen gesucht sind, welche eine Aussage wahr machen: +> 1. Meist geschieht das durch systematische Auswertung der Aussage, wozu das Suchverfahren von Prolog genutzt werden kann. +> 2. Auch hier geht es oft um gesuchte Werte für Variablen. Deshalb ist es oft auch mit dem "Deduktionstool" Prolog lösbar, denn Prolog tut im Grunde nichts anderes als ein ziel-gerichtetes "Durchprobieren" legitimer Deduktionsschritte im "Generate - and - Test" - Verfahren. + +Repräsentation von Aussagen als PROLOG-Term: +- true, false: atom(true), atom(false) +- $A1\wedge A2$: und(A1,A2) +- $A1\vee A2$: oder(A1,A2) +- $\lnot A$: nicht(A) +- $A1\rightarrow A2$: wenndann(A1,A2) +- $A1\leftarrow A2$: dannwenn(A1,A2) +- $A1\leftrightarrow A2$: gdw(A1,A2) + +Erfüllbarkeitstest: +- $?- erfuellbar(gdw(wenndann(nicht(oder(atom(false),atom(X))),atom(Y)), atom(Z))).$ +- X=true, Y=_, Z=true ; steht für 2 Modelle (eines mit Y = true und eines mit Y = false) +- X=false, Y=true, Z=true + +Ketten von Konjunktionen und Disjunktionen als PROLOG-Listen: +- $A1\wedge A2\wedge ... \wedge An$: und verkettung([A1,A2, ..., An]) +- $A1\vee A2\vee ...\vee An$: oder verkettung([A1,A2, ..., An]) + +Erfüllbarkeitstest: +- $?- erfuellbar(undverkettung([true,X,Y,true]))$ +- X = true Y = true +- $?- erfuellbar(oderverkettung([false,X,Y,false]))$ +- X = true Y = _ +- X = _ Y = true + +Repräsentation von Termen als PROLOG-Term: +- Wert: atom() +- $A1\wedge A2$: und(A1,A2) +- $A1\vee A2$: oder(A1,A2) +- $\lnot A$: nicht(A) +- $A1\rightarrow A2$: wenndann(A1,A2) +- $A1\leftarrow A2$: dannwenn(A1,A2) +- $A1\leftrightarrow A2$: gdw(A1,A2) +- $A1\wedge A2\wedge ... \wedge An$: und verkettung([A1,A2, ..., An]) +- $A1\vee A2\vee ...\vee An$: oder verkettung([A1,A2, ..., An]) + +Termauswertung: +- $?- hat_wert(und(atom(0.5),oder(atom(0.7),atom(0.3))),X).$ +- X=0.5 + +Termauswertung unter Vorgabe des Wertebereiches: +- $?- hat_wert([0,0.3, 0.5, 0.7, 1], und(atom(X),oder(atom(0.5),atom(0.7))),Wert).$ +- X=0, Wert=0 +- X=0.3, Wert=0.3 +- X=0.5, Wert=0.5 +- X=0.7, Wert=0.7 +- X=1, Wert=0.7 +