date-created: 2024-06-25 12:27:20 date-modified: 2024-06-25 01:03:43
Rekursive Funktionen
anchored to 112.00_anchor_overview proceeds from 112.21_rekursive_funktionen also from 112.20_turing_aequivalence
Overview
Wir haben zuvor die Berechnungsmodelle der while und goto Programme kennengelernt, welche wir als Turing-äquivalent bewiesen haben. Ferner haben wir auch gesehen, dass selbst strikt begrenzt ist!
Wir haben bis dato aber nur endliche Schleifen bei s betrachtet und somit eine relativ einfach Limitierung festgelegt.
Warum brauchen wir dann überhaupt unendliche Schleifen, bzw. die Möglichkeit einer TM nicht zu halten? Wir können ja einfach anch gewisser Zeit aufhören und somit das Halteproblem verhindern
Gibt es nicht-triviale Funktionen, die nicht mit berechenbar sind?!
Review | Hilberts Programm
[!Tip] Finitismus, zweites Problem von Hilbert
Frage: Sind die arithmetischen Axiome widerspruchsfrei?
Um Widersprüche zu vermeiden: Lässt sich mit finiten Methoden - also einem Formalismus, der nur endliche Mengen verwendet - die Widerspruchsfreiheit der Mathematik beweisen?
Diese Frage zielt spezifisch auf Russels Paradox ab, weil bei diesem erkennbar war, dass es einen Widerspruch in seiner Struktur erzeug(en)t kann.
Dafür wurde versucht das Ganze mit rekursiven Funktionen finit zu formalisieren.
–> historisch sind wurden sie etwas vor Turingmaschinen konzipiert ( man hat aber später den Bogen zwischen beiden gespannt und kann einsehen, dass die gleich sind bzw das gleiche Problem haben)
[!Attention] Was wir herausfinden werden
Wir werden sehen, dass rekursive Funktionen, ähnlich wie eine FA oder beschränkt sind!. –> Es gibt Funktionen, die nicht rekursiv berechenbar sind!
Dafür muss man zuerst Funktionen ähnlich zu Turingmaschinen “offen / transfinit” abschließen und die entsprechende Definition tätigen
Rekursive Funktionen
[!Req] -stellige Funktionen
Wir werden folgende Funktionen betrachten: die wir als -stellige Funktionen bezeichnen
hierbei ist immer !
(Kontext: Rozsa Peter (1905, Budapest - 1977) wurde in Ungarn vor WWWII geborgen, war Jüdin, Frau und somit durch die Situation stark während des Krieges und den Umständen beeinträchtigt. Dennoch hat sie viel in der Mathematik umgesetzt #feminism !)
[!Definition] rekursve Funktionen
Die Menge der primitiv rekursiven Funktionen wollen wir folgend induktiv definieren:
wir benötigen hierfür 5 Pfeiler, welche wir definieren und dadurch rekursive Funktionen beschreiben wollen:
Welche funf Punkte definieren wir? #card
Die Konstante Funktion (-stellige) ist primitv rekursiv
Die peano’sche Nachfolgerfunktion mit ist primitiv rekursiv ( kann die natürlichen Zahlen auflisten!)
Die Projektionsfunktion , ist ebenfalls primitiv rekursiv ( die, die zu einem Tupel von Zahlen, dann den Nachfolger zurückgibt)
Die Komposition der primitiven Funktione ist weiterhin auch primitiv rekursiv! Seien und ferner primitiv rekursive Funktionen, dann sind es auch die Komposition:
Primitive Rekursion als Konstrukt werden auch primitiv rekursiv sein. Seien und sind auch primitive rekursiv.
Dann ist folgend auch die Funktion primitiv rekursiv ist. Mit der stelligen Funktion erhalten wir dann zwei folgende Aussagen: ( In der Struktur )
Die Mu-Funktion ist in der Idee gleich der While-Schleife und genau der Turing-Maschine. Die Idee: Wir lassen laufen, bis der Parameter erreicht hat ( wir lassen die While-Schleife laufen, bis die Bedingung erfüllt wurde) oder ( wir lassen die TM rechnen bis sie anhält (oder nicht))
Das heißt also, um eine rekursive Funktion als For-Loop darzustellen, brauchen wir wieder eine konzeptuelle Idee, die am Ende eine While-Schleife wäre bzw in der Konstruktion dieser entspricht!
Lambda-Kalkül ist Turing-äquivalent
Wir wollen uns jetzt anschauen, warum niemand zeigt, dass das -Kalkül turing-äquivalent ist (weil es schwierig ist).
Definition Lambda-Kalkül
[!Definition]
Sei eine abzählbare Menge an Variablen - eine Teilmenge daraus kann im Vorhinein als Konstanten definiert werden.
Wir definieren die -Terme - oder einfach Terme - folglich induktiv:
welche drei Schritte brauchen wir? #card
- Jede Variable ist ein Term
- Sind Terme, dann ist auch die Applikation einen Term
- Wenn ein Term ist und eine Variable, dann ist die Abstraktion auch ein Term.
Es gibt hierfür noch Konventionen: Konvention Linksassoziation:
Die Notation steht für die folgen Applikation
bedeutet, dass der Wert durch den Term in M gebunden wird ( in einem Programm, dann einfach die Anwendung einer Variable, die wir als Parameter in einer Funktion abgeben)
Konversion
Die Rechenregeln des -Kalküls sind Überführungen von einem Term in einen anderen, die die gleiche Semantik haben.
Dafür können wir zwei Konversionen betrachten.
[!Definition] Konversionen
Es gibt zwei Konversionen, die wir betrachten:
was besagen beide? #card
Die -Konversion (die einfachere) beschreibt folgende Umformung / Vereinfachung: Einfacher also: “Freie Variablen können beliebig umbenannt werden”
Die -Konversion (welche so das wichtigste des Theorems ist!) beschreibt die Applikation von Termen:
- Also keine freie Variable in darf durch die Substitution in gebunden werden
Die -Konversion ist die “Anwendung einer (anonymen!) Funktion”, ist dabei der Funktionskörper, ihr Argument und der Wert des Argumentes!
Ein Term ist ferner dann in der -Normalform, wenn es keine -Konversion mehr gibt, die auf angewendet werden können!
Wir nennen noch einen Kombinator, wenn er keine freien Variablen enthält ( also er nimmt meist Werte und kann sie entsprechend wieder darstellen - ohne viel zu bearbeiten/)
[!Tip]
Es ist nicht entscheidbar, ob ein gegebener Term in -Normalform ist. Es ist auch nicht entscheidbar, ob ein gegebener Termin eine Normalform hat oder nicht
(Siehe church, 1965, Theorem XIV, XV)
Wir wollen dabei noch einige grundlegende beispiele für Terme betrachten, die wir später benötigen werden:
Grundlegende Beispiele | -Kalkül
[!Bsp] Identität
Können wir folgend darstellen: ist ein Kombinator mit der Eigenschaft , also bei einer Eingabe eines Termes wird sie am Ende nur den Termin zurückgeben@
[!Defiition] Konstanten-Kombinator
Wir bezeichnen jetzt den Kombinator als den Kombinator, der eine Konstante ausgeben kann.
Also unter jeder Eingabe werden wir einfach eine bestimmte Konstante zurückgeben!
Also für alle Terme
Wir wollen noch Booleans einbringen:
[!Req] Booleans mit -Kalkül
Man kann den Kombinator auch verwendet, um logische Werte oder darzustellen:
- ist dann True
- für False repräsentieren wir mit
Denn und ferner
Man kann mit dem p