Jump to content

Определение лямбда-исчисления

Лямбда-исчисление — это формальная математическая система, основанная на лямбда-абстракции и применении функций . Здесь даны два определения языка: стандартное определение и определение с использованием математических формул.

Стандартное определение [ править ]

Это формальное определение было дано Алонсо Чёрчем .

Определение [ править ]

Лямбда-выражения состоят из

  • переменные , , ..., , ...
  • символы абстракции лямбда ' ' и точка '.'
  • скобки ( )

Набор лямбда-выражений, , можно определить индуктивно :

  1. Если является переменной, то
  2. Если является переменной и , затем
  3. Если , затем

Экземпляры правила 2 известны как абстракции, а случаи правила 3 ​​— как приложения. [1]

Обозначения [ править ]

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

  • Крайние круглые скобки опускаются: вместо
  • Предполагается, что приложения левоассоциативны: можно написать вместо [2]
  • Тело абстракции простирается как можно дальше вправо : означает и не
  • Сжимается последовательность абстракций: сокращается как [3] [4]

Свободные и связанные переменные [ править ]

Оператор абстракции, Говорят, что он связывает свою переменную везде, где она встречается в теле абстракции. Переменные, попадающие в область абстракции, называются связанными . Все остальные переменные называются свободными . Например, в следующем выражении является связанной переменной и бесплатно: . Также обратите внимание, что переменная связана своей «ближайшей» абстракцией. В следующем примере единственное появление в выражении связана второй лямбдой:

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

  1. , где это переменная
  2. [5]

Выражение, не содержащее свободных переменных, называется замкнутым . Закрытые лямбда-выражения также известны как комбинаторы и эквивалентны терминам комбинаторной логики .

Сокращение [ править ]

Значение лямбда-выражений определяется тем, как выражения можно сократить. [6]

Существует три вида сокращения:

  • α-преобразование : изменение связанных переменных ( альфа );
  • β-редукция : применение функций к их аргументам ( бета );
  • η-редукция : которая отражает понятие экстенсиональности ( эта ).

Будем говорить также о результирующих эквивалентностях: два выражения являются β-эквивалентными , если их можно β-преобразовать в одно и то же выражение, а α/η-эквивалентность определяется аналогично.

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

α-конверсия [ править ]

Альфа-конверсия, иногда известная как альфа-переименование, [7] позволяет изменять имена связанных переменных. Например, альфа-конверсия может дать . Термы, отличающиеся только альфа-конверсией, называются α-эквивалентными . Часто при использовании лямбда-исчисления α-эквивалентные термины считаются эквивалентными.

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

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

В языках программирования со статической областью действия альфа-преобразование можно использовать для упрощения разрешения имен , гарантируя, что никакое имя переменной не маскирует имя в содержащей его области (см. раздел «Альфа-переименование, чтобы сделать разрешение имен тривиальным »).

Замена [ править ]

Замена, написано , — это процесс замены всех свободных вхождений переменной в выражении с выражением . Замена в терминах лямбда-исчисления определяется рекурсией структуры терминов следующим образом (примечание: x и y — это только переменные, а M и N — любое выражение λ).

Чтобы подставить выражение в лямбда-абстракцию, иногда необходимо α-преобразовать выражение. Например, это неверно для привести к , поскольку замененный должен был быть свободным, но в итоге оказался связанным. Правильная замена в данном случае , с точностью до α-эквивалентности. Заметим, что замена определяется однозначно с точностью до α-эквивалентности.

β-редукция [ править ]

β-редукция отражает идею применения функции. β-восстановление определяется с точки зрения замещения: β-восстановление является .

Например, предполагая некоторую кодировку , мы имеем следующую β-редукцию: .

n-редукция [ править ]

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

Нормализация [ править ]

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

Лямбда-выражение, которое не может быть сокращено ни с помощью β-редекса, ни с помощью η-редекса, находится в нормальной форме. Обратите внимание, что альфа-преобразование может преобразовывать функции. Все нормальные формы, которые можно преобразовать друг в друга путем α-преобразования, считаются равными. смотрите в основной статье о бета-нормальной форме Подробности .

Обычный тип формы Определение.
Нормальная форма Никакие β- или η-редукции невозможны.
Голова нормальной формы В виде лямбда-абстракции, тело которой несводимо.
Слабая голова, нормальная форма В виде лямбда-абстракции.

Определение синтаксиса в BNF [ править ]

Лямбда-исчисление имеет простой синтаксис. Программа лямбда-исчисления имеет синтаксис выражения, где:

Имя БНФ Описание
Абстракция
<expression> ::= λ <variable-list> . <expression>
Определение анонимной функции.
Срок подачи заявки
<expression> ::= <application-term>
Приложение
<application-term> ::= <application-term> <item>
Вызов функции.
Элемент
<application-term> ::= <item>
Переменная
<item> ::= <variable>
Например, x, y, факт, сумма, ...
Группировка
<item> ::= ( <expression> )
Выражение в квадратных скобках.

Список переменных определяется как:

 <variable-list> ::= <variable> | <variable>, <variable-list>

Переменная, используемая учеными-компьютерщиками, имеет синтаксис:

 <variable> ::= <alpha> <extension>
 <extension> ::= 
 <extension> ::= <extension-char> <extension> 
 <extension-char> ::= <alpha> | <digit> | _

Математики иногда ограничивают переменную одним буквенным символом. При использовании этого соглашения запятая в списке переменных опускается.

Лямбда-абстракция имеет более низкий приоритет, чем приложение, поэтому;

Приложения остаются ассоциативными;

Абстракция с несколькими параметрами эквивалентна нескольким абстракциям одного параметра.

где,

  • х — переменная
  • y — список переменных
  • z — выражение

как математические Определение формулы

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

Семантика [ править ]

Выполнение лямбда-выражения происходит с использованием следующих сокращений и преобразований:

  1. α-конверсия -
  2. β-восстановление -
  3. n-редукция -

где,

  • canonym — это переименование лямбда-выражения для присвоения ему стандартных имен в зависимости от положения имени в выражении.
  • Оператор замены , это подмена имени по лямбда-выражению в лямбда-выражении .
  • Свободный набор переменных это набор переменных, которые не принадлежат к лямбда-абстракции в .

Исполнение — это выполнение β-редукций и η-редукций над подвыражениями в канониме лямбда-выражения до тех пор, пока результатом не станет лямбда-функция (абстракция) в нормальной форме .

Все α-преобразования λ-выражения считаются эквивалентными.

Канонические имена Каноним

Canonym — это функция, которая принимает лямбда-выражение и канонически переименовывает все имена в зависимости от их позиций в выражении. Это может быть реализовано как,

Где N — строка «N», F — строка «F», S — строка «S», + — конкатенация, а «имя» преобразует строку в имя.

Операторы карты [ править ]

Сопоставьте одно значение с другим, если значение есть на карте. О — пустая карта.

Оператор замены [ править ]

Если L — лямбда-выражение, x — имя, а y — лямбда-выражение; означает замену x на y в L. Правила таковы:

Обратите внимание, что правило 1 необходимо изменить, если оно будет использоваться с неканонически переименованными лямбда-выражениями. См. Изменения в операторе замены .

Наборы свободных и связанных переменных [ править ]

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

Набор связанных переменных лямбда-выражения M обозначается как BV(M). Это набор имен переменных, экземпляры которых связаны (используются) в лямбда-абстракции внутри лямбда-выражения.

Правила для двух наборов приведены ниже. [5]

- Бесплатный набор переменных Комментарий - Набор связанных переменных Комментарий
где x — переменная где x — переменная
Свободные переменные M, исключая x Связанные переменные M плюс x.
Объедините свободные переменные из функции и параметра Объедините связанные переменные из функции и параметра

Использование;

  • Набор свободных переменных FV используется выше в определении η-редукции .
  • Набор связанных переменных, BV, используется в правиле для β-редекса неканонического лямбда-выражения.

Стратегия оценки [ править ]

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

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

Запуск или оценка лямбда-выражения L is:

где Q — префикс имени, возможно, пустая строка, а eval определяется как,

Тогда стратегия оценки может быть выбрана как:

Результат может быть разным в зависимости от используемой стратегии. При быстрой оценке будут применены все возможные сокращения, оставляя результат в нормальной форме, тогда как при ленивой оценке некоторые сокращения параметров будут пропущены, оставляя результат в «нормальной форме со слабой головой».

Нормальная форма [ править ]

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

Во всех остальных случаях

Слабая голова форма , нормальная

(Приведенное ниже определение ошибочно, оно противоречит определению, согласно которому слабая нормальная форма головы — это либо нормальная форма головы, либо этот термин является абстракцией. [8] Это понятие было предложено Саймоном Пейтоном Джонсом. [9] )

Были применены сокращения функции (головы), но не все сокращения параметра были применены. Это результат, полученный в результате применения ленивой оценки.

Во всех остальных случаях

Вывод стандарта из математического определения [ править ]

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

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

Это определение знакомит с правилами, используемыми в стандартном определении, и объясняет их с точки зрения определения канонического переименования.

Свободные и связанные переменные [ править ]

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

Переменные в лямбда-выражении могут быть «связанными» или «свободными». Связанные переменные — это имена переменных, которые уже прикреплены к переменным формальных параметров в выражении.

Говорят, что переменная формального параметра связывает имя переменной везде, где оно свободно встречается в теле. Переменная (имена), которая уже сопоставлена ​​с переменной формального параметра, называется связанной . Все остальные переменные в выражении называются свободными .

Например, в следующем выражении y — связанная переменная, а x — свободная: . Также обратите внимание, что переменная связана своей «ближайшей» лямбда-абстракцией. В следующем примере единственное вхождение x в выражении связано второй лямбдой:

Изменения в операторе замены [ править ]

В определении оператора замены правило:

необходимо заменить на,

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

Например, предыдущие правила были бы неправильно переведены:

Новые правила блокируют эту замену, так что она остается такой:

Трансформация [ править ]

Значение лямбда-выражений определяется тем, как выражения можно преобразовать или сократить. [6]

Существует три вида трансформации:

  • α-преобразование : изменение связанных переменных ( альфа );
  • β-редукция : применение функций к их аргументам ( бета ), вызов функций;
  • η-редукция : которая отражает понятие экстенсиональности ( эта ).

Будем говорить также о результирующих эквивалентностях: два выражения являются β-эквивалентными , если их можно β-преобразовать в одно и то же выражение, а α/η-эквивалентность определяется аналогично.

Термин редекс , сокращение от сокращаемого выражения , относится к подтермам, которые можно сократить с помощью одного из правил сокращения.

α-конверсия [ править ]

Альфа-конверсия, иногда известная как альфа-переименование, [7] позволяет изменять имена связанных переменных. Например, альфа-конверсия мог бы дать . Термы, отличающиеся только альфа-конверсией, называются α-эквивалентными .

При α-преобразовании имена могут быть заменены новыми именами, если новое имя не является свободным в теле, поскольку это приведет к захвату свободных переменных .

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

См. пример;

α-конверсия λ-выражение Канонически названный Комментарий
Оригинальные выражения.
правильно переименуйте y в k (потому что k не используется в теле) Никаких изменений в каноническом переименованном выражении.
наивно переименовывать y в z (неправильно, потому что z свободен в ) захвачен.

β-редукция (избегание захвата) [ править ]

β-редукция отражает идею применения функции (также называемой вызовом функции) и реализует замену выражения фактического параметра на переменную формального параметра. β-восстановление определяется с точки зрения замещения.

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

Альфа-переименование может использоваться на переименовывать имена, свободные в но связанный , чтобы выполнить предварительное условие для этого преобразования.

См. пример;

β-восстановление λ-выражение Канонически названный Комментарий
Оригинальные выражения.
Наивная бета-версия 1,
Канонический
Естественный
x (P) и y (PN) были уловлены при замене.

Альфа переименовывает внутреннюю, х → а, у → б

Бета 2,
Канонический
Естественный
x и y не захвачены.

В этом примере

  1. В β-редексе
    1. Свободные переменные:
    2. Связанные переменные:
  2. Наивный β-редекс изменил смысл выражения, поскольку x и y из фактического параметра стали фиксироваться, когда выражения были заменены во внутренних абстракциях.
  3. Альфа-переименование устранило проблему, изменив имена x и y во внутренней абстракции так, чтобы они отличались от имен x и y в фактическом параметре.
    1. Свободные переменные:
    2. Связанные переменные:
  4. Затем β-редекс приступил к намеченному значению.

n-редукция [ править ]

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

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

Проблема с использованием η-редекса, когда f имеет свободные переменные, показана в этом примере:

Снижение Лямбда-выражение β-восстановление
Наивное n-редукция

Это неправильное использование η-редукции меняет смысл, оставляя x в незамещенный.

Ссылки [ править ]

  1. ^ Барендрегт, Хендрик Питер (1984), Лямбда-исчисление: его синтаксис и семантика , Исследования по логике и основам математики, том. 103 (пересмотренная редакция), Северная Голландия, Амстердам., ISBN.  978-0-444-87508-2 , заархивировано из оригинала 23 августа 2004 г. Исправления
  2. ^ «Пример правил ассоциативности» . Lambda-bound.com . Проверено 18 июня 2012 г.
  3. ^ Селинджер, Питер (2008), Конспекты лекций по лямбда-исчислению (PDF) , том. 0804, факультет математики и статистики, Оттавский университет, с. 9, arXiv : 0804.3434 , Bibcode : 2008arXiv0804.3434S
  4. ^ «Пример правила ассоциативности» . Lambda-bound.com . Проверено 18 июня 2012 г.
  5. ^ Jump up to: Перейти обратно: а б Барендрегт, Хенк; Барендсен, Эрик (март 2000 г.), Введение в лямбда-исчисление (PDF)
  6. ^ Jump up to: Перейти обратно: а б де Кейро, Рюи ЖГБ « Теоретико-доказательное описание программирования и роли правил редукции » . Dialectica 42 (4), страницы 265–282, 1988.
  7. ^ Jump up to: Перейти обратно: а б Турбак, Франклин; Гиффорд, Дэвид (2008), Концепции дизайна в языках программирования , MIT Press, стр. 251, ISBN  978-0-262-20175-9
  8. ^ «Заметки по оценке терминов λ-исчисления и абстрактных машин» . ученый.google.ca . Проверено 14 мая 2024 г.
  9. ^ Пейтон Джонс, Саймон Л. (1987). Реализация функциональных языков программирования . Энглвуд Клиффс, Нью-Джерси: Prentice/Hill International. ISBN  978-0-13-453333-9 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a39b7321aea4b9e246e0d49e1f5e741b__1717977900
URL1:https://arc.ask3.ru/arc/aa/a3/1b/a39b7321aea4b9e246e0d49e1f5e741b.html
Заголовок, (Title) документа по адресу, URL1:
Lambda calculus definition - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)