[Nota: estos párrafos ahora están desactualizados.] El título de su pregunta contiene una suposición injustificada, a saber, que los lenguajes de programación están "basados en fundamentos matemáticos". Este generalmente no es el caso, aunque las dos áreas tienen relaciones importantes. Una afirmación más precisa sería que (algunos) lenguajes de programación fueron diseñados usando técnicas fundamentales. Una mejor pregunta sería "¿cómo se relacionan los lenguajes de programación y los fundamentos de las matemáticas?"
La conexión más general está incorporada en las pruebas de eslogan como programas , que pueden funcionar de varias maneras. La correspondencia de Curry-Howard es la más obvia. Con él relacionamos a la vez la teoría de tipos, la lógica y la programación. Pero debe enfatizarse que la correspondencia de Curry-Howard no funciona muy bien en presencia de recursividad general (porque cada tipo se vuelve habitado), lo que admite todo lenguaje de programación de propósito general.
Una forma más sutil de hacer que las pruebas de eslogan como programas funcionen es utilizar la realizabilidad . Aquí también relacionamos pruebas y programas, pero ahora la dirección va de las pruebas a los programas: cada prueba proporciona un programa, pero no todos los programas son necesariamente una prueba.
El ejemplo principal de un lenguaje de programación basado en una base es Agda , que simplemente es una implementación de la teoría del tipo dependiente. Sin embargo, Agda no es un lenguaje de programación de propósito general porque no admite la recursividad general. Cada función en Agda es total, y hay funciones computables que no se pueden implementar en Agda. En la práctica, los programadores no notarán esto, pero notarán que Agda no permite valores indefinidos, por ejemplo, bucles infinitos.
Coq no es un lenguaje de programación sino un asistente de pruebas. Sin embargo, también tiene capacidades de extracción que proporcionan programas a partir de pruebas. Los asistentes de prueba y los lenguajes de programación no deben confundirse entre sí.
No debemos olvidar que Prolog y otros programación lógica idiomas se inspiran en la idea de que la computación es una prueba de búsqueda . Por supuesto, esto los relaciona estrechamente con la lógica.
Haskell es un lenguaje de programación de propósito general que se basa en la teoría de dominios . Es decir, su semántica es teórica de dominio porque tiene que tener en cuenta las funciones parciales y la recursividad. La comunidad de Haskell ha desarrollado una serie de técnicas inspiradas en la teoría de categorías, de las cuales las mónadas son más conocidas pero no deben confundirse con las mónadas . En términos más generales, las características de programación avanzadas generalmente se tratan con una combinación de teoría de dominio y teoría de categoría, pero esto no es algo en lo que el programador de Haskell en la calle sea experto. La llamada "categoría sintáctica" de los tipos de Haskell es la visión de un laico de cómo Haskell y la teoría de la categoría se corresponden entre sí.
La teoría de conjuntos (clásica o constructiva) parece inspirar ideas en lenguaje de programación en menor medida. Por supuesto, la teoría de conjuntos constructivos tiene su conexión con la programación a través de la lógica constructiva. Alex Simpson dio una aplicación importante de la teoría intuitiva de conjuntos a los lenguajes de programación, que la utilizó para hacer que la teoría del dominio sintético funcionara. Pero esto es algo bastante avanzado, tal vez vea estas diapositivas . Jean-Louis Krivine ha desarrollado una marca muy interesante de realizabilidad para la teoría de conjuntos clásica. Esta parece una buena manera de relacionar la teoría de conjuntos clásica y la programación.
En resumen, la teoría de los lenguajes de programación utiliza técnicas fundamentales. Esto no es sorprendente, ya que consideramos que la computación es un concepto fundamental. Pero es demasiado ingenuo decir que los lenguajes de programación están "basados" en ciertos fundamentos. De hecho, la tricotomía de fundamentos "teoría de conjuntos - teoría de tipos - teoría de categorías" es nuevamente una observación útil de alto nivel que puede hacerse matemáticamente precisa de varias maneras, pero no hay nada necesario al respecto. Es un accidente histórico.