„Primitiv-rekursive Funktion“ – Versionsunterschied
[ungesichtete Version] | [gesichtete Version] |
Bighil (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Link Markierungen: Mobile Bearbeitung Mobile Web-Bearbeitung Erweiterte mobile Bearbeitung |
||
(110 dazwischenliegende Versionen von 87 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
'''Primitiv-rekursive Funktionen''' sind Funktionen, die auf |
'''Primitiv-rekursive Funktionen''' sind [[Relation (Mathematik)#Übersicht über Funktionseigenschaften bei Relationen|totale Funktionen]], die aus einfachen Grundfunktionen (konstante 0-Funktion, Projektionen auf ein Argument und Nachfolgefunktion) durch Komposition und (primitive) [[Rekursion]] gebildet werden können. Die primitive Rekursion lässt sich auf [[Richard Dedekind]]s 126. Theorem in ''[[Was sind und was sollen die Zahlen?]]'' (1888) zurückführen. Die primitiv rekursive Arithmetik geht auf [[Thoralf Skolem]] (1923) zurück.<ref>[[Peter Schroeder-Heister]], Mathematische Logik II (Gödelsche Unvollständigkeitssätze), Skript, S. 39</ref> Der Begriff ''primitiv-rekursive Funktion'' wurde von der ungarischen Mathematikerin [[Rózsa Péter]] geprägt. Primitiv-rekursive Funktionen spielen in der [[Rekursionstheorie]], einem Teilgebiet der [[Theoretische Informatik|theoretischen Informatik]], eine Rolle. Sie treten im Zusammenhang mit der [[Explikation]] des [[Berechenbarkeit]]sbegriffs auf. |
||
Alle primitiv-rekursiven Funktionen sind im intuitiven Sinn berechenbar. Sie schöpfen aber nicht alle intuitiv berechenbaren Funktionen aus, Beispiele dafür sind die [[Ackermannfunktion]] und die [[Sudanfunktion]], welche beide berechenbar, aber nicht primitiv-rekursiv sind. Eine vollständige Erfassung des Berechenbarkeitsbegriffs gelingt erst durch die [[Μ-Rekursion|µ-rekursiven Funktionen]]. |
|||
==Eigenschaften== |
|||
Für primitiv-rekursive Funktionen ist es möglich, ein Komplexitätsmaß zu definieren, d. h., es kann die Dauer der Berechnung eines ihrer Funktionswerte vorab ermittelt werden. |
|||
Primitiv-rekursive Funktionen zeichnen sich durch eine gewisse Gutartigkeit aus. Insbesondere kann man vor der Berechnung eines Funktionswertes angeben, wie komplex diese Operation ist, d.h. auch wie lange diese Berechnung dauern wird. Lange Zeit hoffte man, dass sich jede mathematische Funktion und jedes Problem primitiv-rekursiv berechnen lässt. Diese Hoffnung wurde durch die [[Ackermannfunktion]] zerstört, die erste bekannte Funktion, die nicht primitiv-rekursiv berechenbar war. |
|||
Die Klasse |
Die Klasse der primitiv-rekursiven Funktionen und die der LOOP-berechenbaren (vgl. [[LOOP-Programm]]) Funktionen sind äquivalent. |
||
#konstante Funktion: <math>f_c^k \left( n_1, ..., n_k \right) := c</math>, <math>c \in \mathbb{N}</math> |
|||
#Projektion auf ein Argument: <math>\pi_i^k \left( n_1, ..., n_k \right) := n_i</math>, <math>1 \le i \le k</math> |
|||
#Nachfolgefunktion: <math>\nu \left( n \right) := n + 1</math> (auch Sukzessorfunktion genannt) |
|||
Aus diesen werden mit folgenden Operationen alle weiteren primitiv-rekursiven Funktionen gewonnen: |
|||
#Komposition: <math>f \left( n_1, ..., n_k \right) := g \left( h_1 \left( n_1, ..., n_k \right), ..., h_m \left( n_1, ..., n_k \right) \right)</math> falls <math>g, h_1, ..., h_m \in Pr</math> |
|||
#Primitive Rekursion: <math>f \left( 0, n_2, ..., n_k \right) := g \left( n_2, ..., n_k \right)</math>, <math>f \left( n_1 + 1, n_2, ..., n_k \right) := h \left( f \left( n_1, ..., n_k \right), n_1, ..., n_k \right)</math>, falls <math>h, g \in Pr</math> |
|||
== Definition == |
|||
Jede primitiv-rekursive Funktion ist LOOP-berechenbar (vgl. [[LOOP-Programm]]) und umgekehrt. |
|||
# Für ein beliebiges <math>k\in \mathbb{N}</math> ist die k-stellige ''0-Funktion'' <math>0^k\colon\mathbb{N}^k \to \mathbb{N}</math> definiert durch <math>0^k \left( n_1,\dots, n_k \right) := 0</math>. |
|||
# Für ein beliebiges <math>k\in \mathbb{N}</math> und ein beliebiges <math>1 \le i \le k</math> ist die k-stellige ''Projektion'' auf den i-ten Parameter <math>\pi^k_i\colon\mathbb{N}^k \to \mathbb{N}</math> definiert durch <math>\pi_i^k \left( n_1,\dots, n_k \right) := n_i</math>. |
|||
# Die ''Nachfolgerfunktion'' <math>\nu\colon\mathbb{N} \to \mathbb{N}</math> ist definiert durch <math>\nu \left( n \right) := n + 1</math>. |
|||
# Für beliebige <math>k,m \in \mathbb{N}</math> ist die ''Komposition'' einer Funktion <math>g\colon \mathbb{N}^m \to \mathbb{N}</math> mit ''m'' Funktionen <math>h_1,\dots, h_m\colon\mathbb{N}^k \to \mathbb{N}</math> definiert als die Funktion <math>C[g,h_1,\dots,h_m]\colon \mathbb{N}^k \to \mathbb{N}</math> mit <math>C[g,h_1,\dots,h_m]\left( n_1,\dots, n_k \right) := g \left( h_1 \left( n_1,\dots, n_k \right),\dots, h_m \left( n_1,\dots, n_k \right) \right)</math>. |
|||
# Für ein beliebiges <math>k \in \mathbb{N} \setminus \{0\}</math> ist die ''primitive Rekursion'' zweier Funktionen <math>g\colon \mathbb{N}^{k-1} \to \mathbb{N}</math> und <math>h\colon \mathbb{N}^{k+1} \to \mathbb{N}</math> definiert als die Funktion <math>R[g,h]\colon\mathbb{N}^k \to \mathbb{N}</math> mit |
|||
:<math>R[g,h]\left( n_1, n_2,\dots, n_k \right) := \begin{cases}g \left( n_2,\dots, n_k \right), & \mbox{falls } n_1=0\\h \left( R[g,h] \left( n_1 - 1, n_2,\dots, n_k \right), n_1 - 1, n_2,\dots, n_k \right), & \mbox{sonst.}\end{cases}</math> |
|||
Die Menge <math>Pr</math> der primitiv-rekursiven Funktionen ist dann definiert als die kleinste Menge, die alle Nullfunktionen, alle Projektionen und die Nachfolgerfunktion enthält und die unter Komposition und primitiver Rekursion abgeschlossen ist. Alltäglicher ausgedrückt heißt das: Eine Funktion ist genau dann primitiv-rekursiv, wenn man sie als Ausdruck mit den genannten Mitteln hinschreiben kann. Bereits als primitiv-rekursiv nachgewiesene Funktionen dürfen in dem Ausdruck vorkommen, denn sie können ja durch Einsetzen ihres Ausdrucks eliminiert werden. |
|||
==Beispiele== |
|||
Es folgen einige Beispiele, wie sich bekannte Operationen als primitiv-rekursive Funktionen definieren lassen. |
|||
Jede ''k''-stellige primitiv-rekursive Funktion ist insbesondere immer auf ganz <math>\mathbb{N}^k</math> definiert. |
|||
===Vorgängerfunktion=== |
|||
Funktionen mit kleinerem Definitionsbereich müssen erst geeignet auf ganz <math>\mathbb{N}^k</math> fortgesetzt werden, damit man primitiv-rekursive Funktionen erhält. |
|||
Die Vorgängerfunktion <math>p(x) = x - 1</math> ergibt sich durch primitive Rekursion. |
|||
Als Funktion <math>g</math> verwendet man die Nullfunktion und als Funktion <math>f</math> die Projektion. Es ergibt sich dadurch: |
|||
== Beispiele == |
|||
<math>p(0) = g() = 0</math> |
|||
=== Addition === |
|||
Die Addition <math>+\colon \mathbb{N}^2 \to \mathbb{N}</math> ist rekursiv definiert durch |
|||
:<math>m+n = \begin{cases}n, & \mbox{falls } m=0,\\ \nu((m-1)+n), & \mbox{sonst}\end{cases}</math> |
|||
für alle <math>m,n\in \mathbb{N}</math>. Es gilt also <math>+ = R[\pi^1_1,C[\nu,\pi^3_1]]</math>, die Addition ist damit primitiv-rekursiv. |
|||
=== Multiplikation === |
|||
<math>p(n+1) = h(p(n),n) = \pi_2^2(p(n),n) = n</math> |
|||
Die Multiplikation <math>\cdot\colon \mathbb{N}^2 \to \mathbb{N}</math> ist rekursiv über die Addition definiert: |
|||
:<math>m\cdot n = \begin{cases}0, & \mbox{falls } m=0,\\ (m-1)\cdot n+n, & \mbox{sonst}\end{cases}</math> |
|||
für alle <math>m,n\in \mathbb{N}</math>. Die Multiplikation ist primitiv-rekursiv, denn es gilt <math>\cdot = R[0^1,C[+,\pi^3_1,\pi^3_3]]</math>. |
|||
=== |
=== Potenz === |
||
Die Potenz <math>\operatorname{pot}\colon \mathbb{N}^2 \to \mathbb{N}</math> mit der Bedeutung <math>\operatorname{pot}(m,n) = m^n</math> ist rekursiv über die Multiplikation definiert: |
|||
Die Addition <math>\mbox{add} \left(a,b \right)=a+b</math> der Natürlichen Zahlen lässt sich wie folgt definieren: |
|||
:<math>\operatorname{pot}(m,n) = \begin{cases}1, & \mbox{falls } n=0,\\ \operatorname{pot}(m,n-1) \cdot m, & \mbox{sonst}\end{cases}</math> |
|||
für alle <math>m,n\in \mathbb{N}</math>. Die Potenz ist primitiv-rekursiv, denn es gilt <math>\operatorname{pot} = C[R[C[\nu,0^1],C[\cdot,\pi^3_1,\pi^3_3]],\pi^2_2,\pi^2_1]</math>. Der Kontext <math>C[\_,\pi^2_2,\pi^2_1]</math> hat hierbei den Zweck, die beiden Parameter <math>m</math> und <math>n</math> miteinander zu vertauschen. |
|||
=== Vorgängerfunktion === |
|||
<math>\mbox{add}(0,b):=\pi_1^1(b)=b</math> (Projektion) |
|||
Die Vorgängerfunktion ist nicht an der Stelle 0 definiert. Sie ist also nicht primitiv-rekursiv. Durch Fortsetzung an der Stelle 0 zum Beispiel mit dem Wert 0 kann man jedoch eine primitiv-rekursive Funktion daraus machen. |
|||
Die modifizierte Vorgängerfunktion <math>p\colon \mathbb{N} \to \mathbb{N}</math>, definiert durch |
|||
<math>\mbox{add}(n+1,b):=\nu \left(\mbox{add}(n,b) \right)</math> (Primitive Rekursion) |
|||
:<math>p(n):=\begin{cases}0, & \mbox{falls } n = 0,\\ n-1, & \mbox{sonst}\end{cases}</math> |
|||
für alle <math>n\in \mathbb{N}</math> ist primitiv-rekursiv, denn es gilt <math>p = R[0^0,\pi^2_2]</math>. |
|||
=== Subtraktion === |
|||
Um aus der Addition eine Substraktion zu machen ersetzt man die Nachfolgerfunktion <math>\nu</math> durch die Vorgängerfunktion |
|||
Auch die [[Subtraktion]] ist nicht auf allen Paaren [[Natürliche Zahl|natürlicher Zahlen]] definiert. Man setzt also die Subtraktion durch Auffüllen mit Nullen fort auf ganz <math>\mathbb{N}^2</math>. Diese totale Subtraktion <math>\operatorname{sub}\colon \mathbb{N}^2 \to \mathbb{N}</math> kann rekursiv charakterisiert werden durch |
|||
<math>p</math>. |
|||
:<math>\operatorname{sub}(m,n) = \begin{cases}m, & \mbox{falls } n=0,\\ p(\operatorname{sub}(m,n-1)), & \mbox{sonst}\end{cases}</math> |
|||
für alle <math>m,n\in \mathbb{N}</math>. |
|||
Für die totale Subtraktion gilt <math>\operatorname{sub} = C[R[\pi^1_1,C[p,\pi^3_1]],\pi^2_2,\pi^2_1]</math>; sie ist also primitiv-rekursiv. Man nennt diese modifizierte Differenz auch ''[[arithmetische Differenz]]''. |
|||
=== |
=== Weitere Beispiele === |
||
* Die zweistelligen Funktionen <math>\max</math> und <math>\min</math> sind primitiv rekursiv. |
|||
Zur Definition der Multiplikation <math>\mbox{mult}(a,b)=a\cdot b</math> dürfen wir die Addition schon verwenden, da diese ja, wie gerade gezeigt, primitiv-rekursiv ist: |
|||
* Die Folge der Primzahlen ist eine primitiv rekursive Funktion. |
|||
* Die Funktion, die zu einer natürlichen Zahl <math>n</math> und einer Primzahl <math>p</math> die Anzahl der Primfaktoren von <math>p</math> in <math>n</math> ermittelt, ist primitiv rekursiv. |
|||
* Es existieren primitiv rekursive [[Arithmetisierung]]en endlicher Folgen natürlicher Zahlen. |
|||
* Die [[Ackermannfunktion]] und die [[Sudanfunktion]] sind nicht primitiv rekursiv, aber [[Μ-Rekursion|µ-rekursiv]]. |
|||
* Die Funktion [[Fleißiger Biber]] (busy beaver) ist nicht primitiv rekursiv und nicht [[Μ-Rekursion|µ-rekursiv]]. |
|||
== Siehe auch == |
|||
<math>\mbox{mult}(0,b):= f_0^2(0,b)=0</math> (konstante Funktion) |
|||
* [[µ-Rekursion]] |
|||
* [[Turingmaschine]] |
|||
== Literatur == |
|||
<math>\mbox{mult}(n+1,b):= \mbox{add}\left(\mbox{mult}(n,b),b \right)=\mbox{mult}(n,b)+b</math> (Primitive Rekursion) |
|||
* {{Literatur |
|||
|Autor=[[Hans Hermes]] |
|||
|Titel=Aufzählbarkeit, Entscheidbarkeit, Berechenbarkeit |
|||
|Auflage=2. |
|||
|Verlag=Springer Berlin, Heidelberg, New York |
|||
|Datum=1971 |
|||
|ISBN=3-540-05334-4}} |
|||
* {{Literatur |
|||
|Autor=[[Heinz-Dieter Ebbinghaus]], Jörg Flum, Wolfgang Thomas |
|||
|Titel=Einführung in die mathematische Logik |
|||
|Auflage=4. |
|||
|Verlag=Spektrum, Akademischer Verlag |
|||
|Ort=Heidelberg u. a. |
|||
|Datum=1996 |
|||
|ISBN=3-8274-0130-5 |
|||
|Kommentar=''Hochschultaschenbuch''}} |
|||
* {{Literatur |
|||
|Autor=[[Arnold Oberschelp]] |
|||
|Titel=Rekursionstheorie |
|||
|Verlag=BI-Wissenschaftlicher-Verlag |
|||
|Ort=Mannheim u. a. |
|||
|Datum=1993 |
|||
|ISBN=3-411-16171-X}} |
|||
* {{Literatur |
|||
|Autor=[[Wolfgang Rautenberg]] |
|||
|Titel=Einführung in die Mathematische Logik |
|||
|Auflage=3. |
|||
|Verlag=[[Vieweg+Teubner Verlag|Vieweg+Teubner]] |
|||
|Ort=[[Wiesbaden]] |
|||
|Datum= |
|||
|ISBN=978-3-8348-0578-2}} |
|||
== Einzelnachweise == |
|||
''Siehe auch:'' [[Μ-Rekursion|µ-Rekursion]] |
|||
<references /> |
|||
[[Kategorie: |
[[Kategorie:Berechenbarkeitstheorie]] |
||
[[uk:Рекурсивні функції#Примітивно рекурсивна функція]] |
|||
[[en:Primitive recursive function]] |
|||
[[es:Recursión primitiva]] |
|||
[[fr:Fonction récursive primitive]] |
Aktuelle Version vom 11. Juni 2025, 10:25 Uhr
Primitiv-rekursive Funktionen sind totale Funktionen, die aus einfachen Grundfunktionen (konstante 0-Funktion, Projektionen auf ein Argument und Nachfolgefunktion) durch Komposition und (primitive) Rekursion gebildet werden können. Die primitive Rekursion lässt sich auf Richard Dedekinds 126. Theorem in Was sind und was sollen die Zahlen? (1888) zurückführen. Die primitiv rekursive Arithmetik geht auf Thoralf Skolem (1923) zurück.[1] Der Begriff primitiv-rekursive Funktion wurde von der ungarischen Mathematikerin Rózsa Péter geprägt. Primitiv-rekursive Funktionen spielen in der Rekursionstheorie, einem Teilgebiet der theoretischen Informatik, eine Rolle. Sie treten im Zusammenhang mit der Explikation des Berechenbarkeitsbegriffs auf.
Alle primitiv-rekursiven Funktionen sind im intuitiven Sinn berechenbar. Sie schöpfen aber nicht alle intuitiv berechenbaren Funktionen aus, Beispiele dafür sind die Ackermannfunktion und die Sudanfunktion, welche beide berechenbar, aber nicht primitiv-rekursiv sind. Eine vollständige Erfassung des Berechenbarkeitsbegriffs gelingt erst durch die µ-rekursiven Funktionen.
Für primitiv-rekursive Funktionen ist es möglich, ein Komplexitätsmaß zu definieren, d. h., es kann die Dauer der Berechnung eines ihrer Funktionswerte vorab ermittelt werden.
Die Klasse der primitiv-rekursiven Funktionen und die der LOOP-berechenbaren (vgl. LOOP-Programm) Funktionen sind äquivalent.
Definition
[Bearbeiten | Quelltext bearbeiten]- Für ein beliebiges ist die k-stellige 0-Funktion definiert durch .
- Für ein beliebiges und ein beliebiges ist die k-stellige Projektion auf den i-ten Parameter definiert durch .
- Die Nachfolgerfunktion ist definiert durch .
- Für beliebige ist die Komposition einer Funktion mit m Funktionen definiert als die Funktion mit .
- Für ein beliebiges ist die primitive Rekursion zweier Funktionen und definiert als die Funktion mit
Die Menge der primitiv-rekursiven Funktionen ist dann definiert als die kleinste Menge, die alle Nullfunktionen, alle Projektionen und die Nachfolgerfunktion enthält und die unter Komposition und primitiver Rekursion abgeschlossen ist. Alltäglicher ausgedrückt heißt das: Eine Funktion ist genau dann primitiv-rekursiv, wenn man sie als Ausdruck mit den genannten Mitteln hinschreiben kann. Bereits als primitiv-rekursiv nachgewiesene Funktionen dürfen in dem Ausdruck vorkommen, denn sie können ja durch Einsetzen ihres Ausdrucks eliminiert werden.
Jede k-stellige primitiv-rekursive Funktion ist insbesondere immer auf ganz definiert. Funktionen mit kleinerem Definitionsbereich müssen erst geeignet auf ganz fortgesetzt werden, damit man primitiv-rekursive Funktionen erhält.
Beispiele
[Bearbeiten | Quelltext bearbeiten]Addition
[Bearbeiten | Quelltext bearbeiten]Die Addition ist rekursiv definiert durch
für alle . Es gilt also , die Addition ist damit primitiv-rekursiv.
Multiplikation
[Bearbeiten | Quelltext bearbeiten]Die Multiplikation ist rekursiv über die Addition definiert:
für alle . Die Multiplikation ist primitiv-rekursiv, denn es gilt .
Potenz
[Bearbeiten | Quelltext bearbeiten]Die Potenz mit der Bedeutung ist rekursiv über die Multiplikation definiert:
für alle . Die Potenz ist primitiv-rekursiv, denn es gilt . Der Kontext hat hierbei den Zweck, die beiden Parameter und miteinander zu vertauschen.
Vorgängerfunktion
[Bearbeiten | Quelltext bearbeiten]Die Vorgängerfunktion ist nicht an der Stelle 0 definiert. Sie ist also nicht primitiv-rekursiv. Durch Fortsetzung an der Stelle 0 zum Beispiel mit dem Wert 0 kann man jedoch eine primitiv-rekursive Funktion daraus machen.
Die modifizierte Vorgängerfunktion , definiert durch
für alle ist primitiv-rekursiv, denn es gilt .
Subtraktion
[Bearbeiten | Quelltext bearbeiten]Auch die Subtraktion ist nicht auf allen Paaren natürlicher Zahlen definiert. Man setzt also die Subtraktion durch Auffüllen mit Nullen fort auf ganz . Diese totale Subtraktion kann rekursiv charakterisiert werden durch
für alle . Für die totale Subtraktion gilt ; sie ist also primitiv-rekursiv. Man nennt diese modifizierte Differenz auch arithmetische Differenz.
Weitere Beispiele
[Bearbeiten | Quelltext bearbeiten]- Die zweistelligen Funktionen und sind primitiv rekursiv.
- Die Folge der Primzahlen ist eine primitiv rekursive Funktion.
- Die Funktion, die zu einer natürlichen Zahl und einer Primzahl die Anzahl der Primfaktoren von in ermittelt, ist primitiv rekursiv.
- Es existieren primitiv rekursive Arithmetisierungen endlicher Folgen natürlicher Zahlen.
- Die Ackermannfunktion und die Sudanfunktion sind nicht primitiv rekursiv, aber µ-rekursiv.
- Die Funktion Fleißiger Biber (busy beaver) ist nicht primitiv rekursiv und nicht µ-rekursiv.
Siehe auch
[Bearbeiten | Quelltext bearbeiten]Literatur
[Bearbeiten | Quelltext bearbeiten]- Hans Hermes: Aufzählbarkeit, Entscheidbarkeit, Berechenbarkeit. 2. Auflage. Springer Berlin, Heidelberg, New York, 1971, ISBN 3-540-05334-4.
- Heinz-Dieter Ebbinghaus, Jörg Flum, Wolfgang Thomas: Einführung in die mathematische Logik. 4. Auflage. Spektrum, Akademischer Verlag, Heidelberg u. a. 1996, ISBN 3-8274-0130-5 (Hochschultaschenbuch).
- Arnold Oberschelp: Rekursionstheorie. BI-Wissenschaftlicher-Verlag, Mannheim u. a. 1993, ISBN 3-411-16171-X.
- Wolfgang Rautenberg: Einführung in die Mathematische Logik. 3. Auflage. Vieweg+Teubner, Wiesbaden, ISBN 978-3-8348-0578-2.
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Peter Schroeder-Heister, Mathematische Logik II (Gödelsche Unvollständigkeitssätze), Skript, S. 39