Perché le funzioni calcolabili sono anche chiamate funzioni ricorsive?


23

Nella teoria della computabilità, le funzioni calcolabili sono anche chiamate funzioni ricorsive. Almeno a prima vista, non hanno nulla in comune con ciò che tu chiami "ricorsivo" nella programmazione quotidiana (cioè funzioni che si definiscono).

Qual è il significato effettivo di ricorsivo nel contesto della calcolabilità? Perché quelle funzioni sono chiamate "ricorsive"?

Per dirla in altre parole: qual è la connessione tra i due significati di "ricorsività"?



3
Imbrogliano perché includono l' operatore μ . Questo è un operatore di minimizzazione, ma ovviamente la minimizzazione ha ben poco a che fare con la ricorsione. Quindi sembra che qualcuno (Kleene) abbia pensato che "ricorsivo" avrebbe suonato bene, così ha inventato una scusa per usare quel nome. Molto più tardi, Robert Soare spiegò che "calcolabile" avrebbe suonato molto meglio, e che "ricorsivo" era stato solo un trucco di marketing dei primi tempi, e tutti erano d'accordo.
Thomas Klimpel,

3
Che cosa sono le funzioni ricorsive primitive? Copiati da Wikipedia sono definiti come e . Questa è una funzione che si chiama da sola. x k )h(0,x1,,xk)=f(x1,,xk)h(S(y),x1,,xk)=g(y,h(y,x1,,xk),x1,,xk)
Hendrik Jan

3
@GoloRoden Nota che la descrizione del tag di 'calcolabilità' (l'hai usata per questa domanda) dice: "teoria della calcolabilità nota anche come teoria della ricorsione". Gödel ha definito funzioni ricorsive , ma il termine si è evoluto in calcolabile . Probabilmente per evitare confusioni come la tua. Le persone che studiano la teoria della computabilità (intensamente) tendono ad usare il termine teoria della ricorsione più per "rispettare" le sue radici.
Auberon,

1
perché sono definiti in modo ricorsivo, cioè "le funzioni più complesse sono definite in termini di funzioni precedentemente definite e più semplici "
Nikos M.

Risposte:


13

Definire alcune funzioni di base:

  • funzione zero

    zero:NN:x0
  • funzione successiva

    succ:NN:xx+1
  • funzione di proiezione

pin:NnN:(x1,x2,,xn)xi

D'ora in poi userò per indicare ( x 1 , x 2 , , x n )xn¯(x1,x2,,xn)

Definisci una composizione:

Funzioni fornite

  • ciascuno con firma N kNg1,g2,,gmNkN
  • f:NmN

Costruisci la seguente funzione:

h:NkN:xk¯h(xk¯)=f(g1(xk¯),g2(xk¯),,gm(xk¯))

Definire la ricorsione primitiva:

Funzioni fornite

  • f:NkN
  • g:Nk+2N

Costruisci la seguente funzione (a tratti):

h:Nk+1N:(xk¯,y+1){f(xk¯),y+1=0g(xk¯,y,h(xk¯,y)),y+1>0

Tutte le funzioni che possono essere eseguite utilizzando composizioni e ricorsività primitiva su funzioni di base , sono chiamate ricorsive primitive . Si chiama così per definizione. Mentre esiste un collegamento con funzioni che si richiamano da soli, non è necessario provare a collegarli tra loro. Potresti considerare la ricorsione un omonimo.

Questa definizione e costruzione di cui sopra è stata costruita da Gödel (anche poche altre persone erano coinvolte) nel tentativo di catturare tutte le funzioni che sono calcolabili, cioè esiste una macchina di Turing per quella funzione. Si noti che il concetto di una macchina di Turing non era ancora stato descritto, o era almeno molto vago.

(Un) per fortuna, qualcuno chiamato Ackermann è arrivato e ha definito la seguente funzione:

  • Ack:N2N
  • Ack(0,y)=y+1
  • Ack(x+1,0)=Ack(x,1)
  • Ack(x+1,y+1)=Ack(x,Ack(x+1,y))

Questa funzione è calcolabile, ma non c'è modo di costruirla usando solo le costruzioni sopra! (vale a dire non è ricorsiva primitiva) Ciò significa che Gödel e la sua posse non è riuscito a catturare tutte le funzioni calcolabili nella loro costruzione!Ack

Gödel ha dovuto espandere la sua classe di funzioni in modo potrebbe essere costruito. Lo ha fatto definendo quanto segue:Ack

Minimizzazione illimitata

  • g:NkN
  • IF [f(xk¯,y)=0 AND f(xk¯,z) is defined z<y AND f(xk¯,z)0]

    g(xk¯)=y

    g(xk¯)

g((x1,x2,,xk))f


Tutte le funzioni che possono essere costruite con tutte le costruzioni sopra definite sono chiamate ricorsive . Ancora una volta, il nome ricorsivo è solo per definizione e non ha necessariamente una correlazione con le funzioni che si definiscono. Davvero, consideralo un omonimo.

Ack

Ack

Se sei incuriosito, potresti provare ad aumentare la classe di Gödel. Puoi provare a definire il "contrario" della minimizzazione illimitata. Cioè, massimizzazione illimitata , ovvero la funzione che trova la radice più grande. Tuttavia, potresti scoprire che calcolare quella funzione è difficile (impossibile). Puoi leggere il Problema Beaver occupato , che tenta di applicare la massimizzazione illimitata.


4
So che le definizioni fornite non rispondono davvero alla domanda, ma la mia risposta descrive l'evoluzione della teoria della ricorsione / computabilità, in un certo senso. Potrebbe valere la pena di leggerlo.
Auberon,

Mi piace, grazie per i tuoi sforzi :-)
Golo Roden,

In "if h((x1,x2,...,xk),0)=f((x1,x2,...,xk))", I think you mean h((x1,x2,...,xk,0)). Also, there is no then clause prior to the next bullet point's else clause.
Eric Towers

2
Afaik, this is subtly wrong. The set if μ-recursive functions is called the set of partially recursive functions whereas recursive functions are always total. That's why the set of all total functions (resp. languages that can be decided) is called R.
Raphael

1
There are quite a few incorrect statements in your answer. You should not make up history for an answer.
Kaveh

17

The founders of computability theory were mathematicians. They founded what is now called computability theory before there was any computers. What was the way mathematicians defined functions that could be computed? By recursive definitions!

So there were recursive function before there were any other model of computation like Turing machines or lambda calculus or register machines. So people referred to these function as recursive functions. The fact that they turned out to be exactly what Turing machines and other models can compute is a later event (mostly proven by Kleene).

We have the simple definition of a recursive function which is now called primitive recursive function. There were not general enough (e.g. Ackermann's function) so people developed more general notions like μ-recursive functions and Herbrand-Gödel general recursive functions that did capture all computable functions (assuming the Church's thesis). Church claimed that his model of lambda calculus captured all computable functions. Many people, and in particular Gödel, were not convinced that these capture all functions that can be computed. Until Turing's analysis of computation and introduction of his machine model.

Il nome del campo usato per la teoria della ricorsione. Tuttavia, negli ultimi decenni c'è stata una spinta positiva nel cambiare il nome in qualcosa di più accattivante dalla teoria della ricorsione a qualcosa di più informatica (contro la matematica). Di conseguenza il campo è ora chiamato teoria della calcolabilità. Tuttavia, se si guardano libri, documenti, conferenze, ecc. Nei primi decenni, vengono chiamati teoria della ricorsione e non teoria della calcolabilità. Anche il titolo del libro di Soare del 1987 (che era la persona principale dietro la spinta a cambiare il nome in teoria della calcolabilità) è "Insiemi e gradi ricorsivamente enumerabili".

Se vuoi saperne di più sulla storia, un posto divertente e buono da leggere al riguardo è il primo capitolo della Teoria della ricorsione classica di Odifreddi.


7

Robert Soare ha scritto un saggio su questo problema. Secondo lui, il termine funzioni ricorsive (generali) è stato coniato da Gödel, che le ha definite usando una sorta di ricorsione reciproca. Il nome rimase, anche se in seguito furono trovate altre definizioni equivalenti.

Per ulteriori informazioni, raccomando il saggio di Soare.


0

invece di fare un lungo commento ho deciso di aggiungere una risposta:

Poiché sono definiti in modo ricorsivo , ovvero "le funzioni più complesse sono definite in termini di funzioni precedentemente definite e più semplici "

Questo tipo di procedura iterativa o incrementale crea funzioni ben definite (in senso matematico)

Questo è il significato della ricorsività nel linguaggio matematico. Vedi sotto come ciò si riferisce alla ricorsione nel linguaggio di programmazione.

Confronta questa procedura con tecniche e metodi come l' induzione (matematica) che è anche un esempio di ricorsività in matematica.

La programmazione ha una vena matematica oltre che ingegneristica.

This (usualy constructive) procedure is also refered as "bootstrapping" in Operating Systems parlance.

However a runtime recursion of the same function (i.e caling itself during its runtime), since it must (hmm, should) happen on already computed values (or arguments), or in other words, in the part of the result set already computed, is also recursive in the above sense, i.e "defined w.r.t previously defined functions (and their values)"

Else is not well-defined, and leads to such things like Stack Overflow :))))

To give a further example from Operating Systems, a runtime recursion (calling itself) can be taken as the analog of an operating system rebooting after a certain update (e.g core update). Many OSes do the following procedure:

  1. an initial boot to load low-level routines (e.g I/O)
  2. do the necessary updates (using the low-level routines)
  3. re-boot (effectively, re-calling itself), but this time loading the more complex routines (or even the whole system)

Auberon's beautiful answer demonstrates a procedure of this kind in more detail.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.