-
Notifications
You must be signed in to change notification settings - Fork 6
/
lec10.tex
201 lines (186 loc) · 12.8 KB
/
lec10.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
\section{\texorpdfstring{Линейные и уникальные типы}{Linear and unique types}}
Пусть $A \to_\beta A'$.
С одной стороны, порядок редукции не важен, % TODO картинка
$(\lambda x . x x) A \to_\beta (\lambda x . x x) A' \to_\beta A' A'$
и $(\lambda x . x x) A \to_\beta A A \to_\beta A' A \to_\beta A' A'$.
По теореме \nameref{church-rosser} нормальная форма единственна, если существует.
С другой стороны, реальный мир на самом деле не таков, в нём есть побочные эффекты.
% A(b(), unique_ptr<C>(new C))
\subsection{\texorpdfstring{Комбинаторная логика}{Combinatory logic}}
Историческая справка. Известные нам комбинаторы $\comb S$ и $\comb K$ придумал Моисей Шейнфинкель,
ещё до Карри с его $\lambda$-исчислением.
У него было своё каррирование и комбинаторная логика.
Хаскелл Карри придумал свою систему позже, однако независимо от Шейнфинкеля.
\begin{center} \newcommand{\eemph}[1]{\underline{\textbf{#1}}}
\begin{tabular}{l l l l l} \toprule
\multicolumn{3}{l}{Моисей Шейнфинкель} & \multicolumn{2}{l}{Хаскелл Карри} \\ \cmidrule(lr){1-3} \cmidrule(lr){4-5}
$\comb I$ & (\eemph{I}dentität) & $\lambda x . x$ & $\comb B$ & $\lambda x y z . x (y z)$ \\
$\comb K$ & (\eemph{K}onstanz) & $\lambda x y . x$ & $\comb C$ & $\lambda x y z . x z y$ \\
$\comb S$ & (Ver\eemph{s}chmelzung) & $\lambda x y z . x z (y z)$ & $\comb K$ & $\lambda x y . x$ \\
$\comb T$ & (Ver\eemph{t}auschung) & $\lambda x y z . x z y$ & $\comb W$ & $\lambda x y . x y y$ \\ \bottomrule
\end{tabular} % Вот тут про названия. Больше не нашёл :( http://www.johndcook.com/blog/2014/02/06/schonfinkel-combinators/
\end{center}
С помощью каждой из этих двух систем можно выразить любое $\lambda$-выражение без свободных переменных.
Пусть
\[
\Lambda_{\comb{SK}} ::= x \mid \comb S \mid \comb K \mid \comb I \mid (\Lambda_{\comb{SK}} \Lambda_{\comb{SK}})
\]
\begin{proof}[Докажем \ref{SK-basis}] \newcommand{\opop}{\operatorname}
Определим $\opop T : \Lambda \to \Lambda_{\comb{SK}}$:
\begin{align*}
\opop T[x] &= x \\
\opop T[A B] &= \opop{T}[A]\opop{T}[B] \\
\opop T[\lambda x . P] &= \comb K \opop{T}[P] \text{, если $x \notin \FV(P)$} \\
\opop T[\lambda x . x] &= \comb I \\
\opop T[\lambda x . A B] &= \comb S \opop{T}[\lambda x . A]\opop{T}[\lambda x . B] \\
\opop T[\lambda x . \lambda y . A] &= \opop T[\lambda x . \opop T[\lambda y . A]]
\end{align*}
$\opop T[\lambda\text{-выражение}]$ завершается и не содержит абстракций.
Можно проверить, что $\opop T[A] =_\beta A$.
\end{proof}
Например, $\overline 4$ после преобразования приведённым алгоритмом, очевидно, будет выглядеть так:
\[
\overline 4 =_\beta \comb S (\comb S (\comb K \comb S) (\comb S (\comb K \comb K) \comb I)) (\comb S (\comb S (\comb K \comb S) (\comb S (\comb K \comb K) \comb I)) (\comb S (\comb S (\comb K \comb S) (\comb S (\comb K \comb K) \comb I)) (\comb S (\comb S (\comb K \comb S) (\comb S (\comb K \comb K) \comb I)) (\comb K \comb I))))
\]
Для доказательства аналогичной теоремы для базиса $\comb{BCKW}$ достаточно выразить через них комбинаторы $\comb S$ и $\comb K$:
\[
\comb S = \comb B (\comb B \comb W) (\comb B \comb B \comb C) \qquad \comb I = \comb C \comb K \comb K
\]
Давайте теперь проследим связь комбинаторов с логикой. Выведем типы у $\comb S$ и $\comb K$:
\begin{align*}
\comb S &= \lambda x y z . x z (y z) : (\alpha \to \beta \to \gamma) \to
(\alpha \to \beta) \to (\alpha \to \gamma) \\
\comb K &= \lambda x y . x : \alpha \to \beta \to \alpha
\end{align*}
Это похоже на вторую и первую схемы аксиом в ИИВ.
Понятно, что изоморфизм Карри-Ховарда переносится и на комбинаторы, так как это сокращения для $\lambda$-выражений.
Роль modus ponens будет исполнять редукция.
Посмотрим на другие комбинаторы:
\begin{alignat*}{4}
\comb I&=\lambda x.x &&: \alpha \to \alpha \\
\comb B&=\lambda x y z.x(yz) &&:(\alpha\to\beta)\to(\beta \to\gamma) \to (\alpha \to \gamma) \\
\comb C&=\lambda x y z.x z y &&:(\alpha \to\beta\to \gamma)\to (\beta \to \alpha \to \gamma) \\
\comb K&=\lambda x y . x &&: \alpha \to \beta \to \alpha \\
\comb W&=\lambda x y . x y y &&: (\alpha \to \alpha \to \beta) \to (\alpha \to \beta)
\end{alignat*}
У последних двух комбинаторов есть отличительная особенность. $\comb K$ "<убивает"> один аргумент, а $\comb W$ "--- дублирует.
В логике это не даёт ничего плохого, однако в $\lambda$-исчислении такой эффект может быть нежелателен.
Ведь не всегда в реальных программах мы можем произвольным образом дублировать какие-то объекты.
Базис $\comb{BCKWI}$ по изоморфизму Карри-Ховарда порождает интуиционистскую логику.
Можно рассматривать исчисления, прорджённые базисами $\comb{BCKI}$ и $\comb{BCI}$.
Прежде чем описывать новую логику, мы вспомним классическое ИИВ, однако представим правила вывода в немного другом виде:
\begin{@empty} \inferspacing
\begin{gather*}
\infer{A \vdash A}{} \qquad
\infer{\Delta, \Gamma \vdash A}{\Gamma, \Delta \vdash A} \qquad
\infer{\Gamma, A \vdash B}{\Gamma, A, A \vdash B} \qquad
\infer{\Gamma, A \vdash B}{\Gamma \vdash B} \\
\infer{\Gamma \vdash A \to B}{\Gamma, A \vdash B} \qquad
\infer{\Gamma, \Delta \vdash B}{\Gamma \vdash A \to B && \Delta \vdash A} \\
\infer{\Gamma, \Delta \vdash A \times B}{\Gamma \vdash A && \Delta \vdash B} \qquad
\infer{\Gamma, \Delta \vdash C}{\Gamma \vdash A \times B && \Delta, A, B \vdash C}\\
\infer{\Gamma \vdash A + B}{\Gamma \vdash A} \qquad
\infer{\Gamma \vdash A + B}{\Gamma \vdash B} \qquad
\infer{\Gamma, \Delta \vdash C}{\Gamma \vdash A + B && \Delta, A \vdash C && \Delta, B \vdash C}
\end{gather*}
\end{@empty}%
\subsection{\texorpdfstring{Линейные высказывания}{Linear statements}}
\begin{definition}[Грамматика линейных высказываний]
\begin{bnf}
\[
T ::= x | T \multimap T | T \otimes T | T \with T | T \oplus T | \oc T
\]
\end{bnf}
\end{definition}
Неформально, этим значкам можно предать следующий смысл (формально "--- смысла в этом нет):
\begin{enumerate}
\item $A \multimap B$ "--- Имеем возможноть превратить $A$ в $B$
\item $A \otimes B$ "--- Можем получить и $A$, и $B$, одновременно
\item $A \with B$ "--- Можем получить либо $A$, либо $B$, по своему усмотрению
\item $A \oplus B$ "--- Можем получить либо $A$, либо $B$, но не по своему усмотрению
\item $\oc A$ "--- Имеем фабрику, производящая неограниченное количество $A$
\end{enumerate}
Расширим язык новыми правилами работы с контекстом "--- заведем два вида контекстов: $\pair{A}$ "--- линейный, $[A]$ "--- интуиционистский.
Если у мета-переменной контекста нет каких-либо скобок, то вид контекста нам не важен и может быть любым.
Разница заключается в том, что на выражанения в линейном контексте налагаются новые правила,
говорящие что мы не можем раздвоить или убрать в контексте эти выражения. Формально это отображается в следующих аксиомах:
\[
\infer{\pair{A} \vdash A}{} \qquad
\infer{[A] \vdash A}{} \qquad
\infer{\Delta, \Gamma \vdash A}{\Gamma, \Delta \vdash A} \qquad
\infer{\Gamma, [A] \vdash B}{\Gamma, [A], [A] \vdash B} \qquad
\infer{\Gamma, [A] \vdash B}{\Gamma \vdash B} \\
\]
Заведем также аксиомы для работы с самими выражениями:
\begin{@empty}
\inferspacing
\begin{gather*}
\infer[]{[\Gamma] \vdash \oc A}{[\Gamma] \vdash A} \qquad
\infer[]{\Gamma, \Delta \vdash B}{\Gamma \vdash \oc A && \Delta, [A] \vdash B} \qquad
\infer[]{\Gamma \vdash A \multimap B}{\Gamma, \pair{A} \vdash B} \qquad
\infer[]{\Gamma, \Delta \vdash B}{\Gamma \vdash A \multimap B && \Delta \vdash A} \\
\infer[]{\Gamma, \Delta \vdash A \otimes B}{\Gamma \vdash A && \Delta \vdash B} \qquad
\infer[]{\Gamma, \Delta \vdash C}{\Gamma \vdash A \otimes B && \Delta, \pair{A}, \pair{B} \vdash C} \\
\infer[]{\Gamma \vdash A \with B}{\Gamma \vdash A && \Gamma \vdash B} \qquad
\infer[]{\Gamma \vdash A}{\Gamma \vdash A \with B} \qquad
\infer[]{\Gamma \vdash B}{\Gamma \vdash A \with B} \\
\infer[]{\Gamma \vdash A \oplus B}{\Gamma \vdash A} \qquad
\infer[]{\Gamma \vdash A \oplus B}{\Gamma \vdash B} \qquad
\infer[]{\Gamma, \Delta \vdash C}{\Gamma \vdash A \oplus B && \Delta, \pair{A} \vdash C && \Delta, \pair{B} \vdash C}
\end{gather*}
\end{@empty}
\begin{example}[законы Де-Моргана]
В линейных высказываниях также верны законы Де-Моргана :
\[
\pair{\oc (A \with B)} \vdash \oc A \otimes \oc B \qquad
\pair{\oc A \otimes \oc B} \vdash \oc (A \with B)
\]
Докажем один из них:
\[
\infer{\pair{\oc (A \with B)} \vdash \oc A \otimes \oc B} {
\infer{\pair{\oc (A \with B)} \vdash \oc (A \with B)}{}
&&
\infer{[A \with B] \vdash \oc A \otimes \oc B} {
\infer{[A \with B, A \with B] \vdash \oc A \otimes \oc B}{
\infer{[A \with B] \vdash \oc A} {
\infer{[A \with B] \vdash A} {
\infer{[A \with B] \vdash A \with B}{}
}
}
&&
\infer{[A \with B] \vdash \oc B} {
\infer{[A \with B] \vdash B} {
\infer{[A \with B] \vdash A \with B}{}
}
}
}
}
}
\]
\end{example}
Интуционисткую логику можно вложить в линейную логику путем определения интуционистких связок через линейные:
\begin{align*}
A \to B &= \oc A \multimap B \\
A \times B &= A \with B \\
A + B &= \oc A \oplus \oc B
\end{align*}
В качестве альтернативного варианта, $A \times B$ можно вложить как $\oc A \otimes \oc B$.
Доказательства из ИИВ могут быть переписаны на язык линейной логики путем замены аксиомы ИИВ их аналогами из линенйной логики.
\begin{table}
\centering
\begin{tabular}{Sc Sc} \toprule
Схема аксиом в ИИВ & Представление в линейной логике \\ \midrule
$\infer[]{\Gamma \vdash A \to B}{\Gamma, A \vdash B}$ &
$\infer[]{\Gamma \vdash \oc A \multimap B}{
\infer[]{\Gamma, \pair{\oc A} \vdash B}{
\infer[]{\pair{\oc A} \vdash \oc A}{} && \Gamma, [A] \vdash B
}
}$ \\ \midrule
$\infer[]{\Gamma, \Delta \vdash B}{\Gamma \vdash A \to B && \Delta \vdash A}$ &
$\infer[]{\Gamma, [\Delta] \vdash B}{
\Gamma \vdash \oc A \multimap B && \infer[]{[\Delta] \vdash \oc A}{[\Delta] \vdash A}
}$ \\ \bottomrule
\end{tabular}
\caption{Примеры перевода аксиом ИИВ в линейную логику.}
\label{intutionistic-axioms-to-linear-samples}
\end{table}