Primitive rekursive Funktion
Im Computerbarkeitstheorie, a primitive rekursive Funktion ist ungefähr eine Funktion, die von a berechnet werden kann Computer Programm Deren Schleifen sind alle "für" Loops (Das heißt, eine Obergrenze der Anzahl der Iterationen jeder Schleife kann vor dem Eingeben der Schleife bestimmt werden). Primitive rekursive Funktionen bilden streng Teilmenge von diesen Allgemeine rekursive Funktionen das sind auch Gesamtfunktionen.
Die Bedeutung primitiver rekursiv Zahlentheorie (und allgemeiner in Mathematik) sind primitiv rekursiv. Zum Beispiel, Zusatz und Aufteilung, das Fakultät und Exponentialfunktionund die Funktion, die die zurückgibt nDie Prime sind alle primitiv rekursiv.[1] Um zu zeigen, dass eine berechnbare Funktion primitiv rekursiv ist, reicht sie aus, um zu zeigen, dass sie ihre Zeitkomplexität wird oben durch eine primitive rekursive Funktion der Eingangsgröße begrenzt. Es ist daher nicht so einfach, a zu entwickeln berechnungsbare Funktion das ist nicht primitive rekursiv; Einige Beispiele sind im Abschnitt gezeigt § Einschränkungen unter.
Die Menge der primitiven rekursiven Funktionen ist als bekannt als Pr in Computerkomplexitätstheorie.
Definition
Eine primitive rekursive Funktion nimmt eine feste Anzahl von Argumenten an, jeweils a natürliche Zahl (Nichtnegative Ganzzahl: {0, 1, 2, ...}) und gibt eine natürliche Zahl zurück. Wenn es dauert n Argumente heißt es heißt n-Ary.
Die grundlegenden primitiven rekursiven Funktionen werden von diesen gegeben Axiome:
- Ständige Funktionen Ck
n: Für jede natürliche Zahl n Und jeder k, das k-ary konstante Funktion, definiert durch , ist primitiv rekursiv. - Nachfolgerfunktion: Die 1-Ary-Nachfolgerfunktion S, was den Nachfolger seines Arguments zurückgibt (siehe Peano Postulate), das ist, , ist primitiv rekursiv.
- Projektionsfunktion : Für alle natürlichen Zahlen so dass , das k-ARY -Funktion definiert durch ist primitiv rekursiv.
Komplexere primitive rekursive Funktionen können durch Anwenden der Anwendung erhalten werden Operationen gegeben durch diese Axiome:
- Kompositionsoperator (auch als die genannt Substitutionsbetreiber): Gegeben eine m-ARY -Funktion und m k-ary Funktionen :
- Primitiver Rekursion Operator ρ: Angesichts der k-ARY -Funktion und die (k+2) -ary-Funktion :
Deutung:
Die Funktionf handelt als a For-Loop von 0 bis zum Wert seines ersten Arguments. Der Rest der Argumente fürf, hier bezeichnet mit x1, ...,xk, sind eine Reihe von Anfangsbedingungen für die For-Schleife, die von ihm während der Berechnungen verwendet werden kann, die jedoch durch sie unveränderlich sind. Die Funktionen g und h auf der rechten Seite der Gleichungen, die definieren f darstellen den Körper der Schleife, die Berechnungen durchführt. Die Funktiong wird nur einmal verwendet, um erste Berechnungen durchzuführen. Berechnungen für nachfolgende Schritte der Schleife werden von durchgeführth. Der erste Parameter vonh wird mit dem "aktuellen" Wert des For-Loop-Index gefüttert. Der zweite Parameter vonh wird mit dem Ergebnis der früheren Berechnungen des FOROP aus früheren Schritten gefüttert. Der Rest der Parameter fürh sind diese unveränderlichen Anfangsbedingungen für die zuvor erwähnte FOROOP. Sie können von verwendet werden vonh Berechnungen durchführen, aber sie werden nicht selbst von veränderth.
Das primitive rekursive Funktionen sind die grundlegenden Funktionen und diejenigen, die aus den Grundfunktionen erhalten werden, indem diese Operationen eine begrenzte Häufigkeit anwenden.
Beispiele
- ist eine 1-Ary-Funktion, die zurückgibt Für jede Eingabe: .
- ist eine 1-Ary-Funktion, die zurückgibt Für jede Eingabe: .
- ist eine 0-Ary-Funktion, d. H. Eine Konstante: .
- ist die Identitätsfunktion auf den natürlichen Zahlen: .
- und ist die linke und rechte Projektion auf natürliche Zahlpaare: und .
- ist eine 1-Ary-Funktion, die 2 zu seinem Eingang hinzufügt, .
- ist eine 1-Ary-Funktion, die 1 für jede Eingabe zurückgibt: . Das ist, und sind die gleiche Funktion: . In ähnlicher Weise alle kann als Zusammensetzung von angemessenen vielen ausgedrückt werden und .
Zusatz
Eine Definition der 2-Ary-Funktion Um die Summe seiner Argumente zu berechnen, kann er unter Verwendung des primitiven Rekursionsoperators erhalten werden . Zu diesem Zweck die bekannten Gleichungen
werden "in primitiv rekursiver Funktionsterminologie umformuliert": in der Definition von Die erste Gleichung schlägt vor, sich zu entscheiden erhalten ; Die zweite Gleichung schlägt vor, sich zu entscheiden erhalten . Daher kann die Additionsfunktion definiert werden als . Als Berechnungsbeispiel,
Verdoppelung
Gegeben , die 1-Ary-Funktion verdoppelt sein Argument, .
Multiplikation
In ähnlicher Weise wie Zugabe kann eine Multiplikation durch definiert werden . Dies reproduziert die bekannten Multiplikationsgleichungen:
und
Vorgänger
Die Vorgängerfunktion wirkt als "Gegenteil" der Nachfolgerfunktion und wird rekursiv durch die Regeln definiert und . Eine primitive rekursive Definition ist . Als Berechnungsbeispiel,
Verkürzte Subtraktion
Die begrenzte Subtraktionsfunktion (auch genannt "Monus", und bezeichnet"") ist aus der Vorgängerfunktion definierbar. Es erfüllt die Gleichungen
Da die Rekursion über das zweite Argument läuft, beginnen wir mit einer primitiven rekursiven Definition der umgekehrten Subtraktion. . Seine Rekursion läuft dann über das erste Argument, so dass seine primitive rekursive Definition erhalten werden kann, ähnlich wie bei der Addition . Um die umgekehrte Argumentreihenfolge loszuwerden, dann definieren . Als Berechnungsbeispiel,
Konvertieren von Prädikaten in numerische Funktionen
In einigen Umgebungen ist es natürlich, primitive rekursive Funktionen zu berücksichtigen, die als Eingänge Tupel annehmen, die Zahlen mit Mischen Wahrheitswerte (das ist t für wahr und f für false) oder das erzeugt Wahrheitswerte als Ausgänge.[2] Dies kann erreicht werden, indem die Wahrheitswerte mit Zahlen auf beliebige Weise identifiziert werden. Zum Beispiel ist es üblich, den Wahrheitswert zu identifizieren t mit der Zahl 1 und dem Wahrheitswert f mit der Zahl 0. Nachdem diese Identifikation erstellt wurde, die, die charakteristische Funktion eines Satzes A, was immer 1 oder 0 zurückgibt, kann als Prädikat angesehen werden, das zeigt, ob sich eine Zahl im Satz befindet A. Eine solche Identifizierung von Prädikaten mit numerischen Funktionen wird für den Rest dieses Artikels angenommen.
Prädikat "ist Null"
Als Beispiel für ein primitives rekursives Prädikat, die 1-Ary-Funktion soll so definiert werden, dass wenn , und, Andernfalls. Dies kann durch Definition erreicht werden . Dann, und z. .
Prädikat "weniger oder gleich"
Verwenden der Eigenschaft , die 2-Ary-Funktion kann definiert werden durch . Dann wenn , und , Andernfalls. Als Berechnungsbeispiel,
Prädikat "größer oder gleich"
Einmal eine Definition von wird erhalten, das Converse -Prädikat kann definiert werden als . Dann, ist wahr (genauer gesagt: Wert 1), wenn und nur wenn, .
If-then-else
Der aus Programmiersprachen bekannte 3-Ary-If-Then-Else-Operator kann durch definiert werden . Dann für willkürlich Anwesend
und
- .
Das ist, Gibt den damaligen Teil zurück, , wenn der If-Teil, , ist wahr und der else-parteil, , Andernfalls.
Junktoren
Basierend auf Funktion, es ist einfach, logische Junktoren zu definieren. Zum Beispiel definieren , Man erhält , das ist, ist wahr dann und nur dann, wenn, beide und sind wahr (logische Konjunktion von und ).
Ähnlich, und führen zu geeigneten Definitionen von disjunktion und Negation: und .
Gleichheitsprädikat
Verwenden der obigen Funktionen , und , die Definition Implementiert das Gleichheitsprädikat. In der Tat, ist wahr, wenn und nur wenn, gleich .
In ähnlicher Weise die Definition implementiert das Prädikat "weniger als", und das Prädikat implementiert "größer als".
Andere Operationen zu natürlichen Zahlen
Exponentiation und Primalitätstest sind primitiv rekursiv. Gegebene primitive rekursive Funktionen e, f, g, und h, eine Funktion, die den Wert von zurückgibt g Wenn e≤f und der Wert von h Ansonsten ist primitiv rekursiv.
Operationen für ganze Zahlen und rationale Zahlen
Durch die Nutzung Gödel NummerierungenDie primitiven rekursiven Funktionen können erweitert werden, um andere Objekte wie Ganzzahlen und Rationale Zahlen. Wenn Ganzzahlen von Gödel -Zahlen auf eine standardmäßige Weise kodiert werden, sind die arithmetischen Operationen einschließlich Addition, Subtraktion und Multiplikation primitiv rekursiv. In ähnlicher Weise, wenn die Rationals durch Gödel -Zahlen dargestellt werden, dann die aufstellen Operationen sind alle primitiv rekursiv.
Einige gemeinsame primitive rekursive Funktionen
- Die folgenden Beispiele und Definitionen stammen von Kleene (1952) S. 223–231 - viele erscheinen mit Beweisen. Die meisten erscheinen auch mit ähnlichen Namen, entweder als Beweise oder als Beispiele, in Boolos-Burgess-Jeffrey 2002 S. 63–70; Sie fügen den Logarithmus LO (x, y) oder LG (x, y) ab, abhängig von der genauen Ableitung.
Im Folgenden stellen wir fest, dass primitive rekursive Funktionen von vier Typen sein können:
- Funktionen Kurz gesagt: "Zahlen-theoretische Funktionen" von {0, 1, 2, ...} bis {0, 1, 2, ...},
- Prädikate: von {0, 1, 2, ...} bis Wahrheitswerten {t = true, f = false},
- Aussagen: von Wahrheitswerten {t, f} zu Wahrheitswerten {t, f},
- Funktionen darstellen: von Wahrheitswerten {t, f} bis {0, 1, 2, ...}. Oft benötigt ein Prädikat eine darstellende Funktion, um die Ausgabe des Prädikats {t, f} in {0, 1} umzuwandeln (beachten Sie die Reihenfolge "t" in "0" und "F" mit "1" überein unter). Per Definition eine Funktion φ (x) ist eine "Darstellung der Funktion" des Prädikats P (x) Wenn φ nur Werte 0 und 1 nimmt und produziert 0 wenn p wahr ist ".
Im folgenden Mark "'", z. a ', ist die primitive Marke, die "der Nachfolger von" bedeutet, normalerweise als "+1" betrachtet, z. a +1 =def a'. Die Funktionen 16-20 und #G sind von besonderem Interesse daran, primitive rekursiv Gödel -Zahlen.
- Addition: a+b
- Multiplikation: a × b
- Exponentiation: ab
- Faktorial a! : 0! = 1, a '! = a! × a '
- Pred (a): (Vorgänger oder Dekrement): wenn a> 0 dann a-1 sonst 0
- Ordnungsgemäße Subtraktion A ∸ B: wenn a ≥ b dann a-b sonst 0
- Minimum (a1, ... an)
- Maximum (a1, ... an)
- Absoluter Unterschied: | A-B | =def (a ∸ b) + (b ∸ a)
- ~ sg (a): nicht [signum (a)]: wenn a = 0 dann 1 sonst 0
- sg (a): signum (a): wenn a = 0 dann 0 sonst 1
- a | B: (a teilt b): wenn b = k × a für einige k dann 0 sonst 1
- Rest (a, b): Die übrig gebliebenen, wenn b nicht "gleichmäßig" teilt. Auch mod genannt (a, b)
- A = B: SG | A - B | (Kleenes Konvent war es, vertreten zu werden Stimmt von 0 und FALSCH von 1; Derzeit ist die häufigste Konvention, insbesondere in Computern Stimmt von 1 und FALSCH Um 0, welche SG in ~ SG hier und im nächsten Artikel wechselt)
- a <b: sg (a '∸ b)
- PR (a): a ist eine Primzahl PR (a) =def a> 1 & nicht (existiert c)1 <c <a [c | a]
- pi: Die I+1-ST-Primzahl
- (a)i: Exponent von pi in a: das einzigartig x so dass pix| a & nicht (pix'| a)
- LH (a): die "Länge" oder Anzahl der nicht flüchtenden Exponenten in a
- lo (a, b): (logarithmus von a bis basic b): wenn a, b> 1 dann das größte x so dass bx | a sonst 0
- Im Folgenden die Abkürzung x =def x1, ... xn; Einschreibungen können angewendet werden, wenn die Bedeutung erforderlich ist.
- #A: Eine Funktion φ definierbar explizit aus Funktionen ψ und Konstanten q1, ... qn ist primitiv rekursiv in ψ.
- #B: Die endliche Summe σy <z ψ (x, y) und Produkt πy <zψ (x, y) sind in ψ primitiv rekursiv.
- #C: a Prädikat P erhalten durch Ersetzen von Funktionen χ1, ..., χm Für die jeweiligen Variablen eines Prädikats Q ist in χ primitiv rekursiv1, ..., χm, Q.
- #D: Das Folgende Prädikate sind primitiv rekursiv in Q und R:
- Not_Q (x).
- Q oder r: q (x) V r (x),
- Q und R: Q (x) & R(x),
- Q impliziert r: q (x) → r (x)
- Q entspricht R: q (q (x) ≡ r (x)
- #E: Das Folgende Prädikate sind primitiv rekursiv in der Prädikat R:
- (Ey)y <z R(x, y) wo (ey)y <z bezeichnet "Es gibt mindestens ein y, das weniger als z ist, so dass"
- (y)y <z R(x, y) wo (y)y <z bezeichnet "für alle y weniger als z Es ist wahr, dass"
- μYy <z R(x, y). Der Operator μyy <z R(x, y) ist a begrenzt Form der sogenannten Minimierung- oder mu-operator: Definiert als "der geringste Wert von y weniger als z so, dass r (x, y) ist wahr; oder z, wenn es keinen solchen Wert gibt. "
- #F: Definition nach Fällen: Die so definierte Funktion, wobei q1, ..., Qm sind gegenseitig ausschließend Prädikate (oder "ψ (x) Ist der Wert, der durch die erste Klausel angegeben ist, die gilt), in φ primitiv rekursiv1, ..., Q1, ... Qm:
- φ (x) =
- φ1(x) Wenn q1(x) ist wahr,
- . . . . . . . . . . . . . . . . . . .
- φm(x) Wenn qm(x) ist wahr
- φM+1(x) Andernfalls
- φ (x) =
- #G: Wenn φ die Gleichung erfüllt:
- φ (y,x) = χ (y, kurs φ (y; x2, ... xn ), x2, ... xn Dann ist φ in χ primitiv rekursiv. Der Wertkurs (y; x2 bis n ) der Funktionsverlaufsfunktion codiert die Sequenz von Werten φ (0,x2 bis n), ..., φ (y-1,x2 bis n) der ursprünglichen Funktion.
Verwendung in Peano-Arithmetik erster Ordnung
Im erste Bestellung Peano -ArithmetikEs gibt unendlich viele Variablen (0-Ary-Symbole), aber nein K-Ary Nicht logische Symbole mit K> 0 außer s, +, *und ≤. Um primitive rekursive Funktionen zu definieren, muss man den folgenden Trick von Gödel verwenden.
Durch Verwendung a Gödel -Nummerierung für Sequenzen, zum Beispiel Gödels β -FunktionJede endliche Abfolge von Zahlen kann durch eine einzelne Zahl codiert werden. Eine solche Zahl kann daher die primitive rekursive Funktion darstellen, bis ein gegebener n.
Lassen h Seien Sie eine 1-Ary-primitive Rekursionsfunktion, die definiert durch:
wo C eine Konstante ist und g ist eine bereits definierte Funktion.
Unter Verwendung der Gödels β -Funktion für jede Sequenz natürlicher Zahlen (k)0, k1, ..., kn), es gibt natürliche Zahlen B und C, so dass für jedes i ≤ n, β (b, c, i) = ki. Wir können daher die folgende Formel verwenden, um zu definieren h; etwas präziser, m=h(n) ist eine Abkürzung für Folgendes:
und das Gleichgewicht zu g, bereits definiert zu sein, ist tatsächlich eine Kurzform für eine andere bereits definierte Formel (wie β, deren Formel angegeben ist hier).
Die Verallgemeinerung auf eine k-ary primitive Rekursionsfunktion ist trivial.
Beziehung zu rekursiven Funktionen
Die breitere Klasse von partielle rekursive Funktionen wird definiert durch Einführung eines Unbegrenzter Suchbetreiber. Die Verwendung dieses Bedieners kann zu a führen Teilfunktiondas heißt eine Beziehung zu maximal ein Wert für jedes Argument, hat aber nicht unbedingt irgendein Wert für jedes Argument (siehe Domain). Eine äquivalente Definition besagt, dass eine teilweise rekursive Funktion eine von a berechnet werden kann Turing Maschine. Eine vollständige rekursive Funktion ist eine teilweise rekursive Funktion, die für jeden Eingang definiert ist.
Jede primitive rekursive Funktion ist total rekursiv, aber nicht alle vollrekursiven Funktionen sind primitiv rekursiv. Das Ackermann -Funktion A(m,n) ist ein bekanntes Beispiel für eine vollständige rekursive Funktion (tatsächlich nachweisbarer Gesamt), das nicht primitiv rekursiv ist. Es gibt eine Charakterisierung der primitiven rekursiven Funktionen als Teilmenge der gesamten rekursiven Funktionen unter Verwendung der Ackermann -Funktion. Diese Charakterisierung besagt, dass eine Funktion primitiv rekursiv ist dann und nur dann, wenn Es gibt eine natürliche Zahl m so dass die Funktion durch eine Turing berechnet werden kann Maschine, die immer anhält innerhalb eines(m,n) oder weniger Schritte, wo n ist die Summe der Argumente der primitiven rekursiven Funktion.[3]
Eine wichtige Eigenschaft der primitiven rekursiven Funktionen ist, dass sie a sind rekursiv aufgezählt Teilmenge des Satzes von allen Gesamt rekursive Funktionen (was selbst nicht rekursiv aufgezählt ist). Dies bedeutet, dass es eine einzelne berechnbare Funktion gibt f(m,n) Das zählt die primitiven rekursiven Funktionen auf, nämlich:
- Für jede primitive rekursive Funktion g, Da ist ein m so dass g(n) = f(m,n) für alle n, und
- Für jeden m, die Funktion h(n) = f(m,n) ist primitiv rekursiv.
f Kann explizit konstruiert werden, indem alle möglichen Möglichkeiten zur Erzeugung primitiver rekursiver Funktionen iterativ wiederholt werden. Somit ist es nachweislich total. Man kann a verwenden Diagonalisierung Argument, um das zu zeigen f ist an sich nicht rekursiv primitiv: Wäre es so gewesen, wäre es auch, so wäre es auch wäre h(n) = f(n,n) +1. Aber wenn dies eine primitive rekursive Funktion entspricht, gibt es eine m so dass h(n) = f(m,n) für alle n, und dann h(m) = f(m,m), was zum Widerspruch führt.
Die Menge der primitiven rekursiven Funktionen ist jedoch nicht die größten Rekursiv aufzählbare Teilmenge des Satzes aller gesamten rekursiven Funktionen. Beispielsweise ist der Satz nachweislich Gesamtfunktionen (in Peano -Arithmetik) ebenfalls rekursiv aufgezählt, da man alle Beweise der Theorie aufzählen kann. Während alle primitiven rekursiven Funktionen nachweislich insgesamt sind, ist das Gegenteil nicht wahr.
Einschränkungen
Primitive rekursive Funktionen neigen dazu, sehr eng mit unserer Intuition dessen zu entsprechen, was eine berechnbare Funktion sein muss. Sicherlich sind die anfänglichen Funktionen (in ihrer Einfachheit) intuitiv berechnet, und die beiden Vorgänge, mit denen man neue primitive rekursive Funktionen erzeugen kann, sind ebenfalls sehr einfach. Die Menge der primitiven rekursiv Cantors diagonales Argument. Dieses Argument liefert eine total rechenbare Funktion, die nicht primitiv rekursiv ist. Eine Skizze des Beweises lautet wie folgt:
Definieren Sie nun die "Evaluator -Funktion" ev mit zwei Argumenten, von ev(i,j) = fi(j). Deutlich ev ist total und rechenbar, da man die Definition von effektiv bestimmen kann fiund eine primitive rekursive Funktion sein fi ist selbst total und rechenbar, also fi(j) ist immer definiert und effektiv berechnet. Ein diagonales Argument wird jedoch zeigen, dass die Funktion ev von zwei Argumenten ist nicht primitiv rekursiv.
Vermuten ev waren primitive rekursiv, dann die unäre Funktion g definiert von g(i) = S (ev(i,i)) wäre auch primitiv rekursiv, da es durch Zusammensetzung aus der Nachfolgerfunktion und definiert wird und ev. Aber dann g tritt in der Aufzählung auf, so dass es eine Reihe gibt n so dass g = fn. Aber jetzt g(n) = S (ev(n,n)) = S (fn(n)) = S (g(n)) gibt einen Widerspruch.Dieses Argument kann auf jede Klasse von berechnbaren (Gesamt-) Funktionen angewendet werden, die auf diese Weise aufgezählt werden können, wie im Artikel erläutert Maschine, die immer anhält. Beachten Sie jedoch, dass die teilweise Rechenfunktionen (die für alle Argumente nicht definiert werden müssen) können explizit aufgezählt werden, beispielsweise durch Aufzählung von Turing -Maschinencodierungen.
Andere Beispiele für totale rekursive, aber nicht primitive rekursive Funktionen sind bekannt:
- Die Funktion, die nimmt m zu Ackermann(m,m) ist eine unartige Gesamtfunktion, die nicht primitiv rekursiv ist.
- Das Paris -Harrington Theorem beinhaltet eine totale rekursive Funktion, die nicht primitiv rekursiv ist.
- Das Sudan -Funktion
- Das Goodstein -Funktion
Varianten
Ständige Funktionen
Anstatt von Alternative Definitionen verwenden nur eine 0-Ary Nullfunktion Als primitive Funktion, die immer Null zurückgibt und die konstanten Funktionen aus der Nullfunktion, der Nachfolgerfunktion und dem Zusammensetzungsoperator erstellt hat.
Schwache primitive Rekursion
Die 1-Platz-Vorgängerfunktion ist primitiv rekursiv, siehe Abschnitt #Vorgänger. Fischer, Fischer & Beigel [4] den impliziten Vorgänger aus der Rekursionsregel entfernt und durch die schwächere Regel ersetzt
Sie bewiesen, dass die Vorgängerfunktion immer noch definiert werden könnte, und daher definiert "schwache" primitive Rekursion auch die primitiven rekursiven Funktionen.
Iterative Funktionen
Schwächen Sie dies noch weiter durch die Verwendung von Funktionen von Arity k+1, Entfernen und aus den Argumenten von Ganz, wir bekommen das Iterationsregel:
Die Klasse der iterativen Funktionen ist auf die gleiche Weise wie die Klasse der primitiven rekursiven Funktionen definiert, mit Ausnahme dieser schwächeren Regel. Es wird vermutet, dass sie eine ordnungsgemäße Teilmenge der primitiven rekursiven Funktionen sind.[5]
Zusätzliche primitive rekursive Formen
Einige zusätzliche Rekursionsformen definieren auch Funktionen, die tatsächlich primitiv rekursiv sind. Definitionen in diesen Formen sind möglicherweise leichter zu finden oder natürlicher zum Lesen oder Schreiben. Wertschöpfungsverlauf Rekursion definiert primitive rekursive Funktionen. Einige Formen von gegenseitige Rekursion Definieren Sie auch primitive rekursive Funktionen.
Die Funktionen, die in der programmiert werden können Schleifenprogrammiersprache sind genau die primitiven rekursiven Funktionen. Dies gibt eine andere Charakterisierung der Kraft dieser Funktionen. Die Hauptbeschränkung der Schleifensprache im Vergleich zu a Turing-Complete-Sprache, ist, dass in der Schleifensprache die Anzahl der ausgeführt wird, in denen jede Schleife ausgeführt wird, bevor die Schleife zu laufen beginnt.
Computersprache Definition
Ein Beispiel für eine primitive rekursive Programmiersprache ist eine, die grundlegende arithmetische Operatoren (z. B. + und-oder hinzufügen und subtrahieren), Bedingungen und Vergleich (wenn-gleich, gleich, weniger als) und begrenzte Schleifen wie das Basic Für Schleife, wo es eine bekannte oder kalkulierbare Obergrenze an alle Schleifen gibt (für i von 1 bis n, weder ich noch n durch den Schleifenkörper). Keine Kontrollstrukturen größerer Allgemeinheit, wie z. während Schleifen oder wenn-plus GEHE ZU, werden in einer primitiven rekursiven Sprache zugelassen.
Das Schleifensprache, eingeführt in einem Papier von 1967 von von 1967 von Albert R. Meyer und Dennis M. Ritchie,[6] ist eine solche Sprache. Die Rechenleistung fällt mit den primitiven rekursiven Funktionen zusammen. Eine Variante der Loop -Sprache ist Douglas Hofstadter's Bloop in Gödel, Escher, Bach. Das Hinzufügen von unbegrenzten Schleifen (während Goto) macht die Sprache Allgemein rekursiv und Turing-Completewie alle realen Computerprogrammiersprachen.
Die Definition primitiver rekursiver Funktionen impliziert, dass ihre Berechnung bei jeder Eingabe annimmt (nach einer endlichen Anzahl von Schritten). Andererseits die Problem stoppen ist unentscheidbar für allgemeine rekursive Funktionen, auch wenn sie es sind gesamt. Das heißt, es gibt Programme, die jeden Eingang stoppen, für die dies jedoch nicht durch einen Algorithmus überprüft werden kann.
Finitismus- und Konsistenzergebnisse
Die primitiven rekursiven Funktionen sind eng mit der Mathematik verbunden Finitismusund werden in mehreren Kontexten in der mathematischen Logik verwendet, in denen ein besonders konstruktives System erwünscht ist. Primitive rekursive Arithmetik (PRA), ein formales Axiomsystem für die natürlichen Zahlen und die primitiven rekursiven Funktionen, wird häufig für diesen Zweck verwendet.
PRA ist viel schwächer als Peano -Arithmetik, was kein endistisches System ist. Trotzdem führen viele hervor Zahlentheorie und in Beweistheorie kann in PRA bewiesen werden. Zum Beispiel, Gödels Unvollständigkeitstheorem kann in PRA formalisiert werden und geben den folgenden Satz:
- Wenn T ist eine Theorie der Arithmetik, die bestimmte Hypothesen mit Gödel -Satz befriedigt GTdann beweist PRA die Implikationskon (T) →GT.
In ähnlicher Weise können viele der syntaktischen Ergebnisse in der Prooftheorie in PRA bewiesen werden, was impliziert, dass es primitive rekursive Funktionen gibt, die die entsprechenden syntaktischen Transformationen von Beweisen ausführen.
In der Beweistheorie und MengenlehreEs besteht ein Interesse an endistisch KonsistenznachweiseDas heißt, konsistente Beweise, dass selbst endlich akzeptabel sind. Ein solcher Beweis zeigt, dass die Konsistenz einer Theorie T impliziert die Konsistenz einer Theorie S Durch die Erzeugung einer primitiven rekursiv S in einen Beweis für eine Inkonsistenz von T. Eine ausreichende Bedingung für einen Konsistenznachweis, um endistisch zu sein, ist die Fähigkeit, ihn in PRA zu formalisieren. Zum Beispiel führt viele Konsistenz in der festgelegten Theorie, die von erhalten werden durch zwingen kann als syntaktische Beweise neu gestaltet werden, die in PRA formalisiert werden können.
Geschichte
Rekursive Definitionen Wurde zuvor mehr oder weniger formal in Mathematik verwendet, aber die Konstruktion einer primitiven Rekursion wird zurückgeführt Richard Dedekind's Theorem 126 von ihm War Sind und war Sollen Zahlen? (1888). Diese Arbeit lieferte die erste, die einen Beweis dafür lieferte, dass eine bestimmte rekursive Konstruktion eine einzigartige Funktion definiert.[7][8][9]
Primitive rekursive Arithmetik wurde zuerst von vorgeschlagen von Thoralf Skolem[10] 1923.
Die aktuelle Terminologie wurde von geprägt von Rózsa Péter (1934) nach Ackermann hatte 1928 bewiesen, dass die Funktion, die heute nach ihm benannt ist, nicht primitiv rekursiv war, ein Ereignis, das die Notwendigkeit veranlasste, das zu benennen, was bis dahin einfach als rekursive Funktionen bezeichnet wurde.[8][9]
Siehe auch
- Grzegorczyk Hierarchie
- Rekursion (Informatik)
- Primitive rekursive Funktional
- Doppelte Rekursion
- Primitive rekursive Set -Funktion
- Primitive rekursive Ordnungsfunktion
Anmerkungen
- ^ Brainerd und Landweber, 1974
- ^ Kleene [1952 S. 226–227]
- ^ Dies folgt aus den Tatsachen, dass die Funktionen dieser Form die schnellsten primitiven rekursiven Funktionen sind und dass eine Funktion primitiv rekursiv ist, wenn ihre Zeitkomplexität durch eine primitive rekursive Funktion begrenzt wird. Für erstere siehe Linz, Peter (2011), Eine Einführung in formelle Sprachen und Automaten, Jones & Bartlett Publishers, p. 332, ISBN 9781449615529. Für letztere siehe Moore, Cristopher; Mertens, Stephan (2011), Die Art der Berechnung, Oxford University Press, p. 287, ISBN 9780191620805
- ^ Fischer, Fischer & Beigel 1989.
- ^ M. Fischer, R. Fischer, R. Beigel. "Primitive Rekursion ohne implizite Vorgänger". CiteSeerx.ist.psu.edu. Abgerufen 2022-02-17.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Meyer, Albert R.; Ritchie, Dennis M. (1967). Die Komplexität von Schleifenprogrammen. ACM '67: Verfahren der 22. Nationalen Konferenz von 1967. doi:10.1145/800196.806014.
- ^ Peter Smith (2013). Eine Einführung in Gödels Theoreme (2. Aufl.). Cambridge University Press. S. 98–99. ISBN 978-1-107-02284-3.
- ^ a b George Tourlakis (2003). Vorträge in der Logik- und Set -Theorie: Band 1, mathematische Logik. Cambridge University Press. p. 129. ISBN 978-1-139-43942-8.
- ^ a b Rod Downey, ed. (2014). Turings Vermächtnis: Entwicklungen aus Turings Ideen in der Logik. Cambridge University Press. p. 474. ISBN 978-1-107-04348-0.
- ^ Thoralf Skolem (1923) "Die Grundlagen der Elementararithmetik" in Jean van Heijenoort, Übersetzer und Ed. (1967) Von Frege nach Gödel: Ein Quellbuch in der mathematischen Logik, 1879-1931. Harvard Univ. Drücken Sie: 302-33.
Verweise
- Brainerd, W. S., Landweber, L. H. (1974), Theorie der Berechnung, Wiley, ISBN0-471-09585-0
- Fischer, Michael J.; Fischer, Robert P.; Beigel, Richard (November 1989). "Primitive Rekursion ohne implizite Vorgänger". ACM Sigact News. 20 (4): 87–91. doi:10.1145/74074.74089. S2CID 33850327.
- Robert I. Soare, Rekursiv aufzählbare Sätze und Grad, Springer-Verlag, 1987. ISBN0-387-15299-7
- Stephen Kleene (1952) Einführung in Metamathematik, North-Holland Publishing Company, New York, 11. Nachdruck 1971: (2. Ausgabe Notizen zum 6. Nachdruck). In Kapitel XI. Allgemeine rekursive Funktionen §57
- George Boolos, John Burgess, Richard Jeffrey (2002), Berechnbarkeit und Logik: vierte Ausgabe, Cambridge University Press, Cambridge, Großbritannien.Vgl. S. 70–71.
- Robert I. Soare 1995 Berechnbarkeit und Rekursion http://www.people.cs.uchicago.edu/~soare/history/compute.pdf
- Daniel Severin 2008, Unäre primitive rekursive Funktionen, J. Symbolische Logik Band 73, Ausgabe 4, S. 1122–1138 Arxiv projectouclid doi:10.2178/JSL/1230396909 JStor 275903221