Đây là một câu trả lời một phần: Tôi không biết về lỗi hay người mà SICP đang đề cập đến. Tôi chỉ có thể cung cấp một số gợi ý về việc đổi tên biến "tại sao" có thể gây khó khăn để xử lý chính xác.
Trước hết, nó có vẻ tầm thường để xác định. Chẳng hạn, chúng ta có thể đổi tên các biến bị ràng buộc trong các khoản tiền được lập chỉ mục
Σxe = Σy( e { y/ x})
trong đó là bất kỳ biểu thức nào và biểu thị sự thay thế cú pháp của từng bằng . Tầm thường, phải không?ee { y/ x}xy
Chà, nếu chúng ta áp dụng một cách mù quáng quy tắc trên, chúng ta sẽ nhận được
Σx( x + y) = ∑y( y+ y)
Điều đó không tốt. Chúng ta cần thêm yêu cầu " không xảy ra trong " hoặc chúng ta có một cuộc đụng độ tên.ye
Bây giờ, hãy xem xét việc đổi tên chính xác này
ΣxΣy( x + y) = ∑xΣz( x + z)
Nếu chúng ta muốn đổi tên thành , theo quy tắc trên, chúng ta có thể làm điều đó ở phía bên tay phải, nhưng không phải ở phía bên tay trái. Điều đó thật bất tiện, vì cả hai chỉ khác nhau khi đổi tên, nên chúng nên được xử lý theo cùng một cách.xy
Một cách tiếp cận điển hình ở đây là sử dụng để xác định lại là "thay thế tránh chụp" và thư giãn yêu cầu " không xảy ra trong " và sử dụng thay vì " không xảy ra miễn phí trong ".e { y/ x}yeyee
Sau đó, chúng tôi xác định sự xuất hiện miễn phí:
fr e e ( x ) = { x }fr e e ( e + t ) = fr e e ( e ) ∪ fr e e ( t )fr e e ( Σxe ) = fr e e ( e ) ∖ { x }
Cuối cùng, chụp tránh thay thế:
- x { t / y} là nếu và khác.tx = yx
- ( e + e') { t / y} = e { t / y} + e'{ t / y} (trường hợp dễ dàng)
- ( ∑xe ) { t / y} = ? ?
Trường hợp cuối cùng là đau đớn. Nếu , sự thay thế là no-op, vì chúng tôi muốn nó chỉ ảnh hưởng đến các biến miễn phí và bị ràng buộc. Vì vậy, kết quả chỉ là .x = yxΣxe
Nếu , chúng tôi muốn nói rằng . Tuy nhiên, điều này là sai, vì nếu xảy ra miễn phí trong chúng ta sẽ có được một bản chụp.y≠ x( ∑xe ) { t / y} = ∑x( e { t / y} )xt
Thở dài. Vì vậy, chúng ta đặt là biến "đầu tiên" là 1) không phải , 2) không miễn phí trong và 3) không miễn phí trong . Ở đây, "đầu tiên" có nghĩa là chúng ta cần sắp xếp tốt tập hợp các tên biến (ví dụ: bằng cách chọn một mệnh đề giữa tên và naturals). Sau đó, cuối cùng chúng ta cũng để
.zytΣxe( ∑xe ) { t / y} = ∑z( e { z/ x}{t / y} )
Tôi hy vọng tôi đã làm đúng. (Nhân tiện, lần đầu tiên tôi đã sai
Một số tác giả xem xét nhiều trường hợp hơn, nhưng kết quả là cùng một "đổi tên". Lựa chọn "đầu tiên" không thực sự quan trọng ở trên: bất kỳ nào như vậy sẽ hoạt động tốt và dẫn đến kết quả tương tự (một lần nữa, cho đến khi đổi tên).zz
Bây giờ, cuối cùng, chúng ta có một định nghĩa âm thanh về đổi tên ( -conversion) và thay thế tránh bắt giữ một biến miễn phí. Ở trên, tôi đã xem xét các khoản tiền, nhưng chúng áp dụng cho tất cả các chất kết dính (ví dụ trong phép tính lambda, định nghĩa hàm trong nhiều PL, v.v.).αλ x
Bây giờ, hãy tưởng tượng phải đối phó với định nghĩa phức tạp này mỗi khi chúng ta muốn chứng minh điều gì đó trong lý thuyết PL. Chúng tôi có thể, nhưng chúng tôi không muốn. Nó nhàm chán, tẻ nhạt, dễ bị lỗi, làm mờ bằng chứng và không cung cấp cái nhìn sâu sắc cho người đọc. Vì lý do này, nhiều tác giả PL chỉ cần bỏ qua các chi tiết bằng cách nói (hoặc thậm chí là được cấp!) Rằng các thuật ngữ sẽ được sử dụng để "đổi tên biến", rằng tất cả các biến bị ràng buộc được giả định khác với bất cứ điều gì chúng cần phải khác biệt với, rằng chúng tôi giả sử "quy ước Barendregt", hoặc một cái gì đó có cùng tác dụng.
Thành thật mà nói, đây là gian lận trong bằng chứng. Chúng tôi cũng có thể thêm "nháy mắt nháy mắt, nũng nịu, không nói nữa!" trong cùng một tinh thần. Về cơ bản, chúng tôi yêu cầu sự thương xót và nói với độc giả: "nhìn này, điều này thật nhàm chán, tôi không muốn làm điều đó, bạn không muốn đọc nó - cả hai chúng tôi đều biết rằng, với một nỗ lực to lớn, chúng tôi có thể viết lại bằng chứng này bao gồm tất cả các chi tiết ".
Về mặt kỹ thuật, nó là có thể khai thác shortcut này để chứng minh một tuyên bố sai sự thật. Tuy nhiên, người đánh giá bằng chứng có kinh nghiệm biết điều gì là "tốt về mặt đạo đức" và có thể làm cho hoàn hảo (với nỗ lực lớn) và điều gì đáng ngờ. Cái sau có thể bao gồm một cái gì đó phụ thuộc vào sự lựa chọn thực tế của tên bị ràng buộc (vì vậy chúng tôi không thực sự làm việc "lên đến" như đã hứa!). Trong những trường hợp đó, đánh giá sẽ yêu cầu thêm chi tiết, để anh ta có thể bị thuyết phục.