Ist es möglich, die Unentscheidbarkeit des Halteproblems in Coq zu beweisen?


23

Ich habe die " Fünf Stufen der Akzeptanz der Konstruktiven Mathematik " von Andrej Bauer gesehen und er sagt, dass es zwei Arten von Beweisen durch Widerspruch gibt (oder zwei Dinge, die Mathematiker Beweise durch Widerspruch nennen):

  1. Angenommen, ist falsch ... bla bla bla, Widerspruch. Daher ist wahr.PPP
  2. Angenommen, ist wahr ... bla bla bla, Widerspruch. Daher ist falsch.PPP

Das erste ist äquivalent zum Gesetz der ausgeschlossenen Mitte (LEM) und das zweite ist, wie Negation zu beweisen ist.

Der Beweis der Unentscheidbarkeit des Halteproblems (HP) ist ein Beweis durch Widerspruch: Nehmen wir an, es gibt eine Maschine , die über die HP entscheiden kann ... bla bla bla, Widerspruch. Daher existiert nicht.DDD

Also sei " existiert und kann die HP bestimmen". Angenommen, ist wahr ... bla bla bla, Widerspruch. Daher ist falsch.D P PPDPP

Dies scheint die zweite Art von Widerspruchsbeweis zu sein, ist es also möglich, die Unentscheidbarkeit des Halteproblems in Coq zu beweisen (ohne die Annahme von LEM)?

EDIT: Ich würde gerne einige Punkte sehen, um dies mit Widerspruch zu beweisen. Ich weiß, dass dies auch durch Diagonalisierung nachgewiesen werden kann.


2
@cody Warum erfordert eine negative Aussage Widerspruch? Oder beschränken Sie sich auf Coq?
David Richerby

3
@DavidRicherby Ich übertreibe eigentlich ein bisschen, da das nur in Abwesenheit von Axiomen stimmt. In diesem Fall muss der erste (niedrigste) Schritt eines (schnittfreien) Beweises Not-Intro in intuitionistischer natürlicher Folgerung sein. Wenn es Axiome / Hypothesen gibt, schadet es nie, diesen Schritt zuerst anzuwenden, da er invertierbar ist, aber manchmal vermieden werden kann.
Cody

2
Sie kennen die gleichnamige Zeitung? (Ich denke dort drin erkläre ich ausdrücklich, dass der übliche Beweis für die Nichtexistenz des Orakels des Stillstands konstruktiv ist.)
Andrej Bauer

1
@AndrejBauer, ich weiß es nicht. Habe es gerade gefunden. Ja, Sie behaupten, dass "der übliche Beweis der Nichtexistenz des Orakels Halting ein weiteres Beispiel für einen konstruktiven Beweis der Verneinung ist".
Rafael Castro

1
@RafaelCastro: Als Student stellen Sie gute Fragen. Ich ermutige Sie nur, mutig dorthin zu gehen, wo noch keine Studenten (oder zumindest nicht sehr viele) gewesen sind.
Andrej Bauer

Antworten:


20

Sie haben genau Recht, dass das Stopp-Problem ein Beispiel für die zweite Art von "Beweis durch Widerspruch" ist - es ist wirklich nur eine negative Aussage.

Angenommen, es decides_halt(M)handelt sich um ein Prädikat, das besagt, dass die Maschine Mentscheidet, ob ihre Eingabe eine Maschine ist, die anhält (dh Mein Programm, das für einige Maschinen mund Eingaben ientscheidet, ob sie mbei der Eingabe anhält i).

Das Problem des Anhaltens ist die Aussage, dass es keine Maschine gibt, die über das Problem des Anhaltens entscheidet. Wir könnten dies in Coq als (exists M, decides_halt M) -> Falseangeben, oder vielleicht möchten wir lieber sagen, dass eine bestimmte Maschine das Problem des Anhaltens nicht löst forall M, decides_halt M -> False. Es stellt sich heraus, dass diese beiden Formalisierungen ohne Axiome in Coq äquivalent sind. (Ich habe den Beweis formuliert, damit Sie sehen können, wie es funktioniert, aber firstorderich werde das Ganze machen!)

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.

Ich denke, dass beide Aussagen nicht allzu schwierig als Diagonalisierungsargument zu beweisen sind, obwohl die Formalisierung von Maschinen, die Berechenbarkeit und das Anhalten wahrscheinlich eine angemessene Herausforderung darstellen. Für ein einfacheres Beispiel ist es nicht allzu schwer Cantors diagonalization Theorem (siehe zu beweisen https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 für einen Beweis dafür , dass nat -> natund natist nicht isomorph).

Die obige Diagonalisierung gibt ein Beispiel dafür, wie Sie einen Widerspruch aus einem Isomorphismus zwischen nat -> natund ableiten können nat. Hier ist das Wesentliche dieses Beweises, der als eigenständiges Beispiel angeführt wird:

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.

Auch ohne die Details zu betrachten, können wir aus der Aussage ersehen, dass dieser Beweis die bloße Existenz einer Bijektion annimmt und zeigt, dass es unmöglich ist. Zuerst geben wir den beiden Seiten der Bijektion die Namen seqund index. Der Schlüssel ist, dass das Verhalten der Bijektion bei der speziellen Sequenz f := fun n => S (seq n n)und ihrem Index index fwidersprüchlich ist. Der Beweis des Halteproblems würde auf ähnliche Weise einen Widerspruch herleiten und seine Hypothese über eine Maschine aufstellen, die das Halteproblem mit einer sorgfältig ausgewählten Maschine löst (und insbesondere eine, die tatsächlich von der angenommenen Maschine abhängt).


Willkommen auf der Seite! Ich hoffe, Sie bleiben dabei - vielleicht möchten Sie unsere kurze Tour machen , um mehr über die Funktionsweise von Stack Exchange zu erfahren.
David Richerby

2
Ich habe vergessen, dass dieses Problem auch durch ein Diagonalisierungsargument bewiesen wird. Ihre Antwort ist interessant, aber ich würde gerne einige Punkte dazu sehen, ob es möglich ist, den HM anhand eines Widerspruchs in Coq zu beweisen. Ich werde dies in der Frage klarer machen.
Rafael Castro
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.