Làm thế nào để 'chiến thuật' làm việc trong các trợ lý bằng chứng?


44

Câu hỏi: Làm thế nào để "chiến thuật" hoạt động trong các trợ lý chứng minh? Chúng dường như là những cách chỉ định cách viết lại một thuật ngữ thành một thuật ngữ tương đương (đối với một số định nghĩa về 'tương đương'). Có lẽ có những quy tắc chính thức cho việc này, làm thế nào tôi có thể tìm hiểu chúng là gì và chúng hoạt động như thế nào? Họ có liên quan nhiều hơn việc lựa chọn thứ tự giảm Beta không?

Bối cảnh về sở thích của tôi: Vài tháng trước, tôi quyết định tôi muốn học toán chính thức. Tôi quyết định đi theo lý thuyết loại bởi vì từ nghiên cứu sơ bộ có vẻ như The Right Way To Do Things (tm) và bởi vì nó dường như hợp nhất lập trình và toán học rất hấp dẫn . Tôi nghĩ mục tiêu cuối cùng của tôi là có thể sử dụng và hiểu một trợ lý chứng minh như Coq (Tôi nghĩ đặc biệt là có thể sử dụng các loại phụ thuộc vì tôi tò mò về những thứ như đại diện cho các loại ma trận). Tôi bắt đầu biết rất ít, thậm chí không lập trình chức năng thô sơ, nhưng tôi đang tiến triển chậm. Tôi đã đọc và hiểu các khối lớn về Loại và Ngôn ngữ lập trình (Xỏ) và học một số Haskell và ML.


1
Đây là một quảng cáo không biết xấu hổ cho các video hướng dẫn Coq của tôi, math.andrej.com/2011/02/22/iêu
Andrej Bauer

Câu trả lời:


36

Các chiến thuật cơ bản hoặc chạy một quy tắc suy luận về phía trước hay phía sau (ví dụ, chuyển đổi giả thuyết B vào A B hoặc mục tiêu chuyển đổi A B thành hai mục tiêu MộtBABABABABvới cùng một giả thuyết), áp dụng một bổ đề (~ ứng dụng hàm), tách ra một bổ đề về một số loại quy nạp thành một trường hợp cho mỗi hàm tạo, v.v. Chiến thuật cơ bản có thể thành công hay thất bại tùy thuộc vào bối cảnh mà chúng được áp dụng. Các chiến thuật nâng cao hơn giống như các chương trình chức năng nhỏ chạy các chiến thuật cơ bản, thực hiện khớp mẫu theo các điều khoản trong mục tiêu và / hoặc giả định, đưa ra lựa chọn dựa trên thành công hay thất bại của chiến thuật, v.v. Chiến thuật tiên tiến hơn liên quan đến số học và các loại lý thuyết cụ thể khác. Bài viết chính về ngôn ngữ chiến thuật của Coq là như sau:

  • D. Delahaye. Một ngôn ngữ chiến thuật cho hệ thống Coq . Trong Kỷ yếu Logic cho lập trình và lý luận tự động (LPAR), Đảo Reunion, tập 1955 của Ghi chú bài giảng trong Khoa học máy tính, trang 85 Than95. Springer-Verlag, tháng 11 năm 2000.

Các quy tắc chính thức hình thành bản chất của các chiến thuật cơ bản được xác định trong hướng dẫn người dùng Coq tại đây hoặc trong Chương 4 của pdf .

Một bài viết khá hướng dẫn về việc thực hiện các chiến thuật và chiến thuật (về cơ bản là các chiến thuật lấy các chiến thuật khác làm đối số) là:

Ngôn ngữ chiến thuật của Coq có giới hạn là các bằng chứng được viết bằng cách sử dụng nó hầu như không giống với các bằng chứng mà người ta làm bằng tay. Một số nỗ lực đã được thực hiện để cho phép bằng chứng rõ ràng hơn. Chúng bao gồm Isar (cho Isabelle / HOL) và ngôn ngữ chứng minh của Mizar .

Ngoài ra: Bạn có biết rằng ngôn ngữ lập trình ML ban đầu được thiết kế để thực hiện các chiến thuật cho người ủng hộ định lý LCF không? Nhiều ý tưởng được phát triển cho ML, như suy luận kiểu, đã ảnh hưởng đến các ngôn ngữ lập trình hiện đại.


3
Câu trả lời chính xác. Lập trình được chứng nhận của Adam Chlipala với các loại phụ thuộc ( adam.chlipala.net/cpdt ) là một tài nguyên tốt khác về việc sử dụng các chiến thuật trong Coq.
jbapple

16

LCF thực sự là cha đẻ của tất cả các hệ thống này: Coq, Isabelle, HOLs, bao gồm cả ngôn ngữ lập trình ML (mà ngày nay chúng ta thấy là OCaml, SML, cũng là F #). Có, tôi bao gồm Coq với tư cách là thành viên của đại gia đình LCF. So với các trợ lý chứng minh Mỹ-Mỹ (đáng chú ý là ACL2) hay Mizar hoàn toàn không liên quan, Coq có văn hóa khá gần gũi với Isabelle và HOLs, chủ yếu là do ý tưởng chung về chiến thuật .

Vì vậy, chiến thuật là gì, tách khỏi các quan sát tình cờ về viết lại, chuyển đổi, giới thiệu hoặc loại bỏ các kết nối?

Nguyên tắc phân lớp chính ở đây được kế thừa từ LCF của Milner:

  • Suy luận cốt lõi (lý luận về phía trước), như là kiểu dữ liệu trừu tượng thmtrong cách tiếp cận LCF ban đầu, hoặc với việc kiểm tra riêng các thuật ngữ chứng minh trong nhánh Loại lý thuyết của gia đình (Coq, Matita). Điều này cung cấp cho bạn một nền tảng logic nhất định cho các kết quả mà người hoạt động coi là định lý. Vì vậy, bạn có thể có một suy luận nguyên thủy lấy ⊢ A và ⊢ B và cung cấp cho bạn ⊢ A B. Một suy luận nguyên thủy khác có thể cung cấp cho bạn ⊢ t = u, trong đó u là dạng beta-bình thường của t. Không có cơ chế nào trong số này là chiến thuật, mặc dù vậy, chúng là các quy tắc suy luận như trong logic tiêu chuẩn.

  • Bằng chứng hướng mục tiêu (lý luận ngược). Ý tưởng là bạn vận hành trên một số khái niệm về "trạng thái mục tiêu" bằng cách tinh chỉnh nó, chia nó thành nhiều phần tử con hơn, các phần tử con gần hơn, cho đến khi tất cả được giải quyết. Kết thúc trạng thái mục tiêu, sẽ làm cho một định lý nhất định bật ra khỏi quy trình. LCF đã giới thiệu một số cơ sở hạ tầng siêu logic nhất định cho các mục tiêu, vẫn còn đó trong HOLs: một chiến thuật là một số hàm ML tinh chỉnh mục tiêu và tạo ra một số biện minh cho việc tinh chỉnh. Trong phần cuối của bằng chứng, các biện minh được phát lại theo thứ tự ngược lại để đưa ra một bằng chứng theo cách chuyển tiếp theo các suy luận nguyên thủy được phác thảo ở trên.

Coq và Matita vẫn khá gần với nguyên tắc LCF này. Isabelle khác ở đây: đầu năm 1989, Larry Paulson đã cải tổ các khái niệm về mục tiêu và chiến thuật để làm cho chúng gần với logic hơn, đó là khuôn khổ logic "thuần túy" của Isabelle ở đây. Isabelle / Pure cung cấp logic bậc cao tối thiểu với hàm ý ==> và bộ định lượng !! trong đó chỉ ra cả cấu trúc của các quy tắc khấu trừ tự nhiên và trạng thái mục tiêu.

Ví dụ, ⊢ A ==> B ==> A B là quy tắc giới thiệu kết hợp (của logic đối tượng) làm định lý của khung logic.

Các trạng thái mục tiêu cũng chỉ là các định lý, bắt đầu bằng ⊢ C ==> C cho yêu cầu ban đầu C của bạn, được tinh chỉnh thành ⊢ X ==> Y ==> Z ==> C ở các trạng thái trung gian, trong đó X, Y, Z là các phần tử con hiện tại và quá trình kết thúc bằng ⊢ C (không có phần tử con).

Bây giờ trở lại với chiến thuật, thống nhất hơn cho tất cả các provers này: được đưa ra một số khái niệm về trạng thái mục tiêu (ví dụ như Isabelle ở trên), chiến thuật là một chức năng ánh xạ trạng thái mục tiêu theo dõi (0, 1 hoặc nhiều hơn) mục tiêu nhà nước. Hơn nữa, một chiến thuật là sự kết hợp của các chức năng chiến thuật như vậy, ví dụ để thể hiện thành phần tuần tự, lựa chọn, lặp lại, v.v. Trên thực tế, ngôn ngữ của chiến thuật và chiến thuật có liên quan đến phương pháp "danh sách thành công" của các tổ hợp trình phân tích cú pháp.

Chiến thuật cho phép mô tả các chiến lược nhất định của việc tinh chỉnh mục tiêu một cách có hệ thống. Họ đã thành công khá thành công kể từ khi phát minh ra LCF vào những năm 1970/80, nhưng họ tạo ra các kịch bản chứng minh nổi tiếng không thể đọc được.

Một tổng quan gần đây về một số khía cạnh của các ngôn ngữ chiến thuật được đưa ra trong bài báo của A. Asperti et al, PLMMS 2009, xem các thủ tục hội thảo trang 22.

Mizar và Isabelle / Isar đã được đề cập như những cách tiếp cận thay thế cho lý luận có cấu trúc có thể đọc được của con người , và chúng không dựa trên chiến thuật theo nghĩa đó. Mizar không liên quan đến gia đình LCF, vì vậy nó không biết thuật ngữ chiến thuật đó. Isabelle / Isar kết hợp truyền thống chiến thuật ở một mức độ nào đó, nhưng khái niệm phương pháp chứng minh của nó có cấu trúc hơn một chút (với bối cảnh chứng minh Isar rõ ràng, chỉ ra rõ ràng các sự kiện bị xiềng xích và tránh bị hack mục tiêu nội bộ trong quá trình suy luận).

Nhiều cải cách và xem xét lại các ngôn ngữ chiến thuật đã xảy ra trong những thập kỷ qua. Ví dụ, một chi nhánh gần đây của cộng đồng Coq ủng hộ SSReflect (của G. Gonthier) thay vì Ltac truyền thống.


12

Làm thế nào để 'chiến thuật' làm việc trong các trợ lý bằng chứng?

Tôi nghi ngờ câu trả lời này sẽ là một chút lan man.

Đầu tiên, không đủ để hỏi "chiến thuật hoạt động như thế nào trong trợ lý chứng minh" bởi vì chúng hoạt động khác nhau trong các trợ lý chứng minh khác nhau. Có hai loại trợ lý chính được sử dụng ngày nay: những người có nguồn gốc từ LCF ban đầu, như ánh sáng của Isabelle, HOL và HOL, và các trợ lý chứng minh dựa trên lý thuyết loại như Coq và Matita. Trong hai lớp trợ lý chứng minh khác nhau này, các chiến thuật hoạt động theo những cách khác nhau, một sự phản ánh rằng những gì đang diễn ra dưới nắp ca-pô, ví dụ như Isabelle hoàn toàn khác với những gì đang diễn ra dưới nắp ca-pô, ví dụ như Matita.

Hãy tự hỏi: điều gì đang xảy ra khi chúng ta cố gắng chứng minh một mệnh đề P trong Matita? Chúng tôi giới thiệu một biến thể X với loại P. Sau đó chúng tôi chơi một trò chơi, có thể nói, trong đó chúng tôi tinh chỉnh X, thêm ngày càng nhiều cấu trúc vào thuật ngữ không hoàn chỉnh, cho đến khi chúng tôi có được một thuật ngữ lambda hoàn chỉnh (nghĩa là không chứa nhiều biến thái nữa). Khi chúng tôi sở hữu một thuật ngữ lambda hoàn chỉnh, chúng tôi gõ kiểm tra nó liên quan đến P, đảm bảo nó có loại yêu cầu. Sau đó chúng ta thấy rằng trong Coq và Matita, một chiến thuật chỉ là một chức năng từ các điều khoản chứng minh không đầy đủ đến các điều khoản chứng minh không đầy đủ, hy vọng sẽ thêm một chút cấu trúc cho thuật ngữ sau khi áp dụng (quan sát này đã thúc đẩy khá nhiều công việc gần đây của Jojgov , Pientka, và những người khác).

Ví dụ: "giới thiệu" chiến thuật Matita giới thiệu một sự trừu tượng hóa lambda đối với thuật ngữ hiện có, "trường hợp" giới thiệu một biểu thức khớp trong thuật ngữ và "áp dụng" giới thiệu một ứng dụng của một thuật ngữ khác. Các chiến thuật cơ bản này có thể được xâu chuỗi lại với nhau, sử dụng các hàm bậc cao hơn, để tạo ra các chiến thuật phức tạp hơn. Ý tưởng cơ bản luôn giống nhau mặc dù: một chiến thuật luôn hướng đến việc thêm một chút cấu trúc vào một thuật ngữ chứng minh không đầy đủ.

Lưu ý rằng, những người triển khai nhằm mục đích trả lại một thuật ngữ đánh máy lại sau mỗi ứng dụng chiến thuật. Nói một cách chính xác, không có yêu cầu nào để họ làm như vậy, vì tất cả những gì quan trọng đối với các trợ lý chứng minh dựa trên lý thuyết loại là, khi người dùng đến với Qed bằng chứng, chúng tôi có một thuật ngữ chứng minh có liên quan đến mệnh đề P. đến thời hạn bằng chứng này phần lớn không liên quan. Tuy nhiên, cả Coq và Matita đều nhằm mục đích cung cấp cho người dùng một thuật ngữ bằng chứng (có thể không đầy đủ) đánh máy sau mỗi ứng dụng chiến thuật. Tuy nhiên, bất biến này có thể (và thường không) thất bại, đặc biệt là liên quan đến hai kiểm tra cú pháp mà các trợ lý chứng minh dựa trên CIC phải thực hiện.

Cụ thể, chúng tôi có thể thực hiện những gì dường như là một bằng chứng hợp lệ, áp dụng một loạt các chiến thuật cho đến khi không còn mục tiêu mở nào. Sau đó, chúng tôi đến với Qed bằng chứng được cho là, chỉ để phát hiện ra rằng trình kiểm tra chấm dứt của Matita, hoặc trình kiểm tra tính tích cực nghiêm ngặt của nó, phàn nàn, vì thuật ngữ bằng chứng được tạo ra bởi các chiến thuật đã vô hiệu hóa một trong những kiểm tra cú pháp này (nghĩa là có thể thay đổi được ở vị trí đối số một cuộc gọi đệ quy đã được khởi tạo với một thuật ngữ không nhỏ hơn về mặt cú pháp so với đối số ban đầu). Đây là một sự phản ánh rằng lý thuyết loại CIC, theo một cách nào đó, không "đủ mạnh" và không phản ánh các yêu cầu cú pháp tích cực hoặc kích thước trong các loại của nó (một quan sát thúc đẩy các loại kích thước của Abel và một số công việc gần đây về các loại tích cực ).

Mặt khác, các trợ lý chứng minh theo phong cách LCF khá khác biệt. Ở đây, kernel bao gồm một mô-đun (thường được triển khai trong một biến thể của ML), chứa một loại trừu tượng "thm" và các hàm thực hiện các quy tắc suy luận của logic trợ lý chứng minh, ánh xạ "thm" thành "thm", và vì vậy ra Chúng tôi dựa vào kỷ luật đánh máy của ML để đảm bảo rằng cách duy nhất để xây dựng giá trị của loại "thm" là thông qua các quy tắc suy luận này (chiến thuật cơ bản). Hạt nhân của Isabelle ở đây .

Bằng chứng sau đó bao gồm một loạt các ứng dụng của các chiến thuật cơ bản này (hoặc phức tạp hơn, chiến thuật lớn hơn, một lần nữa được thực hiện bằng cách kết hợp các chiến thuật đơn giản hơn bằng cách sử dụng các hàm bậc cao hơn --- trong Isabelle, các hàm bậc cao hơn, được gọi là chiến thuật, có thể được nhìn thấy ở đây ). Không giống như các trợ lý chứng minh dựa trên lý thuyết loại, không cần một trợ lý kiểu LCF để giữ một nhân chứng bằng chứng rõ ràng nằm xung quanh. Tính chính xác của bằng chứng được đảm bảo bằng cách xây dựng và sự tin tưởng của chúng tôi vào kỷ luật đánh máy của ML (tuy nhiên, nhiều trợ lý, ví dụ như Isabelle, làm, tạo ra các điều khoản bằng chứng cho bằng chứng của họ).

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.