Лямбда-исчисление: разница между контекстами и контекстами оценки


12

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

Рассмотрим нетипизированное лямбда-исчисление с логическими значениями и операторами if, термины которых задаются этим синтаксисом:

 t ::= v | t t | if t t t | x
 v ::= \x.t | #t | #f

Контексты C в этом случае будут заданы в соответствии с этим синтаксисом:

C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C 

Кроме того, можно определить контексты оценки E согласно этому другому синтаксису:

E ::= [-] | \x. E | v E | E t | if E t t 

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

  1. Когда используются два понятия? Например, я знаю, что контексты оценки используются для определения семантики исчисления, но использование контекстов все еще несколько ускользает от меня. Также я хотел бы получить подтверждение моих знаний здесь.
  2. Когда одно предпочтительнее другого и почему?
  3. Не могли бы вы указать соответствующие статьи, которые могут помочь мне разобраться в этом вопросе?

Ответы:


15

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

Один формальный способ определения программы равенства есть две программы , и N являются контекстуально равны , они могут заменять друг друга в каждом контексте без изменения поведения. Мы можем определить это следующим образом: M и N контекстуально равны при условии всех замыкающих контекстов C [ ] для M и N : C [ M ] t тогда и только тогда, когда C [ N ] t . Мы говорим, что контекст закрывается для M , NMNMNC[]MNC[M]tC[N]tM,Nесли ни ни C [ N ] не имеют свободных переменных. Выражение M t означает, что программа M за конечное число шагов уменьшается до значения t . (Кроме того, обратите внимание, что определение контекстуальной эквивалентности более широко используется для богатых понятий вычислений, например, параллельных процессов.)C[M]C[N]MtMt

Напротив, контексты оценки - это контексты, которые не блокируют оценку. Точнее, контекст оценки - это термин с дырой в точке, где должен произойти следующий шаг восстановления атома (или он может иметь место для недетерминированных вычислений). Таким образом, следующее правило должно выполняться для контекстов оценки: В качестве примера использования контекстов оценки рассмотрим правила редукции дляλ-вычисления по вызову, где мы не уменьшаемся приλ. Таким образом, даже когдаMN, у нас нет сокращенияλx. Mλx. N. Это можно легко выразить с помощью общего контекстуального правила, приведенного выше, вместе с грамматикой для контекстов оценки, в которой пропущеныλ-выражения. Оценочные контексты были впервые использованы в

MNE[M]E[N]
λλMNλx.Mλx.NλПересмотренный доклад о синтаксических теориях последовательного контроля и государства Феллайзена и Хиба.

14

Контекст - это синтаксическое понятие. Контекст - это термин с одной дырой. (Иногда существуют многозадачные контексты, определение будет дано четко в этом случае.) Синтаксис контекстов определяется путем принятия синтаксиса терминов и предоставления возможности одному подтерму быть дырой вместо термина. В BNF (я использую лямбда-исчисления в качестве примера, без булевы и если заявления , которые не приносят ничего к примеру.): C : : = [ ] | х | т[]

C::=[]xtCCtλx.C

C[]tC[t]t[]C[t][]t

(λx.M)NβM{xN}
M{xN}xNM

tMNxt=(λx.M)Nttt=(λx.M)NtCMNxt=C[(λx.M)N]C[M{xN}]

(λx.M)NβM{xN}(β)MβNC[M]βC[N](γ)
(λx.M)NβM{xN}(β)MβNλx.Mβλx.N(Cλ)MβNMPβNP(C@<)MβNPMβPN(C@>)

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

D::=[]xtDDt
(λx.M)NnpM{xN}MnpND[M]npD[N]
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D будет называться контекстом оценки, поскольку он используется для определения понятия оценки. Контекст оценки не является особым видом контекста; скорее, назвать его контекстом оценки - это вопрос того, для чего используется этот контекст .

Я приведу еще один пример контекста. Определим значения соответствии со следующим синтаксисом: Теперь давайте определим другой тип контекстов: По сравнению с выше, дыра может быть на стороне функции приложения, если аргумент приложения равен ценность. Затем определите следующее понятие сокращения: V

V::=xV1Vnλx.M
E::=[]MEEV
D
(λx.M)VcbvaM{xV}(βcbva)MβNE[M]cbvaE[N](γcbva)
С ограничением, что аргумент функции должен быть значением в первом правиле, и что лямбда-абстракции не являются контекстами, мы определяем стратегию оценки по значению. С дополнительным ограничением на то, что аргумент оценивается перед функцией, это - аппликативный вызов порядка по значению.

1
Ваше последнее определение контекстов оценки ближе к исходному понятию Феллайзена и Хиба. Они являются синтаксическим средством, помогающим выразить порядок оценки условий исчисления. Контекст оценки - это особый вид контекста, поскольку он позволяет однозначно разделить термин на контекст и переопределить (когда это возможно), тем самым детерминистически указав, где должен произойти следующий шаг сокращения.
Дейв Кларк

@DaveClarke Кроме того, вы также можете использовать контексты оценки для определения оценки для недетерминированных понятий вычислений, где у вас нет уникальной декомпозиции в контекст оценки и переопределения.
Мартин Бергер

@MartinBerger: Действительно.
Дейв Кларк

@DaveClarke Вы имеете в виду « детерминированный контекст оценки - это особый вид контекста»? Я могу взять произвольный набор контекстов и определить стратегию оценки на его основе.
Жиль "ТАК - перестань быть злым"

@ Жиль: контексты оценки могут определять детерминистическую стратегию сокращения. Я не думаю, что видел фразу «детерминированный контекст оценки». Это, конечно, особый вид контекста. Я согласен с вашим комментарием; Дело в том, что ваш ответ не учитывает историческое значение контекстов оценки, которые должны были определить детерминистическое понятие сокращения.
Дейв Кларк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.