Bằng chứng kỹ thuật liên quan đến thư từ Curry Curry Howard


8

Tôi đang tìm kiếm các nguồn về khái niệm chính thức của các chương trình. Điều này dường như có liên quan mật thiết đến sự tương ứng của Curry-Howard, nhưng người ta cũng có thể theo dõi điều này trở lại với Universal Turing Machines và khả năng đọc mô tả và đầu vào của bất kỳ TM nào.

Khi đọc về phóng viên Curry-Howard, tôi cảm thấy rằng tính nguyên thủy của UTM-s có thể gây hại cho nghiên cứu về các chương trình với kết luận duy nhất rằng bất kỳ chương trình nào cũng có thể được giảm xuống thành các biểu tượng, trạng thái và quy tắc. Có tồn tại cách tiếp cận ngược lại, nơi các hệ thống tính toán cấp cao được xác định và kiểm tra? Tài nguyên tốt về nó là gì?


1
Một điểm khởi đầu tốt sẽ là Hoare Logic.
Dave Clarke

1
Bạn đã quên Lambek , nếu bạn đưa anh ấy vào danh sách thì bạn sẽ có tất cả lý thuyết danh mục tại dịch vụ của mình.
Artem Kaznatcheev

Câu trả lời:


20

Những gì bạn muốn tồn tại và là một lĩnh vực nghiên cứu khổng lồ: đó là toàn bộ lý thuyết về ngôn ngữ lập trình.

Nói một cách lỏng lẻo, bạn có thể xem tính toán theo hai cách. Bạn có thể nghĩ về máy móc , hoặc bạn có thể nghĩ về ngôn ngữ .

Một máy về cơ bản là một số loại điều khiển hữu hạn được tăng cường với một số bộ nhớ (có thể không bị ràng buộc). Đây là lý do tại sao các lớp TOC giới thiệu đi từ automata hữu hạn đến automata đẩy xuống máy Turing --- mỗi lớp có một điều khiển hữu hạn và thêm một số bộ nhớ cho nó. (Ngày nay, điều khiển hữu hạn thường bị hạn chế nhiều hơn, như trong các mô hình mạch.) Điều cốt yếu là điều khiển hữu hạn được đưa ra phía trước, và tất cả cùng một lúc.

Một ngôn ngữ là một cách để xác định một gia đình toàn bộ điều khiển, theo một cách sáng tác. Bạn có các hình thức nguyên thủy cho các điều khiển cơ bản và các toán tử để xây dựng các điều khiển lớn hơn từ các điều khiển nhỏ hơn. Ngôn ngữ nguyên thủy, tính toán lambda, trên thực tế chỉ định không có gì ngoài kiểm soát - điều duy nhất bạn có thể xác định là trừu tượng hóa hàm, ứng dụng và tham chiếu biến.

Bạn có thể chuyển qua lại giữa hai chế độ xem này: -theorem về cơ bản là bằng chứng cho thấy máy Turing có thể thực hiện trừu tượng hóa chức năng và ứng dụng, và mã hóa Church chứng minh rằng phép tính lambda có thể mã hóa dữ liệu. Nhưng có cả nội dung không cần thiết trong cả hai định lý này, và vì vậy bạn không nên phạm sai lầm khi nghĩ rằng hai cách hiểu tính toán là như nhau.snm

Các nhà nghiên cứu về độ phức tạp và thuật toán thường lấy máy móc làm cơ bản, bởi vì họ quan tâm đến chi phí và kết quả khả thi . Để phóng đại một chút, câu hỏi nghiên cứu cơ bản mà họ có là:

Là gì mạnh mẽ nhất máy có thể giải quyết một loại vấn đề?

Các nhà nghiên cứu ngôn ngữ lấy ngôn ngữ làm nền tảng, bởi vì chúng tôi quan tâm đến kết quả biểu cảmkhông thể thực hiện được . Với một cường điệu tương tự, câu hỏi nghiên cứu cơ bản của chúng tôi là:

Là gì diễn cảm nhất ngôn ngữ mà quy ra một loại hành vi xấu?

Bên cạnh, lưu ý làm thế nào hai hàng hóa mỗi loại giá trị lý thuyết trực tiếp xung đột! Làm việc tốt trong các thuật toán và độ phức tạp cho phép bạn giải quyết một vấn đề khó hơn, sử dụng ít tài nguyên hơn. Làm việc tốt trong các ngôn ngữ cho phép lập trình viên làm nhiều việc hơn, trong khi cấm nhiều hành vi xấu hơn. (Xung đột này về cơ bản là tại sao nghiên cứu khó khăn.)

Bây giờ, bạn có thể hỏi tại sao nhiều loại Lý thuyết A không sử dụng ngôn ngữ hoặc tại sao nhiều nhà nghiên cứu Lý thuyết B không sử dụng máy móc. Lý do phát sinh từ hình dạng của câu hỏi nghiên cứu cơ bản.

Lưu ý rằng câu hỏi nghiên cứu cơ bản được cách điệu trong thuật toán / độ phức tạp là câu hỏi ràng buộc thấp hơn - bạn muốn biết rằng bạn có giải pháp tốt nhất và không có cách nào có thể làm tốt hơn, cho dù bạn có thông minh đến đâu. Một định nghĩa ngôn ngữ sửa chữa các phương tiện của thành phần chương trình , và vì vậy nếu bạn chứng minh rằng ràng buộc thấp hơn với một mô hình ngôn ngữ, thì bạn có thể bị bỏ lại câu hỏi liệu có thể làm gì đó tốt hơn nếu bạn mở rộng ngôn ngữ của mình với một số ngôn ngữ tính năng mới. Một mô hình máy cung cấp cho bạn toàn bộ điều khiển trong một lần và vì vậy bạn biết mọi thứ máy có thể làm ngay từ đầu.

Nhưng thông số kỹ thuật của máy chính xác là điều sai lầm khi nói những điều thú vị về việc ngăn chặn hành vi xấu. Một cỗ máy cung cấp cho bạn toàn bộ điều khiển từ trước, nhưng biết rằng một chương trình cụ thể là tốt hay xấu không giúp ích gì cho bạn khi bạn muốn mở rộng nó hoặc sử dụng nó như một chương trình con - như epigram của Perlis nói, "Mỗi chương trình là một một phần của một số chương trình khác và hiếm khi phù hợp. " Vì các nhà nghiên cứu ngôn ngữ quan tâm đến việc nói những điều về toàn bộ các lớp chương trình, ngôn ngữ phù hợp hơn nhiều cho mục đích.


3
Điều này tương tự với quan điểm của tôi rằng mọi người thuật toán đang thực sự áp dụng lý thuyết phức tạp ứng dụng, không phải lập trình :). Câu trả lời tuyệt vời. Ngoài ra, trong thực tế, mọi người không thể chứng minh giới hạn thấp hơn cho các máy chung và cuối cùng hạn chế ở một mô hình biểu cảm yếu hơn (tức là một loại ngôn ngữ)
Suresh Venkat

Câu trả lời rất hữu ích. Tôi nhận thấy rằng có thể định nghĩa điều khiển một mình (tính toán lambda). Tiếp theo, định lý smn cung cấp cho lambda tính toán khả năng ngầm định của dữ liệu mã hóa. Nó cũng cung cấp điều khiển mức cao (trừu tượng hóa chức năng & ứng dụng) cho các máy Turing - mà theo tôi giả định có thể mã hóa rõ ràng dữ liệu và điều khiển cơ bản (rõ ràng điều này được nêu trong đoạn thứ ba về máy móc).
AllCoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.