¿Cuál es el significado del teorema de Rice en la teoría de la complejidad computacional?

El teorema de Rice demuestra que cualquier propiedad “no trivial” de un programa es indeterminable. Por lo tanto, amplía en gran medida los ” números” de problemas indeterminables. Antes de que la gente conozca el teorema de Rice, quizás el único problema indeterminable bien conocido y conocido es el llamado problema de detención. Pero el teorema de Rice muestra que hay muchos problemas indeterminables.

Por ejemplo, muchos investigadores intentan construir un buen analizador estático que pueda determinar estáticamente (es decir, verificar sin ejecutar realmente) si su programa tiene errores como pérdidas de memoria, carreras o cualquier cosa que haya definido como un error. Pero ninguno de ellos afirma que sus herramientas podrían detectar todos los errores en su programa. Debido a que el teorema de Rice muestra que tales tareas es al menos tan difícil como detener el problema. Dado que detener el problema es indeterminable, también lo son esas tareas.

Para ser breve, el teorema de Rice muestra que el programa no podía hacer todas las programaciones por nosotros. Entonces, incluso el programador más perezoso necesita escribir códigos.

El teorema de Rice nos dice que todas las propiedades no triviales de los lenguajes reconocibles de Turing son indecidibles. Aquí, una propiedad es una clase de lenguajes reconocibles de Turing; una propiedad se llama trivial si es la clase vacía o la clase de todos los lenguajes reconocibles de Turing.

Más precisamente, dada una propiedad no trivial [matemática] S [/ matemática] el problema

Dada una máquina de Turing [matemática] M [/ matemática], ¿es [matemática] L (M) \ en S [/ matemática]?

Es indecidible.

¿Cuál es el significado de esto para la teoría de la complejidad? Tenga en cuenta que cada clase de complejidad (ya sea tiempo o espacio) es una clase no trivial de lenguajes reconocibles (no debe ser trivial ya que todos los idiomas en una clase de complejidad son decidibles), por lo que esto significa que para cada clase de complejidad [matemáticas ] C [/ matemáticas] el problema

Dada una máquina de Turing [matemática] M [/ matemática], es [matemática] L (M) [/ matemática] un lenguaje en la clase de complejidad [matemática] C [/ matemática]

debe ser indecidible. En otras palabras, los verificadores de complejidad no pueden existir.

More Interesting

Aunque amo CS y la programación, soy malo en matemáticas. Mi lógica para desarrollar programas es débil. ¿Qué debo hacer para mejorar mis habilidades lógicas y dónde puedo aprender las matemáticas esenciales para la programación?

¿Cuál es el número más alto representable en la codificación de complemento a dos de 8 bits?

¿Qué libros de algoritmos y estructuras de datos tratan bien la recursividad?

¿Qué es Stanford M&CS?

Cómo abordar problemas de cobertura de conjuntos en la programación de enteros

Para los montones máximos, ¿por qué el orden de build_maxheap () [math] n \ log (n), [/ math] cuando solo tiene que recorrer n / 2 elementos?

¿Cuáles son las diversas formas en que puede resolver el siguiente laberinto con un robot seguidor de enlace negro basado en IR? ¿Cómo puede resolverlo con el mínimo número de sensores posible y el tiempo más rápido para llegar al final?

¿Qué significa cuando una función es seguida por la notación big-O?

¿Cómo se calcula la probabilidad de un modelo de regresión de cresta?

¿Cómo se crean los rompecabezas de sudoku a gran escala?

¿Tiene algún consejo para escribir propuestas de negocios que involucren informática teórica?

¿Cómo explica matemáticamente la conversión de tipos?

¿Cómo se diseñan los CAS (sistemas de álgebra computacional)?

¿La comunidad académica evita los intentos de resolver un problema NP-difícil en tiempo polinómico?

¿Podría la programación de aprendizaje y las matemáticas cambiar mis patrones de pensamiento?