Ранняя история и математические основы программирования:
Чёрч, Карри, Тьюринг
Кольцов Максим
Наивная теория множеств

Георг Кантор
- 1870-1900 — создание Кантором основных идей теории
- 1901— парадокс Рассела. Проблема теории Кантора — слишком "общее" построение множеств
\exists y \forall x (x \in y \Leftrightarrow P(x))
∃y∀x(x∈y⇔P(x))
\forall x (x \in y \Leftrightarrow x \in\!\!\!\!\!/ \; x)
∀x(x∈y⇔x∈/x)
- 1908-1921 — аксиоматика ZF
- 1931 — теоремы Гёделя о неполноте
Математическая логика
- Классическая логика: исчисление высказываний
- Логика первого порядка: кванторы
- Интуиционистская логика: важность доказательства
- Математический конструктивизим
\frac{A \quad (A \to B)}{B}
BA(A→B)
Modus Ponens
Проблема останова
- Проблема Гильберта — есть ли алгоритм, доказывающий формулы?
- 1935-1936 — Алонзо Чёрч и Алан Тьюринг: нет

Алан Тьюринг

Алонзо Чёрч
Почему нет?
def g():
if halts(g):
loop_forever()
Машина Тьюринга
Бесконечная лента, головка и правила перехода

Лямбда-исчисление
-
Переменные: x, y
-
Применение: fx, fxy=(fx)y
-
Абстракция: λx.fx
-
Бета-редукция:
(λx.fz)y=fy
-
Функции нескольких переменных? λx.(λy.fxy)
-
Рекурсия? Y=λf.(λx.f(x x))(λx.f(x x))
Проблема останова?
(\lambda x . x) (\lambda x . x)
(λx.x)(λx.x)
Типизированное
λ-исчисление
- Каждая переменная имеет тип: e:τ
- Если x:σ, e:τ, то λx.e:σ→τ
- Если e1:σ→τ, e2:σ, то e1e2:τ
Haskell как реализация лямбда-исчисления
f :: Integer -> String
f = \x -> (show x) ++ "!"
b :: String
b = f 1
fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n - 1)
Изоморфизм
Карри-Говарда

Хаскел Карри
- Все высказывания — типы
- Есть терм — есть доказательство
\frac{A \quad (A \to B)}{B}
\qquad
\frac{a : A,\; f : A \to B}{f a : B}
BA(A→B)fa:Ba:A,f:A→B
\frac{A \vdash B}{A \to B}
\qquad
\frac{a : A \vdash b : B}{\lambda a . b : A \to B}
A→BA⊢Bλa.b:A→Ba:A⊢b:B
Автоматическое доказательство и проверка кода

- 1989 — первая версия доказывателя теорем
- 2004 — проверка теоремы о четырёх красках
- 2015 — баг в TimSort, найденный с помощью KeY
«Ранняя история и математические основы программирования: Чёрч, Карри, Тьюринг»
By Maxim Koltsov
«Ранняя история и математические основы программирования: Чёрч, Карри, Тьюринг»
- 884