2016-04-09 3 views
1

Я читал эти notes на исчислении лямбда, и у меня возникают некоторые проблемы с уменьшением/оценкой одного из выражений в начале.Lambda Calculus Сокращение/оценочные выражения

В частности, функция (λf.λx.f (f (x))) (λy.y^2) (5).

Как именно я начинаю это? Он говорит, что ответ получается 625. Моя математическая интуиция говорит, что мы продолжаем так: (λf.λx.f (f (x))) (5 ​​^ 2), и он сказал ранее, что f (x) является карта

х | -> х^2

так е (е (х)) является композицией, которая будет ФОФ = (е)^2 = х^4

таким образом дальнейшее сокращение нашей лямбды выражение мы получаем

(λf.λx.x^4)) (5 ​​^ 2)

Но тогда мы бы подключить 25 в х^4, что дает нам 2 5 * 25 * 25 * 25 = 390,625.

(λf. (390.625))

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

Какую часть исчисления лямбда я неправильно понял? Является ли способ сокращения выражений правильным?

ответ

1

Я ничего не знаю об исчислении лямбда, так что не стесняйтесь меня забвять, если я ошибаюсь :) Плюс моя терминология отключится, поэтому, надеюсь, кто-то испытает ответ на вопрос. Вероятно, это должно быть отправлено в math.stackexchange.com в любом случае.

enter image description here

был дан ранее в качестве примера и не должен был перенести на последующие проблемы.

Прежде всего, похоже, что вы не скопировали это выражение правильно. В соответствии с PDF, это:

enter image description here

Теперь порядок вопросов операций (скобки первого!).

Мы начинаем с:

enter image description here

Мы предоставляем термин лямбда на левой enter image description here с аргументом enter image description here. Это означает, что f заменяется квадратичной функцией.

Так что теперь мы имеем:

enter image description here

Edit:

Причина enter image description here приводится в качестве аргумента enter image description here является то, что мы могли бы написать целое выражение, как:

enter image description here

Если мы посмотрим на первую часть, это легче увидеть, что enter image description here относится к первому аргументу:

enter image description here

+0

Как мы знаем, что мы предоставляем аргумент левому большинству лямбда-термина? Можете ли вы написать эту операцию более явно? Таким образом, вы сказали, что аргумент (λy.y^2) переходит в самый левый член (λf.λx.f (f (x))), как бы вы написали это в полном объеме? – jamesmartini

+0

Из того, что я понимаю, обозначение для лямбда-исчисления не содержит лишних круглых скобок, чтобы было легче читать. Каждая функция с несколькими параметрами может быть разбита на более мелкие функции с отдельными параметрами, а затем оцениваться в процессе, называемом каррированием. Вот парафраз из http://functionspace.com/articles/58/Basics-of---lambda--Calculus: «Currying - это способность использовать несколько аргументов. В принципе, если лямбда-функция имеет больше, чем 1, мы упрощаем это, применяя аргументы один за другим в левом ассоциативном порядке ». – Steve

1

Correct нормального порядка (крайний левый первый) бета-редукции к нормальной форме:

(λ f. (λ x. f (f x))) (λ y. y^2) 5 
= (λ x. (λ y. y^2) ((λ y. y^2) x)) 5 
= (λ x. ((λ y. y^2) x)^2) 5 
= (λ x. (x^2)^2) 5 
= (5^2)^2 
= 25^2 
= 625 

Численные примитивы, такие как 2, 5 и ^, хотя encodable, не являются частью грамматики. Интуитивные обычные правила алгебраической редукции, такие как умножение экспоненты, не применяются; только бета- и, возможно, эта-сокращение.