Học định lý tự động


44

Tôi đang tự mình tìm hiểu Định lý tự động / Trình giải quyết SMT / Trợ lý chứng minh và đăng một loạt câu hỏi về quy trình, bắt đầu từ đây.

Lưu ý rằng các chủ đề này không dễ tiêu hóa nếu không có nền tảng về logic (toán học). Nếu bạn gặp vấn đề với các thuật ngữ cơ bản, vui lòng đọc các thuật ngữ đó, ví dụ Logics in Computer Science của M. Huth và M. Ryan (đặc biệt là chương một, hai và bốn) hoặc Giới thiệu về Logic toán học và Lý thuyết loại của P. Andrew.
Để có một giới thiệu ngắn về logic thứ tự cao hơn (HOL) xem tại đây .

Tôi nhìn Coq và đọc chương đầu tiên của đoạn giới thiệu với Isabelle cùng với những người khác; Các loại máy chủ định lý tự động

Tôi đã biết Prolog trong một vài thập kỷ và hiện đang học F #, vì vậy ML, O'Caml và LISP là một phần thưởng. Haskell là một con thú khác nhau.

Tôi có những cuốn sách sau

"Cẩm nang lý luận tự động" do Alan Robinson và Andrei Vornkov biên tập

"Cẩm nang logic thực tế và lý luận tự động" của John Harrison

"Viết lại thuật ngữ và tất cả những thứ đó" của Franz Baader và Tobias Nipkow

  1. Sự khác biệt giữa Coq và Isabelle là gì?

  2. Tôi nên học cả Isabelle hay Coq, hay cả hai?

  3. Có lợi thế gì khi học cả Isabelle hay Coq trước không?

Tìm câu hỏi tiếp theo của loạt bài ở đây .


7
Điều quan trọng cần lưu ý là các công cụ bạn đề cập không phải là provers tự động mà là bằng chứng chứng minh (mặc dù chúng có thể tự chứng minh công cụ dễ dàng).
Raphael

@DaveClarke Sao y?
Raphael

@Raphael: Có (trừ bây giờ câu trả lời của tôi chứa dữ liệu mới).
Dave Clarke

@DaveClarke Bạn có nghĩ rằng chúng ta nên đóng cái này và hợp nhất hai cái này không?
Raphael

@Raphael: Vâng. Tôi vừa sao chép văn bản của câu trả lời ở đây vào câu trả lời của tôi cho câu hỏi khác.
Dave Clarke

Câu trả lời:


25

Sở thích của tôi là dành cho Coq, nhưng tôi tưởng tượng rằng những người khác thích Isabelle. Một trong những điều kỳ lạ tôi tìm thấy về Isabelle là có một cú pháp hai cấp độ, trong đó một số định nghĩa của bạn cần nằm trong trích dẫn kép. Không có sự vô nghĩa như vậy có mặt trong Coq.

Cuối cùng, cái phù hợp nhất với bạn có thể phụ thuộc vào những gì bạn muốn chứng minh. Cả hai ngôn ngữ đều có rất nhiều hỗ trợ thư viện và các cộng đồng tích cực thực hiện tất cả các loại lý thuyết phát triển và ví dụ. Nếu một ngôn ngữ cung cấp hỗ trợ thư viện (hoặc ngôn ngữ khác) đầy đủ cho các loại lý thuyết bạn muốn phát triển, thì tôi sẽ chọn ngôn ngữ đó.

Một chiến lược là thực hiện một hướng dẫn đơn giản bằng cả hai ngôn ngữ và theo dõi một ngôn ngữ cảm thấy tốt nhất. Ví dụ,

Dưới đây là một bài đăng trên blog so sánh ngắn gọn hai người bởi một người cuối cùng thích Isabelle.

Hãy chắc chắn rằng bạn sử dụng một IDE thích hợp (như ProofGeneral ), thay vì thực hiện mọi thứ trên dòng lệnh.

Một cách khác để vào Coq là dùng thử cuốn sách trực tuyến Phần mềm nền tảng của Benjamin Pierce et al. Nó cung cấp một hướng dẫn tuyệt vời với vô số chi tiết được cung cấp. Trọng tâm chủ yếu là về ngữ nghĩa ngôn ngữ lập trình, nhưng rất nhiều điều cơ bản (và hơn thế nữa) của Coq và định lý bán tự động được chứng minh trên đường đi.


4
ProofGeneral thật tuyệt vời, một khi bạn đã thuần hóa nó! Về cú pháp của Isabelle: iirc, nội dung trong trích dẫn kép là nội dung bạn nói về, các công thức. Mọi thứ khác là kiểm soát bằng chứng. Tôi mặc dù sự phân biệt rõ ràng là tốt, nhưng dấu ngoặc kép (và thiếu dấu cú pháp nổi bật bên trong dấu ngoặc kép) có lẽ không phải là cách tốt nhất để thực hiện nó.
Raphael

4
Chúng tôi đã thiết lập một wiki Isabelle / HOL vào năm ngoái cho một khóa học; nó có một số tổng quan tốt đẹp khó có thể đi bằng cách khác.
Raphael

18

Một điều mà tôi nghĩ bạn sẽ thấy thú vị là thuật ngữ "chứng minh định lý" thay đổi rất nhiều tùy thuộc vào lĩnh vực bạn đang làm. Trong khi chúng - trong trừu tượng - hơi liên quan, định lý thực tế chứng minh (giống như bạn xem chi tiết trong Sổ tay lý luận tự động) ít liên quan đến Coq hoặc Isabelle hơn bạn nghĩ.

Khi tôi lần đầu tiên bắt đầu tìm hiểu về định lý chứng minh những điều liên quan, cuốn sách đầu tiên tôi đọc (mặc dù hiện tại khá cũ?) Là Định lý logic thứ nhất xuất sắc và Định lý tự động. Cuốn sách này là một cuốn sách thực sự xuất sắc bao gồm các loại chủ đề bạn sẽ thấy liên quan đến các logic thứ tự thấp hơn, nơi bạn thực sự có thể có được một lượng tự động hóa khá lớn. Loại logic bạn học nên được quyết định bởi những gì bạn muốn lý luận, và không quá nhiều định lý chứng minh cho lợi ích của nó. Ví dụ, trong khi logic thứ tự đầu tiên mang đến cho bạn một khả năng diễn đạt và khả năng suy luận hợp lý, hầu hết cộng đồng ngôn ngữ lập trình (nơi tôi đã kết thúc những ngày này) đã rời khỏi trường phái chứng minh định lý và kiểm tra mô hình cũ hơn (đi vào xô của những thứ có tính quyết định hơn nhưng ít biểu cảm hơn).

Đừng hiểu điều này có nghĩa là - tuy nhiên - rằng những thứ như lý luận thứ tự đầu tiên và kiểm tra mô hình không thực sự hữu ích trong thực tế. Họ đã được! Bạn có thể xem ACL2 như một ví dụ về một người hoạt động được xây dựng trên logic thứ tự đầu tiên, có một thành công đáng kinh ngạc trong lĩnh vực công nghiệp. Cùng với đó, cũng đã có một sự phát triển đáng kinh ngạc trong việc giải quyết SMT. Các bộ giải hiện đại của SMT được xây dựng dựa trên các bộ giải SAT rất mạnh (chủ yếu thông qua các khám phá trong vòng hai mươi năm qua để cải thiện DPLL), và đã thấy được sử dụng rất nhiều trong những việc như thi hành biểu tượng.

Tuy nhiên, như tôi đã nói, trong khi bit "định lý chứng minh" truyền thống hơn là thú vị, có rất nhiều thứ để tìm hiểu. Học Coq - ví dụ - ít liên quan đến việc học các công cụ tự động hóa mà nó mang lại cho bạn, và còn nhiều điều phải làm với việc học lý thuyết loại mà nó dựa trên (tính toán dự đoán của các cấu trúc cưỡng chế). Nếu bạn không quen với logic xây dựng, lý thuyết đẳng cấu của cà ri, hoặc lý thuyết loại, bạn sẽ có một thời gian thú vị khi học các công cụ này, nhưng tôi khó có thể nghĩ rằng chúng quá liên quan đến những thứ bạn nhìn thấy trong tập đầu tiên của cẩm nang.

Vì vậy, quyết định những gì bạn muốn làm: xác minh các mô hình và định lý theo logic thứ tự đầu tiên, hoặc sử dụng một lý thuyết loại mạnh mẽ để lý giải về tính đúng đắn của các chương trình của bạn (hoặc các định lý trong logic xây dựng). Nếu đó là lần đầu tiên, hãy tìm hiểu về các kỹ thuật dựa trên suy luận tự động hơn, nếu đó là lần thứ hai, hãy tìm hiểu thêm về Coq, HOL, v.v ... Nhân tiện, nếu bạn muốn tìm hiểu Coq, trong khi các tài liệu tham khảo ở trên là tốt, tôi nghĩ rằng Có hai tài liệu tham khảo thực sự cốt lõi để học Coq:

Cuốn sách nền tảng phần mềm của Benjamin Pierce (Tiến sĩ Pierce là một nhà văn xuất sắc, và tôi khuyên bạn cũng nên xem "cuốn sách gạch" phổ biến hơn của anh ấy nếu bạn chưa có).

Lập trình được chứng nhận với các loại phụ thuộc (Adam Chlipala cũng viết khá tốt, mặc dù các cuốn sách của ông cho rằng sự trưởng thành và thông minh hơn một chút so với giới thiệu có lẽ đơn giản hơn của Pierce.)


15

Có nhiều hệ thống cho Định lý tương tác (ITP) - xem thêm hội nghị của tên đó - Coq, Isabelle, HOLs, ACL2, PVS, v.v.

Tất cả chúng đều tương đối khó học, và mỗi loại có văn hóa cụ thể của riêng mình. Nó giống như học một ngôn ngữ nước ngoài: giả sử bạn đã biết tiếng Anh, và sau đó có sự lựa chọn của tiếng Pháp, tiếng Đức, tiếng Ý, tiếng Tây Ban Nha, tiếng Bồ Đào Nha. Tất cả chúng đều liên quan đến nhau - đây không phải là tiếng Trung Quốc - nhưng rất ít người quản lý tất cả những điều đó cùng một lúc. Vì vậy, bạn nên thử lấy một hương vị cho mỗi nền văn hóa và cộng đồng, và sau đó đưa ra một cam kết.

Cũng có thể có "tính năng sát thủ" mà bạn thực sự cần cho công việc của mình.

Nó cũng giúp có các chuyên gia đồng nghiệp trên một trong những hệ thống này xung quanh.

  • Sự khác biệt giữa Coq và Isabelle là gì?

Cả hai đều là hậu duệ của hệ thống LCF từ Stanford / Edinburgh / Cambridge. Năm 1985, G. Huet và L. Paulson đã làm việc cùng nhau trên phiên bản cuối cùng của Cambridge LCF. Sau đó, sự chia rẽ đã xảy ra đối với Coc / CIC / COQ (nay là Coq) ở Pháp và Isabelle ở Cambridge và Munich. Lưu ý rằng HOL4, HOL-Light, HOL-XYZ là những hậu duệ liên quan khác của LCF.

Hơn 20 năm trước, sự khác biệt của Coq so với Isabelle sẽ được thực hiện theo các nền tảng logic: Logic phụ thuộc được đánh máy ở đây, Logic cổ điển đơn giản ở đó. Ngày nay, có rất ít tác động đến điều đó trong thực tế, vì ngày càng có nhiều lớp được thêm vào trên mỗi hệ thống chính thức, bao gồm các công cụ bổ trợ và thư viện.

  • Tôi nên học cả Isabelle hay Coq, hay cả hai?

Bạn nên nhìn vào cả hai, và cố gắng để có cảm giác nếu bạn thích thêm Rượu và Phô mai, hoặc Bratwurst và Sauerkraut. (Là một trong những kẻ đứng sau Isabelle, nhưng hiện tại ở Pháp, tôi ngạc nhiên khi có nhiều người Pháp thực sự thích Sauerkraut khi họ ở nhà riêng và không ai tìm kiếm :-)

  • Có lợi thế gì khi học cả Isabelle hay Coq trước không?

Tôi không nghĩ vậy. Có thể có một mối nguy hiểm khi bạn bị mắc kẹt với cái bạn thử trước và không thử cái thứ hai, hoặc bạn sẽ thất vọng quá sớm với cái đầu tiên và loại bỏ nó quá sớm. Trong mọi trường hợp, bạn sẽ cần thời gian và sự kiên trì để trở nên hiệu quả với một trong hai hệ thống.

Vì Proof General là "IDE" đã được đề cập: Proof General / Emacs từng là giao diện hợp nhất tiêu chuẩn cho cả Coq và Isabelle trong nhiều năm, nhưng tôi sẽ không bao giờ gọi nó là IDE. Ngoài ra còn có CoqIDE với "IDE" trong tên của nó, nhưng là một trình soạn thảo tương đối cơ bản trên các widget Gtk. Isabelle hiện tại bao gồm Isabelle / jEdit, không có "IDE" trong tên của nó, nhưng có nghĩa là gần đúng những thứ bạn thấy thường xuyên trong Netbeans hoặc IntelliJ IDEA --- cho các văn bản chứng minh thay vì mã Java.


10

Dưới đây là một số video hướng dẫn Coq đẹp của Andrej Bauer. Không có cách nào hoàn thành, nhưng tôi nghĩ đó là một giới thiệu tốt.


1
Tuyệt quá! Lưu ý một câu trung tâm trong "Một bằng chứng đầu tiên với Coq": "Hãy suy nghĩ về cách bạn sẽ làm điều đó trên giấy." Lời khuyên tốt nhất bao giờ hết.
Raphael

4

Phần giới thiệu này về Isabelle khá đầy đủ.

Cũng xem phần giới thiệu này về Isabelle

Nhìn chung, Isabelle tương đối dễ bắt đầu, vì có nhiều ví dụ có sẵn. Ví dụ: trong trang web chính thức

Tái bút - Tôi không có cách nào liên kết với Isabelle, tôi là một nhà lý luận trong các phương pháp chính thức, nhưng tôi biết rằng Isabelle thường xuyên xuất hiện như một điểm khởi đầu mặc định.


1
Tôi biết rằng Isabelle xuất hiện thường xuyên như một điểm khởi đầu mặc định. Anh: Tôi muốn nói rằng, HOL thường đến như một điểm khởi đầu mặc định và là một trợ lý chứng minh, đó là Coq thường được mặc định. Nghĩ về nó, đó là logic hài hước nổi tiếng nhất (HOL nổi tiếng hơn CoC) và trợ lý chứng minh nổi tiếng nhất (Coq nổi tiếng hơn Isabelle), không phù hợp (Coq dựa trên CoC và Isabelle trên HOL).
Hibou57

2

λ

Ngoài ra, Tổ chức Phần mềm của DeepSpec Summer School có một số bài giảng khá hay:

Một số bài giảng dựa trên loạt nền tảng Phần mềm, đã được đề cập.

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.