Rekursiv funktion (beregnelighedsteori)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 4. juni 2021; checks kræver 2 redigeringer .

Udtrykket rekursiv funktion i beregningsteori bruges til at henvise til tre klasser af funktioner:

Sidstnævnte falder sammen med klassen af ​​Turing-beregnerbare funktioner . Definitionerne af disse tre klasser er stærkt relaterede. De blev introduceret af Kurt Gödel for at formalisere begrebet beregnelighed.

Sættet af delvist rekursive funktioner omfatter sættet af generelle rekursive funktioner, og de generelle rekursive funktioner inkluderer primitive rekursive funktioner. Delvist rekursive funktioner omtales undertiden blot som rekursive funktioner.

Primitiv rekursiv funktion

Definition

Definitionen af ​​begrebet primitiv rekursiv funktion er induktiv . Den består i at specificere en klasse af grundlæggende primitive rekursive funktioner og to operatorer ( superposition og primitiv rekursion ), der tillader opbygning af nye primitive rekursive funktioner baseret på eksisterende.

De grundlæggende primitive rekursive funktioner omfatter følgende tre typer funktioner:

Substitutions- og primitive rekursionsoperatører er defineret som følger:

I denne definition kan en variabel forstås som en iterationstæller, — som en indledende funktion i begyndelsen af ​​iterationsprocessen, der udsteder en bestemt rækkefølge af funktioner af variable, begyndende med , og — som en operator, der accepterer som inputvariabler , iterationstrinnummer , en funktion ved et givet iterationstrin og returnerende funktion i det næste trin i iterationen.

Sættet af primitive rekursive funktioner er det minimale sæt, der indeholder alle grundlæggende funktioner og lukket under de specificerede substitutions- og primitive rekursionsoperatorer.

Med hensyn til imperativ programmering svarer primitive rekursive funktioner til programblokke, der kun bruger aritmetiske operationer, samt en betinget operator og en aritmetisk sløjfeoperator (en sløjfeoperator, hvor antallet af iterationer er kendt på det tidspunkt, hvor sløjfen starter). Hvis programmøren begynder at bruge loop-operatoren while, hvor antallet af iterationer ikke er kendt på forhånd og i princippet kan være uendeligt, så går han over i klassen af ​​delvist rekursive funktioner.

Eksempler

Lad os pege på en række velkendte aritmetiske funktioner , der er primitivt rekursive.

; ; . ; ; . ; ; ; ; ;

Delvis rekursiv funktion

En delvist rekursiv funktion er defineret på samme måde som en primitiv rekursiv, kun for to operatorer, superposition og primitiv rekursion, tilføjes en tredje operator - argumentminimering.

, på betingelse Det vil sige, at funktionen returnerer minimumsværdien af ​​det sidste argument i funktionen , hvor dens værdi er 0.

Delvis rekursive funktioner for nogle argumentværdier er muligvis ikke defineret, da argumentminimeringsoperatoren ikke altid er korrekt defineret, da funktionen muligvis ikke er lig med nul for nogen argumentværdier. Fra synspunktet om imperativ programmering kan resultatet af en delvist rekursiv funktion ikke kun være et tal, men også en undtagelse eller en uendelig sløjfe svarende til en udefineret værdi.

Generel rekursiv funktion

En generel rekursiv funktion er en delvist rekursiv funktion defineret for alle argumentværdier. Problemet med at afgøre, om en delvist rekursiv funktion med en given beskrivelse er generel rekursiv eller ej, er algoritmisk uafgørligt .

Egenskaber

Det er let at forstå, at enhver primitiv rekursiv funktion er delvist rekursiv, da operatorerne til at konstruere delvist rekursive funktioner per definition inkluderer operatorerne til konstruktion af primitive rekursive funktioner.

Det er også klart, at en primitiv rekursiv funktion er defineret overalt og derfor er en generel rekursiv funktion (en primitiv rekursiv funktion har ingen grund til at "hænge", da dens konstruktion bruger operatorer, der definerer funktioner defineret overalt).

Det er ret svært at bevise eksistensen og give et eksempel på en generel rekursiv funktion, der ikke er primitivt rekursiv. Et populært eksempel er Ackermann-funktionen . Et andet eksempel på en generel rekursiv funktion, der ikke er primitiv rekursiv, er konstrueret ved Cantors diagonale metode ud fra en universel funktion for et sæt unære primitive rekursive funktioner.

Som det blev vist af Gödel , falder delvist rekursive funktioner sammen med sættet af beregnelige funktioner .

Navnehistorik

Udtrykkene "partially recursive function" og "general recursive function" har slået rod af historiske årsager og er i det væsentlige resultatet af en unøjagtig oversættelse af de engelske termer partial recursive function og total recursive function , som er mere korrekt oversat som "rekursive funktioner defineret på dele af sættet af mulige argumenter ” og ”rekursive funktioner defineret på hele sættet af mulige argumenter”. Adverbiet "delvis" henviser ikke til adjektivet "rekursivt", men til funktionens omfang . Måske ville et mere korrekt navn være "delvist definerede rekursive funktioner" og blot "overalt definerede rekursive funktioner". Men lange navne slog ikke rod.

Se også

Litteratur