Coq tổng hợp hay phân tích?


8

Trong khóa học HoTT của CMU, bài giảng 1, có thể tìm thấy ở đây: https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=0945cc7f-48b7-4804-81af-e7193a3f461d

Vào lúc 33:51, Harper đã đưa ra so sánh song song giữa các lý thuyết tổng hợp và các lý thuyết phân tích, và khi đạt đến lý thuyết PL, ông nói Coq là phân tích và nói Coq chỉ chứng minh một ngôn ngữ trong ngữ pháp của nó chứ không phải là trình phân tích cú pháp.

Tôi có một mong muốn mạnh mẽ để không đồng ý bằng cách nào đó nhưng tôi không có một ý tưởng rõ ràng tại sao tôi muốn làm điều đó. Tôi tin rằng Coq rất tổng hợp, do đó, bất kỳ trợ lý chứng minh nào khác dựa trên lý thuyết loại phụ thuộc, bởi vì tất cả các ngôn ngữ này không làm gì khác ngoài việc xây dựng các chương trình. Chúng ta cũng có thể biểu thị đại số tiên đề trong Coq bằng cách sử dụng các lớp loại chẳng hạn và cụ thể hóa bất cứ khi nào phù hợp. Mô hình này đặc biệt là trường hợp ở Agda.

Vì vậy, câu hỏi của tôi là, Harper phải không? Nếu anh ấy đúng, phần nào trong quan điểm của tôi gây ra sự hiểu lầm của tôi?

Câu trả lời:


12

Nhận xét là về một cách sử dụng cụ thể của Coq, cụ thể là chính thức hóa lý thuyết ngôn ngữ lập trình.

Trước tiên chúng ta hãy làm rõ sự khác biệt giữa tổng hợpphân tích :

  • Trong một cách tiếp cận tổng hợp cho một chủ đề, chúng tôi nói rằng có những thứ mà các thuộc tính và cấu trúc cơ bản của nó được quy định theo cách này hay cách khác. Sau đó chúng tôi nghiên cứu những điều này bằng cách chỉ dựa vào các thuộc tính và cấu trúc được quy định.

  • Trong một cách tiếp cận phân tích đến một chủ đề, chúng tôi phát hiện ra rằng có những điều nhất định. Để tìm hiểu thêm về chúng, chúng tôi tách chúng ra, chúng tôi nghiên cứu cách chúng được tạo ra và chúng tôi phân tích chúng. Bằng cách này chúng ta khám phá các thuộc tính và cấu trúc của chúng.

Làm thế nào một người sẽ học một ngôn ngữ lập trình theo hai cách này?

Về mặt tổng hợp, chúng tôi sẽ quy định các bộ phận cấu thành của ngôn ngữ (có các thuật ngữ, có các loại), cấu trúc cơ bản của chúng (đây là các cách xây dựng thuật ngữ) và các thuộc tính cơ bản. Chúng tôi không hỏi các điều khoản và loại được làm từ gì, hoặc liệu các điều khoản là cây hoặc chuỗi, hoặc liệu bộ sưu tập các loại được xây dựng theo một cách cụ thể.

Về mặt phân tích, chúng tôi sẽ bắt đầu với một thiết lập toán học cho phép chúng tôi thực hiện nhiều việc, chẳng hạn như sử dụng các định nghĩa quy nạp để xây dựng các đối tượng toán học. Chúng tôi sẽ xây dựng các thuật ngữ và loại như các bộ hoặc loại được xác định theo quy nạp cụ thể. Sau đó, chúng tôi sẽ nghiên cứu cấu trúc của chúng, làm thế nào chúng ta có thể biến đổi chúng, v.v.

Cần phải rõ ràng rằng Coq thuộc loại phân tích. Khi bạn triển khai ngôn ngữ lập trình trong Coq, bạn xác định các loại thuật ngữ và loại quy nạp. Sau đó, bạn phân tích chúng bằng cách sử dụng quy nạp, xác định ngữ nghĩa hoạt động như một hàm đệ quy theo cú pháp của thuật ngữ, v.v.

Mặt khác, Twelf thuộc loại tổng hợp. Chúng tôi yêu cầu rằng có một loại thuật ngữ và một loại loại, nhưng chúng tôi không nói với Twelf rằng đây là những loại quy nạp (không có cách nào để nói điều đó trong Twelf). Chúng tôi xác định ngữ nghĩa hoạt động bằng cách cung cấp các quy tắc chuyển đổi cơ bản. Không có đề cập đến các hàm được định nghĩa đệ quy (không có cách nào để xác định các hàm trong Twelf), chúng tôi chỉ dựa vào các định đề mà chúng tôi đã viết ra.

Bạn nên so sánh tình huống trên với hình học phẳng. Cách tiếp cận hình học của Hilbert là tổng hợp (nhưng ý tưởng của ông bắt nguồn từ Euclid), Descartes 'mang tính phân tích. Hình học giải tích được gọi như vậy bởi vì một dòng không phải là một khái niệm nguyên thủy: nó có cấu trúc bên trong, cụ thể là một tập hợp các điểm.


Cảm ơn bạn vì câu trả lời. Bạn có thể xem các tuyên bố sau của tôi được căn chỉnh chính xác để kiểm tra sự hiểu biết của tôi không? 1. Vẫn có thể thực hiện phương pháp tổng hợp trong Coq, được Unimath đưa ra, bằng cách không cho phép sử dụng các định nghĩa quy nạp. 2. Bản thân nghiên cứu về lý thuyết loại là tổng hợp, nhưng nghiên cứu dựa trên chúng (giả sử sử dụng tự do tính năng ngôn ngữ) sẽ mang tính phân tích. Nếu HoTT được triển khai như một ngôn ngữ lập trình, việc sử dụng HIT và cảm ứng sẽ thực sự biến nó thành một nghiên cứu phân tích.
Jason Hu

Unimath là tổng hợp không phải vì nó không tuân theo các loại quy nạp, mà bởi vì nó nói về các loại đồng luân mà không phân tích chúng được làm từ gì.
Andrej Bauer

@AndrejBauer - Lạ lùng thay, sự khác biệt này dường như trái ngược với triết học, bao gồm cả triết học toán học . Ở đó, "phân tích" có nghĩa là các tuyên bố có ý nghĩa chỉ phụ thuộc vào các điều khoản và mối quan hệ của chúng, mà không cần phải thêm vào, "tổng hợp", bất kỳ đầu vào bên ngoài nào (ví dụ kiến ​​thức thực tế về tình trạng của thế giới). Vì vậy, với cách sử dụng này, Euclid sẽ là phân tích, trong khi Descartes sẽ liên quan đến việc tổng hợp các khái niệm hình học với các khái niệm đại số (ví dụ: một điểm là một cặp (x, y) và một đường thẳng là một phương trình y = mx + b).
chéo
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.