¿Existe una breve construcción explícita de una función recursiva universal ? Todas las definiciones que he visto involucran la numeración de máquinas de Turing de alguna manera, lo que es posible pero parece difícil e inmanejable escribir en un lenguaje de programación de nivel superior (como Python, Haskell, etc.)
9
Respuestas:
¿Qué tal el intérprete Lisp original de McCarthy (originalmente aquí )? Es universal, funciona con una codificación natural (un AST de Lisp), no se basa en un intérprete externo y tiene aproximadamente 20 líneas.
fuente
Por supuesto. Escriba rutinas que calculen cada una de las funciones recursivas primitivas de Godel , y escriba una rutina para un operador de búsqueda ilimitado. El conjunto de funciones que puede calcular de esta manera es equivalente al conjunto de funciones que las máquinas de Turing pueden calcular. Más información aquí .
La desventaja es que cualquier entrada a su programa universal necesitaría enmarcarse en términos de esas operaciones simples. Por supuesto, para eso están los compiladores.
fuente
Cualquier intérprete para cualquier idioma que sea Turing completo es una función recursiva universal. Hay intérpretes para lenguajes de alto nivel como C ++ o Python.
fuente
Una función universal
u
se puede escribir con bastante facilidad en un lenguaje similar a Haskell (sin efectos secundarios, funciones de orden superior), a saber:La función
u
es universal ya que acepta (la descripción de) un programaf
y una cinta de entradax
, y le dice que el resultado de la ejecuciónf
dex
.Si bien esta respuesta no es del todo seria, muestra que un compilador o un intérprete para un lenguaje similar a Haskell ya contiene todas las partes de construcción necesarias para una función universal. La moraleja de la historia es que es mejor dedicar tiempo a estudiar cómo funcionan los compiladores e intérpretes que preocuparse por implementar una función universal en términos de máquinas Turing.
fuente
u
toma una función: la llamaría una función de orden superior. Me gustaríau
tomar un número entero, o un tipo de datos algebraico regular. No fuerzo ningún modelo específico de cálculo, siempre que el argumentou
sea tangible; por ejemplo, se puede serializar desde / a una cadena.u
se cierra, que es una secuencia finita de bytes. Incluso en el teorema de utm habitual, el entero queu
toma representa una función.Consulte también este artículo de John Tromp, utilizando lógica combinatoria. Un informe anterior, aparentemente ya no disponible, era aún más ordenado.
fuente