Правила л-конверсии.

●  α-конверсия.

  Любая абстракция вида лV. E может быть преобразована в

  лV'. E [V'/V]  при условии, что замена V'  на V  является 

  эффективной.

● β-конверсия.

  Любая  аппликация  вида  (лV. E1) E2  может  быть  преобразована 

  в  E1[ E2/V] ,  при условии, что замена E2  на  V  в  E1  является

  эффективной.

● η-конверсия

  Любая  абстракция  вида  лV. ( E V ) , в  которой  нет  свободных

  вхождений  V  в  E, может  быть  преобразована  в  E.

Мы будем использовать следующие нотации:

● E1 → E2, означает  α-конверсию  E1  в  E2.

  α 

● E1 → E2, означает β-конверсию  E1  в  E2.

  β

● E1 → E2, означает η-конверсию  E1  в  E2.

  η

В 1.4.4 эти нотации будут расширены.

Самым важным типом конверсии является β-конверсия; именно её можно использовать для моделирования механизма случайных вычислений.

α-конверсия используется для технической манипуляции связанными переменными, η-конверсия иллюстрирует тот факт, что две функции которые при одинаковых аргументах всегда выдают одни и тоже результаты, являются эквивалентными. ( см. 1.7). Следующие три подраздела, дают более развернутое описание и примеры всех трёх типов конверсий ( обратите внимание, что “конверсия” и ”редукция” используются как синонимы).

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

1.4.1 α-конверсия

л-выражение ( обязательно абстракция ), к  которому  может  быть  применена  α-конверсия,  называется  α-редексом.  “Редекс”  расшифровывается  как  “ выражение, допускающее  уменьшение ” ( от английского “reducible expression”). Правило  α-конверсии  утверждает, что связанные  переменные могут  быть  переименованы  при  отсутствии  “коллизий”. 

Пример:

  лx. x → лy. y

  α

  лx. f x → лy. f y

  α

Неверно, что

  лx. лy. add x y → лy. лy. add y y

  α

потому  что  замена  (лy. add x y) [y/x]  не является эффективной, т. к. у, который заменяет  х, становится  связанным.  € 

1.4.2 β-конверсия 

л-выражение ( обязательно аппликация ), к которому можно применить β-конверсию, называется β-редексом. Правила β-конверсии аналогично вызову функции в языках программирования: тело Е1 функции  лV. E1 вычисляется в  окружении, в  котором  “формальный параметр ” V привязан  к  “фактическому параметру” E2.

Пример:

  (лx. f x ) E → f E

  β

  (лx. (лy. add x y)) 3 → лy. add 3 y

  β

  (лy. add 3 y) 4 → add 3 4

  β

Неверно что

  (лx. (лy. add x y)) ( square y) → лy. add (square y) y

потому что замена  ( лy. add x y )[( square y)/x]  не является эффективной  т. к.  y свободна  в (square y) ,но становится связанной после замены на х в (лy. add x y ).

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

л-выражение, следуя соглашениям, приведенным в 1.2, для того чтобы определить β-редексы. Например, рассмотрим аппликацию:

  (лx. лy. add x y) 3 4.

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

  (((лx. (лy. (( add x) y ))) 3) 4)

Это выражение можно переписать в виде:

  ((лx. E) 3) 4  ,  где  E = (лy. add x y)

(лx. E) 3  является  β-редексом  и  может  быть  приведено  к  E[3/x].

1.4.3 η-конверсия

л-выражения ( обязательно абстракция ) , к которым может быть применена  η-редукция называются η-редексами. В правилах

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

η-конверсия, обеспечивает, что лx. (sin x) и sin соответствуют одной и той же функции. В общем виде,  лV. (E V)  представляет собой функцию, которая будучи  применена  к  аргументу  E' ,  даёт

(E V)[E'/V].  Если  у  V  нет  свободных  вхождений  в  E,  тогда

(E V)[E'/V] = (E E'). Таким  образом,  лV. E V  и  E  дают один и тот же результат – E E' , когда применяются к одинаковым аргументам, из этого следует, что они соответствуют одной функции.

Пример:

  лx. add x → add

  η

  лy. add x y → add x

  η

Неверно что

  лx. add x x → add x

  η

потому что переменная х – свободна  в  add x.   

1.4.4 Обобщенные конверсии

Определения →  ,  →  и  → могут быть сведены к следующему:

  α  β  η

● E1 → E2 , если Е2 можно получить из Е1, α-конверсией какого - либо

  α  подвыражения.

● E1 → E2 , если Е2 можно получить из Е1, β-конверсией какого - либо

  β  подвыражения.

● E1 → E2 , если Е2 можно получить из Е1, η-конверсией какого - либо

    подвыражения. 

Примеры 

  ((лх. лy. add х у) 3) 4 → (лy. add 3 y) 4 

  β

  (лy. add 3 y) 4 → add 3 4   

  β

Первое из этих выражений представляет собой β-конверсию в обобщенном виде, т. к.  (лy. add 3 y) 4  получено из  выражения 

((лx. лy. add  x y) 3 4  (которое само по себе не является β-редексом), сокращением подвыражения (лx. лy. add x y) 3 . Иногда мы будем записывать последовательность конверсий. Тогда пример, описанный выше будет выглядеть так: 

  ((лx. лy. add x y) 3) 4 → (лy. add 3 y) 4 → add 3 4

  β  β

Упражнение 2

Какие из трех данных β-конверсий являются обобщенными конверсиями ( т. е. редукциями подвыражений ) и какие являются конверсиями, по определению данному в 1.4? 

(i)  (лx. x ) 1 → 1

  β

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

  β  β 

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

    β

В редукциях (ii) и (iii) в данном упражнении, несмотря на то, что они начинаются с одного и того же л-выражения, редукция происходит в разных последовательностях.

Важным свойством β-редукций является то, что неважно в какой последовательности их проводить – результат всегда будет один и тот же. Если есть несколько отдельных редексов в выражении, редукцию можно выполнять параллельно. Необходимо заметить, что некоторые последовательности редукций, могут никогда не завершиться. Это будет обсуждаться в связи  с  Теоремой Нормализации в 2.9. В настоящее время, разработка процессора, используещего  параллельные вычисления для ускорения работы функциональных программ является важной научно-исследовательской  задачей  в  “вычислительной  технике  пятого поколения”.

1.5 Эквивалентность л-выражений

Три правила конверсии определяют значение л-выражений, т. е. если Е1 можно преобразовать в Е2, то Е1 и Е2 соответствуют одной и той же функции. Это свойство конверсий должно быть интуитивно понятно. Можно дать математическое определение функции соответствующей л-выражению и затем доказать,  что она остаётся неизменной при α-, β- и  η-конверсиях. Как показала практика, сделать это оказалось достаточно трудно [33] и мы оставим это за рамками данной книги.

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

л-конверсий. Важно понимать разницу между эквивалентностью  и тождественностью. Два л-выражения тождественны, если они состоят из одних и тех же символов в одинаковой последовательности; выражения эквивалентны, если их можно преобразовать одно в другое. Например,

лx. x эквивалентно лy. y, но не тождественно. Будем использовать следующие обозначения:

● E1 ≡ E2, означает тождественность  E1  и  E2.

● E2 = E2, означает эквивалентность  E1  и  Е2.

Эквивалетность (=) можно определить в терминах тождественности (≡) и конверсий ( → , → и → ) следующим образом.

  α  β  η

  Эквивалентность л-выражений

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

1. Е ≡ Е1

2. Е' ≡ En

3. Для каждого i  либо

(а)  Ei →Ei+1  или  Ei →Ei+1  или  Ei → Ei+1 ,  либо

  α  β  η

  (b)  Ei+1 → Ei  или  Ei+1 → Ei  или  Ei+1 → Ei

  α  β  η

Примеры

  (лx. x) 1 = 1

  (лx. x) (( лy. y) 1) = 1

  (лx. лy. add x y) 3 4 = add 3 4

Из  определения  (=)  следует,  что:

  (i)  Для любого  Е,  верно что  Е = Е  (эквивалентность рефлексивна).

  (ii)  Если  Е = Е' , тогда  E' = E  (эквивалентность  симметрична).

Если  Е = Е' и E' = E'' , тогда E = E''  (эквивалентность транзитивна).

Если отношение  рефлексивно, симметрично и транзитивно, то оно называется отношением эквивалентности. Таким образом, (=) – отношение эквивалентности.

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