2012-06-28 30 views
24

Trong khi đọc phần tích phân Lambda trong Wiki, đi qua cụm từ Thay thế chụp thay thế. Ai đó có thể giải thích ý nghĩa của nó vì tôi không thể tìm thấy một định nghĩa từ bất cứ đâu.Điều gì có nghĩa là "Capture-tránh thay thế"?

Cảm ơn

PS

Những gì tôi muốn biết là lý do nói rằng hoạt động thay Capture-tránh. Nó sẽ là một trợ giúp tuyệt vời nếu ai cũng có thể làm điều đó

Trả lời

38

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-ay-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í.

+1

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

+0

@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)? –

+0

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

4

Việc thay thế E 'cho x trong E (viết [E'/x] E)

  • Bước 1. Đổi tên ràng buộc các biến trong E và E 'vì vậy chúng là duy nhất
  • Bước 2. Thực hiện thay thế văn bản của E' cho x trong E
    được gọi là thay thế bắt giữ chụp.

Ví dụ: [y (.x. X)/x] λy. (λx. x) y x

Sau khi đổi tên: [y (.v. v)/x] λz. (λu. u) z x
Sau khi thay thế: λz. (λu. u) z (y (λv. v))

+0

Điều tôi thực sự muốn biết là lý do tại sao nó được gọi là thay thế bắt giữ. Ý tôi là về mặt khái niệm. – Pradeep

+0

@Jaguar, 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)? –

7

Biến là bị bắt nếu nó được đặt dưới lambda (hoặc các cấu trúc ràng buộc khác nếu chúng tồn tại) liên kết biến. Nó được gọi là thay thế bắt giữ chụp vì quá trình tránh vô tình cho phép các biến miễn phí thay thế được ghi lại bên trong biểu thức gốc.

Các vấn đề liên quan