Thông thường, các tên biến cụ thể mà chúng tôi đã chọn trong phép tính lambda là vô nghĩa - chức năng của x
giống với chức năng của a
hoặc b
hoặc c
. Nói cách khác:
(. Λx (λy.yx)) tương đương với - đổi tên x
-a
và y
-b
không không thay đổi bất cứ điều gì (λa (λb.ba).).
Từ điều này, bạn có thể kết luận rằng bất kỳ thay thế nào đều được cho phép - tức là bất kỳ biến nào trong bất kỳ thuật ngữ lambda nào đều có thể được thay thế bằng bất kỳ cụm từ nào khác. Đây không phải là như vậy. Hãy xem xét các lambda bên trong biểu thức đầu tiên ở trên:
(λy.yx)
Trong cụm từ này, x
là "tự do" - nó không phải là "ràng buộc" bởi một trừu tượng lambda. Nếu chúng ta để thay thế y
với x
, khái niệm sẽ trở thành:
(λx.xx)
này có một ý nghĩa hoàn toàn khác nhau. Cả hai x
's bây giờ tham khảo các đối số trừu tượng lambda. Đó là x
(ban đầu là "miễn phí") đã bị "bắt giữ"; nó "bị ràng buộc" bởi trừu tượng lambda.
Các thay thế tránh vô tình chụp các biến miễn phí được gọi là, không tưởng tượng, "thay thế bắt giữ".
Bây giờ, nếu tất cả những gì chúng ta quan tâm trong phép tính lambda đã thay thế một biến cho một biến khác, cuộc sống sẽ khá nhàm chán. Thực tế hơn, những gì chúng tôi muốn làm là thay thế biến bằng cụm từ lambda . Vì vậy, chúng tôi có thể thay thế biến bằng một trừu tượng trừu tượng lambda (λx.t) hoặc một ứng dụng (x t). Trong cả hai trường hợp, các cân nhắc tương tự cũng áp dụng - khi chúng ta thực hiện thay thế, chúng tôi muốn đảm bảo rằng chúng tôi không thay đổi ý nghĩa của biểu thức ban đầu bằng cách vô tình "chụp" biến ban đầu miễn phí.
Cảm ơn bạn rất nhiều! Sự liên quan của từ "bắt giữ" không được giải thích trong các tài liệu tôi đã đọc, điều đó khiến tôi mất đi ý định của nó. – Paul
@Ord, là x bị ràng buộc trong (λx. (Λy.yx))? Bởi vì biểu thức bên ngoài có x làm đối số. Hoặc nó liên quan đến (λx. (Λy.yx)) và miễn phí liên quan đến (λy.yx)? –
x sẽ bị ràng buộc trong biểu thức (λx. (Λy.yx)) và tự do trong biểu thức (λy.yx). – Ord