Tại sao Trình kiểm tra bằng chứng được yêu cầu trong Mã mang theo bằng chứng


9

Trong bài báo PLDI'98 cổ điển của Necula, "Thiết kế và triển khai trình biên dịch chứng nhận", trình xác minh cấp cao sử dụng:

  1. VCGen để tạo điều kiện xác minh (vị từ an toàn)
  2. Định lý logic thứ nhất để chứng minh các điều kiện
  3. Trình kiểm tra bằng chứng LF để kiểm tra bằng chứng từ bước (2)

Tôi hơi bối rối bởi bước (3). Tại sao nó lại được yêu cầu? Sẽ chỉ (1) và (2) không đủ? Tại sao chúng ta không tin vào bằng chứng được tạo ra bởi một người hoạt động theo định lý?

Câu trả lời:


19

Mục đích của trình kiểm tra bằng chứng là để giảm thiểu cơ sở tính toán đáng tin cậy .

Bằng cách có một trình kiểm tra bằng chứng, cả trình biên dịch lẫn trình chiếu định lý đều không cần phải đúng. Bài viết đưa ra quan điểm này trên Trang 3:

Neither the compiler nor the prover need to be correct in order to be guaranteed to   
detect incorrect compiler output. This is a significant advantage since the VCGen and  
the  proof checker are significantly simpler than the compiler and the prover.

Trình kiểm tra bằng chứng chỉ là một vài dòng mã và có thể được kiểm tra bằng tay cho chính xác. Ngược lại, một prover tự động hoạt động tốt là cực kỳ phức tạp và khó có thể đúng, mặc dù với các prover được kiểm tra tốt và được sử dụng rộng rãi, các lỗi sẽ nằm trong các trường hợp cạnh có thể không dễ kích hoạt. Hãy xem mã LỘC 30k tạo nên Lingeling , một trình giải SAT hiện đại để xem các trình xử lý định lý tự động phức tạp như thế nào. Nếu không có trình kiểm tra bằng chứng, bạn sẽ phải chứng minh chính xác câu tục ngữ đó. Điều này là vượt quá những gì chúng ta có thể làm về kinh tế trong năm 2015.


Tôi ngạc nhiên rằng bằng chứng được xây dựng bởi ATP có thể là lỗi. (Tôi nghĩ rằng ATP có thể không đầy đủ nhưng không phải là không có lỗi / lỗi) Tôi ít được thông báo ở đây. Tôi sẽ rất vui nếu biết có bất kỳ trường hợp nào đã biết về những sai lầm đắt giá trong các bằng chứng do ATP tạo ra.
Ram

3
@Ram Có hàng ngàn lỗi âm thanh nhỏ trong lịch sử của bất kỳ câu tục ngữ định lý tự động nghiêm trọng nào. Xem ví dụ stackoverflow.com/questions/12281085/ và lịch sử sửa đổi của bất kỳ công cụ nào như vậy trên github.
cody

@Ram Ngoài lời khuyên tuyệt vời của Cody, tôi khuyên bạn nên học hỏi kinh nghiệm: viết một chút ATP như một người giải SAT cơ bản. Điều đó có thể được thực hiện trong một vài dòng mã. Sau đó thử và làm cho nó hoạt động tốt bằng cách thêm ví dụ học mệnh đề, xem nghĩa đen hoặc heuristic lựa chọn biến thú vị. Sau đó suy nghĩ về trải nghiệm ...
Martin Berger
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.