2010-03-23 10 views
7

Un amigo que estudia matemáticas puras me pide que piense en el siguiente problema.¿Cuál es el resultado de X (X, X)?

Supongamos que hay un algoritmo llamado X que tiene 2 entradas: A y a_1 ... a_n, donde 'A' representa un algoritmo arbitrario y 'a_1..a_n' son entradas de A. X recibe A y sus entradas y devuelve verdadero si A con a_1..a_n podría terminarse, y falso si A con a_1..a_n las entradas caen en un bucle infinito (nunca termina). De esta manera:

A(n): 
    while(n<5): 
     write "I'm immortal!" 

y el resultado de X(A,6) es verdadera y X(A,2) es falso.

¿Cuál es el resultado de X(X,X)?

Además, ¿sabes quién fue el primero en introducir este problema?

editado después de una hora pensando en profundidad: ¿podría ver algo equivalente a la paradoja Russel aquí?

+10

¿No es una pregunta real? La pregunta es, dado un cierto algoritmo X, cuál es el resultado de X (X, X). Es una pregunta muy real y relacionada con la programación. –

+0

@Bruno Brant: lea el enlace en la respuesta aceptada para ver por qué no es realmente una pregunta real. Es como "Tenemos un motor. ¿Cómo hacer que su eficiencia sea 100% o más?". A primera vista, parece un problema de ingeniería interesante. – Roman

+0

@Roman: La definición de "no es una pregunta real" es * "Es difícil decir lo que se pregunta aquí. Esta pregunta es ambigua, vaga, incompleta o retórica. no se puede responder razonablemente en su forma actual. "*. ¿Cuál de estas preguntas viola esta pregunta? – kennytm

Respuesta

19

Si existe, se devuelve cierto. Prueba: supongamos que devuelve falso. Luego cae en un ciclo infinito y nunca termina. Esto es una contradicción.

Pero bastante más interesante es el programa Y que se puede derivar de X, y que detiene si y solo si sus parámetros no se detienen. Entonces Y (Y, Y) produce una contradicción: o se detiene (lo que significa que no se detiene), o no lo hace (en cuyo caso sí lo hace). Por lo tanto, X no existe. Los detalles se omiten, por ejemplo, hemos agitado un poco las manos en cuanto a si X e Y toman uno o dos parámetros.

Los problemas relacionados con la pregunta se debatieron en el siglo XIX: el décimo problema de David Hilbert (pedido en 1900) solicita un algoritmo para determinar si una ecuación diophantina dada tiene una solución. En retrospectiva, esto se puede expresar como un caso especial del problema de detención: encontrar un algoritmo para determinar si una búsqueda de fuerza bruta para una solución se detiene o no. Entonces X resolvería el décimo problema, pero la inexistencia de X dejó abierto el décimo problema. Finalmente se cerró en 1970, después de 20 años de trabajo de Martin Davis, Julia Robinson, Yuri Matiyasevich y otros. Hilbert declaró completamente el "Entscheidungsproblem" en 1928, que es la misma idea que el problema de detención, pero para probar si las afirmaciones en aritmética son verdaderas, en lugar de probar si los programas se detienen.

Creo que Alan Turing inventó la terminología necesaria para expresar el problema de detención como usted y probó el resultado (1936). Pero Alonzo Church había demostrado la existencia de problemas indecidibles en el cálculo lambda (también 1936), y los teoremas de incompletitud de Kurt Goedel (1931) hicieron tanto trabajo preliminar que usar sus técnicas para obtener esos resultados de computación fue probablemente un logro menor en ambos casos que formular los problemas habían sido (es decir, inventar el cálculo lambda y el modelo informático de Turing).

Relevancia para Russell Paradox (1901): sí, las pruebas tienen algo de la misma forma. En ambos casos, considera un objeto que representa un predicado evaluado en una clase que incluye el objeto mismo ("conjunto de todos los conjuntos, programa que actúa sobre los programas"). Asumes su existencia, permitiéndote construir un nuevo objeto modificando el predicado ("conjunto de todos los conjuntos que no son miembros de ellos mismos, programa que detiene si y solo si su entrada no se detiene"), produciendo una contradicción cuando intentas para evaluar el nuevo predicado "aplicado a sí mismo". Esto refuta la premisa ("existe un conjunto de todos los conjuntos", "existe un algoritmo para probar la detención").

Es posible que haya algo en la teoría de Topos (u otro análisis estructural de las matemáticas) que formalice la similitud, pero no sé lo que sería.

Sin embargo, hay una diferencia práctica significativa entre los resultados: la inexistencia de X simplemente prueba que el problema de detención no es decidible por un algoritmo, por lo que si eres David Hilbert tienes que volver a evaluar tus expectativas de lo que es posible en matemáticas Russell Paradox demostró que las teorías de los conjuntos en uso en ese momento eran inconsistentes, por lo que si eres Georg Cantor tienes que volver a evaluar cada prueba que hayas escrito. Esto provocó las primeras teorías axiomáticas formales formales, y re-declaraciones del trabajo de Cantor, Dedekind y otros teóricos del grupo, quienes habían estado trabajando con definiciones ingenuas de conjuntos que admitían la paradoja.

+0

Dale un minuto. –

+1

"Si existe, devuelve verdadero. Prueba:" No existe, entonces cualquier oración que comience con "si existe" es verdadera :-) –

+0

@ Rafał: claro, pero X e Y son cruciales para la prueba de el teorema de Church-Turing. He presentado un esquema muy esquemático de la prueba del teorema, sobre la base de que el tema es mucho más interesante que esta propiedad de X. Para probar el teorema, uno debe razonar acerca de sus propiedades, sin usar el (todavía no probado)) teorema –

8

¿No es esto solo the halting problem?

+5

Aumente su confianza. No pregunte si es el problema de detención, digamos que es el problema de detención :-) – phkahler

+0

Es el problema de detención, pero la pregunta es acerca de una entrada en particular. Entonces, esta no es realmente una respuesta a la pregunta. –

+0

no, no es exactamente el problema para detenerse. Es la prueba de que Halt es indecidible. No es exactamente "Con una entrada particular" ya sea porque la "entrada particular" es el programa en sí ... –

11

Eche un vistazo a the halting problem.

+2

No, eso no es realmente correcto. El problema de detención es "dar una descripción de un programa, decidir si el programa termina de ejecutarse o se ejecutará para siempre". La pregunta aquí es, sin embargo, cuál sería el resultado de este programa si la entrada fuera el programa en sí y sus parámetros. Sin embargo, no hay respuesta a esta pregunta porque, como demostró Alan Turing (ver enlace en esta respuesta), dicho programa no existe: "no hay una función computable total que decida si un programa arbitrario se detiene en una entrada arbitraria x" –

+0

Si bien este es el problema de detención, no encontré la solución a esta pregunta peculiar en el artículo de wikipedia. ¿No es posible esta opción en particular? –

+0

@ Bruno: sin embargo, la pregunta aquí es teórica y supongamos que tenemos dicho algoritmo. A menos que esta suposición conduzca a un absurdo, ¿no es posible responder realmente a la pregunta? –

1

Esto suena como el problema de la detención, y para responder a su pregunta, creo que fue Alan Turing quien lo discutió por primera vez (aunque no estoy seguro de que realmente lo llamó "El problema de la detención").

4

No hay respuesta a la pregunta. El programa X no existe. Alan Turing demostró que:

no hay una función computable total de que decide si un programa arbitrario i se detiene en la entrada arbitraria x

ver la prueba aquí: http://en.wikipedia.org/wiki/Halting_problem

En resumen, Alan Turing definió el problema de detención como "dada la descripción de un programa, decidir si el programa termina de ejecutarse o si se ejecutará para siempre". La pregunta aquí es, sin embargo, cuál sería el resultado de este programa si la entrada fuera el programa en sí. La razón por la cual no hay una respuesta real a esta pregunta es que, como demostró Alan Turing (ver enlace en esta respuesta), ese programa no existe: "no hay una función computable total que decida si un programa arbitrario detiene en arbitrario entrada X"

3

X tiene dos entradas, por lo X(X) no tiene sentido, por lo tanto, X(X,X) no tiene mucho sentido tampoco.

que está bien, ya que X no existe de todos modos (ver otras respuestas) :)

+0

Meh, siempre podemos codificar argumentos múltiples como un argumento con productos cruzados B-) –

+0

Para hacer que 'X (X)' funcione, también necesita saber qué 'X' hace con * argumentos * cero, entonces duh. –

+0

IIRC lo que se hace es definir primero X con dos argumentos, luego definir x (n) para que sea X (n, n). Entonces considera x (x). Algo parecido a eso, de todos modos, me olvido de la construcción exacta. –

0

La pregunta existe supongamos que X, por lo que:

supongamos que X es nuestro algoritmo "imposible" que informa si cualquier otro algoritmo Una acabados para una entrada dada. Si suministramos X con X como el algoritmo de análisis y un conjunto de entrada Y para poner a prueba en las direcciones X, como:

X (X, Y)

Sabemos que devolverá verdadero. Ahora, digamos que X recibe como entrada X en sí, lo que significa,

Veamos si X termina cuando X está analizando X ... Lo cual es cierto, ya que X puede analizar cualquier cosa. En otras palabras, si X existió, entonces X (X, X) sería verdadero.

Cuestiones relacionadas