Scrittura della funzione ricorsiva universale [chiuso]


9

Esiste una breve costruzione esplicita di una funzione ricorsiva universale ? Tutte le definizioni che ho visto riguardano in qualche modo la numerazione delle macchine di Turing, che è possibile ma sembra difficile e ingestibile scrivere in un linguaggio di programmazione di livello superiore (come Python, Haskell ecc.)


La domanda è stata originariamente posta alla SO , qui sembra più appropriata.
sdcvvc,

1
La mia comprensione è che ciò che fa una funzione ricorsiva universale è esattamente quello di dare una certa numerazione delle funzioni ricorsive (o equivalentemente macchine di Turing) in modo che il risultato possa essere calcolato dall'indice di una funzione ricorsiva e dall'input. Pertanto, "una funzione ricorsiva universale senza numerazione delle macchine di Turing" non mi sembra plausibile.
Tsuyoshi Ito,

3
Non livello di ricerca. Qualsiasi interprete per un linguaggio completo di Turing è una funzione ricorsiva universale.
Warren Schudy,

Risposte:



13

Sicuro. Scrivi routine che calcolano ciascuna delle primitive funzioni ricorsive di Godel e scrivi una routine per un operatore di ricerca illimitato. L'insieme di funzioni che è possibile calcolare in questo modo equivale all'insieme di funzioni che le macchine di Turing possono calcolare. Maggiori informazioni qui .

L'aspetto negativo è che qualsiasi input per il tuo programma universale dovrebbe essere inquadrato in termini di quelle semplici operazioni. Naturalmente, questo è ciò che serve per i compilatori.


10

Qualsiasi interprete per qualsiasi lingua completa da Turing è una funzione ricorsiva universale. Esistono interpreti per linguaggi di alto livello come C ++ o Python.

gg


Un interprete per Turing Machines (o Register Machines, o funzioni ricorsive) è anche una funzione ricorsiva universale e non è difficile implementarle. Li ho implementati in C ++ alcuni anni fa e sono abbastanza sicuro che sarebbe ancora più semplice in Python. Usa Google, ci sono molti simulatori gratuiti su Internet e alcuni di essi sono persino open-source.
Kaveh,

8

Una funzione universale upuò essere scritta abbastanza facilmente in un linguaggio simile a Haskell (senza effetti collaterali, funzioni di ordine superiore), vale a dire:

u f x = f x

La funzione uè universale perché accetta (la descrizione di) un programma fe un nastro di ingresso x, e ti dice il risultato di correre fsu x.

Sebbene questa risposta non sia del tutto seria, mostra che un compilatore o un interprete per un linguaggio simile a Haskell contiene già tutte le parti necessarie per una funzione universale. La morale della storia è che il tempo viene speso meglio studiando come funzionano i compilatori e gli interpreti piuttosto che preoccuparsi di implementare una funzione universale in termini di macchine di Turing.


Tuttavia, uaccetta una funzione: la definirei una funzione di ordine superiore. Vorrei uprendere un numero intero o un tipo di dati algebrico regolare. Non impongo alcun modello specifico di calcolo, purché l'argomento usia tangibile - ad esempio, può essere serializzato da / a una stringa.
sdcvvc,

Su una macchina reale (una volta compilato il codice) uprende una chiusura, che è una sequenza finita di byte. Anche nel solito teorema utm l'intero che uassume rappresenta una funzione.
Andrej Bauer,

5

Consulta anche questo articolo di John Tromp, usando la logica combinatoria. Una precedente scrittura, apparentemente non più disponibile, era persino più ordinata.

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.