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

Теория типов, созданная Тьерри Кокандом

[1] В математической логике и информатике исчисление конструкций ( CoC ) — это теория типов, созданная Тьерри Кокандом . Она может служить как типизированным языком программирования , так и конструктивной основой для математики . По этой второй причине CoC и его варианты стали основой для Coq и других помощников доказательства .

Некоторые из его вариантов включают исчисление индуктивных конструкций (которое добавляет индуктивные типы ), исчисление (ко)индуктивных конструкций (которое добавляет коиндукцию) и предикативное исчисление индуктивных конструкций (которое устраняет некоторую непредикативность ).

Общие черты

CoC — это типизированное лямбда-исчисление высшего порядка , изначально разработанное Тьерри Кокандом . Оно хорошо известно тем, что находится на вершине лямбда-куба Барендрегта . В CoC можно определять функции от термов к термовам, а также термов к типам, типов к типам и типов к термовам.

CoC является строго нормализующим и, следовательно, последовательным . [1]

Использование

CoC был разработан вместе с помощником по доказательству Coq . По мере добавления функций (или устранения возможных обязательств) к теории они стали доступны в Coq.

Варианты CoC используются в других помощниках по проверке доказательств, таких как Matita и Lean .

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

Исчисление конструкций можно считать расширением изоморфизма Карри–Ховарда . Изоморфизм Карри–Ховарда связывает термин в просто типизированном лямбда-исчислении с каждым доказательством естественного вывода в интуиционистской пропозициональной логике . Исчисление конструкций расширяет этот изоморфизм до доказательств в полном интуиционистском предикатном исчислении , которое включает доказательства квантифицированных утверждений (которые мы также будем называть «предложениями»).

Условия

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

  • Т {\displaystyle \mathbf {T} } — это термин (также называемый типом );
  • П {\displaystyle \mathbf {P} } является термином (также называемым prop , типом всех предложений);
  • Переменные ( ) — это термины; х , у , {\displaystyle x,y,\ldots}
  • Если и являются терминами, то также является ; А {\displaystyle А} Б {\displaystyle Б} ( А Б ) {\displaystyle (AB)}
  • Если и являются терминами, а — переменной, то следующие также являются терминами: А {\displaystyle А} Б {\displaystyle Б} х {\displaystyle x}
    • ( λ х : А . Б ) {\displaystyle (\лямбда x:AB)} ,
    • ( х : А . Б ) {\displaystyle (\forall x:AB)} .

Другими словами, синтаксис термина в форме Бэкуса-Наура выглядит следующим образом:

е ::= Т П х е е λ х : е . е х : е . е {\displaystyle e::=\mathbf {T} \mid \mathbf {P} \mid x\mid e\,e\mid \lambda x{\mathbin {:}}e.e\mid \forall x{\mathbin {:}}e.e}

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

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

β-эквивалентность

Как и в случае с нетипизированным лямбда-исчислением, исчисление конструкций использует базовое понятие эквивалентности терминов, известное как -эквивалентность. Это отражает значение -абстракции: β {\displaystyle \beta } λ {\displaystyle \lambda }

  • ( λ x : A . B ) N = β B ( x := N ) {\displaystyle (\lambda x:A.B)N=_{\beta }B(x:=N)}

β {\displaystyle \beta } -эквивалентность — это отношение конгруэнтности для исчисления конструкций в том смысле, что

  • Если и , то . A = β B {\displaystyle A=_{\beta }B} M = β N {\displaystyle M=_{\beta }N} A M = β B N {\displaystyle AM=_{\beta }BN}

Суждения

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

x 1 : A 1 , x 2 : A 2 , t : B {\displaystyle x_{1}:A_{1},x_{2}:A_{2},\ldots \vdash t:B} ,

что можно прочитать как подтекст

Если переменные имеют, соответственно, типы , то терм имеет тип . x 1 , x 2 , {\displaystyle x_{1},x_{2},\ldots } A 1 , A 2 , {\displaystyle A_{1},A_{2},\ldots } t {\displaystyle t} B {\displaystyle B}

Действительные суждения для исчисления конструкций выводятся из набора правил вывода . В дальнейшем мы используем для обозначения последовательности назначений типов ; для обозначения терминов; и для обозначения либо , либо . Мы будем писать для обозначения результата подстановки термина вместо свободной переменной в термин . Γ {\displaystyle \Gamma } x 1 : A 1 , x 2 : A 2 , {\displaystyle x_{1}:A_{1},x_{2}:A_{2},\ldots } A , B , C , D {\displaystyle A,B,C,D} K , L {\displaystyle K,L} P {\displaystyle \mathbf {P} } T {\displaystyle \mathbf {T} } B [ x := N ] {\displaystyle B[x:=N]} N {\displaystyle N} x {\displaystyle x} B {\displaystyle B}

Правило вывода записывается в виде

Γ A : B Γ C : D {\displaystyle {\frac {\Gamma \vdash A:B}{\Gamma '\vdash C:D}}} ,

что означает

если является обоснованным суждением, то таковым является и . Γ A : B {\displaystyle \Gamma \vdash A:B} Γ C : D {\displaystyle \Gamma '\vdash C:D}

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

1 . Γ P : T {\displaystyle {{} \over \Gamma \vdash \mathbf {P} :\mathbf {T} }}

2 . Γ A : K Γ , x : A , Γ x : A {\displaystyle {{\Gamma \vdash A:K} \over {\Gamma ,x:A,\Gamma '\vdash x:A}}}

3 . Γ A : K Γ , x : A B : L Γ ( x : A . B ) : L {\displaystyle {\Gamma \vdash A:K\qquad \qquad \Gamma ,x:A\vdash B:L \over {\Gamma \vdash (\forall x:A.B):L}}}

4 . Γ A : K Γ , x : A N : B Γ ( λ x : A . N ) : ( x : A . B ) {\displaystyle {\Gamma \vdash A:K\qquad \qquad \Gamma ,x:A\vdash N:B \over {\Gamma \vdash (\lambda x:A.N):(\forall x:A.B)}}}

5 . Γ M : ( x : A . B ) Γ N : A Γ M N : B [ x := N ] {\displaystyle {\Gamma \vdash M:(\forall x:A.B)\qquad \qquad \Gamma \vdash N:A \over {\Gamma \vdash MN:B[x:=N]}}}

6 . Γ M : A A = β B Γ B : K Γ M : B {\displaystyle {\Gamma \vdash M:A\qquad \qquad A=_{\beta }B\qquad \qquad \Gamma \vdash B:K \over {\Gamma \vdash M:B}}}

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

Исчисление конструкций имеет очень мало основных операторов: единственный логический оператор для формирования предложений — это . Однако этого одного оператора достаточно для определения всех остальных логических операторов: {\displaystyle \forall }

A B x : A . B ( x B ) A B C : P . ( A B C ) C A B C : P . ( A C ) ( B C ) C ¬ A C : P . ( A C ) x : A . B C : P . ( x : A . ( B C ) ) C {\displaystyle {\begin{array}{ccll}A\Rightarrow B&\equiv &\forall x:A.B&(x\notin B)\\A\wedge B&\equiv &\forall C:\mathbf {P} .(A\Rightarrow B\Rightarrow C)\Rightarrow C&\\A\vee B&\equiv &\forall C:\mathbf {P} .(A\Rightarrow C)\Rightarrow (B\Rightarrow C)\Rightarrow C&\\\neg A&\equiv &\forall C:\mathbf {P} .(A\Rightarrow C)&\\\exists x:A.B&\equiv &\forall C:\mathbf {P} .(\forall x:A.(B\Rightarrow C))\Rightarrow C&\end{array}}}

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

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

Булевы значения
A : P . A A A {\displaystyle \forall A:\mathbf {P} .A\Rightarrow A\Rightarrow A}
Натуралы
A : P . ( A A ) A A {\displaystyle \forall A:\mathbf {P} .(A\Rightarrow A)\Rightarrow A\Rightarrow A}
Продукт A × B {\displaystyle A\times B}
A B {\displaystyle A\wedge B}
Несвязное объединение A + B {\displaystyle A+B}
A B {\displaystyle A\vee B}

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

Смотрите также

Ссылки

  1. ^ ab Coquand, Thierry; Gallier, Jean H. (июль 1990 г.). «Доказательство сильной нормализации для теории конструкций с использованием интерпретации, подобной интерпретации Крипке». Технические отчеты (Cis) (568): 14.
  2. ^ "Стандартная библиотека | Помощник доказательства Coq". coq.inria.fr . Получено 2020-08-08 .

Источники

  • Коканд, Тьерри ; Юэ, Жерар (1988). «Исчисление конструкций» (PDF) . Информация и вычисления . 76 ( 2–3 ): 95–120 . doi : 10.1016/0890-5401(88)90005-3 .
    • Также доступно в свободном доступе в Интернете: Coquand, Thierry; Юэ, Жерар (1986). Расчет конструкций (Технический отчет). ИНРИА , Центр Рокенкура. 530.
      Обратите внимание, что терминология несколько отличается. Например, ( ) записывается как [ x  : A ] B . x : A . B {\displaystyle \forall x:A.B}
  • Бандер, М. В.; Селдин, Джонатан П. (2004). «Варианты базового исчисления конструкций». CiteSeerX  10.1.1.88.9497 .
  • Фраде, Мария Жуан (2009). "Исчисление индуктивных построений" (PDF) . Архивировано из оригинала (обсуждение) 2014-05-29 . Получено 2013-03-03 .
  • Huet, Gérard (1988). "Induction Principles Formalized in the Calculus of Constructions" (PDF) . В Fuchi, K.; Nivat, M. (ред.). Programming of Future Generation Computers . North-Holland. стр.  205–216 . ISBN 0444704108. Архивировано из оригинала (PDF) 2015-07-01.— Применение Кодекса
Retrieved from "https://en.wikipedia.org/w/index.php?title=Calculus_of_constructions&oldid=1269708106"