Coqの停止問題の決定不能性を証明することは可能ですか?


23

Andrej Bauerによる「建設的な数学を受け入れる5つの段階」を見ていましたが、彼は矛盾による2種類の証明(または数学者が矛盾によって証明と呼ぶ2つのこと)があると言っています。

  1. が偽であると仮定します...何とか何とか何とか、矛盾。したがって、は真です。PP
  2. が真であると仮定します...何とか何とか何とか、矛盾。したがって、 は偽です。PP

1つ目は除外された中間の法則(LEM)と同等であり、2つ目は否定の証明方法です。

停止問題(HP)の決定不能性の証明は、矛盾による証明です。HPを決定できるマシンがあると仮定します...何とか何とか、矛盾。したがって、は存在しません。DD

したがって、を「が存在し、HPを決定できる」とします。が真であると仮定します...何とか何とか何とか、矛盾。したがって、は偽です。PDPP

これは矛盾による第2種の証明のように見えるので、Coqの停止問題の決定不能性を証明することは可能です(LEMを仮定せずに)?

編集:私は矛盾を使用してこれを証明することについていくつかのポイントを見たいと思います。これは対角化を使用しても証明できることを知っています。


2
@cody否定的な声明には矛盾が必要なのはなぜですか?または、Coqに制限していますか?
デビッドリチャービー

3
@DavidRicherby私は実際に少し誇張していますが、それは公理がない場合にのみ当てはまるからです。その場合、(カットフリーの)証明の最初の(最低の)ステップは、直観主義的な自然演deの非導入でなければなりません。公理/仮説がある場合、このステップは可逆的であるため、最初にこのステップを適用しても害はありませんが、回避できる場合もあります。
コディ

2
同じタイトルの論文について知っていますか?(そこでは、Halting Oracleが存在しないという通常の証拠は建設的であると明示的に述べていると思います。)
アンドレバウアー

1
@AndrejBauer、知りませんでした。見つけました。はい、あなたは「ハルティングオラクルが存在しないという通常の証拠は否定の建設的な証拠のさらに別の例です」と述べています。
ラファエルカストロ

1
@RafaelCastro:学部生として、あなたは良い質問をしています。私はあなたに大学生が(または少なくとも非常に多くは)以前に行ったことがない大胆に行くことを奨励しています。
アンドレイバウアー

回答:


20

それは本当にただ否定声明だ - あなたは正確に右の停止問題は「背理法」の第二種の一例であることです。

decides_halt(M)マシンMがその入力が停止するマシンであるかどうかを判断する述語であると仮定します(Mつまり、一部のマシンmと入力に対してi、入力でm停止するかどうかを判断するプログラムですi)。

それを証明する方法について少し忘れて、停止の問題は停止の問題を決定するマシンがないという声明です。私たちは、Coqのようにこれを述べるかもしれない(exists M, decides_halt M) -> False、または多分私達は、任意のマシンが停止問題を解決しないと言うことを好みますforall M, decides_halt M -> False。公理がなければ、これら2つの形式化はCoqで同等であることがわかります。(私はあなたがそれがどのように機能するかを見ることができるように証明を綴りましたfirstorderが、すべてを行います!)

Parameter machine:Type.
Parameter decides_halt : machine -> Prop.

(* Here are two ways to phrase the halting problem: *)

Definition halting_problem : Prop :=
  (exists M, decides_halt M) -> False.

Definition halting_problem' : Prop :=
  forall M, decides_halt M -> False.

Theorem statements_equivalent :
  halting_problem <-> halting_problem'.
Proof.
  unfold halting_problem, halting_problem'; split; intros.
  - exact (H (ex_intro decides_halt M H0)).
  - destruct H0.
    exact (H x H0).
Qed.

私は正式マシン、計算可能、および停止はおそらく合理的に挑戦ですが、どちらかのステートメントは、対角化引数として証明するにはあまりにも難しいことではないと思います。単純例えば、それは(参照カントールの対角化定理を証明するためにあまりにも難しいことではありませんhttps://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291をその証明のためにnat -> natnat同型ではありません)。

上記の対角化は、あなたが間に同型の矛盾を導出については行くかもしれない方法の例与えnat -> natとをnat。自己完結型の例としてインライン化されたその証明の本質は次のとおりです。

Record bijection A B :=
  {  to   : A -> B
  ; from : B -> A
  ; to_from : forall b, to (from b) = b
  ; from_to : forall a, from (to a) = a
  }.

Theorem cantor :
  bijection nat (nat -> nat) ->
  False.
Proof.
  destruct 1 as [seq index ? ?].
  (* define a function which differs from the nth sequence at the nth index *)
  pose (f := fun n => S (seq n n)).
  (* prove f differs from every sequence *)
  assert (forall n, f <> seq n). {
    unfold not; intros.
    assert (f n = seq n n) by congruence.
    subst f; cbn in H0.
    eapply n_Sn; eauto.
  }
  rewrite <- (to_from0 f) in H.
  apply (H (index f)).
  reflexivity.
Qed.

詳細を見なくても、この証明は全単射の単なる存在を取り、不可能であることを実証していることを声明から見ることができます。まず、全単射の両側に名前seqとを付けindexます。重要なのは、特別なシーケンスf := fun n => S (seq n n)とそのインデックスでの全単射の動作index fが矛盾していることです。停止問題の証明は同様に矛盾を導き出し、慎重に選択されたマシン(特に実際に想定されるマシンに依存するマシン)で停止問題を解決するマシンについての仮説を具体化します。


サイトへようこそ!ぜひご利用ください。StackExchangeの仕組みについて詳しくは、非常に短いツアーをご覧ください。
デビッドリチャービー

2
この問題は対角化引数によっても証明されることを忘れていました。あなたの答えは興味深いですが、Coqの矛盾を使用してHMを証明できるかどうかについていくつかのポイントを見たいと思います。質問でこれをより明確にします。
ラファエルカストロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.