純粋な関数型プログラミング言語用の注釈付きの正式な検証システムはありますか?


25

ACSL(Ansi C仕様言語)は、特別なコメントが付けられたCコードの仕様であり、Cコードを正式に検証できます。

私はまだ調べていませんが、ACSL検証で使用される正式な方法はHoare Logicに似ていると思います。ただし、Haskellなどの純粋な関数型言語の場合、フォーマル検証にどのようなフォーマリズムが使用されるか想像できません。

ACSLに似たものを作った人はいますか?そうでない場合、関数型言語の仕様注釈付きスタイルのフォーマル検証に関する研究はありますか?

私は、多くの言語(Agda、イドリスなど)がサポートする依存型付けがあることを知っていますが、Haskellでは、いくつかの(判読できない?)型の奇妙なことをせずに、依存型付けは困難です。それを念頭に置いて、HaskellはAgdaやIdrisよりもはるかに優れたライブラリをサポートしているので、機能的な形式検証のためのこのようなシステムが役立つと思いますが、これについて研究が行われたかどうかはわかりません。

回答:


13

本田と吉田の

(おそらく)純粋に機能的な言語のHoareロジックを開拓した。この作業は、ここで説明するように、ヘネシー・ミルナーのロジックとプロセスへの関数のミルナーのエンコードに基づいています。

別の回答で言及されたRégis-Gianaset alによる作品は、本田/吉田による上記の最初の作品に似ています。これは、効果的なMLスタイル言語に拡張されました。

記載されているロジックは、観察的に完全と呼ばれるものであり、操作上の意味と論理的な意味が一致することを意味します。ArthurCharguéraudは、Coqで機能プログラムHoareスタイルを検証する作業にこのコンプリートを使用しました。


15

F

洗練タイプと表記法のようなACSLとの間には密接な対応があるようです。

最後に、Haskellにコンパイルでき、ユーザーに使用可能なプログラミング言語(特にIdris)を提供することを目的としているため、AgdaとIdrisを詳しく調べることをお勧めします。Haskellライブラリをあまり問題なくIdrisコードに統合することは可能だと思います。


あまり手間をかけずに -そうでもない。Idrisはデフォルトで厳格で、Haskellは怠zyです。それだけで大きな問題になります。Haskellとの互換性も、イドリスの設計にとって非常に高い優先事項ではありませんでした。
Bartek Banachewicz 14年

けっこうだ。ただし、Agdaはデフォルトで終了をチェックするため、厳密性のようなものは理論的には問題はありません。もちろん、ランタイムは劇的に異なる可能性があります。
コーディ14年


8

今年のICFPにはHaskellの改良型の論文があります。このペーパーでは、完全なHoareロジックではなく終了チェックを扱いますが、それがこの方向への出発点であることが望まれます。

その論文の関連する作業セクションには、Xu、Peyton-Jones、ClaessenのHaskell静的契約チェック、Sonnex、Drossopoulou、EisenbachのZenoとVytiniotis、Peyton-Jones、Claessen、RosenのHaloなどのポインターが含まれています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.