È possibile dimostrare l'indecidibilità del problema di arresto in Coq?


23

Stavo guardando le " Cinque fasi dell'accettazione della matematica costruttiva " di Andrej Bauer e lui afferma che ci sono due tipi di prove per contraddizione (o due cose che i matematici chiamano prova per contraddizione):

  1. Supponiamo che sia falso ... blah blah blah, contraddizione. Pertanto P è vero.PP
  2. Supponiamo che sia vero ... blah blah blah, contraddizione. Pertanto P è falso.PP

Il primo è equivalente alla Legge del mezzo escluso (LEM) e il secondo è come dimostrare la negazione.

La prova dell'indecidibilità dell'Halting Problem (HP) è una prova per contraddizione: supponiamo che ci sia una macchina che può decidere la HP ... blah blah blah, contraddizione. PerciòDD non esiste.

Quindi, lascia che sia " D esiste e può decidere l'HP". Supponiamo che P sia vero ... blah blah blah, contraddizione. Pertanto P è falso.PDPP

Questo sembra il secondo tipo di prova per contraddizione, quindi è possibile dimostrare l'indecidibilità del problema di arresto in Coq (senza assumere LEM)?

EDIT: Vorrei vedere alcuni punti su come dimostrarlo usando la contraddizione. So che questo può essere dimostrato anche usando la diagonalizzazione.


2
@cody Perché un'affermazione negativa richiede contraddizione? O stai limitando a Coq?
David Richerby,

3
@DavidRicherby In realtà sto esagerando un po ', dal momento che è vero solo in assenza di assiomi. In tal caso, il primo (più basso) passaggio di una prova (senza taglio) deve essere Non-Intro nella deduzione naturale intuizionistica. Nel caso in cui vi siano assiomi / ipotesi, non fa mai male applicare prima questo passaggio, poiché è invertibile, ma a volte può essere evitato.
cody

2
Conosci il giornale con lo stesso titolo? (Penso che lì dentro dichiaro esplicitamente che la solita prova della non esistenza dell'Halting Oracle è costruttiva.)
Andrej Bauer,

1
@AndrejBauer, non lo so. L'ho appena trovato. Sì, affermi che "La solita prova della non esistenza dell'oracolo di Halting è l'ennesimo esempio di prova costruttiva della negazione".
Rafael Castro,

1
@RafaelCastro: come studente universitario stai facendo buone domande. Ti sto solo incoraggiando ad andare coraggiosamente dove nessuno studente universitario (o almeno non molti) è mai stato prima.
Andrej Bauer,

Risposte:


20

Hai perfettamente ragione sul fatto che l'arresto del problema sia un esempio del secondo tipo di "prova per contraddizione" - è in realtà solo un'affermazione negativa.

Supponiamo che decides_halt(M)sia un predicato che dice che la macchina Mdecide se il suo input è una macchina che si ferma (cioè Mè un programma che per qualche macchina me input i, decide se si mferma sull'input i).

Dimenticando per un momento come dimostrarlo, il problema dell'arresto è l'affermazione che non esiste una macchina che decida il problema dell'arresto. Potremmo affermarlo in Coq come (exists M, decides_halt M) -> False, o forse preferiamo dire che una determinata macchina non risolve il problema di arresto forall M, decides_halt M -> False. Si scopre che senza assiomi queste due formalizzazioni sono equivalenti in Coq. (Ho scritto la prova in modo che tu possa vedere come funziona, ma firstorderfarà tutto!)

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.

Penso che entrambe le affermazioni non siano troppo difficili da dimostrare come argomento di diagonalizzazione, sebbene formalizzare macchine, calcolabilità e fermarsi sia probabilmente ragionevolmente impegnativo. Per un esempio più semplice, non è troppo difficile provare il teorema della diagonalizzazione di Cantor (vedi https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 per una prova che nat -> natenat non sono isomorfi).

La diagonalizzazione di cui sopra fornisce un esempio di come si potrebbe fare derivando una contraddizione da un isomorfismo tra nat -> natenat . Ecco l'essenza di quella dimostrazione sottolineata come esempio autonomo:

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.

Anche senza guardare i dettagli, dall'affermazione possiamo vedere che questa prova prende la mera esistenza di una biiezione e dimostra che è impossibile. Diamo prima i due lati della biiezione i nomi seqe index. La chiave è che il comportamento della biiezione nella sequenza speciale f := fun n => S (seq n n)e nel suo indice index fè contraddittorio. La dimostrazione del problema di arresto provocherebbe una contraddizione in un modo simile, istanziando la sua ipotesi su una macchina che risolve il problema di arresto con una macchina scelta con cura (e in particolare una che dipende effettivamente dalla macchina assunta).


Benvenuti nel sito! Spero che tu rimanga in giro - potresti fare un breve tour per vedere di più su come funziona Stack Exchange.
David Richerby,

2
Ho dimenticato che questo problema è dimostrato anche da un argomento di diagonalizzazione. La tua risposta è interessante, ma vorrei vedere alcuni punti su se è possibile provare l'HM usando una contraddizione in Coq. Lo renderò più chiaro nella domanda.
Rafael Castro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.