任意の証明が円形であるかどうかのテスト?


13

私は証明について考えていて、興味深い観察に出会いました。そのため、証明はカリー・ハワード同型写像によるプログラムと同等であり、循環証明は無限再帰に対応します。しかし、停止する問題から、任意のプログラムが永久に再帰するかどうかを一般的にテストすることは決定できないことがわかります。カリー・ハワードによると、それは、証明が循環推論を使用するかどうかを判断できる「証明チェッカー」がないことを意味しますか?

私はいつも、証明は簡単に確認できるステップ(推論ルールの適用に対応する)で構成されると考えられていました。すべてのステップを確認することで、結論が続くという確信が得られます。しかし、今私は不思議に思っています:停止問題を回避して循環推論を検出する方法がないため、そのような証明チェッカーを書くことは実際には不可能ですか?

回答:


15

証明システムの大部分は、無限の円形証明を許可していませんが、言語をチューリング以外の完全なものにすることで許可しています。

通常の関数型言語では、プログラムを永久に実行する唯一の方法は再帰を使用することであり、理論的には、再帰をコンビ、型:つまり、他の「自己」引数を呼び出す関数を受け取り、単一の再帰関数に変換します。Ya.(aa)a

次に、これにカリー-ハワード同型を適用します。命題に対して、がそれ自体を意味する場合を証明できるという証明がます。この方法で何でも証明できます!aaa

ここで重要なのは、Yコンビネーターが言語に組み込まれていることです。これは公理と見なされます。したがって、問題が発生しないようにするには、それを公理として取り除きます。

このため、ほとんどの正式な証明システムでは、再帰を適切に確立する必要があります。停止することが証明できる機能のみを受け入れます。そして結果として、彼らは停止するプログラムを拒否しますが、それを証明することはできません。

Coqはこれをかなり限られた方法で行います。再帰関数は引数を持つ必要がありますが、再帰呼び出しは厳密に小さいバージョンの引数のみを使用します。Agdaは同様のことを行いますが、もう少しプログラムを受け入れるためにもう少し凝ったチェックをします。


1
Coqは、そうでなければ証明できる正当な定理を除外しますか?または、全体チェッカーが保守的すぎる場合の回避策は常にありますか?(答えは依存型理論に基づいた他の証明アシスタントについても同じだと思いますか?)
stovetop

1
@boyers FWIW、Coqでは、全体チェッカーが失敗した場合に一部の機能が合計であることを証明するために使用FunctionまたはProgram Fixpoint構成できます。簡単な例では、リストのマージソート機能です。リスト(長さ> 1)を厳密に小さなサブリストに分割することを手動で証明する必要があります。
アントントルーノフ

@boyersはい、Gödelの最初の定理により、Coqで証明できないことがあるはずです。実際にはそれらに遭遇することはめったにありませんが、常に対角の引数があります:CoqはCoq自体を証明することはできず、サブセット(すべての機能を含むが、再帰の程度に下限がある非常に大きなサブセット、心だけを証明できます)処理できます)。Coqの理論はペアノの公理と特定の大きな序数の存在(および、さらに大きな序数が収まらないことを示す証拠)に相当することを読んだことを覚えていますが、今は参照が見つかりません。
ジル 'SO-悪であるのをやめる'

@AntonTrunovこの文脈でProgramは、赤ニシンなどがそうです。彼らは理論を変えません。彼らが行うことは、証明にメジャーを使用するための構文シュガーです:あなたが興味を持っているオブジェクトが小さくなると推論するのではなく、間接性のレベルを追加します:他のオブジェクトを計算して(たとえばサイズ)、それを証明します小さくなります。Wfライブラリを参照してください。
ジル 'SO-悪であるのをやめる'

@Gillesコンテキストは、Coqのヒューリスティックが失敗したときなど、実用的な(具体的な)側面に関するものだと思いました...あなたが言及した論文を見つけてみてください。リンクをいただければ幸いです。
アントントルーノフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.