Dưới đây là biểu thức lambda mà tôi thấy khó giảm, tức là tôi không thể hiểu làm thế nào để giải quyết vấn đề này.
Tôi bị mất với điều này.
nếu ai đó có thể dẫn tôi đi đúng hướng sẽ được đánh giá cao
Dưới đây là biểu thức lambda mà tôi thấy khó giảm, tức là tôi không thể hiểu làm thế nào để giải quyết vấn đề này.
Tôi bị mất với điều này.
nếu ai đó có thể dẫn tôi đi đúng hướng sẽ được đánh giá cao
Câu trả lời:
Các thuật ngữ Lambda được đơn giản hóa theo quy tắc giảm β :
Nó có nghĩa là, nếu bạn có một subterm trông giống như (được gọi là redex ) bạn có thể thay thế nó bằng, đó là với Được thay thế cho . Sự thay thếthường được gọi là hợp đồng . (Chữ in hoa thích và được sử dụng để biểu thị các điều khoản.)
Trong trường hợp của bạn, mức giảm đầu tiên sẽ là:
Một số lưu ý:
Một cách khác để thể hiện sự trừu tượng và giảm bớt lambda. Các chỉ mục được sử dụng thay vì các thuật ngữ chữ dựa trên thứ tự đầu vào. Trừu tượng được bao quanh bởi []
(λmn.(λsz.ms(nsz)))(λsz.sz)(λsz.sz)
m -> 1, n -> 2, s -> 3, z -> 4
(λmn.(λsz.ms(nsz))) = [1 3 (2 3 4)]
(λsz.sz) = [1 2]
[1 3 (2 3 4)][1 2][1 2]
[[1 2] 2 (1 2 3)][1 2] ;1 was replaced with [1 2], remaining terms decremented
[[1 2] 1 ([1 2] 1 2)] ;1 was replaced with [1 2], remaining terms decremented
[1 ([1 2] 1 2)] ;1 2 was replaced by 1 ([1 2] 1 2)]
[1 (1 2)] ;1 2 was replaced by 1 2
(λmn.m(mn))
Các ký hiệu ở trên chỉ là một cách nhỏ gọn hơn và rõ ràng hơn để thể hiện trừu tượng lambda. Trừu tượng hợp chất giảm xuống một hình thức bình thường duy nhất tự động, không cần giảm alpha.
Chỉ số tích cực duy nhất được sử dụng cho các điều khoản ràng buộc. Các chỉ số tiêu cực được sử dụng cho các thuật ngữ tiêu diệt. Các chỉ số tiêu cực được đặt cuối cùng theo thứ tự độ lớn giảm dần.
I = λx.x = [1]
K = λxy.x = [1 -2]
KI = λyx.x = [2 -1]
S = λxyz.xz(yz) = [1 3 (2 3)]
Áp dụng S cho K:
[1 3 (2 3)][1 -2]
[[1 -2] 2 (1 2)] ;1 was replaced with [1 -2], remaining terms decremented
[[.2 -1] (1 2)] ;reducing: 1 replaced by .2*, -2 decremented (in magnitude)
[2 -2 -1] ;(1 2) bound terms become kill terms due to -1.
[2 -1] = KI ;-2 kill term is void due to surviving 2 term
* the . notation signifies the bound term is from the outer abstraction
and must be used to prevent decrementing and double replacement of the
term until the substitution of all terms in the abstraction is complete.
[2 -1][anything] ;applying KI to anything
[1] = I ;yeilds I, therefor SK[anything] = [1] = I
Áp dụng K cho K:
[1 -2][1 -2]
[[1 -2] -1] ;kill terms are absorbed and also increase the magnitude of bound terms
[2 -3 -1] ;applying this result to anything yields K.
[2 -3 -1][anything]
[2 -1]