Чи можна довести нерозбірливість проблеми зупинки в Coq?


23

Я дивився " П’ять етапів прийняття конструктивної математики " Андрія Бауера, і він каже, що існує два види доказування суперечливістю (або дві речі, які математики називають доказом суперечливими):

  1. Припустимо, що помилково ... бла-бла-бла, суперечність. Тому P правда.ПП
  2. Припустимо, - правда ... бла-бла-бла, суперечність. Тому хибний.ПП

Перший еквівалентний Закону виключеного середини (LEM), а другий - тому, як довести заперечення.

Доказ нерозбірливості проблеми зупинки (HP) - це доказ протиріччя: припустимо, є машина яка може вирішити HP ... bla bla bla bla, протиріччя. Тому не існує.DD

Отже, нехай " існує і може вирішити HP". Припустимо, - правда ... бла-бла-бла, суперечність. Тому хибний.ПDПП

Це виглядає як другий вид доказування суперечливістю, чи можна довести нерозбірливість проблеми зупинки в Coq (не передбачаючи LEM)?

EDIT: Я хотів би побачити деякі моменти щодо доведення цього, використовуючи протиріччя. Я знаю, що це можна довести і за допомогою діагоналізації.


2
@cody Чому негативне твердження вимагає суперечності? Або ви обмежуєте Coq?
Девід Річербі

3
@DavidRicherby Я насправді трохи перебільшую, оскільки це справедливо лише за відсутності аксіом. У такому випадку першим (найнижчим) етапом доказів (без вирізання) повинен бути Не-Вступ в інтуїтивістській природній дедукції. У випадку, коли є аксіоми / гіпотези, тоді ніколи не зашкодить застосувати цей крок спочатку, оскільки він є незворотним, але іноді цього можна уникнути.
коді

2
Ви знаєте про папір із такою ж назвою? (Я думаю, що там я прямо заявляю, що звичайне доказ існування Оракула припинення є конструктивним.)
Андрій Бауер

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. Виявляється, що без жодної аксіоми ці дві формалізації у 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)та її індексі index fсуперечлива. Доказ проблеми зупинки може викликати протиріччя аналогічним чином, обґрунтовуючи її гіпотезу щодо машини, яка вирішує проблему зупинки з ретельно вибраною машиною (і зокрема, тією, яка насправді залежить від передбачуваної машини).


Ласкаво просимо на сайт! Я сподіваюсь, що ви будете триматися - ви, можливо, захочете зробити наш короткий тур, щоб дізнатися більше про те, як працює Stack Exchange.
Девід Річербі

2
Я забув, що ця проблема доводиться також аргументом діагоналізації. Ваша відповідь цікава, але я хотів би побачити деякі моменти щодо того, чи можна довести НМ за допомогою суперечності в Coq. Я зроблю це більш зрозумілим у питанні.
Рафаель Кастро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.