vollständigkeit, turingmaschinen
All checks were successful
Compile exercises / compile (push) Successful in 1m2s

This commit is contained in:
Maximilian Keßler 2024-01-04 10:10:28 +01:00
parent 8ffb5005a0
commit 0646cb3849
Signed by: max
GPG key ID: BCC5A619923C0BA5

View file

@ -13,6 +13,7 @@
\author{Merlin Carl\thanks{Mitschrift von Maximilian Keßler}} \author{Merlin Carl\thanks{Mitschrift von Maximilian Keßler}}
\def\shows{\leftadjoint} \def\shows{\leftadjoint}
\DeclareSimpleMathOperator{prim}
\begin{document} \begin{document}
\maketitle \maketitle
@ -202,5 +203,147 @@
also ist $\mathcal{B}$ inkonsistent, ein Widerspruch zu unserer Annahme. also ist $\mathcal{B}$ inkonsistent, ein Widerspruch zu unserer Annahme.
\end{proof} \end{proof}
\section{Der Unvollständigkeitssatz}
Wir wollen nun verstehen, wie man einfache Arithmetik
(d.h.~Rechnen mit natürlichen Zahlen) in Prädikatenlogik formulieren kann.
\begin{definition}
Sei $\mathcal{L}_A$ die Sprache mit Relationszeichen $=$, $<$, Funktionszeichen $+$, $\cdot $, sowie Konstantenzeichen $0$, $1$.
\end{definition}
\begin{example}
Wir können zum Beispiel folgende Übersetzungen treffen:
\begin{IEEEeqnarray*}{rCl}
\text{$a$ ist ein Teiler von $b$}
&\leftrightarrow&
\exists x : a \cdot x = b
\\
\text{$p$ ist keine Primzahl}
& \leftrightarrow &
\exists a\exists b\colon (a \neq 1 \land b \neq 1 \land a \cdot b = p)
\\
\text{$p$ ist eine Primzahl}
& \leftrightarrow &
\lnot (\exists a\exists b\colon a \neq 1 \land b \neq 1 \land a \cdot b = p)
\\
& \leftrightarrow &
\forall a \forall b\colon a \cdot b = p \to (a = 1 \lor b = 1)
\\
\text{Die Zahl \enquote{Zwei}}
& \leftrightarrow &
1 + 1
\end{IEEEeqnarray*}
Um uns Notation zu vereinfachen, führen wir $a \mid b$ sowie $\prim(p)$ mit den obigen Bedeutungen ein, ebenfalls können wir jede \emph{feste} natürliche Zahle als $1 + 1 + \dots b + 1$ kodieren.
Damit meinen wir nicht, dass wir die Sprache tatsächlich erweitern (um solche Relationssymbole), sondern einfach, dass man jede Vorkommnis von diesen Relationen rein formal durch ihre obige Langschreibweise ersetzen kann.
Jetzt lässt sich die (starke) Goldbach'sche Vermutung formulieren als
\[
\forall z ((z > 2 \land 2 \mid z) \to \exists a, b (z = a + b \land \prim(a) \land \prim(b)))
.
\]
Etwas schwieriger wird es, zu übersetzen, dass es unendlich viele Primzahlen gibt:
\[
\forall x \exists p (x < p \land \prim(p))
.
\]
Eigentlich steht hier eher etwas wie \enquote{Es gibt beliebig große Primzahlen},
allerdings ist das (in den natürlichen Zahlen) das gleiche Konzept.
\end{example}
\begin{definition}
Ein \vocab{Axiomensystem} ist eine Menge von Sätzen (Formeln).
\end{definition}
\begin{question}
Was sind wünschenswerte Eigenschaften eines Axiomensystems?
\end{question}
\begin{itemize}
\item \vocab{Widerspruchsfreiheit}, d.h.~es gibt keine Aussage $\varphi $, für die sowohl $\varphi $ als auch $\lnot \varphi $ bewiesen werden können
\item \vocab{Vollständigkeit}, d.h.~für jeden Satz $\varphi $ der Sprache gilt $A \shows \varphi $ oder $A \shows \lnot \varphi $.
\end{itemize}
\begin{remark}
Dieser Begriff der \emph{Vollständigkeit} ist ein anderer, wie wir ihn bereits gesehen haben.
Ein Kalkül kann vollständig sein, wenn $A \models \varphi \iff A \shows \varphi $,
Herleitungen also vollständig die semantische wahren Aussagen widerspiegeln.
Ein Axiomensystem kann vollständig sein, indem $A \shows \varphi \lor A \shows \lnot \varphi $ für jede Formel $\varphi $.
\end{remark}
\begin{remark}
Beide Eigenschaften für sich sind natürlich einzeln leicht realisierbar:
Das leere Axiomensystem ist natürliche widerspruchsfrei, denn man kann gar nichts ableiten, und widersprüchliche Axiomensysteme sind vollständig, weil man jede Aussage zeigen kann.
Es gibt auch widerspruchsfreie und vollständige Systeme,
allerdings können diese nicht über Arithmetik reden.
Das wird Inhalt von Gödels Unvollständigkeitssatz sein.
\end{remark}
\subsection{Turing-Maschinen}
Turing-Maschinen sind ein theoretisches Computermodell,
das von \textsc{Alan Turing} eingeführt wurde.
\begin{definition}
Eine \vocab{Turingmaschine} besteht aus einem (nach rechts hin)
unendlichen Speicherband, auf dem an jeder Position $0$ oder $1$ steht,
einem Schreib-/Lesekopf, der sich stets an einer Position findet.
Das Programm einer Turingmaschine besteht aus einer Liste an Zuständen,
wobei jeder Zustand in Abhängigkeit vom Wert des Bands am Lesekopf angibt:
\begin{itemize}
\item welchen Wert der Schreibkopf auf die aktuelle Position schreiben soll
\item in welche Richtung (links/rechts/stehen bleiben) sich der Schreibkopf als nächstes bewegt
\item was der nächste Programmzustand der Turingmaschine ist
\end{itemize}
Das Programm lässt sich also Beschreiben über eine Zustandsmenge $\mathcal{S}$
und eine Funktion
\[
\mathcal{S} \times \set{ 0,1 } \to \set{ 0,1 } \times \set{ \text{links}, \text{rechts}, \text{stehen bleiben} } \times (\mathcal{S} \cup \set{ \operatorname{end} } )
,
\]
wobei $\operatorname{end}$ beschreibt, dass das Programm terminiert hat.
Eine Turing-Maschine lässt sich ausgehend von einem Zustands des Speicherbands und einem Zustand $s \in \mathcal{S}$ sukzessive ausführen.
\end{definition}
Man könnte meinen, dass Turing-Maschinen nicht sehr viel können,
allerdings gilt:
\begin{proposition}[Church-Turing-These]
Jede Funktion auf endlichen Zeichenfolgen, die überhaupt berechenbar ist,
ist durch eine Turing-Maschine berechenbar.
\end{proposition}
\begin{remark}
Der Begriff \enquote{überhaupt berechenbar} ist hierbei natürlich mathematisch
unpräzise, und dementsprechend gibt es auch keinen formalen Beweis.
Wir meinen hiermit Funktionen, die ein idealisierter Mensch mit hinreichend viel
Zeit durch Ausführung eines Schemas berechnen kann.
Zum Beispiel lässt sich jede moderne Programmiersprache systematisch
in eine Turingmaschine übersetzen und es ist bis dato keine Funktion bekannt,
welche \emph{intuitiv berechenbar} ist, allerdings nicht von einer Turingmaschine.
\end{remark}
Die Church-Turing-These motiviert die folgende Definition:
\begin{definition}[Berechenbarkeit]
Eine Funktion heißt \vocab{berechenbar}, wenn eine Turing-Maschine gibt,
die sie berechnet, d.h.~eine Turing-Maschine, die bei Kodierung der Eingabe
auf dem Band und Ausführung der Maschine stets nach endlich vielen Schritten
terminiert und eine korrekte Ausgabe auf das Band schreibt.
\end{definition}
%\[
% \begin{tikzpicture}
% \draw (-0,0) grid (10,1);
% \end{tikzpicture}
%\]
\end{document} \end{document}