Por lo que entiendo (que es muy poco, ¡así que corrígeme donde me equivoco!), La teoría de los lenguajes de programación a menudo se ocupa de las pruebas "intuicionistas". En mi propia interpretación, el enfoque requiere que tomemos en serio las consecuencias del cálculo en la lógica y la demostrabilidad. Una prueba no puede existir a menos que exista un algoritmo que construya las consecuencias de las hipótesis. Podríamos rechazar como axioma el principio del medio excluido, por ejemplo, porque exhibe algún objeto, que es o , de manera no constructiva.
La filosofía anterior podría llevarnos a preferir pruebas válidas intuitivamente sobre las que no lo son. Sin embargo, no he visto ninguna preocupación sobre el uso real de la lógica intuicionista en artículos en otras áreas de la CS teórica. Parecemos felices de probar nuestros resultados usando la lógica clásica. Por ejemplo, uno podría imaginarse usando el principio del medio excluido para demostrar que un algoritmo es correcto. En otras palabras, nos preocupamos y tomamos en serio un universo computacionalmente limitado en nuestros resultados, pero no necesariamente en nuestras pruebas de estos resultados.
1. ¿Los investigadores en CS teórica alguna vez se preocupan por escribir pruebas intuitivamente válidas? Fácilmente podría imaginar un subcampo de la informática teórica que busca comprender cuándo los resultados de TCS, especialmente los algorítmicos, se mantienen en la lógica intuicionista (o más interesante, cuando no lo hacen). Pero todavía no he encontrado ninguno.
2. ¿Hay algún argumento filosófico que deberían? Parece que uno podría afirmar que los resultados de la informática deberían probarse intuitivamente cuando sea posible, y deberíamos saber qué resultados requieren, por ejemplo, PEM. ¿Alguien ha tratado de hacer tal argumento? ¿O tal vez hay un consenso de que esta pregunta simplemente no es muy importante?
3. Como pregunta adicional, tengo curiosidad por conocer ejemplos de casos en los que esto realmente importa: ¿Se sabe que existen resultados importantes de TCS en la lógica clásica pero no en la lógica intuicionista? O se sospecha que no tiene lógica intuicionista.
¡Disculpas por la suavidad de la pregunta! Puede requerir una nueva redacción o reinterpretación después de escuchar a los expertos.
Respuestas:
Como dije en los comentarios, la lógica intuicionista no es el punto principal. El punto más importante es tener una prueba constructiva. Creo que la teoría de tipos de Martin-Löf es mucho más relevante para la teoría del lenguaje de programación que la lógica intuicionista y hay expertos que han argumentado que el trabajo de Martin-Löf es la razón principal para la reactivación del interés general en las matemáticas constructivas.
La interpretación de computabilidad de la constructividad es una perspectiva posible, pero no es la única. Debemos tener cuidado aquí cuando queremos comparar pruebas constructivas con pruebas clásicas. Aunque ambos podrían usar los mismos símbolos, lo que significan con esos símbolos es diferente.
Siempre es bueno recordar que las pruebas clásicas se pueden traducir a pruebas intuitivas. En otras palabras, en cierto sentido, la lógica clásica es un subsistema de lógica intuicionista. Por lo tanto, puede realizar (digamos usando funciones computables) pruebas clásicas en cierto sentido. Por otro lado, podemos pensar en las matemáticas constructivas como un sistema matemático en un entorno clásico.
Al final, los formalismos, ya sean clásicos o constructivos, son herramientas para expresar expresiones. Tomar un teorema clásico e intentar demostrarlo constructivamente sin esta perspectiva no tiene mucho sentido en mi humilde opinión. Cuando digo clásicamente quiero decir algo diferente de lo que digo constructiva. Puede discutir cuál "debería" ser el verdadero significado de " ", pero creo que eso no es interesante si no estamos discutiendo lo que queremos expresar en primer lugar. ¿Nos referimos (al menos) a uno de ellos y sabemos cuál? ¿O simplemente nos referimos a una de ellas?A ∨ B ∨A ∨ B A ∨ B ∨
Ahora, con esta perspectiva, si queremos probar una declaración como y queremos relacionar esto con un mapeo de a alguna satisfactoria entonces la mejor manera de expresar puede ser la forma constructiva. Por otro lado, si solo nos importa la existencia de y no nos importa cómo encontrarlos, entonces la forma clásica probablemente tendría más sentido. Cuando prueba la declaración de manera constructiva, también está construyendo implícitamente un algoritmo para encontrar partir de . Puede hacer lo mismo explícitamente con una fórmula más complicada como "el algoritmo tiene la propiedad de que para todosx y φ ( x , y ) y y x A x φ ( x , A ( x ) ) A∀x ∃y φ(x,y) x y φ(x,y) y y x A x , "donde es un algoritmo dado explícitamente. Si no está claro por qué uno puede preferir la forma constructiva de expresar esto, piense en los lenguajes de programación como una analogía: puede escribir un programa para el algoritmo MST de Kruskal en lenguaje ensamblador x86 donde debe preocuparse por muchos problemas secundarios o puede escribir un programa en Python.φ(x,A(x)) A
Ahora, ¿por qué no usamos la lógica intuicionista en la práctica? Hay varias razones. Por ejemplo, la mayoría de nosotros no estamos entrenados con esa mentalidad. También encontrar una prueba clásica de una declaración podría ser mucho más fácil que encontrar una prueba constructiva de la misma. O podríamos preocuparnos por los detalles de bajo nivel que están ocultos y no son accesibles en un entorno constructivo (ver también lógica lineal ). O podríamos simplemente no estar interesados en obtener el material adicional que viene con una prueba constructiva. Y aunque existen herramientas para extraer programas de pruebas, estas herramientas generalmente necesitan pruebas muy detalladas y no han sido lo suficientemente fáciles de usar para el teórico general. En resumen, demasiado dolor por muy poco beneficio.
Recuerdo que Douglas S. Bridges, en la introducción de su libro de teoría de la computabilidad, argumentó que deberíamos probar nuestros resultados de manera constructiva. Da un ejemplo de que el IIRC es esencialmente el siguiente:
Al final, debemos tener en cuenta que aunque usamos los mismos símbolos para lógicas clásicas e intuitivas, estos símbolos tienen diferentes significados, y el que se usa depende de lo que queramos expresar.
Para su última pregunta, creo que el teorema de Robertson-Seymour sería un ejemplo de un teorema que sabemos que es cierto clásicamente, pero no tenemos ninguna prueba constructiva de ello. Ver también
fuente
Vale la pena pensar POR QUÉ la lógica intuiscionista es la lógica natural para la computación, ya que con demasiada frecuencia las personas se pierden en los detalles técnicos y no comprenden la esencia del problema.
Muy simple, la lógica clásica es una lógica de información perfecta: se asume que todas las declaraciones dentro del sistema son conocidas o conocibles como inequívocamente verdaderas o falsas.
La lógica intuicionista, por otro lado, tiene espacio para declaraciones con valores de verdad desconocidos e incognoscibles. Esto es esencial para el cálculo, ya que, gracias a la indecidibilidad de la terminación en el caso general, no siempre será seguro cuál será el valor de verdad de algunas declaraciones, o incluso si un valor de verdad puede asignarse o no a ciertas declaraciones. .
En mi opinión, estas razones "semánticas" son una motivación mucho más importante para el uso de la lógica intuitiva para la computación que cualquier otra razón técnica que uno pueda reunir.
fuente
Las funciones hash criptográficas del mundo real como MD5 y SHA no tienen clave. Como tal, hace que sea bastante difícil aplicar técnicas de criptografía teórica para razonar sobre su seguridad. La razón simple por la cual: para cualquier función hash sin clave, existe un programa / adversario muy pequeño que genera una colisión bajo esa función hash; a saber, un programa que tiene tal colisión, ¡que debe existir! - codificado.
El artículo de Phil Rogaway Formalizing Human Ignorance: Hashing resistente a colisiones sin las llaves trata este problema. En él muestra que algunos teoremas muy estándar para las funciones hash con clave (como la construcción Merkle-Damgård y el paradigma hash-then-sign) se pueden adaptar y volver a probar con enunciados de teoremas "intuicionistas" que se aplican a las funciones hash sin clave.
fuente
Aquí hay un buen capítulo sobre la lógica intuitiva de un completo libro en línea Logic for Computer Science , 300pp. [1] sec 9.5, p210, resumen en p220:
Otra perspectiva cercana proviene del TCSist Andrej Bauer escribiendo sobre "Matemáticas y computación; matemáticas para computadoras" [2] que propone básicamente que "las matemáticas intuitivas son buenas para la física". la presentación es principalmente en términos de física, pero para aquellos que consideran la CS estrechamente unida a la física, la ideología generalmente se transmitirá a TCS.
[1] Lógica para la informática, Reeves y Clark
[2] Matemáticas intuitivas para la física Bauer
fuente