SKS равен SKK?
Контекст
Вчера вечером я начал изучать лямбда-исчисление, и я пытаюсь определить, правильно ли то, что я понимаю до сих пор.
Понимание
SKK эквивалентен комбинатору Identity I.
Где L означает лямбда:
S = LxLyLz((xz)(yz))
К = LxLy(x)
K по существу берет следующие 2 (лямбда) термина и возвращает первый из них. S кажется немного более сложным в нетипизированном лямбда-исчислении.
Моя интерпретация
SK (любой лямбда-термин) также эквивалентен I.
Т.е. применение приложения S к K к Any-lambda-term эквивалентно комбинатору Identity:
((СК)(Любой)) = I = СКК = ((СК)(К))
Я использую соглашение о «левой ассоциации» в приведенной выше нотации, если это помогает (и я попытался прояснить это в 4-м термине выше с помощью круглых скобок. Все, что я читал до сих пор, похоже, использует это соглашение).
Рассуждение
SK = LyLz((Kz)(yz))
Следующий лямбда-терм будет заменен на y, пусть это будет Y.
НЕБО = Lz((Kz)(Yz))
(Y z) — это применение Y к z, также лямбда-члену.(K z) возвращает постоянную функцию, которая возвращает z при наличии другого входного термина: (Y z).
Верна ли моя интерпретация? Если нет, можете ли вы дать объяснение? Я буду очень признателен. В частности, если можно объяснить своего рода порядок операций — я регулярно оказываюсь в замешательстве, когда решаю, когда оценивать. Возможно, это исправится с практикой.
1 ответ
Ваша интуиция верна, но интуиция ничего не доказывает (увы...)
Итак, как мы можем доказать ваше утверждение? Просто показав, что SKK и SKS ведут себя одинаково. «Поведение» - это неформальное понятие, которое формально охвачено «семантикой»: если СКК и СКС равны, то они всегда должны сводиться к одному и тому же термину, согласно семантике СКИ-исчисления.
Теперь возникает глубокий вопрос: что такое SKI-исчисление? На самом деле, нет единого способа ответить на этот вопрос. Что вы неявно делаете в своем вопросе, так это то, что вы выражаете SKI в терминах λ и полагаетесь на семантику λ-исчисления. Это абсолютно правильно. Другой способ сделать это мог бы заключаться в непосредственном определении семантики SKI. Например, если вы посмотрите на страницу википедии , вы увидите, что семантика не определяется с помощью лямбда-терминов (и тот факт, что она соответствует лямбда-термину, является (приятным и ожидаемым) побочным эффектом). В остальной части этого ответа я буду использовать тот же подход, что и вы, и конвертировать термины SKI в термины λ. Хорошим упражнением для вас будет повторить доказательство, используя правильную семантику SKI.
Итак, позвольте формализовать ваш вопрос: ваш вопрос состоит в том, для любого термина SKI ,
SKKt = SKSt
? Что ж... Посмотрим.
кодируется как
(λx.λy.λz.(xz)(yz))(λx.λy.x)(λx.λy.x)t
в λ-исчислении. Теперь осталось привести его к нормальной форме (я подробно описываю каждый шаг, каждый раз уменьшая крайний левый λ, хоть это и не самая быстрая стратегия):
(λx.λy.λz.(xz)(yz))(λx.λy.x)(λx.λy.x)t
= (λy.λz.((λx.λy.x)z)(yz))(λx.λy.x)t
= (λz.((λx.λy.x)z)((λx.λy.x)z))t
= ((λx.λy.x)t)((λx.λy.x)t)
= (λy.t)((λx.λy.x)t)
= t
Итак, кодировка
SKKt
в исчислении λ сводится к (в качестве примечания, мы только что доказали, что это эквивалентно здесь). Чтобы завершить наше доказательство, мы должны свести и посмотреть, сводится ли оно также к .
SKSt
кодируется как
(λx.λy.λz.(xz)(yz))(λx.λy.x)(λx.λy.λz.(xz)(yz))t
. Пусть уменьшит. (на этот раз я не так подробно рассказываю)
(λx.λy.λz.(xz)(yz))(λx.λy.x)(λx.λy.λz.(xz)(yz))t
= ((λx.λy.x) t)((λx.λy.λz.(xz)(yz)) t))
= (λy.t)((λx.λy.λz.(xz)(yz)) t))
= t
Ура! Это также сводится к , так что действительно,
SKS
а также
SKK
эквивалентны. Кажется, что третий комбинатор не важен: как только вы
SK?
, это эквивалентно
I
. В качестве упражнения это можно легко доказать (такая же стратегия, если и так, то для любых условий
t
а также
s
,
SKts = s
). Как упоминалось выше, другим хорошим упражнением является повторение доказательства без использования семантики λ, но с использованием правильной семантики SKI.
Наконец, мой ответ должен вызвать у вас новый вопрос: у нас есть две семантики, одна из которых кодирует термины SKI в термины λ, а другая — нет. У вас может возникнуть вопрос: эквивалентны ли две семантики? Что означает эквивалентность двух семантик? Если вы только начинаете изучать λ-исчисление, возможно, вам пока рано пытаться ответить на эти вопросы прямо сейчас, но вы можете держать их в уме до тех пор, пока не познакомитесь с формальными языками.