Pensé un momento si agregaría otra respuesta. Las otras respuestas se centran en el centro de su pregunta (sobre "turing complete", "tautología", etc.). Permítanme tomar la primera y la última parte, y por lo tanto la imagen más grande y ligeramente filosófica:
Pero, ¿qué significa?
¿Qué significa ser Turing completo?
¿Hay alguna manera de definir las capacidades de Turing Machine sin solo decir "poder simular otra máquina de Turing"?
Hablando informalmente, estar Turing completo significa que su mecanismo puede ejecutar cualquier algoritmo que pueda imaginar, sin importar cuán complejo, profundo, recursivo, complicado, largo (en términos de código) sea, y no importa cuánto almacenamiento o tiempo sea necesitaba evaluarlo. No hace falta decir que solo tiene éxito si el problema es computable, pero si es computable, tendrá éxito (alto).
(NB: para averiguar por qué esto es "informal", consulte la tesis de Church-Turing que va en esa línea, con una redacción más elaborada; sin embargo, al ser una tesis, podría o no ser correcta. Gracias a @DavidRicherby por señalando esta pequeña omisión en un comentario).
"Algoritmo" significa lo que comúnmente entendemos hoy como algoritmo informático; es decir, una serie de pasos discretos que manipulan el almacenamiento, con cierta lógica de control mezclada. Sin embargo, no es como una máquina Oracle, es decir, no puede "adivinar".
Ejemplo para un lenguaje práctico no tc
Si se ha programado usted mismo, probablemente conozca expresiones regulares, utilizadas para unir cadenas con algún patrón.
Este es un ejemplo de una construcción que no está completada en Turing. Puede encontrar fácilmente ejercicios en los que es simplemente imposible crear una expresión regular que coincida con ciertas frases.
Por ejemplo (y esto seguramente ha molestado a muchos programadores en aplicaciones reales reales), es teórica y prácticamente imposible crear una expresión regular que coincida con un lenguaje de programación o un documento XML: es imposible que una expresión regular encuentre la estructura de bloques ( do ... end
o { ... }
en idiomas; abrir y cerrar etiquetas en documentos XML) si se permite que sean arbitrariamente profundas. Si hay un límite allí, por ejemplo, solo puede tener 3 niveles de "recursión", entonces podría encontrar una expresión regular; pero si no está limitado, entonces no se puede.
Como obviamente es posible crear un programa en un lenguaje completo de Turing (como C) para analizar el código fuente (cualquier compilador lo hace), las expresiones regulares nunca podrán simular dicho programa, por lo tanto, por definición, no son completas de Turing
Motivación
La idea de la máquina de turing en sí misma no es nada práctica; es decir, Turing ciertamente no lo inventó para crear una computadora real o algo así, a diferencia de Charles Babbage o von Neumann, por ejemplo. El punto de tener el concepto de la Máquina de Turing es que es extremadamente simple. Consiste en casi nada. Reduce las computadoras posibles (y reales) al mínimo más imaginable.
El punto de esta simplificación, a su vez, es que esto hace que sea fácil (ish) reflexionar sobre cuestiones teóricas (como detener problemas, clases de complejidad y lo que sea que le moleste a la informática teórica). Una característica en particular es que generalmente es muy fácil verificar si un idioma o computadora puede simular una máquina de Turing simplemente programando dicha máquina de Turing (¡que es tan fácil!) En ese idioma.
Hasta el infinito
Tenga en cuenta que nunca necesita tiempo o almacenamiento infinito ; pero tanto el tiempo como el almacenamiento son ilimitados. Tendrán un valor máximo para cada ejecución computable, pero no hay límite en cuanto a qué tan grande puede llegar a ser ese valor. Aquí se pasa por alto el hecho de que una computadora real se quedará sin RAM; esto es, por supuesto, un límite para cualquier computadora física, pero también es obvio y no tiene ningún interés para el "poder de cómputo" teórico de la máquina. Además, no nos interesa el tiempo que realmente lleva, en absoluto. Entonces, nuestra pequeña máquina puede usar cantidades arbitrarias de tiempo y espacio, lo que la hace absolutamente poco práctica.
... y más allá
Una asombrosa último punto, entonces, es que un simple ejemplo, algo tan simple puede hacer todo lo que cualquier ordenador real concebible podría alguna vez , en todo el universo, lograr (solo mucho más lento) - por lo menos en lo que conocemos hoy en día.