정지 문제가 "모순으로 증명되는"두 번째 종류의 예라는 것은 정확히 맞습니다. 이것은 실제로 부정적인 진술 일뿐입니다.
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 -> nat
과 nat
동형하지 않습니다).
대각 위는 사이에 동형에서 모순을 유도 대해 이동하는 방법의 예를 제공 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)
와 그 색인 에서 bijection의 행동 index f
이 모순된다는 것입니다. 정지 문제의 증거는 비슷한 방식으로 모순을 유도하여 엄선 된 기계 (특히 실제 가정 된 기계에 의존하는 기계)로 정지 문제를 해결하는 기계에 대한 가설을 구체화합니다.