¿Hay alguna prueba matemática de que los lenguajes de computadora modernos pueden representar cualquier algoritmo finito usando una cantidad finita de código?

La “Tesis de Church-Turing” dice que cualquier algoritmo que pueda ser realizado por un humano, puede calcularse en una Máquina Universal de Turing.

Algunas personas no están de acuerdo. Los argumentos van desde la gravedad cuántica que interactúa con sus microtúbulos, hasta el acceso al reino platónico a través de su alma, hasta algún beneficio inherente a las redes neuronales físicas. Las personas en este campo afirmarían que hay “algoritmos” que un humano puede hacer que un UTM nunca puede hacer, como tener conciencia.

Pero, si le damos un pase, entonces la barra para implementar “cualquier algoritmo finito” es implementar una Máquina Universal de Turing (y pasarle el algoritmo como entrada).

Una prueba matemática formal de que un lenguaje de programación es capaz de computación universal generalmente toma la forma de implementar otro lenguaje de programación que se sabe que es universal, o un pequeño UTM directamente. Se sabe que existen varios UTM pequeños, como uno con solo 4 estados y 6 símbolos. Ver Máquina universal de Turing – Máquinas más pequeñas.

La mayoría de los lenguajes de programación tienen algunas partes que dependen de la implementación o la plataforma, y ​​otras partes que son la semántica del lenguaje. Por ejemplo, en C el tipo “largo” debe ser de al menos 32 bits, pero podría ser más. Es posible que algún algoritmo no se pueda implementar porque el espacio de direcciones de la computadora, o algún otro límite definido por la implementación, no permitió una “cinta” ilimitada para el UTM. Pero generalmente tratamos esto como una limitación en la computadora (que en realidad son máquinas de estado finito muy grandes), no del lenguaje en sí.

Primero, desenredemos parte de la terminología utilizada aquí, luego propondré una pregunta más concisa que pueda responder a la suya. Necesitaría tener una definición más concreta de “representar”. Creo que otras respuestas han pasado por alto que dijiste algoritmo finito. ¿Qué quiere decir con “algoritmo finito”? Podría interpretar eso de dos maneras:

  1. Es un algoritmo que siempre termina en tiempo finito.
  2. Es un algoritmo que se escribe de manera finita. Las definiciones más comunes con las que trabajamos para un algoritmo incluyen el hecho de que deben ser finitas en la descripción (con respecto a su tamaño de entrada).

Si la respuesta es (1), entonces sí, cualquier lenguaje de programación completo de Turing (ver Turing completeness – Wikipedia) puede (según nuestro conocimiento) escribir cualquier algoritmo. Tenga en cuenta que las definiciones más convencionales de algoritmo incorporarán tanto (1) como (2). Así que voy a reformular su pregunta de la siguiente manera:

¿Puedo implementar algún algoritmo en un lenguaje de programación completo de Turing?

Creo que las otras respuestas pasan por alto el hecho de que los problemas indecidibles como el problema de detención son en realidad problemas, no algoritmos. La pregunta no es preguntar si hay problemas para los cuales no existe un programa que lo resuelva, sino preguntar si pueden implementar algún algoritmo en un lenguaje de programación moderno. Usamos algoritmos para resolver problemas. Lo que sabemos es que no existe un algoritmo general que resuelva el problema de detención porque el problema de detención es indecidible. Eso significa que descartamos tales algoritmos ya que no existen .

Dicho esto, estamos hablando de algoritmos que son para problemas decidibles porque no existen algoritmos para problemas indecidibles. Suponiendo que el lenguaje de programación es Turing completo, sí, puede implementar el algoritmo en ese lenguaje de programación. Sin embargo, esto no tiene en cuenta las especificaciones dependientes de la máquina necesarias para el algoritmo, estoy hablando específicamente de la teoría del lenguaje de programación en sí.

La respuesta es si .

De hecho, hay programas de computadora que no se pueden escribir.

El ejemplo más popular es “el problema de la detención”. ¿Puede escribir un programa que pueda determinar si algún otro programa arbitrario se ejecuta hasta su finalización y se detiene, sin haber ingresado nunca en un bucle infinito que no termine?

Primero debo aclarar que por “programa de computadora” y “otro programa arbitrario” me refiero a Turing Machines. Su computadora portátil, teléfono celular, etc. en realidad NO son máquinas Turing porque tienen memoria finita y, por lo tanto, tienen muchos estados. Intentan ser máquinas de Turing, pero debido a sus limitaciones físicas finitas, ¡en realidad son solo máquinas de estado finito!

Entonces … el problema sin solución. Digamos que tenía un programa, llámelo A. Este programa puede determinar si algún otro programa tomado como su entrada se detendrá al analizar el código del programa. Entonces … escribo el programa B. El programa B llama al código predictivo de A para el programa B en sí y obtiene el resultado. El programa B luego entra en un bucle infinito si el programa A dice que B se detiene, o el programa B termina si el programa A dice que B no se detiene. ¡Toma eso!

Hay un enfoque más extenso y matemático para probar este problema, y ​​es un problema ampliamente discutido: problema de detención – Wikipedia

More Interesting

¿Quién decidió que, en una lista de principios científicos, la numeración comienza con cero en lugar de uno?

¿Por qué las letras P, Q, R, S y T se usan tan comúnmente en matemáticas?

Cómo probar o refutar [math] \ log (n!) \ In \ Theta (n ^ 2) [/ math] en notación asintótica

¿Cuál es el problema P vs NP?

¿Cuál es la mejor descripción del cálculo lambda?

¿Qué especialidad de pregrado debo elegir si quiero aplicar inteligencia artificial a los campos médicos?

¿Puede una máquina de turing aceptar una entrada sin detenerse?

¿La mayoría de los cursos requeridos en un programa universitario de ciencias de la computación son inútiles para la aplicabilidad de trabajo de programador del mundo real?

¿Cómo podemos encontrar esos enteros cuyo primer y último dígito son iguales entre dos números dados?

¿Cuáles son algunos de los temas de teoría de gráficos que necesito aprender para hacer el bien en la programación competitiva?

¿Es esto cierto? "Repetir es humano, repetir, divino". En caso afirmativo o no, ¿por qué?

¿Es la matemática de la computación (UCLA) una especialidad decente para ir a la escuela de posgrado en informática?

¿Cuáles son algunas aplicaciones interesantes y menos conocidas de la ciencia de datos (aprendizaje automático, gráficos aleatorios, altas dimensiones, etc.) al comercio electrónico?

Puedo tomar la teoría de grafos o la combinatoria el próximo semestre. Me interesa la informática teórica. ¿Cuál sería mejor?

¿Qué matemática puede o no puede hacer una computadora?