¿Cuál es la relación entre computabilidad y lógica?

Pregunta originalmente respondida: ¿Cuál es la relación entre computabilidad y lógica?

¿Por qué ambos temas se agrupan en algunos libros (Metaleematemáticas de Kleene, Computabilidad y lógica de Boolo, etc.) cuando aparentemente son muy diferentes (uno trata con el procesamiento de cadenas de símbolos y el otro con razonamiento válido). ¿Por qué se estudian juntos los hallazgos de Gödel y Turing?


Una pregunta muy interesante! ¿Cuál es la relación?

Como usted señala, la computación parece tratarse de malabarismos y la lógica parece abordar un razonamiento válido.

Pero si alguna vez ha estudiado cómo funcionan los sistemas lógicos, notará que los sistemas lógicos en sí mismos también hacen malabares con las cadenas.

Por ejemplo, en un sistema de lógica, podríamos tener la regla de [matemáticas] \ tierra [/ matemáticas] -explotación-izquierda, que dice que si tenemos una proposición de la forma [matemáticas] A \ tierra B [/ matemáticas], que es una cadena que consta de tres subcadenas “[matemática] A [/ matemática]”, “[matemática] \ land [/ matemática]” y “[matemática] B [/ matemática]”, entonces podemos deducir [matemática] A [/ matemáticas].

Es una regla de cálculo que le dice que [math] \ land-explotación-left (“A”, “\ land”, “B”) = “A” [/ math]. Básicamente, eso es una regla de inferencia: ¡una función de [math] f: \ operatorname {string} ^ n \ mapsto \ operatorname {string} [/ math]!

En otras palabras, la deducción es el cálculo. Y el razonamiento válido con una lógica es la deducción en esa lógica.

Por el contrario, el cálculo es deducción en algún sistema formal.


Ahora parece que estoy argumentando que la computabilidad y la lógica son la misma cosa, pero esto no es del todo cierto. En esa última oración escribí sistema formal, no lógica. Si bien todo el cálculo es manipulación de cadenas, no siempre es posible interpretar las cadenas manipuladas como proposiciones en alguna lógica. Tomemos, por ejemplo, cualquier cálculo [math] \ lambda [/ math] escrito con la propiedad [math] \ operatorname {Type}: \ operatorname {Type} [/ math]. Como sistema computacional, estos sistemas de tipo pueden ser muy útiles, pero vistos como una lógica, la lógica sería inconsistente.

Existe una tensión entre la integridad combinatoria y la coherencia lógica. Aquí es donde se encuentra la interfaz entre la lógica y la computación. Como se menciona en otra respuesta, esta es la correspondencia de Howard-Curry:

[matemáticas] \ begin {array} {c | c} \ text {computation} & \ text {logic} \\\ hline \ text {program} & \ text {proof} \\\ text {type} & \ text { proposición} \\\ hline \ end {array} [/ math]

Esta correspondencia es entre los tipos de algún sistema computacional y las proposiciones en la lógica intuicionista. Se puede extender a la lógica clásica y la lógica modal.

Un ejemplo simple debería ayudar a aclarar esto:

El cálculo lambda es un modelo básico de computación que es precisamente tan fuerte como las máquinas de Turing. Considere una expresión de cálculo lambda escrita [matemáticas] M :: = (\ lambda x: \ alpha. (M: \ beta)): \ alpha \ rightarrow \ beta [/ math].

Esta expresión representa una función de tipo [math] \ alpha \ rightarrow \ beta [/ math] que dado un argumento de tipo [math] \ alpha [/ math] devolverá un resultado de tipo [math] \ beta [/ math] .

Entonces tenemos lo siguiente:

  1. [matemáticas] M: \ alpha \ rightarrow \ beta [/ matemáticas]
  2. [matemáticas] a: \ alpha [/ matemáticas]
  3. [matemáticas] (Ma): \ beta [/ matemáticas]

Solo dejemos caer los términos a la izquierda del colon, dejándonos solo los tipos y veamos qué obtenemos:

  1. [matemáticas] \ alpha \ rightarrow \ beta [/ matemáticas]
  2. [matemáticas] \ alpha [/ matemáticas]
  3. [matemáticas] \ beta [/ matemáticas]

Pero esto es modus ponens si consideramos [math] \ alpha [/ math] y [math] \ beta [/ math] como proposiciones. Este es el ejemplo más simple posible de la correspondencia de Howard-Curry.

La correspondencia sugiere un significado computacional para los conectivos de una lógica y puede extenderse más allá de las implicaciones. Por ejemplo, el conectivo [math] \ land [/ math] también se puede incluir, incluyendo como términos pares ordenados de valores escritos [math] (a: \ alpha, b: \ beta): [/ math] [math] \ alpha \ land \ beta [/ math].

La idea general es que los tipos forman proposiciones y los términos son, en cierto sentido, una prueba de la proposición, evidencia de la proposición.

Esto nos permite codificar una proposición y su prueba de deducción natural en un solo término tipo lambda. (o una prueba del sistema Hilbert como término de lógica combinatoria).

Por ejemplo, considere la siguiente prueba de [matemáticas] A \ supset A [/ matemáticas]:

[matemáticas] \ begin {array} {c | ll} 1 y A y \ text {Suposición} \\ 2 y A y \ text {Desde la línea 1 por reiteración} \\ 3 y A \ supset A y \ text {Desde las líneas 1 y 2 por} \ supset \ text {-introduction} \ end {array} [/ math]

Toda esta deducción puede codificarse como el término lambda [matemática] I :: = (\ lambda x: A. (X: A)): A \ supset A [/ math]. [Math] \ lambda [/ math] introduce una suposición llamada [math] x [/ math] que [math] A [/ math]. El uso de [math] x [/ math] en el cuerpo de la función ‘usa’ ese supuesto al citarlo o reiterarlo [math] (x: A) [/ math]. Unir la suposición junto con el cuerpo para formar la abstracción lambda es [math] \ supset [/ math] -introduction.

Y en el cálculo lambda podemos pasar funciones a otras funciones o devolverlas como resultado de una función, por lo que lo que tenemos aquí es un método de manipulación de pruebas.

La función [math] I [/ math] anterior se puede ver como una función que, dada cualquier prueba de una proposición [math] A [/ math] devuelve una prueba de la proposición [math] A \ supset A [/ math].

Esta es una herramienta muy poderosa de hecho.

Te señalaré algunos de mis escritos que pueden ser de gran ayuda.

Estructuras paradigmáticas (o las diez categorías de Nathan)

Estudios exponenciales de Nathan Coppedge en el blog oficial de Nathan Coppedge

Heurística programable por Nathan Coppedge en el blog oficial de Nathan Coppedge

Heurística programable Parte 2 por Nathan Coppedge en el blog oficial de Nathan Coppedge

Heurística programable avanzada por Nathan Coppedge en el blog oficial de Nathan Coppedge

Computabilidad: la creencia de que existe un algoritmo que se aplica a cualquier problema dado y que puede ser simulado o definido por un proceso matemático en mayor o menor grado, qv. calculable

Lógica: el sistema mediante el cual uno trata de reconocer con precisión los patrones de causa y efecto para llegar a una conclusión o determinar un juicio.

Hmmm …

  1. Ambos son sistemas que requieren una gran cantidad de iteraciones antes de que su uso en la aplicación pueda comenzar a desarrollarse.
  2. ambas son herramientas para llegar de un punto a otro de la manera más fácil y rápida posible.
  3. no son mutuamente excluyentes, eso siempre es bueno y
  4. se podría pensar que la computabilidad es el proceso en la lógica que determina los valores para cualquier cosa dada, en cuyo caso, la relación es con lo que tu mano es para ti, como lo es la computabilidad para la lógica.

Cuando vi esta pregunta, pensé lo mismo que tú: la computabilidad y la lógica son aparentemente muy diferentes.

Aunque cuando leí los detalles de tu pregunta, me hiciste ver la conexión.

Si la computabilidad se ocupa del procesamiento de cadenas de símbolos, entonces la lógica se ocupa de un cierto tipo de computabilidad. La lógica simplemente trata el procesamiento de símbolos de una manera cierta y consistente.

Existe una profunda correspondencia entre la computación y la lógica. Puede ver algo de esto al leer sobre la teoría de la complejidad descriptiva, y más relacionado con la correspondencia de Curry-Howard, pero no conozco ninguna fuente que lo explique por completo.

More Interesting

¿Hay más de un sistema operativo instalado en mis computadoras?

¿Cómo debe comenzar un estudiante de clase 12 en el aprendizaje automático?

¿Cómo definimos los sistemas operativos?

Técnicas de procesamiento de señales junto con aprendizaje automático; se han usado juntos para el diagnóstico de fallas, mientras que ML puede hacerlo solo para CBM. ¿Por qué?

Cómo encontrar la suma de la suma mínima de las tarifas de entrada en esta pregunta

¿Cuál es la diferencia y la relación entre un proceso de Markov y un proceso de martingala?

¿Cuál es la relación entre una regla de cálculo y una computadora?

Tengo un proyecto de software que tiene una fecha límite para la próxima semana pero todavía necesito un mes más para terminarlo, ¿cómo debo decirle a mi jefe?

¿Cuáles son algunas ideas innovadoras de proyectos de último año para un estudiante de TI / CS?

¿Qué debe entender un laico informado sobre el aprendizaje automático, tal como existe actualmente y en el contexto de cómo parece que progresará?

¿Por qué necesitamos medir la entropía de la información en el aprendizaje automático?

¿Cuál es una explicación de los problemas P versus NP y otros términos relacionados en términos simples?

Estoy buscando comprar una nueva computadora portátil. ¿Dónde encontraría el mejor precio en línea?

¿Es la Inteligencia Artificial MS ofrecida por UGA un título que valga la pena buscar si uno está interesado en el campo?

¿SDN ya está en uso en las redes actuales?