-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathlec03.tex
319 lines (271 loc) · 17.3 KB
/
lec03.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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
\subsection{\texorpdfstring{Исчисление по Карри}{Curry-style}}
\begin{definition}[тип]
$T = \{\alpha, \beta, \gamma \ldots\}$ "--- множество типов.
$\sigma$, $\tau$ "--- метапеременные для типов.
Если $\sigma$, $\tau$ "--- типы, то $\sigma \to \tau$ "--- тип.
\begin{bnf}
\[
\Pi ::= T | \Pi \to \Pi | (\Pi)
\]
\end{bnf}
$\left(\to\right)$ правоассоциативна.
\end{definition}
\begin{definition}[контекст] Контекст "--- $\Gamma$.
\begin{gather*}
\Gamma = \{ \Lambda_{1} : \sigma_{1} \ldots \Lambda_{n} : \sigma_{n} \} \\
\abs{\Gamma} = \{ \sigma_{1} \ldots \sigma_{n} \} \\
\dom \Gamma = \{ \Lambda_{1} \ldots \Lambda_{n} \}
\end{gather*}
Если $i \neq j$, то $\Lambda_i \neq \Lambda_j$.
\end{definition}
\begin{definition}[типизируемость по Карри]
Рассмотрим исчисление со следующими правилами:
\begin{enumerate}
\item $\infer[(x \notin \dom(\Gamma))]
{\Gamma, x:\sigma \vdash x:\sigma}
{}$
\item $\infer[]
{\Gamma \vdash M N : \tau}
{\Gamma \vdash M:\sigma \to \tau && \Gamma \vdash N:\sigma}$
\item $\infer[(x \notin \dom(\Gamma))]
{\Gamma \vdash \lambda x . M : \sigma \to \tau}
{\Gamma, x : \sigma \vdash M : \tau}$
\end{enumerate}
Если $\lambda$-выражение типизируется этими трёмя правилами, то говорят, что оно типизируется по Карри.
\end{definition}
\begin{lemma}[subject reduction]
Если $\Gamma \vdash M : \sigma$ и $M \to_{\beta}N$, то $\Gamma \vdash N : \sigma$.
\end{lemma}
\begin{corollary}
Если $\Gamma \vdash M : \sigma$ и $M \twoheadrightarrow_{\beta}N$, то $\Gamma \vdash N : \sigma$.
\end{corollary}
\begin{theorem}[Чёрча-Россера]
Если $\Gamma \vdash M : \sigma$, $M \twoheadrightarrow_{\beta} N$ и $M \twoheadrightarrow_{\beta} P$, то найдётся такое $Q$, что
$N \twoheadrightarrow_{\beta} Q$, $P \twoheadrightarrow_{\beta} Q$ и $\Gamma \vdash Q : \sigma$.
\end{theorem}
\begin{example} Несколько доказательств:
\begin{enumerate}
\item $\lambda x . x : \alpha \to \alpha$:
\[
\infer[(3)]
{\vdash \lambda x . x : \alpha \to \alpha}
{ \infer[(1)]
{x : \alpha \vdash x : \alpha}
{}
}
\]
\item $\lambda f . \lambda x . f x : (\alpha \to \beta) \to \alpha \to \beta$:
\[
\infer[(3)]
{ \vdash \lambda f . \lambda x . f x : (\alpha \to \beta) \to (\alpha \to \beta) }
{ \infer[(3)]
{ f : \alpha \to \beta \vdash \lambda x . f x : \alpha \to \beta }
{ \infer[(2)]
{f : \alpha \to \beta; x : \alpha \vdash f x : \beta}
{
\infer[(1)]{ \Gamma \vdash f : \alpha \to \beta }{} &&
\infer[(1)]{ \Gamma \vdash x : \alpha }{}
}
}
}
\]
\item \begin{proof}[$\combl \Omega$ и $\comb Y$ не типизируемы] Допустим обратное.
Тогда в выводе должен будет присутствовать вывод подвыражения $xx$:
\[
\infer{\Gamma, x : \sigma \to \tau, x : \sigma \vdash x x : \tau}
{ \infer{\Gamma, x : \sigma \to \tau, x : \sigma \vdash x : \sigma \to \tau}{}
&& \infer{\Gamma, x : \sigma \to \tau, x : \sigma \vdash x : \sigma}{}
}
\]
Однако первое правило вывода запрещает повторение переменных в контексте. Значит, такой вывод не может быть корректным.
\end{proof}
\end{enumerate}
\end{example}
Если мы знаем тип выражения, то построить вывод этого типа нам не составит труда.
По виду $\lambda$-терма можно однозначно сказать, каким правилом был выведен его тип.
Правилом 1 выводится тип обособленных переменных, правилом 2 выводится тип аппликаций, правилом 3 "--- абстракций.
\begin{lemma}[отсутствие subject expansion]
Неверно, что если $M \to_{\beta} N$, $\Gamma \vdash N : \sigma$, то $\Gamma \vdash M : \sigma$.
\end{lemma}
Например, для $\comb K a \combl\Omega$.
В общем случае тип не уникален. Например, одновременно $\vdash \lambda x . x : \alpha \to \alpha$ и $\vdash \lambda x . x : (\beta \to \beta) \to (\beta \to \beta)$.
\begin{definition}[сильная нормализация] \label{strong-normalization}
Назовём исчисление сильно нормализуемым, если любая последовательность $\beta$-редукций неизбежно приводит к нормальной форме.
\end{definition}
Или, иными словами, если не существует бесконечной последовательности $\beta$-редукций.
\begin{definition}[слабая нормализация]
Назовём исчисление слабо нормализуемым, если для любого терма существует последовательность $\beta$-редукций, приводящая его к нормальной форме.
\end{definition}
\begin{theorem}[о сильной нормализации]
Просто типизируемое $\lambda$-исчисление сильно нормализуемо.
Любое просто типизируемое $\lambda$-выражение сильно нормализуемо.
\end{theorem}
\subsection{\texorpdfstring{Исчисление по Чёрчу}{Church-style}}
\begin{definition}[типизация по Чёрчу] Расширим грамматику:
\begin{bnf}
\[
\Lambda_{\xx} ::= x | \lambda x^{\sigma}.\Lambda_{\xx} | (\Lambda_{\xx}) | \Lambda_{\xx} \Lambda_{\xx}
\]
\end{bnf}%
Правила вывода:
\begin{enumerate}
\item $\infer[(x \notin \dom(\Gamma))]
{\Gamma, x:\sigma \vdash_{\xx} x:\sigma}
{}$
\item $\infer[]
{\Gamma \vdash_{\xx} M N : \tau}
{\Gamma \vdash_{\xx} M:\sigma \to \tau && \Gamma \vdash_{\xx} N:\sigma}$
\item $\infer[(x \notin \dom(\Gamma))]
{\Gamma \vdash_{\xx} \lambda x^{\sigma} . M : \sigma \to \tau}
{\Gamma, x : \sigma \vdash_{\xx} M : \tau}$
\end{enumerate}
\end{definition}
\begin{definition}[стирание] Функцией стирания называется следующая функция из $\Lambda_\xx$ в $\Lambda$:
\[
\abs{\Lambda_{\xx}} =
\begin{cases}
x & \Lambda_{\xx} \equiv x \\
\abs{\Lambda_{1}} \abs{\Lambda_{2}} & \Lambda_{\xx} \equiv \Lambda_{1} \Lambda_{2} \\
\lambda x . \abs{\Lambda} & \Lambda_{\xx} \equiv \lambda x^{\sigma} . \Lambda
\end{cases}
\]
\end{definition}
\begin{lemma}[subject reduction по Чёрчу]
Пусть $\Gamma \vdash_{\xx} M : \sigma$ и $\abs{M} \to_{\beta} N$.
Тогда найдётся такое $H$, что $\abs{H} = N$, $\Gamma \vdash_{\xx} H:\sigma$.
\end{lemma}
\begin{theorem}[Чёрча-Россера]
Пусть $\Gamma \vdash_{\xx} M : \sigma$, $\abs{M} \twoheadrightarrow_{\beta} N$, $\abs{M} \twoheadrightarrow_{\beta} T$.
Тогда найдётся такое $P$, что $\Gamma \vdash_{\xx} P : \sigma$,
$N \twoheadrightarrow_{\beta} \abs{P}$ и $T \twoheadrightarrow_{\beta} \abs{P}$.
\end{theorem}
Единственное отличие исчисления по Чёрчу от исчисления по Карри "--- это типизация всех абстракций.
Из этого вытекает следующая лемма:
\begin{lemma}[уникальность типов] \label{uniqueness}
Если $\Gamma \vdash_\xx M : \sigma$ и $\Gamma \vdash_\xx M : \tau$, то $\sigma = \tau$.
\end{lemma}
\begin{theorem}[о стирании] \
\begin{enumerate}
\item Если $M \to_{\beta} N$ и $\Gamma \vdash_{\xx} M : \sigma$, то $\abs{M} \to_{\beta} \abs{N}$.
\item Если $\Gamma \vdash_{\xx} M : \sigma$, то $\Gamma \vdash_{к} \abs{M} : \sigma$.
\end{enumerate}
\end{theorem}
\begin{theorem}[о поднятии]
Пусть $P \in \Lambda_{\xx}$, $M, N \in \Lambda_{\rr}$.
\begin{enumerate}
\item Если $M \to_{\beta} N$, $\abs{P} = M$, то найдётся такое $Q$, что $\abs{Q} = N$, $P \to_{\beta} Q$.
\item Если $\Gamma \vdash_{\rr} M : \sigma$, то найдётся такое $P \in \Lambda_{\xx}$, что
$\Gamma \vdash_{\xx} P : \sigma$, $\abs{P} = M$.
\end{enumerate}
\end{theorem}
\subsection{\texorpdfstring{Изоморфизм Карри-Ховарда}{Curry-Howard correspondence}}
Можно отчётливо проследить связь между аксиомами типизированного $\lambda$-исчисления и аксиомами импликационного фрагмента ИИВ.
Сейчас мы введём два новых типа данных, правила для которых будут соответствовать связкам $\with$ и $\lor$ из ИИВ.
Первый "--- тип "<пары">. Пара хранит в себе два значения. Пусть $A : \sigma$ и $B : \tau$, тогда:
\begin{gather*}
\pair{A,B} : \sigma \with \tau \\
\pi_1 : \sigma\with\tau\to\sigma \qquad \pi_2 : \sigma\with\tau\to\tau
\end{gather*}
$\pi_1$ и $\pi_2$ это функции для доступа к элементам пары, левая и правая проекции.
Например, $\pi_2 \pair{\overline 7,\overline 5} =_\beta \overline 5$.
Второй "--- алгебраический тип данных. Пусть $T : \sigma\vee\tau$, $L : \sigma\to\pi$, $R : \tau\to\pi$. Тогда:
\[
\case{T}{L}{R} : \pi \qquad \inj_1 : \sigma\to\sigma\vee\tau \qquad \inj_2 : \tau\to\sigma\vee\tau
\]
Если $A : \sigma$ и $B : \tau$, то $\inj_1 A$ и $\inj_2 B$ имеют тип $\sigma\vee\tau$.
$\inj_1$ и $\inj_2$ "--- это левая и правая инъекции.
Тип $\sigma \vee \tau$ означает, что это либо $\sigma$, либо $\tau$.
Его можно понимать как \mintinline{C++}{union}, который дополнительно хранит в себе информацию о типе, который в нём записан.
Рассмотрим алгебраический тип данных на Haskell: \mintinline{Haskell}{data Fruit = Orange Int | Banana Int}. Левая инъекция для него "---
\mintinline{Haskell}{Orange :: Int -> Fruit}, правая "--- \mintinline{Haskell}{Banana :: Int -> Fruit}.
На нашем языке можно сказать, что $\mathinner\mathtt{Fruit} = \mathinner{\mathtt{Int}} \vee \mathinner{\mathtt{Int}}$.
Тогда если $T \mathinner{:} \mathtt{Fruit}$, то $\case{T}{(+1)}{(-1)} \mathinner{:} \mathrel{\mathtt{Int}}$ это число,
хранящееся в фрукте, увеличенное на единицу, если это апельсин, и уменьшенное на единицу, если это банан.
Соответствие описано в таблицах \ref{correspondence-table} и \ref{correspondence-terms-table}.
Формально изоморфизм описывается следующей теоремой:
\begin{table}[hp]
\centering
\begin{tabular}{Sc@{\hspace{1.5cm}} Sc} \toprule
ИИВ & Типизированное $\lambda$-исчисление \\ \midrule
$\infer{\Gamma \vdash \psi}{\Gamma \vdash \varphi \to \psi && \Gamma \vdash \varphi}$ &
$\infer{\Gamma \vdash AB : \psi}{\Gamma \vdash A : \varphi \to \psi && \Gamma \vdash B : \varphi}$ \\ \addlinespace
$\infer{\Gamma \vdash \varphi \to \psi}{\Gamma, \varphi \vdash \psi}$ &
$\infer{\Gamma \vdash \lambda x^\varphi . A : \varphi \to \psi}{\Gamma, x : \varphi \vdash A : \psi}$ \\ \midrule
$\infer{\Gamma \vdash \varphi \with \psi}{\Gamma \vdash \varphi && \Gamma \vdash \psi}$ &
$\infer{\Gamma \vdash \left<A,B\right> : \varphi \with \psi}{\Gamma \vdash A : \varphi && \Gamma \vdash B : \psi}$ \\ \addlinespace
$\infer{\Gamma \vdash \varphi}{\Gamma \vdash \varphi \with \psi}$ &
$\infer{\Gamma \vdash \pi_1 R : \varphi}{\Gamma \vdash R : \varphi \with \psi}$ \\ \addlinespace
$\infer{\Gamma \vdash \psi}{\Gamma \vdash \varphi \with \psi}$ &
$\infer{\Gamma \vdash \pi_2 R : \psi}{\Gamma \vdash R : \varphi \with \psi}$ \\ \midrule
$\infer{\Gamma \vdash \varphi \vee \psi}{\Gamma \vdash \varphi}$ &
$\infer{\Gamma \vdash \inj_1 A : \varphi \vee \psi}{\Gamma \vdash A : \varphi}$ \\ \addlinespace
$\infer{\Gamma \vdash \varphi \vee \psi}{\Gamma \vdash \psi}$ &
$\infer{\Gamma \vdash \inj_2 A : \varphi \vee \psi}{\Gamma \vdash A : \psi}$ \\ \addlinespace
$\infer{\Gamma \vdash \varphi \vee \psi \to \pi}
{\Gamma \vdash \varphi \to \pi && \Gamma \vdash \psi \to \pi}$ &
$\infer{\Gamma \vdash \case{T}{A}{B} : \pi}{\Gamma \vdash T : \varphi \vee \psi &&
\Gamma \vdash A : \varphi \to \pi && \Gamma \vdash B : \psi \to \pi}$ \\ \bottomrule
\end{tabular}
\caption{Соответствие правил вывода.}
\label{correspondence-table}
\end{table}
\begin{table}[hp]
\centering
\begin{tabular}{Sl Sl} \toprule
Интуиционистская логика & $\lambda$-исчисление \\ \midrule
Выражение & Тип \\
Доказательство & Терм (программа) \\
Предположение & Свободная переменная \\
Импликация & Абстракция (функция) \\ \bottomrule
\end{tabular}
\caption{Соответствие сущностей.}
\label{correspondence-terms-table}
\end{table}
\begin{theorem}[об изоморфизме Карри-Ховарда] \
\begin{enumerate}
\item Пусть $\Delta \vdash_{\xx} M : \sigma$, тогда $\abs{\Delta} \vdash \sigma$.
\item Пусть $\Gamma \vdash \sigma$ в и.ф.и.и.в., тогда найдётся такой терм M,
что $\Delta \vdash_{\xx} M : \sigma$, где $\Delta=\left\{ \left(x : \varphi \right) \mid \varphi \in \Gamma \right\}$.
\end{enumerate}
\end{theorem}
%% долг с предыдущей лекции
\begin{proof}~
\begin{enumerate}
\item Индукция по выводу $\Delta \vdash_\xx M : \sigma$. Заменяем каждое правило в выводе соответствующим правилом из ИИВ и получаем доказательство $\abs\Delta \vdash \sigma$.
\item Индукция по структуре вывода $\Gamma \vdash \sigma$. Пусть $\Gamma = \{\sigma_{1}, \sigma_{2} \ldots\}$,
$\Delta = \{x_{1}:\sigma_{1}, x_{2}:\sigma_{2} \ldots \}$.
\begin{enumerate}[label=(\asbuk*)]
\item Вывод имеет вид:
\[
\infer{\Gamma, \varphi \vdash \varphi}{}
\]
\begin{enumerate}[label=\roman*.]
\item Если $\varphi \in \Gamma$, то $\infer{\Delta \vdash x : \varphi}{}$.
\item Если $\varphi \notin \Gamma$, то $\infer{\Delta, x : \varphi \vdash x : \varphi}{}$.
\end{enumerate}
\item Вывод заканчивается правилом:
\[
\infer{\Gamma \vdash \psi}{\Gamma \vdash \varphi \to \psi && \Gamma \vdash \varphi}
\]
По индукционному предположению $\Delta \vdash M : \varphi \to \psi$ и $\Delta \vdash N : \varphi$. Тогда:
\[
\infer{\Delta \vdash MN : \psi}{\Delta \vdash A : \varphi \to \psi && \Delta \vdash B : \varphi}
\]
\item Вывод заканчивается правилом:
\[
\infer{\Gamma \vdash \varphi \to \psi}{\Gamma,\varphi \vdash \psi}
\]
\begin{enumerate}[label=\roman*.]
\item Пусть $\varphi \in \Gamma$. Тогда по индукционному предположению $\Delta \vdash M : \psi$.
Возьмём новую переменную $x \notin \dom(\Delta)$.
Тогда можно изменить построенное доказательство и получить $\Delta, x : \varphi \vdash M : \psi$.
\item Пусть $\varphi \notin \Gamma$. Тогда по индукционному предположению $\Delta, x : \varphi \vdash M : \psi$.
\end{enumerate}
Тогда:
\[
\infer{\Delta \vdash \lambda x^\varphi . M : \varphi \to \psi}{\Delta, x : \varphi \vdash M : \psi}
\qedhere
\]
\end{enumerate}
\end{enumerate} %есть в Curry-Howard Isomorphism, стр 75
\end{proof}