Làm thế nào là khó để giảm chấm dứt đến đúng một phần?


14

Nếu bạn quen thuộc với xác minh chương trình, bạn có thể thích đọc Câu hỏi trước Nền . Nếu bạn không quen với việc xác minh chương trình thì bạn vẫn có thể trả lời câu hỏi này, nhưng bạn có thể thích đọc Nền trước.

Lý lịch

Người ta thường nói rằng kiểm tra tính đúng đắn một phần là không thể giải quyết được. Để thảo luận, chúng ta hãy chọn một cách rất đặc biệt để đưa ra tuyên bố này chính xác, theo phong cách của Floyd - Hoare. Một sơ đồ là một sơ đồ với một nút ban đầu được phân biệt từ đó tất cả các nút có thể truy cập được. Một chương trình là một sơ đồ có các nút là các lệnh. Có ba loại lệnh (1) giả định giả định q , (2) xác nhận khẳng định q và (3) phép gán v: = e. Ở đây q là một công thức fol (logic thứ nhất), e là một thuật ngữ fol và v là một biến.

Chúng tôi nói rằng một chương trình đúng một phần khi có cách chú thích từng nút x với điều kiện tiên quyết a (x) và điều kiện b (x) sao cho (1) điều kiện tiên quyết của nút ban đầu là hợp lệ, (2) { a (x) } x { b (x) } giữ cho tất cả các lệnh x và (3) ( b (x) ngụ ý a (y) ) là hợp lệ cho tất cả các cạnh từ x đến y . Ở đây bộ ba Hoare được định nghĩa như sau:

  • { p } khẳng định q { r } có nghĩa là ( p ngụ ý ( qr )) là hợp lệ
  • { p } giả sử q { r } có nghĩa là (( pq ) ngụ ý r ) là hợp lệ
  • { p } v: = e { r } có nghĩa là (( p với e thay thế cho v ) ngụ ý r ) là hợp lệ

Dưới đây là một cuộc tranh luận tay lượn sóng của lý do tại sao việc kiểm tra này đúng đắn một phần là undecidable: Khi bạn điền vào một số a (x) và một số b (x) bạn cần phải kiểm tra xem một số công thức fol có giá trị, và đó là undecidable.

Một cách điển hình để mã hóa chấm dứt theo đúng một phần là thêm một số xác nhận đặc biệt mà về cơ bản là "kể từ lần cuối tôi bị xử tử, đã có tiến trình chấm dứt." Các xác nhận tiến trình này phải được đặt sao cho tất cả các bước đi vô hạn trên sơ đồ khối (bắt đầu tại nút ban đầu) chứa vô số các xác nhận tiến trình. Để cụ thể hơn, giả sử rằng các xác nhận tiến trình luôn có dạng khẳng định u < v , trong đó uv là các số nguyên dương, đứng trước phép gán u : = f và được theo sau bởi phép gán v : = u . Ở đây f là mộthàm biến thể , u là giá trị hiện tại của nó và v là giá trị cũ của nó. Bây giờ, vì chúng ta nói về "số nguyên dương" và chúng ta so sánh chúng, chúng ta cần đảm bảo rằng có nhiều hơn một chút so với fol: giả sử số học Peano có sẵn. (Tôi không cảm thấy mạnh mẽ về lựa chọn này. Hãy thoải mái bỏ qua nếu thuận tiện.) Tất nhiên, f có thể sử dụng bất kỳ chức năng và hằng số nào khác được đề cập trong chương trình. (Lưu ý rằng việc thêm các giả định vào đầu chương trình tương đương với việc đưa ra các tiên đề phi logic.)

Bây giờ, nếu chương trình với các xác nhận tiến độ vẫn đúng một phần, thì chúng ta biết rằng chương trình gốc chấm dứt.

Câu hỏi

Đưa ra một chương trình chấm dứt, nó cảm thấy rằng việc đưa ra các chức năng biến thể để xác nhận tiến trình là khó khăn. Nhưng làm thế nào khó? (Tôi biết rằng ngay cả với nền tảng lớn ở trên, tôi vẫn để loại câu hỏi mở này hoặc không xác định, tùy thuộc vào cách bạn muốn xem xét nó.)

Nói cách khác: tôi đang tìm một tài liệu tham khảo chính thức hóa vấn đề giảm chấm dứt thành đúng một phần và sau đó nói điều gì đó về sự phức tạp của nó. Một câu trả lời mà tất cả điều này tất nhiên sẽ được hoan nghênh.


Hãy để tôi kiểm tra xem tôi hiểu điều này. Những gì bạn đang yêu cầu sẽ cung cấp cho chúng tôi, trong số những thứ khác, một thuật toán lấy một chương trình tính tổng hàm đệ quy và đưa ra bằng chứng về một tuyên bố rằng hàm đó là tổng (dưới dạng các hàm biến thể và bằng chứng rằng chúng phù hợp )? Điều đó nghe thật khủng khiếp đối với tôi.
Andrej Bauer

Andrej, nó nghe có vẻ không thể so sánh được với tôi. Những gì tôi đang yêu cầu là một bằng chứng cho thấy nó không thể tính được.
Radu GRIGore

Câu trả lời:


7

Một cách để trả lời điều này là xem xét độ phức tạp tính toán của các vấn đề quyết định đối với các lớp truy vấn chính xác và truy vấn chấm dứt được biết là có thể quyết định được. Giải thích trừu tượng bằng cách sử dụng miền đa diện có thể suy ra các chú thích chính xác một phần mà bạn đề cập trong trường hợp các chú thích cần thiết là liên từ của bất đẳng thức tuyến tính. Tính toán điều kiện hậu trừu tượng là theo cấp số nhân của số lượng biến. Sau đó là chi phí tìm điểm cố định. Xem các giấy tờ sớm của Cousot để biết thêm về điều này và thư viện Tạp dề nếu bạn muốn chơi trực tiếp với nó.

Tìm các hàm biến thể là có thể quyết định khi các hàm biến thể là tuyến tính. Tôi không thể tìm thấy một đặc điểm hoàn chỉnh về sự phức tạp của điều này, nhưng "Chấm dứt các chương trình tuyến tính" của Tiwari có một phần thảo luận về sự phức tạp. Xem thêm "Phương pháp hoàn chỉnh để tổng hợp các chức năng xếp hạng tuyến tính" của Podelski và Rybalchenko. Ngoài ra, Byron Cook đã thực hiện công việc tận dụng sự giải thích trừu tượng để giúp xây dựng các đối số chấm dứt. Xem, ví dụ: "Tóm tắt xếp hạng" và "Phân tích phương sai từ phân tích bất biến". Những điều này có thể cung cấp cái nhìn sâu sắc hơn nữa về mối quan hệ giữa tính chính xác một phần và chấm dứt.

Liên kết:


1
Tôi hy vọng bạn không phiền khi tôi chỉnh sửa câu trả lời của bạn và làm cho các liên kết hoạt động.
Andrej Bauer

4

Có một sự giảm rõ ràng từ việc không chấm dứt cần thiết thành sự đúng đắn một phần, cụ thể là:

P không bao giờ chấm dứt khi bắt đầu vào một trạng thái ban đầu thỏa mãn φ iff { φ } P {false} là hợp lệ.

Tôi biết rằng đây là một câu trả lời khác. Ưu điểm của nó là ngắn hơn những cái trên.


3

Tất nhiên, có một công nghệ tiêu chuẩn - thường là không thể giải quyết được - để đưa vào biểu đồ của bạn các điều kiện trước và sau điều kiện, cụ thể là ngữ nghĩa tự do yếu nhất , là một dạng ngữ nghĩa biến đổi dự đoán mang lại các điều kiện tiên quyết yếu nhất cho sự hài lòng của đặc tả hoặc không hủy diệt. Đây thực chất là một lý thuyết hoàn chỉnh về tính đúng đắn một phần cho các ngôn ngữ như vậy, và, thực sự, hoàn toàn chính xác

Đó là phấn và pho mát quyết định chấm dứt và chính xác một phần là nơi làm việc chăm chỉ, vì cả hai đều rất tệ không thể giải quyết được. Nhưng tính chính xác một phần bị vướng vào các vấn đề thiết kế ngôn ngữ, cả về ngôn ngữ chương trình và đặc tả, trong khi khó khăn trong việc chấm dứt là một loại rõ ràng: đối với bất kỳ lý thuyết nào được sử dụng để chứng minh chấm dứt sẽ có thuật toán chấm dứt, nhưng kết luận được chứng minh là chấm dứt tương đối theo lý thuyết đó. Ví dụ, các tính toán trong phép tính lambda đa hình thuần túy phải chấm dứt, nhưng số học Peano không thể chứng minh điều này.

Ấn tượng của tôi là công việc giải thích trừu tượng do Patrick Cousot tiên phong, là người năng động nhất trong lĩnh vực này, nhưng tôi không giả vờ là một chuyên gia.


Tôi đã cố gắng hỏi về sự phức tạp của các chức năng biến thể suy luận. Xin lỗi vì không được rõ ràng! Vì tò mò, Rustan Leino đã đưa ra một ví dụ tối qua (trong một quán rượu) gợi ý cho tôi rằng wlp không hoạt động tốt như wp & sp cho các loại chương trình tôi mô tả ở đây. Tôi sẽ phải kiểm tra lại khi tôi đến một nơi phù hợp hơn cho công việc :)
Radu GRIGore

@Radu: Đã có công việc được thực hiện trên bằng chứng chấm dứt tự động, với một số công việc tuyệt vời đang được thực hiện cho Prolog. Tôi có thể đào một số ref khi tôi tìm thấy thời gian.
Charles Stewart
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.