Знает, я упоминал полное в каком-то месте на форуме (вместе с этим сокращением, так что ищется), но вообще это
Types and programming languages. У неё ещё есть продолжение —
Advanced topics in types and programming languages.
Я бы создал тему, но опять же не имею понятия о чём. Самую базовую конструкцию в соответствии Карри—Говарда — соответствие между типизированным исчислением комбинаторов и импликативным куском интуиционистской логики — легко увидеть практически сразу.
В первом у нас есть базовые комбинаторы
![$\mathsf{K, S}$ $\mathsf{K, S}$](https://dxdy-03.korotkov.co.uk/f/6/2/c/62ce0abd6ca69d3d08a5950b564695ba82.png)
с типами
![$\mathsf K\colon\alpha\to\beta\to\alpha$ $\mathsf K\colon\alpha\to\beta\to\alpha$](https://dxdy-04.korotkov.co.uk/f/7/3/8/73853a8a15d8e3fc5e1e7cb7ddf3523082.png)
и
![$\mathsf S\colon(\alpha\to\beta\to\gamma)\to(\alpha\to\beta)\to\alpha\to\gamma$ $\mathsf S\colon(\alpha\to\beta\to\gamma)\to(\alpha\to\beta)\to\alpha\to\gamma$](https://dxdy-01.korotkov.co.uk/f/8/c/0/8c091515b6c67589e2088dcbf790ab4d82.png)
, и можно получить из комбинаторов
![$A\colon\alpha$ $A\colon\alpha$](https://dxdy-03.korotkov.co.uk/f/2/f/4/2f4fbaa15bfab5717e2cc4cd1102e72382.png)
и
![$B\colon\alpha\to\beta$ $B\colon\alpha\to\beta$](https://dxdy-02.korotkov.co.uk/f/1/2/2/1227b320c91d492b4a3b79285391557982.png)
комбинатор
![$(BA)\colon\beta$ $(BA)\colon\beta$](https://dxdy-01.korotkov.co.uk/f/0/6/8/068cea7b4f72b1b93f650dc952de977782.png)
. (Стрелку
![$\to$ $\to$](https://dxdy-03.korotkov.co.uk/f/e/4/9/e49c6dac8af82421dba6bed976a80bd982.png)
я считаю здесь везде правоассоциативной, что и естественно.)
Во втором у нас есть аксиомы
![$a\to b\to a$ $a\to b\to a$](https://dxdy-03.korotkov.co.uk/f/2/9/e/29e06fc87fa89feebda97432b70b971182.png)
и
![$(a\to b)\to(a\to b\to c)\to a\to c$ $(a\to b)\to(a\to b\to c)\to a\to c$](https://dxdy-03.korotkov.co.uk/f/a/f/7/af729d9a3e0e909bc647aa66712a242382.png)
и есть правило вывода Modus ponens:
![$\dfrac{a,\quad a\to b}b$ $\dfrac{a,\quad a\to b}b$](https://dxdy-01.korotkov.co.uk/f/c/4/0/c401982362f52b5a7e1457b566ab7cd482.png)
.
Видно, что
![$\mathsf{K, S}$ $\mathsf{K, S}$](https://dxdy-03.korotkov.co.uk/f/6/2/c/62ce0abd6ca69d3d08a5950b564695ba82.png)
и аксиомы друг другу соответствуют (почти: я записал вторую аксиому в более традиционном для неё виде, но в ней можно поменять порядок «аргументов» и иметь
![$(a\to b\to c)\to(a\to b)\to a\to c$ $(a\to b\to c)\to(a\to b)\to a\to c$](https://dxdy-03.korotkov.co.uk/f/a/5/a/a5ad3bfa0ebd529a00f00cd0cfb7fe2882.png)
), а аппликация комбинаторов, позволяющая строить новые, соответствует MP, позволяющему получать новые теоремы. Конечно, тут нам везёт, что сейчас это соответствие такое буквальное, ведь есть эквивалентные аксиоматизации второй логики и эквивалентные базисы в первом исчислении, и можно выбрать их так, что соответствие будет не таким наглядным. И даже MP может быть иногда заменён чем-то ещё, хотя для импликативного фрагмента такое выглядело бы неестественным.
Теперь должны стать понятнее слова «термы-типы соответствуют высказываниям, термы-значения соответствуют выводам», хотя тут ещё мало что можно увидеть.
Дальше всё просто наращивается. Например, можно перейти к просто типизированному λ-исчислению с одного края и к натуральной дедукции (опять же интуиционистской и ограниченной формулами с одной импликацией) с другого: абстракция будет соответствовать превращению вывода из гипотезы в безусловный вывод импликации (в гильбертовском исчислении это метатеорема, а не правило вывода — оно недостаточно выразительно, чтобы сделать её «настоящим» правилом). Правило типирования λ-абстракции такое:
![$\dfrac{\Gamma, x\colon\beta\vdash A\colon\alpha}{\Gamma\vdash(\lambda x.A)\colon\beta\to\alpha}$ $\dfrac{\Gamma, x\colon\beta\vdash A\colon\alpha}{\Gamma\vdash(\lambda x.A)\colon\beta\to\alpha}$](https://dxdy-04.korotkov.co.uk/f/b/e/5/be59e3dc463281d49dec8ea8b36250b682.png)
— и его можно прочитать как операцию над натуральным выводом: если у нас в нём есть подвывод из гипотезы
![$\beta$ $\beta$](https://dxdy-01.korotkov.co.uk/f/8/2/1/8217ed3c32a785f0b5aad4055f432ad882.png)
, помеченной маркером
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
некоторого
![$\alpha$ $\alpha$](https://dxdy-01.korotkov.co.uk/f/c/7/4/c745b9b57c145ec5577b82542b2df54682.png)
(и весь этот подвывод мы могли бы назвать выражением
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
), мы можем дальше вывести
![$\beta\to\alpha$ $\beta\to\alpha$](https://dxdy-02.korotkov.co.uk/f/5/6/1/5611d7d6f6e2da0a9b327a58c2ecc02582.png)
и разрядить гипотезу
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
, то есть её больше нигде нельзя использовать (и такой вывод обозначим как
![$\lambda x.A$ $\lambda x.A$](https://dxdy-01.korotkov.co.uk/f/8/7/d/87dcceaf37bb51bd5ddd4788521031c982.png)
, и в нём
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
уже не встречается свободно, он «инкапсулирован»).
![$\Gamma$ $\Gamma$](https://dxdy-04.korotkov.co.uk/f/b/2/a/b2af456716f3117a91da7afe7075804182.png)
означает все прочие ещё не разряженные гипотезы — множество каких-то других предположений вида
![$v\colon\tau$ $v\colon\tau$](https://dxdy-03.korotkov.co.uk/f/e/7/2/e728b4ebdb65f5727a6075f180bf0d1882.png)
— они в новом выводе остаются неразряженными.