Я смотрел « Пять этапов принятия конструктивной математики » Андрея Бауэра, и он говорит, что существует два вида доказательств от противного (или две вещи, которые математики называют доказательством от противного):
- Предположим, что является ложным ... бла-бла-бла, противоречие. Следовательно, верно.П
- Предположим, что это правда ... бла-бла-бла, противоречие. Следовательно, ложно.П
Первый из них эквивалентен Закону исключенного среднего (LEM), а второй - как доказать отрицание.
Доказательство неразрешимости проблемы остановки (HP) является доказательством от противного: предположим, что существует машина которая может решить HP ... бла-бла-бла, противоречие. Следовательно, не существует.D
Итак, пусть будет " существует и может решать HP". Предположим, что это правда ... бла-бла-бла, противоречие. Следовательно, ложно.D P P
Это похоже на второй тип доказательства от противного, поэтому можно доказать неразрешимость проблемы остановки в Coq (без предположения LEM)?
РЕДАКТИРОВАТЬ: Я хотел бы увидеть некоторые моменты о доказательстве этого с помощью противоречия. Я знаю, что это также можно доказать с помощью диагонализации.
источник
Ответы:
Вы совершенно правы, что проблема остановки является примером второго типа «доказательства от противоречия» - это на самом деле просто отрицательное утверждение.
Предположим,
decides_halt(M)
есть предикат, который говорит, что машинаM
решает, является ли ее ввод машиной, которая останавливает (то есть,M
является ли программа, которая для некоторой машиныm
и вводаi
, решает,m
останавливается ли вводi
).Забыв на мгновение о том, как это доказать, проблема остановки - это утверждение, что нет машины, которая решает проблему остановки. Мы можем указать это в Coq как
(exists M, decides_halt M) -> False
, или, может быть, мы предпочитаем сказать, что любая машина не решает проблему остановкиforall M, decides_halt M -> False
. Оказывается, что без каких-либо аксиом эти две формализации эквивалентны в Coq. (Я изложил доказательства, чтобы вы могли видеть, как это работает, ноfirstorder
сделаю все это!)Я думаю, что любое утверждение не слишком сложно доказать в качестве аргумента диагонализации, хотя формализация машин, вычислимость и остановка, вероятно, достаточно сложны. Для более простого примера, это не так уж трудно доказать теорему диагонализации Кантора (см https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 для доказательства этого
nat -> nat
иnat
не изоморфны).Диагонализация, приведенная выше, дает пример того, как вы можете получить противоречие из изоморфизма между
nat -> nat
иnat
. Вот суть этого доказательства в виде отдельного примера:Даже не глядя на детали, мы можем видеть из утверждения, что это доказательство принимает простое существование биекции и демонстрирует, что это невозможно. Сначала мы даем две стороны биекции имена
seq
иindex
. Ключевым является то, что поведение биекции в специальной последовательностиf := fun n => S (seq n n)
и ее индексindex f
противоречивы. Доказательство проблемы остановки могло бы привести к противоречию аналогичным образом, создавая свою гипотезу о машине, которая решает проблему остановки с помощью тщательно выбранной машины (и, в частности, той, которая фактически зависит от предполагаемой машины).источник