Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Непейвода. Прикладная логика

.PDF
Скачиваний:
895
Добавлен:
10.08.2013
Размер:
2.27 Mб
Скачать

14.1. ОСНОВЫ λ-ЯЗЫКА

391

(если результат объект). Сейчас они чаще всего называются функ-

ционалами (высших типов). В λ-языке и те, и другие чаще всего назы-

ваются просто функциями. Но лишь Л. Я. Шейнфинкель и Х. Б. Карри

(H.B. Curry) начали разработку их систематической теории. И сразу же

они натолкнулись на важное преобразование, позволяющее уменьшить

количество сущностей.

 

 

 

 

Для описания функций многих переменных хочется ввести много-

местный квантор типа

λx1 . . . xn. t(x1

, . . . , xn). Карри2

подметил ис-

ключительно важное преобразование,

базирующееся на том, что у нас

функции систематически трактуются как значения. Вместо f(x, y) он

рассмотрел функционал f, перерабатывающий x в функцию от y. f(x)(y) =

f(x, y). Таким образом, без ограничения общности достаточно рассма-

тривать функции от одного аргумента. Такое преобразование называ-

ется преобразованием Карри (Currying). Оно соответствует также пред-

ставлению λx1 . . . xn в форме λx1

. . . λxn. (Проверьте!)

 

Преобразование Карри имеет важные аналогии в программирова-

нии. Оно соответствует

частичной параметризации процедур. Если име-

ется процедура P(x1, x2, . . . , xn), а известно лишь значение x1 = a, мож-

но тем не менее проделать внутри P

вычисления, зависящие лишь от

x1, и получить частичную процедуру P1(x2, . . . , xn) = P(a, x2, . . . , xn).

Если не требовать оптимизации частичной процедуры, то частичная па-

раметризация становится удобным, легко реализуемым и не портящим

эффективность программ методом программирования, который, к не-

счастью, был осознан вскоре после того, как было фиксировано опреде-

ление наиболее популярных языков программирования

C и Pascal. У

себя в примерах будем обозначать частичную параметризацию P (a, . . . , z).

Отметим один тонкий момент.

Пусть дана процедура P(x, y). Произ-

ведя частичную параметризацию

P (a, b), мы с точки зрения програм-

мирования получаем не значение

P(a, b), а процедуру без параметров,

вычисляющую это значение.

 

 

 

Упражнения к § 14.1

вычисляющая расстояние между дву-

14.1.1. Пусть f(x, y)

функция,

мя действительными числами. Что такое λx. f(0, x)? 14.1.2. Запишите определенный интеграл Rb f(x) dx на λ-языке.

a

2 На самом деле это преобразование рассматривалось еще Шейнфинкелем и фон Ней маном. -

392

 

ГЛАВА 14.

ОСНОВЫ λ-ИСЧИСЛЕНИЯ

14.1.3.

Если f(x, y) = ex · sin(y), то что такое λxy. f(y, π/2 − x)?

 

 

 

14.1.4.

Вычислить λx. Dλy (y3 · x + y)(1)(3).

 

 

 

 

 

 

 

 

 

 

 

14.1.5.

Студентка Тупицына спросила: “

А зачем вообще все многочи-

сленные кванторы? Почему не писать, например, λx A(x) вместо

x A(x), где понимается как логическая операция над функция-

ми с логическими значениями, и обходиться одним квантором λ?”

Ваше отношение к этому предложению: приносит ли оно какие-то

удобства либо неудобства, либо совсем некорректно, и почему?

 

 

 

14.1.6.

Студентка Примерная записала утверждение

λx. x2+1 > λx.

1

.

2+x2

Что Вы скажете по этому поводу?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14.1.7.

Прокомментируйте запись x Max(a, b, f(x)) ≥ f(x), где Max

функционал нахождения максимума функции на отрезке [a, b].

14.1.8.

Студент Чудаков предложил по аналогии с распространенным

в математике обозначением

множеств в стиле

{

f(x, y)

|

A(x, y)

}

 

 

 

2

 

 

2

 

 

 

 

 

использовать λ-обозначения типа λ(x

 

+y

 

). {sin(x)·cos(y)}. Что

можно сказать по данному поводу?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

§ 14.2.

λ-КОНВЕРСИИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пожалуй впервые общие свойства и преобразования пространств неко торых частных, видов операторов и функционалов начали исследовать- ся в линейной алгебре Матрицы были введены как представления про- странства линейных преобразований. еще более фундаментальное на- блюдение было сделано при рассмотрении; пространств линейных функ- ционалов из конечномерного пространства в скаляры Это пространство- оказалось имеющим столько же измерений и векторы. исходного про странства могут рассматриваться как линейные, функционалы на этом- сопряженном пространстве В выражении возникает двойствен ность между функциями и. аргументами fкотораяx = c является краеуголь- ным камнем при развитии языка можно, считать функцией а - ее аргументом, можно и наоборотλ- .3: f, x

3 Двойственность не означает возможность путать аргументы и функции Она означа ет лишь право сделать глобальную замену функций и аргументов друг на. друга А уж- насколько она будет странно выглядеть, другое дело. .

14.2. λ-КОНВЕРСИИ

393

Шейнфинкель предложил подчеркнуть двойственность следующей

системой обозначений. Операция применения функции к аргументу за-

писывается (fx), а не f(x), как обычно. Здесь важно то, что при помощи

преобразования Карри все функции могут быть сделаны одноместными

функционалами. Черч предложил важное упрощение языка Карри, ко-

торое сейчас и принято называть языком λ-исчисления.

Определение 14.2.1. λ-сигнатура

множество констант. λ-термы сиг-

натуры σ задаются следующим индуктивным определением.

1.

Константа сигнатуры σ есть λ-терм.

 

2.

Переменная есть λ-терм.

 

λ-терм.

 

3.

Если t и u λ-термы, то (tu)

λ-терм.

4.

Если x

переменная, t

λ-терм, то λx. t

Пример 14.2.1.

Если D, f и 0

константы, изображающие оператор

дифференцирования, функцию одной переменной и ноль, то значение

dxdf (0)

изображается ((Df)0).

 

для λ-термов определяются поня-

Так же, как в логике предикатов,

тия свободной и связанной переменной и подстановки. Через подста-

новку определяется важнейшее из преобразований над λ-термами β-

конверсия. Оно состоит в символьном вычислении результата вызова

функции λx. t(x). Одинарная стрелка → читается

за один шаг перехо-

дит в”. Большая стрелка читается

преобразуется в”.

 

 

(λx. t r) → Subst(t, x, r)

(14.4)

Это преобразование называется β-конверсия.

Пример 14.2.2. λx. x есть тождественная функция. В самом деле,

(λx. x t) t

для любого Обозначив терм через можем записать это как (I t) t. В частностиt. , (I I) I.λx. x I,

термы позволяют определить предельно общее4 исчисление сим вольныхλ- вычислений функциональных выражений Оно называется ис- числением λ-конверсий. В этом исчислении выводятся. выражения вида-

4 Общее не значит что туда запихали все что можно и нельзя Это означает предельно простое выражение, широко применимой ,идеи которое может. быть легко конкретизи ровано для частных случаев. , -

(преобразование функции)
(λx. t r) Subst(t, x, r)

394

ГЛАВА 14. ОСНОВЫ λ-ИСЧИСЛЕНИЯ

r t. Аксиомы его — (14.4),

переписанная через :

(14.5)

и t Правилаt. вывода следующие.

t u u r (транзитивность) (14.6) t r

t u

(t r) (u r)

(14.7)

 

t u

(

 

 

 

)

(14.8)

 

 

 

преобразование аргумента

 

 

 

(r t) (r u)

 

 

 

 

 

 

 

 

 

 

t u

 

(

 

ξ)

 

 

(14.9)

λx. t λx. u

правило

 

 

 

 

Названия β-конверсия"и правило ξ"традиционны для обозначения

этих характерных преобразований

λ-термов. Правда,

их суть лучше от-

ражали бы названия типа символьное вычисление"и преобразование

определения". Чаще всего не ставят, а просто выписывают последо-

вательность преобразуемых (конвертируемых) друг в друга термов.

Пример 14.2.3. Рассмотрим λ-термы

 

 

 

 

 

Ψ = λx. (x x);

Ω = (Ψ Ψ) = (λx. (x x) λx. (x x)).

 

По β-конверсии Ω преобразуется в

 

 

 

 

 

 

Subst(λx. (x x), x, Ψ) = (Ψ Ψ) = Ω.

 

 

 

Итак, Ω конвертируется сам в себя.

 

 

 

 

Отметим взаимосвязь Ω с парадоксом Расселла. Рассмотрим множе-

ство всех множеств, являющихся собственными элементами: Z = {x|x

x}. Тогда Z Z Z {x|x x} Z Z. Хотя здесь мы и не по-

лучили грубого противоречия, мы высветили логическую основу пара-

докса Расселла, парадокса лжеца и многих других парадоксов: ударяясь

в абстракции, слишком легко определить понятия, ничего не содержа-

щие, кроме самих себя.5

Карри дал интересную переформулировку та-

ких рефлексивных парадоксов". Пусть A = {x|x x A}. Тогда

5 Некоторые философы и богословы определяли Бога как то что является причиной самого себя Анализ парадоксов показывает что это довольно“ , плоско причина самой себя скорее "ничто. , чем Бог. , :

14.2. λ-КОНВЕРСИИ

395

A A (A A A). Пусть A A. Тогда A A A. Значит, из

A A следует A. Но (A A A) A A. Следовательно, A A.

Но A A A. Значит, A. Итак, имея неограниченные абстракции

и пользуясь ими в рассуждениях,

можно доказать все, что угодно. В λ-

конверсиях объекты, подобные Ω, относительно безобидны (в точности

в той же степени, что зацикливание" в программах).

 

 

Подробней проанализируем роль различных правил в λ-конверсиях.

β- конверсия является определением вызова процедуры, принятым в

большинстве языков программирования. Транзитивность означает воз-

можность выполнить целую последовательность вычислений. Единствен-

ное разумное ограничение на нее

исчерпание ресурсов, которое обыч-

но игнорируется в семантике алгоритмического языка. Практически не-

чего возразить и на правило преобразования аргумента. А вот преобра-

зование функции уже несколько более сомнительно. Оно чаще всего

просто избегается в языках программирования за счет того, что функ-

ция не является полноправным значением. Правило ξ

не может быть

просто проигнорировано, поскольку любой приличный язык включает

описания процедур, но такое преобразование чаще всего прямо запре-

щается в семантике языков программирования. В самом деле, чаще все-

го процедура содержит операторы, рассчитанные на разные значения

аргумента и при конкретном значении аргумента выполняются (за счет

операторов типа if, case, while, repeat) лишь некоторые из них. Попыт-

ка же вычислять, не разобравшись со значением аргумента, вполне мо-

жет привести к ошибке. Например, если процедура для положительного

x вычисляет его квадратный корень, а для отрицательного действует по-

другому то попытка слишком рано вычислить

 

приведет к ошибке

 

Таким образом, анализ правила ξ

привел нас к выявлению ограничений

,

 

x

 

 

.

на частичные вычисления в обычных языках программирования Даже если известны значения всех переменных входящих в выражение. но выражение находится внутри описания процедуры, либо внутри услов, ного оператора вычислять его нельзя А вот в конверсиях можно про- изводить вычисление, любого подтерма. где быλ- он ни стоял Докажем- это. , .

Определение 14.2.2. λ-терм с дырой. Пусть символ обозначает дыру. 1. — λ-терм с дырой.

Если терм терм с дырой то и термы

2. с дыройt . λ- , r λ- , (t r) (r t) λ-

396

ГЛАВА 14. ОСНОВЫ λ-ИСЧИСЛЕНИЯ

3. Если x

переменная, r λ-терм с дырой, то λx. r λ-терм с

дырой.

 

Через t[r] обозначим результат замены дыры в λ-терме t с дырой на λ-

терм r.

 

Предложение 14.2.1. 1. В λ-терме с дырой ровно одна дыра.

2.

Если t

λ-терм с дырой, r λ-терм, то t[r] λ-терм.

3.

Если r - подтерм λ-терма s, то найдется терм с дырой t, такой,

 

что s ≡ t[r]6.

4.

Если t

λ-терм с дырой, r и s λ-термы, r s, то t[r] t[s].

Доказательство. Пункты 1 и 2 тривиально доказываются индукцией

по построению терма с дырой. Пункт 3 опирается на единственность

дерева построения λ-терма и усиливает ее до следующей леммы.

Лемма о подтермах. Если r

вхождение подтерма в λ-терм t, то

дерево порождения r является поддеревом дерева t.

И, наконец, пункт 4. Действуем индукцией по длине терма с дырой,

используя пункт 1. Если терм состоит из одной дыры, то все очевидно.

В противном случае дыра находится в одном из его подтермов, который

сам, согласно 3, является λ-термом с дырой. Рассмотрим три возможных

случая. Если t имеет вид λx t1, то, по предположению индукции, t1[r]

t1[s]. Но тогда по правилу ξ t[r] t[s].

 

Остальные случаи также разбираются прямым применением правил

конверсии.

 

 

 

Рассмотрим некоторые конструкции λ-языка. Пусть f и g функ-

ции. Тогда

(f(gx)) применяет f к результату вычисления g на x, и терм

λx. (f(gx)) выражает функцию, являющуюся композицией f и g. С дру-

гой стороны, ((fx)y), если принять во внимание преобразование Карри,

выражает применение функции f к двум аргументам, а, соответственно,

((fg)y)

применение функционала f к функциональному аргументу

g и обычному x.7

 

 

 

графическое равенство выражений.

 

6 ≡ означает

предмет. Занимаясь λ- ис-

7 На самом деле нигде не сказано, что g

функция, а x

числением, необходимо помнить, что функция может быть подставлена в любом месте.

14.2. λ-КОНВЕРСИИ

397

Исходя из содержательного смысла конверсий как символьных вы числений можно определить равенство термов и как существова- ние такого, что Но обосноватьλ- такоеt r определение не- слишком простоs, ведьt преждеs, r всегоs. отношение равенства должно быть отношением эквивалентности: рефлексивность и симметричность на шего определения очевидны но; с транзитивностью дело обстоит не так- просто Если , то откуда следу ет что .найдетсяt1 такоеs1, t2что s1, t2 s2, t3 Темsне2, менее временно- примем, такое сомнительноеs, определениеt1 s, t3 котороеs? обосновывается тео ремой Черча Россера доказываемой в следующей, главе -

Теперь рассмотрим- , преобразование впервые введенное. явно в исчислении и ставшее краеугольным камнем, современной теории проλ- граммирования. -

Предложение Лемма о неподвижной точке Для любого терма F найдется14.2.такой2 ( λ-терм X, что X = (F X).). λ-

Доказательство Определим как и пусть есть

Тогда легко показать. самим чтоW конвертируетсяλx. (F (xx)), в X 8 (W W ). , X (F X).

Данное предложение служит ярким примером важной и нетривиаль-

ной теоремы, доказывающейся в три строчки, но такой, до которой не-

легко было додуматься, и такой, которая имеет множество применений.

В самом деле, поскольку создатели λ-языка с самого начала отдавали

себе отчет в его универсальности (он годится для выражения любого

функционала, встречающегося в математике, естественно, при подхо-

дящем подборе исходных констант,) то их не могло не смущать, в част-

ности, следующее рассуждение:

 

Рассмотрим функцию натуральных чисел ϕ =

 

λn n + 1. Она не имеет неподвижной точки, по-

(14.10)

скольку, если m — таковая, то m = m + 1.

 

Здесь на помощь приходит то, что в λ-исчислении имеется, в частности,

терм конвертирующийся сам в себя и не имеющий значения простоΩ,не имеет значения так же как и само и как И соответ. (ϕ Ω) ственно нет ничего удивительного, в том чтоΩ Ω + 1. , -

, , (ϕ Ω) = Ω = Ω + 1.

8 Здесь есть единственная но ехидная тонкость не преобразуется в а в него! , : (F X) X, X

398 ГЛАВА 14. ОСНОВЫ λ-ИСЧИСЛЕНИЯ

Поскольку приведенное нами преобразование очевидно само вы ражается в языке то имеется комбинатор неподвижной, точки, ко- торый можноλ- определить, , например, как Y, -

λF (λx (F (x x)) λx (F (x x))).

не является ни единственным ни даже наилучшим из комбинаторов неподвижнойY точки, но используется, он чаще всего. В, частности,

Yf → f(Yf)

не имеет места почему Поэтому часто( рассматривается?) комбинатор

Θ ≡ (λxy. y(xyy) λxy. y(xyy)).

Красивые примеры еще нескольких комбинаторов неподвижной точ ки см. в упражнениях. -

Упражнения к § 14.2

14.2.1.Покажите, что (ΘF ) → (F (θF )).

14.2.2.(Klop) Пусть

Ъ= λabcdefghijklmnopqstuvwxyzr.

(r(thisisafixedpointcombinator)),

$ = (ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ) Показать, что $ — комбинатор неподвижной точки.

Перевести пример Клопа на русский язык так чтобы в терме чи 14.2.3талась. русская фраза с аналогичным значением( , а алфавит в от- личие от латинского присутствовал бы в неизмененном, порядке, - , .)

14.2.4. Построить комбинатор A, такой, что (Afx) = (fx).

14.3. ТЕОРЕМА ЧЕРЧА-РОССЕРА

399

§ 14.3. ТЕОРЕМА ЧЕРЧА-РОССЕРА

Важнейшим из известных приятных свойств систем преобразований явля ется свойство конфлюэнтности либо свойство квадрата если пре -

образуется как в так и в то имеется, такое что преобразуется: a в и- преобразуется вb, Это означаетc, что какимиd,путямиb ни вести преобраd зованиеc придем кdодному. и тому, же ,результату Докажем это свойство-

для λ-конверсий, . .

Теорема Черча-Россера. Если t r, t s, то найдется такое q, что

s q, r q.

Доказательство Пользуясь идеей Мартин Лефа определим вспомога тельное отношение. конверсии в котором- конверсия, к каждому под- терму применяется не более одного, раза. β- -

t → t;

 

t → r s → q

;

(t r) → (s q)

 

t → r

;

 

λx. t → λx. r

 

(14.11)

t → r s → q

 

λx. (t s) → r[x|q]

Лемма 14.3.1.

Если t → r, то t r.

Лемма 14.3.2.

является транзитивным замыканием .

Лемма 14.3.3.

Если λx t r, то r также начинается с λx.

Лемма 14.3.4.

Если (t r) → s, то либо s есть (qv), где t → q, r → v,

либо t есть λx. q, s есть q1[s|r1], где q → q1, r → r1.

Все эти леммы очевидны.

Лемма 14.3.5.

Если t → r, s → q, то t[x|s] → r[x|q].

Индукцией по построению t, аналогично предложению 3.2.1.

Лемма 14.3.6.

Отношение обладает свойством конфлюэнтности.

Доказательство леммы. Индукцией по длине преобразования t в

r. Если t есть само r, то достаточно

взять s в качестве q.

Если t есть λx. (t1 t2), a r есть r1

[x|r2], где t1 → r1, t2 → r2, то s

есть одно из двух.

 

400

 

 

 

ГЛАВА 14. ОСНОВЫ λ-ИСЧИСЛЕНИЯ

 

1.

λx (s1s2), где t1 → s1, t2 → s2

. Тогда, по предположению индук-

 

ции, для r1, s1 можно найти q1,

и, соответственно, для r2, s2 общее

 

q2. По лемме 14.3.5, в качестве q можно взять q1[x|q2].

2. s1[x|s2]. Непосредственно применяем предположение индукции и

 

лемму 14.3.5.

 

 

 

Если теперь t есть (t1t2), а r есть (r1r2), то опять возникают два

подслучая.

 

 

 

1.

(s1 s2). Непосредственно применяем предположение индукции.

2.

t

есть λx. (t11t2), s есть s1[x|s2], где t11 → s1, t2 → s2. Тогда по

 

предположению индукции, t11

и r1, t2 и r2 попарно приводятся к

 

общему терму. Применяем лемму 14.3.5.

А теперь, поскольку конверсия

транзитивное замыкание →, а → кон-

флюэнтно, теорема доказана.

 

 

 

Упражнения к § 14.3

 

 

 

14.3.1.

Студент Талантов предложил следующее расширение λ-конверсий.

 

Ввести термы вида [x y z]

со следующими правилами конверсии:

 

[fab] (fa)(fb); [fga] (fa)(ga). Прокомментируйте это пред-

 

ложение.

 

 

 

14.3.2.

Студентка Невинная предложила следующий вариант λ-конверсий

 

для кортежей. Вводятся термы вида [t1 . . . tn] вместе со следующи-

 

ми правилами конверсии:

 

 

 

 

 

([t1 . . . tn] r) [(t1 r) . . . (tn r)]

 

 

(t[r1 . . . rn]) [(t r1) . . . (t rn)]

 

Ваше мнение об этом предложении: разумно ли оно с точки зрения

 

истолкования и сохраняет ли оно свойство локальности конверсий

 

и свойство конфлюэнтности?

 

 

§ 14.4.

λ-ИСЧИСЛЕНИЕ

 

 

 

Исчислению конверсий соответствует исчисление равенств термов конвертируемыхλ- в одно и то же выражение которое обычно называется,

λ- исчислением либо комбинаторной логикой, . Языком этого исчисления