TL; DR. Siêu dữ liệu của ràng buộc là tinh tế : chúng có vẻ tầm thường nhưng không - cho dù bạn xử lý các logic (bậc cao hơn) hay phép tính. Chúng tinh tế đến mức các đại diện ràng buộc tạo thành một lĩnh vực nghiên cứu mở, với một cuộc cạnh tranh ( thách thức POPLmark ) vài năm trước. Thậm chí có những câu chuyện cười của những người trong lĩnh vực về sự phức tạp của các phương pháp để ràng buộc.
Vì vậy, nếu bạn quan tâm đến siêu dữ liệu (và hầu hết các nhà toán học thì không), bạn cần phải đối phó với sự ràng buộc. Nhưng nhiều nhà toán học có thể xử lý một cách an toàn việc chính thức hóa ràng buộc như thể đó là một vấn đề "nền tảng".
Một điểm khác là ràng buộc là vấn đề "mới" duy nhất trong các ngôn ngữ có hàm bậc cao hơn, bởi vì lý thuyết về ngôn ngữ có ràng buộc chỉ là đại số (đối với hằng số) + ràng buộc. "Cơ sở của ngôn ngữ lập trình" của Mitchell thực sự trình bày mọi thứ theo thứ tự này và khá là khai sáng.
Tôi nhận thức được cách công việc của anh ấy mở đường cho tính toán và tác động của "nó" đối với máy tính và lập trình chức năng nói chung. Câu hỏi của tôi chủ yếu hướng đến thời điểm "trước" để tạo ra calcul-tính toán và "sau" bài báo của Schönfinkel.
Tôi phải thiếu một cái gì đó, nhưng nhận xét này dường như không có sự khác biệt. Liên kết trong các logic thứ tự cao hơn và ràng buộc trong-compus có vẻ khó, vì vậy miễn là mọi người quan tâm đến logic logic bậc cao hơn, họ phải xử lý ràng buộc. Tôi thiên vị bằng cách sử dụng các định lý dựa trên định lý dựa trên Curry-Howard-isomorphism thực hiện logic bằng cách đơn giản thực hiện một lý thuyết loại (trong đó các loại là công thức và chương trình là thuật ngữ chứng minh), do đó tôi chỉ xử lý ràng buộc một lần.
Mặt khác, IIRC, vào thời điểm đó thực sự rất ít quan tâm đến công việc của Schönfinkel - một phần là do cách ông (không) xuất bản nó - các bài báo hầu hết được viết bởi các đồng nghiệp dựa trên nghiên cứu mà ông đã làm (xem tại đây , trang 4) ; Curry sau đó khám phá lại lý thuyết một cách độc lập.
Hãy cẩn thận: Tôi không phải là nhà sử học, mà là nghiên cứu sinh tiến sĩ về PL, vì vậy tôi là một quan điểm hiện đại (và hy vọng chính xác) về chủ đề này.
BIÊN TẬP:
Tại sao ràng buộc tinh tế, cụ thể hơn một chút
Có hai khía cạnh của nó - đầu tiên, thực hiện nó là khó khăn. Thứ hai, siêu dữ liệu là toán học của thao tác chứng minh: thao tác này thường là tự động, nghĩa là nó là một thuật toán - vì vậy về cơ bản, bạn phải đối mặt với tất cả những khó khăn của việc thực hiện, cộng với làm bằng chứng về họ. Dưới đây tôi đưa ra ví dụ. Các ví dụ có một quan điểm hiện đại - chúng là về bằng chứng thực sự chính thức. Tuy nhiên, một số khó khăn sẽ mở rộng đến bằng chứng thủ công chính xác - miễn là bạn không gian lận về chi tiết.
Điều này cho thấy Schönfinkel chỉ đơn giản là đưa ra giải pháp đầu tiên cho vấn đề này, nhưng điều này còn lâu mới dứt khoát.
Thực hiện nó là tinh tế vì bóng
Vấn đề cơ bản trong thực hiện là đổ bóng. Thông thường người ta không sử dụng lại cùng tên cho các biến ràng buộc khác nhau. Nhưng bạn không thể tránh nó trong phép tính lambda, ít nhất là vì chức năng (và các biến bị ràng buộc của họ) được sao: giảm tới ( λ x . X ) 1 + ( λ x . X ) 2 . Đây không phải là một vấn đề được nêu ra, nhưng bắt đầu từ ( λ f x( λ f. f 1 + f 2 ) ( λ x . X )( λ x . X ) 1 + ( λ x . X ) 2 cung cấp cho bạn ( λ g y . G y ) ( λ g y . G y ) z và sau đó ( λ y . ( Λ g y . G y ) y ) z : bây giờ bạn cần phải đối phó với bóng. Bạn có thể tránh điều này, với chi phí làm phức tạp quy tắc giảm beta.( λ fx . f( fx ) ) ( λ g y. g y) z (λgy.g y) (λgy.g y) z(λy.(λgy.g y) y) z
λxy.xyλy.yλy′.y (một hàm hằng).
Điều tồi tệ hơn là các mẫu đối lập với các thuật toán ngây thơ rất khó xây dựng khi bạn đã biết vấn đề này, hãy để một mình khi bạn không. Lỗi trong các thuật toán gần như chính xác thường không bị phát hiện trong nhiều năm. Tôi nghe nói rằng ngay cả những học sinh giỏi thường không thể tự mình đưa ra định nghĩa chính xác về sự thay thế tránh bị bắt. Trên thực tế, nghiên cứu sinh (bao gồm cả tôi) và các giáo sư không được miễn trừ khỏi những vấn đề này.
Đó là một lý do tại sao một số (bao gồm một trong những cuốn sách giáo khoa tốt nhất về ngôn ngữ lập trình, Loại và Ngôn ngữ lập trình của Benjamin Pierce) đề xuất cách trình bày không tên (không phải là logic kết hợp, mặc dù nó đã được sử dụng, nhưng thay vào đó là các chỉ mục deBrujin).
Bằng chứng về nó là tinh tế
Nó chỉ ra rằng bằng chứng về ràng buộc không đơn giản hơn việc thực hiện, như đã đề cập ở trên. Tất nhiên, các thuật toán chính xác tồn tại và bằng chứng về chúng tồn tại - nhưng không có máy móc tiên tiến, đối với mỗi ngôn ngữ sử dụng ràng buộc, bạn cần lặp lại các bằng chứng, và các bằng chứng đó đơn giản là rất lớn và gây khó chịu nếu bạn sử dụng các định nghĩa để ràng buộc trên bút và giấy .
BAABB
Tiếp theo, tôi đã tra cứu ví dụ tốt nhất của tôi về "điều gì sai nếu bạn cố gắng chính thức hóa định nghĩa tiêu chuẩn". Russell O ' logic đầu tiên được mã hóa thành số). Ông đã sử dụng các định nghĩa được sử dụng trên giấy và chính thức hóa chúng trực tiếp. Tìm kiếm "thay thế" hoặc "biến" và tính tần suất chúng xuất hiện trong tham chiếu đến các vấn đề để có được một ấn tượng.
http://r6.ca/Goedel/goedel1.html
Tôi không bao giờ sử dụng những định nghĩa đó trong công việc của mình, nhưng mỗi phương pháp thay thế đều có một số nhược điểm.