Có bất kỳ hệ thống xác minh chính thức chú thích cho các ngôn ngữ lập trình chức năng thuần túy?


25

ACSL (Ngôn ngữ đặc tả Ansi C), là một đặc tả cho mã C, được chú thích với các nhận xét đặc biệt, cho phép mã C được xác minh chính thức.

Tôi chưa nhìn vào nó, nhưng tôi tưởng tượng rằng các phương thức chính thức được sử dụng trong trình xác minh ACSL sẽ tương tự như Hoare Logic. Đối với các ngôn ngữ chức năng thuần túy, chẳng hạn như Haskell, tôi không thể tưởng tượng loại hình chính thức nào sẽ được sử dụng để xác minh chính thức.

Có ai đã làm một cái gì đó tương tự như ACSL , nhưng đối với một ngôn ngữ chức năng thuần túy? Nếu không, đã có nghiên cứu nào về xác minh chính thức kiểu chú thích đặc tả cho các ngôn ngữ chức năng chưa?

Tôi biết rằng có kiểu gõ phụ thuộc, có nhiều ngôn ngữ (Agda, Idris, v.v.) hỗ trợ, nhưng việc gõ phụ thuộc Haskell rất khó mà không thực hiện một số thuật sĩ (không đọc được?). Với ý nghĩ đó, và vì Haskell có hỗ trợ thư viện tốt hơn Agda và Idris rất nhiều, tôi tin rằng một hệ thống xác minh chính thức chức năng như vậy có thể hữu ích, nhưng tôi không biết liệu nghiên cứu đã được thực hiện hay chưa.

Câu trả lời:


13

Honda và Yoshida

(có lẽ) tiên phong về logic Hoare cho các ngôn ngữ hoàn toàn chức năng. Công việc này dựa trên logic Hennessy-Milner và mã hóa các chức năng của Milner thành các quy trình, như được mô tả ở đây:

Công trình của Régis-Gianas et al đã đề cập trong một câu trả lời khác tương tự như công trình đầu tiên ở trên của Honda / Yoshida. Điều này đã được mở rộng sang các ngôn ngữ kiểu ML hiệu quả:

Các logic được đề cập là những gì được gọi là hoàn thành quan sát, có nghĩa là hoạt động và ngữ nghĩa logic trùng khớp. Arthur Chargeuéraud đã sử dụng bản hoàn chỉnh này cho công việc của mình để xác minh các chương trình chức năng theo kiểu Hoare trong Coq.


15

Bạn có thể muốn kiểm tra Liquid Haskell , cho phép làm việc với các sàng lọc loại hơn là các loại phụ thuộc. Các sàng lọc kiểu có thể được xem như một ngôn ngữ logic bị hạn chế cho phép bạn thể hiện các thuộc tính kiểu Hoare của cư dân của các kiểu dữ liệu khác nhau. Một ứng cử viên khác có thể là ngôn ngữ , cung cấp các cấu trúc tương tự.F*

Dường như có một sự tương ứng chặt chẽ giữa các loại sàng lọc và ACSL giống như các ký hiệu.

Cuối cùng tôi chỉ có thể đề nghị xem xét kỹ hơn về Agda và Idris, vì họ có thể biên dịch thành Haskell, và nhằm mục đích cung cấp cho người dùng một ngôn ngữ lập trình có thể sử dụng (đặc biệt là Idris). Tôi nghi ngờ có thể tích hợp các thư viện Haskell vào mã Idris mà không gặp quá nhiều khó khăn.


không có quá nhiều rắc rối - không thực sự. Idris là nghiêm ngặt theo mặc định, và Haskell là lười biếng; điều đó một mình đặt ra như một vấn đề lớn. Khả năng tương thích với Haskell cũng chưa bao giờ là ưu tiên cao đối với thiết kế Idris.
Bartek Banachewicz

Đủ công bằng. Agda kiểm tra việc chấm dứt theo mặc định, vì vậy những thứ như sự nghiêm ngặt không phải là vấn đề trong lý thuyết . Tất nhiên thời gian chạy có thể khác nhau đáng kể.
cody


8

Có một bài báo trong ICFP năm nay , các loại sàng lọc cho Haskell . Bài viết đề cập đến việc kiểm tra chấm dứt thay vì logic Hoare đầy đủ, nhưng hy vọng đó là sự khởi đầu theo hướng này.

Phần công việc liên quan trong bài báo có chứa một số gợi ý, chẳng hạn như Xu, Peyton-Jones, và Claessen của việc kiểm tra hợp đồng tĩnh cho Haskell , và Sonnex, Drossopoulou, và Aisenbach của Zeno và Vytiniotis, Peyton-Jones, Claessen, và Rosen của Halo .


1

Công việc của chúng tôi về xác minh hợp đồng mềm có liên quan, tại OOPSLA 2012ICFP 2014 , cho phép bạn viết hợp đồng, rất giống với thông số kỹ thuật ACSL, và sau đó xác minh tĩnh chúng hoặc sử dụng chúng kiểm tra động khi chạy.

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.