En Computabilidad, si queremos demostrar que un problema no es recursivo o recursivamente enumerable, podemos usar, por ejemplo, reducciones de otros problemas no recursivos o no re, el teorema de Rice, el teorema de Rice-Shapiro, etc. Estas técnicas funcionan gracias a , o se basan directamente en la existencia de algún argumento diagonal (es decir, algún programa comporta de manera opuesta a su programa de entrada M ' , por lo que M = M ' es contradictorio). En Complejidad, si queremos demostrar que algún problema no se puede calcular en algún momento (independientemente de cualquier reclamo no probado como, por ejemplo, P ≠ N P), utilizamos argumentos que, en última instancia, se basan en algún argumento diagonal (por ejemplo, el teorema de la jerarquía de tiempo demuestra que -los problemas completos no están en P , pero ese teorema también se prueba utilizando un argumento diagonal).
Entonces mi pregunta es la siguiente. ¿Todos los resultados imposibles importantes resultan en Computabilidad y Complejidad (imposibilidad real, no imposibilidad hasta algún resultado no probado) en última instancia debido a algún argumento diagonal? Es decir, ¿todo nuestro importante "conocimiento de imposibilidad" en Computabilidad y Complejidad proviene del hecho de que los programas son lo suficientemente potentes como para ejecutar programas?
El único resultado importante de imposibilidad que viene a mi mente que no se debe en última instancia a un argumento diagonal es que la función de Ackermann no es primitiva recursiva. ¿Me estoy perdiendo otros contraejemplos importantes de esta aparente "regla"?
EDITAR (18 de noviembre): Perdón por implicar que mi pregunta se centró particularmente en el argumento diagonal en sí, pero estoy más interesado en todos los argumentos que se basan en la auto referencia de los programas (incluido el argumento diagonal, la paradoja de Berry, etc.). Para lenguajes más simples (p. Ej., Regular o sin contexto), tenemos argumentos de imposibilidad "estructural" basados en cómo se construyen estos lenguajes (p. Ej., Bombear lemas). Sin embargo, para los idiomas recursivos o re, la mayoría de los resultados de imposibilidad dependen en gran medida de la autorreferencia de los programas. Esto es lo que quise decir.
fuente
Respuestas:
Los límites inferiores en modelos de computación no uniformes, como las fórmulas y circuitos booleanos, se prueban utilizando argumentos combinatorios. Algunos ejemplos son el método de Krapchenko que utiliza medidas formales de complejidad, el método de aproximaciones de Razborov para circuitos monótonos, el método de restricción aleatoria, que incluye restricción aleatoria + el lema de conmutación, y límites inferiores de profundidad utilizando la complejidad de la comunicación a través de los juegos de Karchmer-Wigderson. Puede encontrar notas de conferencias sobre este material de Sudán , Kopparty , Buss , Zwick , entre otros.
fuente
El límite inferior del modelo de comparación estándar para la clasificación, y la mayoría de los límites inferiores del modelo de sonda celular para estructuras de datos, son incondicionales (para calcular dentro del modelo, pero podría decirse lo mismo sobre los límites inferiores de la máquina Turing) y dependen de la teoría de la información en lugar de la diagonalización.
fuente
Una herramienta que puede usarse para probar resultados negativos / imposibilidad es el método de incompresibilidad :
En última instancia, el teorema anterior se basa en el Principio de la paloma, que tiene algunas buenas aplicaciones directas; por ejemplo:
fuente
En realidad, el problema de detención se puede probar sin utilizar la diagonalización. (Y cada teorema ZFC válido tiene una prueba ZFC que usa diagonalización ... piénselo).
La prueba utiliza la paradoja de Berry y procede de la siguiente manera:
Indexe todas las máquinas de Turing de manera razonable. Supongamos, en aras de la contradicción, que el problema de detención se puede resolver. Entonces considere este algoritmo:
f (N) devuelve la máquina de Turing menos indexada X st X (X) no se detiene y X no es la salida de ninguna máquina de Turing M y la entrada I en N caracteres (es decir, M (I) salidas X -> | M | + | I |> = N).
Ahora, seleccionamos N st f (N) suficientemente grande que debe devolver una descripción de X que se describe precisamente por el cálculo de f (N). Si f es computable, entonces M = f e I = N. Por ejemplo, podríamos dejar que N = un googol (10 ^ 100).
Esto sugiere que f (N) no es una función total, porque para f (10 ^ 100), no hay salida satisfactoria. Esto contradice la suposición de que el problema de detención puede resolverse. Considere el siguiente pseudocódigo (que es mucho menos de 10 ^ 100 caracteres cuando se expande al código fuente verdadero en C ++ o incluso se escribe como una máquina de Turing) para f:
Claramente, f se detiene en todas las entradas y funciona correctamente asumiendo que la detención del problema puede resolverse. Por lo anterior, tenemos que el problema de detención no se puede resolver.
Esta prueba no utiliza ninguna forma de diagonalización. De hecho, deberías echar un vistazo a mi pregunta:
¿Es una definición de la palabra paradoja, "algo que puede usarse para demostrar que el problema de detención es indecidible?"
... para alguna discusión sobre el hecho de que muchas paradojas pueden usarse en lugar de la paradoja del mentiroso o la paradoja de Russell para demostrar que el problema de detención no puede resolverse. Algunas de estas paradojas de argumentos no diagonales incluyen la paradoja inesperada de la ejecución y (como se acaba de describir) la paradoja de Berry.
fuente