Я читал эти 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))
тогда, когда мы здесь, я совершенно не знаю, что представляет это выражение?
Какую часть исчисления лямбда я неправильно понял? Является ли способ сокращения выражений правильным?
Как мы знаем, что мы предоставляем аргумент левому большинству лямбда-термина? Можете ли вы написать эту операцию более явно? Таким образом, вы сказали, что аргумент (λy.y^2) переходит в самый левый член (λf.λx.f (f (x))), как бы вы написали это в полном объеме? – jamesmartini
Из того, что я понимаю, обозначение для лямбда-исчисления не содержит лишних круглых скобок, чтобы было легче читать. Каждая функция с несколькими параметрами может быть разбита на более мелкие функции с отдельными параметрами, а затем оцениваться в процессе, называемом каррированием. Вот парафраз из http://functionspace.com/articles/58/Basics-of---lambda--Calculus: «Currying - это способность использовать несколько аргументов. В принципе, если лямбда-функция имеет больше, чем 1, мы упрощаем это, применяя аргументы один за другим в левом ассоциативном порядке ». – Steve