Исчисление конструкций

Материал из testwiki
Перейти к навигации Перейти к поиску

Исчисление конструкций (Шаблон:Lang-en) — теория типов на основе полиморфного λ-исчисления высшего порядка с зависимыми типами, разработана Тьерри Коканом и Жераром Юэ в 1986 году. Находится в высшей точке лямбда-куба Барендрегта, являясь наиболее широкой из входящих в него систем — λPω. Может быть применена как основа для построения типизированного языка программирования, так и в качестве системы конструктивных оснований математики.

Используется как базис для системы интерактивного доказательства Coq и ряда подобных инструментов (в том числе Шаблон:Iw).

Среди вариантов исчисления — исчисление индуктивных конструкций[1] (использует индуктивные типы), исчисление коиндуктивных конструкций (с применением коиндукции), предикативное исчисление индуктивных конструкций (устраняет некоторую часть непредикативности).

С точки зрения соответствия Карри — Ховарда исчисление конструкций устанавливает взаимосвязь между зависимыми типами и доказательствами в секвенциальном интуиционистском исчислении предикатов.

Структура

Термы

Терм в исчислении конструкций конструируется по следующим правилами:

  • T — это терм (так же его обозначают как Type);
  • P — это терм (так же его обозначают как Prop, это — тип, к которому относятся все утверждения);
  • Переменные (x, y, …) — это термы;
  • Если A и B — это термы, то выражение (A B) также является термом;
  • Если A и B — это термы и x — это переменная, то нижеследующие выражения также являются термами:
    • (λx:A . B),
    • (∀x:A . B).

Другими словами, синтаксис терма, если записать его при помощи BNF, следующий:

e::=𝐓∣𝐏∣x∣ee∣λx:e.e∣∀x:e.e

Исчисление конструкций использует пять типов объектов:

  1. доказательства, которые имеют типом те или иные утверждения;
  2. утверждения, также называемые малыми типами;
  3. предикаты, являющиеся функциями, возвращающими утверждения;
  4. большие типы, являющиеся типами для предикатов (P — пример такого большого типа);
  5. T как таковой, который является типом, к которому относятся большие типы.

Суждения

Исчисление конструкций позволяет доказывать суждения о типах.

x1:A1,x2:A2,…⊢t:B

можно прочесть как импликацию:

Если переменные x1,x2,… имеют типы A1,A2,…, то терм t имеет тип B.

Допустимые суждения для исчисления конструкций могут быть получены из набора правил вывода. В дальнейшем мы используем символ Γ чтобы обозначить последовательность присвоений типов x1:A1,x2:A2,…, и K чтобы обозначить либо P либо T. Формула B[x:=N] будет использоваться для замены терма N для каждой свободной переменной x в терме B.

Правила вывода записываются в следующем формате:

Γ⊢A:BΓ′⊢C:D

это означает:

Если Γ⊢A:B является валидным суждением, то Γ′⊢C:D

Правила вывода для исчисления конструкций

1. Γ⊢P:T

2. Γ⊢A:KΓ,x:A⊢x:A

3. Γ,x:A⊢B:KΓ,x:A⊢N:BΓ⊢(λx:A.N):(∀x:A.B):K

4. Γ⊢M:(∀x:A.B)Γ⊢N:AΓ⊢MN:B[x:=N]

5. Γ⊢M:AA=βBΓ⊢B:KΓ⊢M:B

Определение логических операторов

Исчисление конструкций включает в себя совсем небольшое число основных операторов: единственный логический оператор для формирования утверждений ∀. Однако одного этого оператора достаточно для определения всех других логических операторов:

A⇒B≡∀x:A.B(x∉B)A∧B≡∀C:P.(A⇒B⇒C)⇒CA∨B≡∀C:P.(A⇒C)⇒(B⇒C)⇒C¬A≡∀C:P.(A⇒C)∃x:A.B≡∀C:P.(∀x:A.(B⇒C))⇒C

Определение типов данных

Исчисление конструкций позволяет определить базовые типы данных, используемые в информатике:

Булевы значения
∀A:P.A⇒A⇒A
Натуральные числа
∀A:P.(A⇒A)⇒(A⇒A)
Произведение A×B
A∧B
Исключающее объединение (запись с вариантами) A+B
A∨B

Обратите внимания на то, что булевы и числовые значения определяются способом, аналогичным кодированию Чёрча. Однако дополнительные проблемы возникают из-за экстенсиональности утверждений и иррелевантностиШаблон:Уточнить доказательств[2].

Примечания

Шаблон:Примечания

Шаблон:Rq