buk_notes/00.md
2025-07-28 17:18:13 +02:00

106 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Größenvergleiche zwischen Mengen
- $A \geq B \iff \exists f : A \to B \text{ mit } f \text{ surjektiv }$
- $A \leq B \iff \exists f : A \to B \text{ mit } f \text{ injektiv }$
- $A = B \iff \exists f : A \to B \text{ mit } f \text{ bijektiv }$
## Cantors Diagonalargument
## $\mathcal P(\mathbb N)$ ist überabzählbar, also $| \mathcal P(\mathbb N) | = | \mathbb R |$
# Berechenbarkeit
- Undefiniert (meist: hält nicht) = gibt keinen wert: $\perp$
- Nicht Berechenbar = gibt einen Wert aber keinen weg dorthin, wir wissen halt z.B. dass $x \in B$
- Partiell = mind. 1 eingabe undefiniert
- Nicht Berechenbar = mind. für 1 Eingabe ist die Ausgabe nicht berechenbar
# Turingmaschine
Gerne zeiger auf startposition zurückstellen
**Turing-Berechenbar** $\implies$ Berechenbar
Nach **Church-Turing-*These***: Berechenbar $\implies$ Turing-Berechenbar
**TM-Definition** immer aufschreiben: Septupel $(\text{Zustandsmenge}, \text{Eingabealphabet}, \text{Arbeitsalphabet}, \delta \text{funktion}, z_0, \square, \text{Akzeptierende Zustände})$
- die ersten 4 sind müde (EEEP) → 3× endlich, 4. ist partiell.
- $z_0 \in \text{Akzeptierende Zustände}$ ist valide, **Akzeptieren $\neq$ Halten**
- Anfangszustand des Bands besteht aus Eingabealphabet und Blanks, kann von TM auf ganzes Arbeitsalphabet erweitert werden
- Turing-Maschine **hält gdw. $\delta(\dots) = \perp$, also Undefiniert**
- Ausgabe steht meist auf Band, `bool` können aber auch als "liegt letzter zustand in Akzeptierenden Zuständen?" dargestellt werden
- $\delta : (\text{Zustandsmenge}, \text{Arbeitsalphabet}) \to (\text{Arbeitsalphabet}, \{ L, N, R \}, \text{Zustandsmenge})$ (Reihenfolge may be different, me didnt verify | TODO)
## Konfiguration
- Alphabets-Elemente links vom Zeiger + Aktueller Zustand + Elemente am und rechts vom Zeiger
+ bzw: Alphabets-Elemente links vom Zeiger + Aktueller Zustand + Zeigersymbol + Elemente rechts vom Zeiger
+ ignoriere blanks links/rechts vom "letzten" non-blank
## Gleichmächtige TMs
- Zweiband mit 1 oder 2 Zeiger(n)
- Nur Einseitig Unendlich
- Always-Moving (nur L und R, kein N)
- TM auf Eingabealphabet $\{ 0, 1 \}$
# Berechnungsmodelle
Primitiv-Rekursiv = LOOP < GOTO = WHILE = TM = µ-Rekursiv
## LOOP
Syntax:
- $x_i := x_j \{+,-\} c$ (NOTE: $x_i := x_j + 0$ $4-6=0$, d.h. **saturating subtraction bei LOOP, WHILE, und GOTO**)
- $P_1 ; P_2$
- $\text{LOOP } x_i \text{ DO } P \text{ END}$
- no $\text{IF}$
jedes LOOP-programm berechnet eine **totale** funktion, d.h. es gibt kein $\perp$ (LOOP $\implies$ total)
Konventionen:
- Variablen sind by default $0$
- Eingaben sind $x_1, x_2, \dots$
- Ausgabe ist $x_0$
## Primitiv Rekursiv
Definition:
- Nullfunktion $null(n) = 0$
- Nachfolgerfunktion $succ(n) = n + 1$
- Projektionen $id(n) = n, id_2(n,m) = m, \dots$
- Kompositionen $f(a, g(b))$ (ohne rekursion)
+ PR-Aufgebaute Funktionen $f(a, b, c) = g(i(a), j(b))$
- **Rekursive Aufrufe** sind möglich, aber **nur**: $f(a, b, c) = f(a-1, b, c)$ (für $a > 0$)
+ Dabei gibt es Basisfall $g(b, c)$ für $a = 0$ und Rekursionsfall $h(f(a-1, b, c), a-1, b, c)$
ES IST SO SKUFFED DEFINIERT, MACH IMMER! EIN LOOP PROGRAMM
## µ-Rekursiv
Zusatz zur Definition der Primitiv Rekursiven Funktionen:
$\mu f (a, b, c) = \min \{ n \vert f(n, a, b, c) = 0 \text{ und } f(m, a, b, c) \text{ definiert für alle } m < n \}$, \
d.h. probier alle $n \in \mathbb N_0$ in aufsteigender Reihenfolge bis $f(n, \dots) = 0$, dann return $n$, sonst keep searching. If $f(n, \dots) \neq 0$, dann ist $\mu f (\dots)$ undefiniert, also $\perp$
## WHILE / GOTO
WHILE ist wie LOOP, aber statt LOOP
mit $\text{WHILE } x_i \neq 0 \text{ DO } P \text{ END}$.
GOTO ist wie LOOP, aber statt LOOP
mit Sprüngen $\text{GOTO } M_i$ und $\text{IF } x_i = c \text{ THEN GOTO } M_i$, und der Stopanweisung $\text{HALT}$.
Man kann jedes WHILE-Programm mit in eines mit nur *einem* WHILE-Loop umschreiben, \
und jedes GOTO-Programm in eines mit nur einem *Rück*sprung umschreiben.
µ-Rekursive (= WHILE/GOTO) Funktionen sind *nicht immer* total, können aber total sein.
## Universelle TM
Es existieren Universelle TMs, Universelle WHILE- und GOTO-Programme, die jegliches WHILE-/GOTO-Programm ausführen können