Coq에서 정지 문제의 결정 불가능 성을 증명할 수 있습니까?


23

나는 Andrej Bauer의 " 건설 수학 수용의 다섯 단계 "를보고 있었고, 모순에 의해 두 가지 종류의 증거가 있다고 말한다.

  1. 가 거짓 이라고 가정하자 . 따라서 는 사실이다.PPP
  2. 가 참 이라고 가정하자 . 따라서 는 거짓입니다.PPP

첫 번째는 제외 된 중간 법칙 (LEM)과 동일하며 두 번째는 부정을 증명하는 방법입니다.

중단 문제 (HP)의 결정 불가능성에 대한 증거는 모순에 의한 증거입니다 . HP를 결정할 수 있는 기계 가 있다고 가정 합니다. 따라서 는 존재하지 않습니다.DDD

따라서 를 " 가 존재하고 HP를 결정할 수 있습니다"라고합니다. 가 참 이라고 가정하자 . 따라서 는 거짓입니다.D P PPDPP

이것은 모순에 의한 두 번째 종류의 증거처럼 보이므로 (LEM을 가정하지 않고) Coq에서 중지 문제의 결정 불가능 성을 증명할 수 있습니까?

편집 : 모순을 사용하여 이것을 증명하는 것에 대한 몇 가지 요점을보고 싶습니다. 나는 이것이 대각선 화를 사용하여 입증 될 수 있음을 알고 있습니다.


2
@cody 왜 부정적 진술에 모순이 필요한가? 아니면 Coq로 제한하고 있습니까?
David Richerby

3
@DavidRicherby 나는 실제로 약간 과장하고 있습니다. 왜냐하면 공리가없는 경우에만 사실이기 때문입니다. 이 경우, (자유없는) 증명의 첫 번째 (가장 낮은) 단계는 직관적이지 않은 자연 공제에 대한 소개가 아니어야합니다. 공리 / 가설이있는 경우,이 단계를 돌이킬 수 없기 때문에이 단계를 먼저 적용해도 결코 아프지 않지만 때로는 피할 수 있습니다.
코디

2
제목이 같은 논문에 대해 알고 있습니까? (나는 거기서 Halting Oracle이 존재하지 않는다는 일반적인 증거는 건설적이라고 명시 적으로 밝힌다.)
Andrej Bauer

1
@ AndrejBauer, 나는 모른다. 방금 찾았어요 그렇습니다. "Halting 오라클이 존재하지 않는다는 일반적인 증거는 또 다른 부정적 증거입니다."
Rafael Castro

1
@RafaelCastro : 학부생으로서 좋은 질문을하고 있습니다. 학부생 (또는 적어도 그다지 많지 않은)이 없었던 곳에서 대담하게 가도록 격려합니다.
Andrej Bauer

답변:


20

정지 문제가 "모순으로 증명되는"두 번째 종류의 예라는 것은 정확히 맞습니다. 이것은 실제로 부정적인 진술 일뿐입니다.

decides_halt(M)기계 M가 입력을 정지시키는 기계인지 여부를 판별 하는 술어를 가정하십시오 (즉, M일부 기계 m및 입력의 i경우 m입력 정지 여부를 결정 하는 프로그램 i).

그것을 증명하는 방법에 대해 잠시 잊어 버린 정지 문제는 정지 문제를 결정하는 기계가 없다는 진술입니다. 우리는 이것을 Coq에서로 (exists M, decides_halt M) -> False언급하거나 주어진 기계가 정지 문제를 해결하지 못한다고 말할 수도 있습니다 forall M, decides_halt M -> False. 공리가 없으면이 두 공식화는 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 -> natnat. 다음은 자체 증거로 인라인 된 증거의 본질입니다.

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)와 그 색인 에서 bijection의 행동 index f이 모순된다는 것입니다. 정지 문제의 증거는 비슷한 방식으로 모순을 유도하여 엄선 된 기계 (특히 실제 가정 된 기계에 의존하는 기계)로 정지 문제를 해결하는 기계에 대한 가설을 구체화합니다.


사이트에 오신 것을 환영합니다! 스택 교환의 작동 방식에 대한 자세한 내용을 살펴 보려면 간단한 둘러보기원할 수 있습니다.
David Richerby

2
나는이 문제가 대각선 화 주장에 의해 입증된다는 것을 잊었다. 귀하의 답변은 흥미롭지 만 Coq에서 모순을 사용하여 HM을 증명할 수 있는지에 대한 몇 가지 요점을보고 싶습니다. 나는 질문에서 이것을 더 명확하게 할 것입니다.
Rafael Castro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.