[Примечание: этот параграф теперь устарел.] Название вашего вопроса содержит необоснованное предположение, а именно, что языки программирования «основаны на основах математики». Как правило, это не так, хотя эти две области имеют важные отношения. Более точным утверждением было бы то, что (некоторые) языки программирования были разработаны с использованием основополагающих методов. Лучше задать вопрос: «Как связаны языки программирования и основы математики?»
Самая общая связь воплощена в лозунге « доказательства как программы» , который можно заставить работать несколькими способами. Соответствие Карри-Говарда является наиболее очевидным. С этим мы связываем сразу теорию типов, логику и программирование. Но следует подчеркнуть, что соответствие Карри-Ховарда не очень хорошо работает при наличии общей рекурсии (потому что каждый тип становится обитаемым), которую поддерживает каждый язык программирования общего назначения.
Более тонкий способ заставить лозунг работать как программы - использовать реализуемость . Здесь также мы связываем доказательства и программы, но теперь направление идет от доказательств к программам: каждое доказательство дает программу, но не каждая программа обязательно является доказательством.
Основным примером языка программирования, основанного на фундаменте, является Agda , который просто представляет собой реализацию теории зависимых типов. Однако Agda не является языком программирования общего назначения, поскольку он не поддерживает общую рекурсию. Каждая функция в Agda является полной, и есть вычислимые функции, которые не могут быть реализованы в Agda. На практике программисты не заметят этого, но заметят, что Agda не допускает неопределенные значения, например бесконечные циклы.
Coq - это не язык программирования, а скорее помощник по проверке. Тем не менее, он также имеет возможности извлечения, которые дают программы из доказательств. Корректоры и языки программирования не следует путать друг с другом.
Мы не должны забывать, что пролог и другие языки логического программирования черпают вдохновение из идеи, что вычисления - это поиск доказательства . Это, конечно, тесно связано с логикой.
Haskell - это язык программирования общего назначения, основанный на теории предметной области . То есть его семантика является теоретико-предметной, поскольку она должна учитывать частичные функции и рекурсию. Сообщество Haskell разработало ряд методов, основанных на теории категорий, из которых монады наиболее известны, но их не следует путать с монадами . В более широком смысле, расширенные функции программирования обычно обрабатываются комбинацией теории предметной области и теории категорий, но это не то, к чему опытный программист на Хаскелле может привыкнуть. Так называемая «синтаксическая категория» типов Haskell - это взгляд непрофессионала о том, как Haskell и теория категорий соответствуют друг другу.
Теория множеств (классическая или конструктивная), кажется, вдохновляет идеи в языке программирования в меньшей степени. Конечно, конструктивная теория множеств связана с программированием через конструктивную логику. Алекс Симпсон (Alex Simpson) дал одно важное применение теории интуиционистских множеств к языкам программирования. Но это довольно продвинутый материал, возможно, посмотрите эти слайды . Жан-Луи Кривин разработал очень интересный бренд реализуемости для классической теории множеств. Это хороший способ связать классическую теорию множеств и программирование.
Таким образом, теория языков программирования использует фундаментальные методы. Это не удивительно, поскольку мы считаем, что вычисления являются фундаментальной концепцией. Но слишком наивно говорить, что языки программирования «основаны» на определенных основах. На самом деле трихотомия основ «теория множеств - теория типов - теория категорий» - это опять же полезное наблюдение высокого уровня, которое можно сделать математически точным различными способами, но в этом нет ничего необходимого. Это историческая случайность.