Введение

Типизованное лямбда-исчисление — это типизированный формализм, использующий символ лямбда для обозначения анонимной абстракции функций. В этом контексте типы обычно представляют собой синтаксические объекты, присваиваемые лямбда-термам; точная природа типа зависит от рассматриваемого исчисления (см. виды ниже). С одной стороны, типизованные лямбда-исчисления можно рассматривать как уточнения нетипизованного лямбда-исчисления, но с другой стороны, их также можно считать более фундаментальной теорией, а нетипизованное лямбда-исчисление — частным случаем с единственным типом. Типизованные лямбда-исчисления являются основополагающими языками программирования и лежат в основе типизированных функциональных языков программирования, таких как ML и Haskell, и, опосредованно, типизированных императивных языков программирования. Типизованные лямбда-исчисления играют важную роль в разработке систем типов для языков программирования; здесь типизируемость обычно отражает желательные свойства программы (например, программа не вызовет ошибку доступа к памяти). Типизованные лямбда-исчисления тесно связаны с математической логикой и теорией доказательств посредством изоморфизма Карри — Ховарда и могут рассматриваться как внутренний язык определенных классов категорий. Например, просто типизованное лямбда-исчисление является языком декартово замкнутых категорий (CCC).

Виды типированных ламбда-калькули

Изучены различные типизированные ламбда-исчисления. Просто типизированное ламбда-исчисление имеет только один конструктор типов – стрелку (→), и его единственными типами являются базовые типы и функциональные типы. Система T расширяет просто типизированное ламбда-исчисление типом натуральных чисел и примитивной рекурсией высшего порядка; в этой системе определимы все функции, доказуемо рекурсивные в арифметике Пеано. Система F допускает полиморфизм посредством универсальной квантификации по всем типам; с логической точки зрения она может описать все функции, доказуемо тотальные в логике второго порядка. Ламбда-исчисления с зависимыми типами лежат в основе интуиционистской теории типов, исчисления конструкций и логической структуры (LF) – чистого ламбда-исчисления с зависимыми типами. Основываясь на работах Берарди по чистым системам типов, Хенк Барендрегт предложил куб Ламбды для систематизации отношений между чистыми типизированными ламбда-исчислениями (включая просто типизированное ламбда-исчисление, Систему F, LF и исчисление конструкций). Некоторые типизированные ламбда-исчисления вводят понятие подтипирования, то есть, если является подтипом , то все термы типа также имеют тип . Типизированные ламбда-исчисления с подтипированием – это просто типизированное ламбда-исчисление с конъюнктивными типами и Система F<:. Все системы, упомянутые до сих пор, за исключением нетипизированного ламбда-исчисления, сильно нормализуемы: все вычисления завершаются. Следовательно, они не могут описать все функции, вычислимые по Тьюрингу. Как следствие, они логически непротиворечивы, то есть существуют необитаемые типы. Однако существуют типизированные ламбда-исчисления, которые не являются сильно нормализуемыми. Например, зависимо типизированное ламбда-исчисление с типом всех типов (Type : Type) не нормализуется из-за парадокса Жирара. Эта система также является самой простой чистой системой типов, формализмом, обобщающим куб Ламбды. Системы с явными рекурсивными комбинаторами, такие как «язык программирования для вычислимых функций» (PCF) Плоткина, не нормализуются, но не предназначены для интерпретации как логика. Действительно, PCF – это прототипичный типизированный функциональный язык программирования, где типы используются для обеспечения корректной работы программ, но не обязательно их завершения.

Применение в языках программирования

В компьютерном программировании подпрограммы (функции, процедуры, методы) строго типизированных языков программирования тесно соответствуют типизированным лямбда-выражениям.