Математические модели вычислений

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

Типы произведений и сумм

Зависимые суммы (квантификация существования)

Универсумы и парадокс Бурали-Форти для исчисления конструкций

Реализации исчисления конструкций (Coq, Agda, Idris)

Материалы курса: https://maxxk.github.io/formal-models-2015/

Объявление

Нужно определиться со временем (и аудиторией) зачётов и подать их в учебную часть.
Я надеюсь, мы справимся за 2 раза (а то и за один), но нужно поставить все 3.

Слушатели не из 510 группы, которые хотят сдать спецкурс:

  1. Нужно уточнить в своей учебной части о форме вашей сдачи этого спецкурса (Математические модели вычислений, 0.5 г., зачёт, обязательная дисциплина кафедры вычислительной математики), желательно заранее, чтобы, если от нашей кафедры нужно будет что-то дополнительно подать, мы бы успели это сделать.
  2. Можно приходить сдавать на зачёты, можно договориться провести экзамен в какой-то день — пишите.

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

T. Coquand, G. Huet. The calculus of constructions. 1988.

Контексты — список типов переменных (записывается как \(x : A, y : B\), обозначается греческими буквами \(Γ\))
Термы:

  • типы — $ Γ ⊦ \mathbf{Type} : \mathbf{Type}^* $
  • переменные (\(x\)) — $ \dfrac{Γ ⊦ A : \mathbf{Type}}{Γ, x : A ⊦ x : A } $
  • зависимые произведения (\(Π(x : A).B(x),\) формация) — $ \dfrac{Γ ⊦ A : \mathbf{Type} \qquad Γ, x : A ⊦ B(x) : \mathbf{Type}}{Γ ⊦ Π(x : A).B(x) : \mathbf{Type}} $
  • абстракция (\(λ(x : A).b,\) введение) — $ \dfrac{Γ ⊦ A : \mathbf{Type}, \qquad Γ, x : A ⊦ b : B(x)}{Γ ⊦ λ(x : A).b : Π(x : A).B(x)}$
  • приложение (\(M · N,\) удаление) — $ \dfrac{Γ ⊦ M : Π(x : A).B \qquad Γ ⊦ N : A}{Γ ⊦ M · N : B[x := N]}$
  • β-редукция — $ (λ(x : A).b) · z ⟶_β b[x := z] $
  • преобразование типов — $\dfrac{Γ ⊦ M : A \qquad A ⟶^*_β B, \qquad Γ ⊦ B : \mathbf{Type} }{Γ ⊦ M : B} $

Тип суммы («или»)

Элемент типа \(A+B\) — это или элемент типа \(A\) или элемент типа \(B\).

формация — \(A + B\)
$ \dfrac{Γ ⊦ A, B : \mathbf{Type}}{Γ ⊦ A + B : \mathbf{Type}} $
введение — \(\mathrm{inl}(a)\), \(\mathrm{inr}(b)\)
$ \dfrac{a : A}{\mathrm{inl_B}(a) : A + B} $
$ \dfrac{b : B}{\mathrm{inr_A}(b) : A + B} $
удаление — \(\mathrm{case'}\)
\(\dfrac{C : \mathbf{Type}\qquad f_a : ΠA.C \qquad f_b : ΠB.C \qquad x : A + B} {\mathrm{case'}(C, f_a, f_b, x) : C}\)
редукция
\(\mathrm{case'}(C, f_a, f_b, \mathrm{inl_B} \, a) ⟶ f_a · a\)
\(\mathrm{case'}(C, f_a, f_b, \mathrm{inr_A} \, b) ⟶ f_b ·a\)
зависимое удаление — \(\mathrm{case}\)
\(\dfrac{C : Π(t : A+B).\mathbf{Type}\quad f_a : Π(a : A).C · (\mathrm{inl_B}(a)) \quad f_b : Π(b : B).C · (\mathrm{inr_A}(B)) \quad x : A + B} {\mathrm{case}(C, f_a, f_b, x) : C · x}\)

Тип произведения («и»)

Элемент типа \(A × B\) — это пара из элемента типа \(A\) и элемента типа \(B\)

формация — \(A × B\)
$ \dfrac{Γ ⊦ A, B : \mathbf{Type}}{Γ ⊦ A × B : \mathbf{Type}} $
введение — \((a, b)\)
$\dfrac{Γ ⊦ A×B : \mathbf{Type}\qquad Γ ⊦ a : A, \qquad Γ ⊦ b : B}{Γ ⊦ (a, b) : A × B} $
удаление — \(π_1(x), π_2(x)\)
\(\dfrac{t : A × B}{π_1(t) : A}\qquad\) \(\dfrac{t : A × B}{π_2(t) : B}\)
редукция
\(π_1((a, b)) ⟶ a\)
\(π_2((a, b)) ⟶ b\)

Тип зависимой суммы («существует»)

Luo, 1989. Extended Calculus of Constructions
Элемент типа \(Σ(x : A).B(x)\) — это пара из элемента \(a\) типа \(A\) и элемента \(b_a\) типа \(B(a)\).

формация — \(Σ(x : A).B(x)\)
\(\dfrac{A : \mathbf{Type}, \qquad Γ, x: A ⊦ B : \mathbf{Type}}{Γ ⊦ Σ(x: A).B : \mathbf{Type}}\)
введение — \((a, b)_{Σ(x: A).B}\)
\(\dfrac{a : A, \qquad b : B[x := a]}{(a, b)_{Σ(x : A).B} : Σ(x : A).B}\)
удаление — \(\mathrm{split}\)
можно ввести операторы проекции \(π_{1,2}\) как для обычного произведения
зависимое удаление:
\(\dfrac{C : Π(Σ(x : A).B).\mathbf{Type} \qquad r : Π(a : A).(b : B(a)).C·(a, b)_{ΣA.B} \qquad x : ΣA.B} {\mathrm{split}(C, r, x) : C · x}\)
редукция
\(\mathrm{split}(C, r, (a, b)_{ΣA.B}) ⟶ r · a · b\)
Тип произведения — это частный случай типа зависимой суммы, когда \(B\) не зависит от \(x\). Точно так же, как и тип функции/«стрелки» \(A → B\) — это частный случай зависимого произведения (\(Π(x : A).B\)).

Соответствие Карри-Говарда

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

Логика Исчисление конструкций
«и» A ∧ B ΣA.B
«или» A ∨ B A + B
A → B ΠA.B
«не» A #0 или ΠC.A.C
∀a.P(a) Π(a : A).P(a)
∃a.P(a) Σ(a : A).P(a)

«Конструктивность» логики — все доказательства представляют собой эффективные вычисления, все правила вывода тоже возвращают вычисление. Например, оператор \(π_1\) для зависимой суммы/квантора существования вернёт тот самый \(x\), для которого верно \(P(x)\).

Теории типов и теории подтипов

Разновидности исчисления конструкций, правила вывода которых задаются с помощью суждения типизации «x : A» называют теориями типов.

Есть понятие теорий подтипов, в которых вводится понятие отношения вложения типов \(X <: Y\) и правило включения \(\dfrac{Γ ⊦ x : X, \qquad X <: Y}{Γ ⊦ x : Y}\), но у них есть сложности с нормализацией.

Универсумы

Парадокс Бурали-Форти в исчислении конструкций

\(\mathbf{Type}\) — универсум («тип всех типов»), в общем случаи такие конструкции опасны, т.к. позволяют определить парадоксы.

Самое опасное — это рекурсивное включение универсумов, которое мы дали в первом правиле редукции сегодняшней лекции: \(\mathbf{Type} : \mathbf{Type}\). Оно делает противоречивым даже System F\({}_ω\) — полиморфное λ-исчисление с конструкторами типов.

Парадокс

Hurkens, 1995. A simplification of Girard's paradox.
2^S ≡ Pow ≡ λ (S : Type). Π S . Type
Univ ≡ Π (X : Type). (Π (Π 2^{2^X} . X). 2^{2^X})
PPUniv ≡ 2^{2^Univ}
τ ≡ λ (t : PPUniv) (X : Type) (f : Π 2^{2^X} . X ) (p : 2^X ) .
  t · (λ (x : Univ) . (p (f ((x X) f))))
σ ≡ λ (s : Univ) . ((s · Univ) (λ (t : PPUniv) . τ · t))
Δ ≡ λ (y : Univ) . (Π (Π (p : (Pow Univ)). (σ y p) (p (τ (σ y)))) #0)
Ω ≡  (τ · (λ (p : 2^Univ)) · (Π (x : Univ). (σ · x · p) · (p · x)))
False ≡ (λ (O :  (Π (p : 2^Univ) (Π (x : Univ) . (σ · x · p) · (p · x)) (p · Ω) )).
  (((O Δ) (λ (x : Univ) (t : σ x Δ) (u : (Π (p : (Pow Univ)). (σ y p) (p (τ (σ y))))).
      (u · (λ (y : Univ)) (p (τ (σ y)))))))
  · (λ (p : 2^Univ) . (O (λ (y : Univ) . p (τ (σ y)))))
  · (λ (p : 2^Univ). (v : (Π (x : Univ). (σ x p) (p x))).
        (v · Ω) · (λ (x : Univ) . (v · (τ (σ x))))))
False : #0

Уровни универсумов

Для того, чтобы избежать таких парадоксов, рассматривают не один универсум \(\mathbf{Type} : \mathbf{Type}\), а их набор \(\mathbf{Type}_i\), где \(i\) — какой-то набор индексов с заданным строгим порядком \(<\) (обычно используется что-то вроде решётки, чтобы у любой пары индексов был максимальный \(\max\), нестрого больший \(i, j ⩽ \max(i,j))\).

Тогда правило типизации универсума преобразуется к следующему виду: \(\dfrac{i < j}{\mathbf{Type}_i : \mathbf{Type}_j}\),

А правила типизации зависимой суммы и произведения — к виду:
$ \dfrac{Γ ⊦ A : \mathbf{Type}_i \qquad Γ, x : A ⊦ B(x) : \mathbf{Type}_j}{Γ ⊦ Π(x : A).B(x) : \mathbf{Type}_k, [i, j ⩽ k]} $

При проверке типов индексы строятся в виде ориентированного графа, рёбра которого помечены \(<\) и \(⩽\), а потом, например, алгоритмом Тарьяна, определяется, можно ли получить на основе этого графа требуемый порядок (можно, если нет ориентированного цикла с одним из рёбер, помеченных \(<\))

Реализации исчисления конструкций

Coq

https://coq.inria.fr/

Agda

http://wiki.portal.chalmers.se/agda/pmwiki.php

Idris

http://www.idris-lang.org/

Интерактивные примеры в Coq

http://proofweb.cs.ru.nl/
Proof Assistant, выбрать Coq, Guest Login

Задачи со звёздочкой

Задача 7.1* Определить \(π_{1,2}\) через \(\mathrm{split}\).

  • бонусная * — определить \(η\)-эквивалентность на зависимых суммах и определить split через \(π_{1,2}\)

Задача 7.2** Реализовать сортировку списка натуральных чисел в Coq.

Задача 7.3** Сформулировать одну из «больших» теорем математических курсов (мат. анализ, алгебра и т.п.) в Coq

  • бонусные ** — доказать теорему