型システムは、外部関数の証明アシスタントとして機能できますか?


9

とすれば:

  1. 非常に表現力豊かな型システムを持つ言語(例:Idris)は、外部関数インターフェース/ unsafePerformIOのようなエスケープメカニズムを持つこともできます。
  2. これらのプロパティを表現できる型システムがない言語で書かれたプログラムのいくつかのプロパティを証明するために使用できる証明アシスタントがあります。
  3. Curry–Howardの対応は、特定の型の関数の型チェックが正常に実装されていることが、その型で表現されているものの証明であることを示しています。

母国語の型システムで外国語コードのいくつかのプロパティの自明でない証明を表現できますか?

たとえば、すでに等しい要素の順序を維持しながら数値を非常に賢く効率的な方法でソートするstable_qsortと呼ばれるC関数と、FFIを介してstable_qsortを呼び出すIdrisプログラムがあるとしますが、これは比較的あいまいですC関数。別の証明アシスタントを使用する代わりに、関数がすべての入力に対して、イドリスコードで等しい要素を並べ替えないことを証明できますか?

回答:


10

要するに、できません。外部関数はブラックボックスのようなものであり、それに帰する型はあなたがする約束です:理論に公理を追加することに対応するカリーハワード対応で。

そうは言っても、方法はいくつかあります。たとえばCoqには、C標準のさまざまな形式があります(たとえば、Robbert Krebbersの研究)。Cプログラムとそのセマンティクスを明示的に表現しているため、証明アシスタントで直接コードを記述して、そのプロパティの一部を証明することができます。

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