Другое важное свойство (=) состоит в том, что если Е1 = Е2 и если Е1′ и E2′– два л-выражения, которые отличаются только тем, что в той части где E1′ содержит E1, у E2′ содержится E2, тогда E1′ = E2′. Данное свойство получило название свойства Лейбница. Это свойство выполняется, поскольку можно использовать одинаковую последовательность редукций как для перехода от Е1 к Е2 , так и для перехода от Е1′  к  E2′. Например, если E1 = E2 , тогда по правилу Лейбница лV. E1 = лV. E2.

Необходимо, чтобы замена в  α- и  β-редукциях  была эффективной.  Требование эффективности не выполняется, например, при  α-редукции

лx. (лy. x)  к  лy.  (лy. y)  (т. к. y становится связанной после  замены  на  x  в  лy. x). Если была бы произведена такая “некорректная” замена, тогда из определения  (=)  следовало  бы,  что:

  лx.  лy. x =  лy.  лy. y

Но тогда так как

  (лx. (лy. x)) 1 2 → (лy. 1) 2 → 1

  β  β

и

  (лy. (лy. y)) 1 2 → (лy. y) 2 → 2

  β  β

и получается, что 1 = 2. В общем случае, если подставить вместо 1 и 2 любые два выражения, можно доказать, что  они  равны!

Упражнение 3

Показать на примере, что если допустить неэффективную замену в β-редукции, то тогда следует что любые два л-выражения равны. 

Пример : 

НЕ нашли? Не то? Что вы ищете?

Если V1, V2 , … , Vn не равны друг другу и не имеют свободных вхождений в E1, E2, … , En, тогда

  (лV1 V2 … Vn. E) E1 E2 … En

  = (( лV1. (лV2 … Vn. E)) E1) E2 … En

  → (( лV2 … Vn. E)[E1/V1])E2 … En

  β

  = ( лV2 … Vn. E [E1/V1]) E2 … En 

  . 

  . 

  . 

  = E[E1/V1] [E2/V2] … [En/Vn] 

Упражнение 4

Где было, в последнем примере, сделано предположение что V1, V2, … , Vn различны и не имеют свободных вхождений  в  E1, E2, … , En? 

Упражнение 5

Покажите на примере, что если V1= V2, то тогда даже если V2 имеет свободные вхождения в E1, необязательно будет выполняться

  (лV1V2. E) E1 E2 = E [E1/V1][E2/V2] 

Упражнение 6

Покажите на примере, что если V1 ≠ V2, но V2 имеет свободные вхождения

в  E1 ,  необязательно  будет выполняться

  (лV1V2. E) E1 E2 = E [E1/V1][E2/V2] 

1.6 Отношение →

В предыдущем разделе, было определено, что при Е1 = Е2 , Е2 можно получить из Е1 последовательностью прямых или обратных конверсий. Особый случай этого отношения – когда Е2 можно получить из Е1 только последовательностью прямых конверсий. Записывается это как Е1 → Е2.

  Определение →

Если Е и E’ – л-выражения, тогда Е → E' , если E ≡ E' или существуют выражения Е1, Е2, … , En такие что:

  1.  Е ≡ Е1

  2.  Е′ ≡ En

  3.  Для каждого  i  либо  Ei → Ei+1 ,  либо  Ei → Ei+1 ,  либо  Ei → Ei+1 .

  α  β  η

Обратите внимание, что определение (→) аналогично определению (=), отличие лишь в отсутствии части (b). 

Упражнение 7

Найти Е, Е′ , такие что  Е=E′ ,  но не  E → E′. 

Упражнение 8(повышенной сложности)

Показать, что  если Е1 = Е2 , тогда  существует  такое  Е, что Е1 → Е и Е2 → Е.

( Это свойство называется  теоремой  Чёрча –  Россера.  Некоторые  из следствий  из  этой  теоремы будут обсуждаться в 2.9.)

1.7 Экстенсиональность

Предположим, что V не имеет свободных вхождений в Е1 или Е2 и

  Е1 V = E2 V

Тогда по правилу Лейбница

  лV. E1 V = лV. E2 V

И  после  применения  η-редукции  к  обеим  частям выражения получаем

  Е1 = Е2

Часто  бывает  удобным, используя это свойство, доказать, что два л-выражения эквивалентны,  т. е. доказать  что  Е1 = Е2. Это можно  сделать  доказав,  что Е1 V = E2 V  для  какого-либо  V,  не  имеющего  свободных  вхождений  в  Е1  или Е2. Это  свойство  называется  экстенсиональностью. 

Упражнение 9

Показать что

  (лf g x. f x (g x )) (лx y. x) (лx y. x) = лx. x

1.8 Замена

В начале 1.4 , мы определили E[E′/V] как результат замены E′ на каждое свободное вхождение V в E. Было сказано, что такая замена будет эффективной, если ни одно из свободных E′ не становится связанным в E[E′/V]. В определениях α- и β-конверсий было оговорено, что замены должны быть эффективными. Так, например

  ( лV. E1) E2 → E1[E2/V]

  β

остаётся верным, пока замена E1[E2/V] остаётся эффективной.

Было бы удобно расширить значение E[E′/V] , таким образом, чтобы нам не надо было заботиться об эффективности замены. Этого можно достигнуть введением следующих свойств для всех выражений Е, Е1 и Е2 и всех переменным V и V' :

  (лV. E1) E2 → E1[E2/V]  и  лV. E → лV′. E[V′/V] 

Для того, чтобы обеспечить выполнение этого свойства,  E[E′/V] определяется  рекурсивно на  основе  структуры  E  следующим образом:


E

E[E'/V]

V

V′  ( где V ≠ V′)

E1 E2

лV. E1

лV′.E1  ( где V ≠ V′ и V′ не

  имеет свободных

  вхождений в E′)

лV′.E1  (где V ≠ V′ и V′ не

  имеет свободных

  вхождений в E′)

E′

V′

E1[E'/V]  E2[E′/V]

лV. E1

лV′. E1[E′/V]

лV′′. E1[V′′/V′] [E′/V′] , где V′′ –

  переменная, не имеет

  свободных вхождений

  в E′  или  E1

Такое  подробное  определение  E[E′/V]  основано (но не совпадает ) с определением  из  Appendix C  [2].

Для того, чтобы показать как это работает, рассмотрим (лy. y x)[y/x]. Т. к. y свободна в  y,  применяется последний случай из таблицы. Т. к.  z  не  встречается в  y x  или  y  имеем:

  (лy. y x)[y/x] ≡ лz. (y x)[z/y][y/x] ≡ лz. (z x) [y/x] ≡ лz. z y

В последнем случае из таблицы, выбор V′′ не определен. Подойдет любая переменная, не имеющая свободных вхождений E′ или Е1.

Замена хорошо освещена в книге Хиндей и Селдина[19], где приведены формулировки и доказательства различных технических свойств. Следующее упражнение взято из этой книги.

Упражнение 10

Используйте таблицу для решения

(i)  (лy. x (лx. x)) [( лy. y x) /x].

(ii)  (y (лz. x z)) [(лy. z y) /x]. 

Довольно очевидно ( хотя и несколько утомительно ), доказательство

того, что из определения E[E’/V], приведенного выше, действительно : 

  (лV. E1) E2 → E1 [E2/V]  и  (лV. E → лV′. E[ V′/V] 

для всех выражений E, E1 и E2 и для всех переменных V и V′.

В Главе 3 будет показано, как теорию комбинаторов можно использовать для разложения достаточно сложных замен на более простые операции. Вместо комбинаторов можно использовать так называемые безымянные элементы Де Брейна[6]. Его идея состоит в том, что переменные можно представить как “указатели” на л, которые связывают их. Вместо того, чтобы “помечать” л именами (т. е. связанными переменными) и затем указывать на них через эти имена, можно указывать на соответствующую л, определяя количество уровней  “вверх”  которых  нужно  пройти,  чтобы  достичь их. Например,  лx. лy. x y  будет  представлено  как  лл2 1.  В  качестве  более  сложного примера, рассмотрим следующее выражение, в котором мы определяем количество уровней, разделяющих переменную и  л,  к  которой  она  привязана.

  3

  2

  лx. лy. x y (лy. x y y)

  1  1

В нотации Де Брейна  лл2 1 л3 1 1. 

Свободная переменная в выражении, представляется числом, большим, чем глубина лs  над ней; различные свободные переменные задаются различными числами. Например,

  лx. (лy. y x z) x y w

будет представлено как

  л (л1 2 3) 1 2 4

Т. к. есть лишь две л, над вхождением 3, это число обозначает свободную переменную; похожим образом, есть лишь одна л над вторым вхождением 2 и вхождением 4, значит они тоже должны соответствовать свободным переменным. Заметим, что 2 нельзя использовать для отображения w, т. к. оно уже было использовано для отображения свободной переменной y; таким образом, мы выбираем первое свободное число больше чем 2 ( 3  уже используется для отображения z).

Следует быть внимательным, и назначать достаточно большие числа свободным  переменным. Например,  первое  вхождение  z  в

лx. z (лy. z)  можно  представить 2, но второму вхождению нужно 3 ; так как, это одна  и та же переменная, мы  должны  использовать  3. 

Пример : 

По схеме Де Брейна  лx. x (лy. x y y)  будет  представлено  л1(л2 1 1). 

Упражнение 11

Каким  л-выражением  представляется  л2(л2) ?   

Упражнение 12

Опишите алгоритм вычисления по Де Брейну представления выражения E[E′/V]  из  представления  E  и  E′. 

Глава 2

Различные  представления  в  л-исчислении.

На первый взгляд, л-исчисление может показаться очень примитивным языком. Но его можно использовать для представления большинства объектов и структур нужных в современном программировании. Для этого следует задать эти объекты и структуры таким способом, чтобы у них были необходимые свойства. Например, для того чтобы представить значения истинности  true  и  false  булевской  функции ¬ (“не”),

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11