В руководстве по Lean «Теорема, доказывающая по Lean» я читал: «С помощью классических аксиом мы можем доказать, что каждое предложение разрешимо».
Я хотел бы получить разъяснения по поводу этого утверждения, и я задавая вопрос на форуме Coq, так как этот вопрос относится как к Coq, так и к Lean (но я чувствую, что здесь у меня больше шансов получить ответ).
Читая «С классическими аксиомами», я понимаю, что у нас есть что-то эквивалентное закону исключенного среднего:
Axiom LEM : forall (p:Prop), p \/ ~p.
Читая «каждое предложение разрешимо», я понимаю, что мы можем определить функцию (или, по крайней мере, мы можем доказать существование такой функции ):
Definition decide (p:Prop) : Dec p.
, где Dec
- это семейство индуктивных типов:
Inductive Dec (p:Prop) : Type :=
| isFalse : ~p -> Dec p
| isTrue : p -> Dec p
.
Тем не менее, с помощью того, что я знаю о Coq, я не могу реализовать decide
, поскольку не могу уничтожить (LEM p)
(вроде Prop
), чтобы вернуть что-то отличное от Prop
.
Поэтому мой вопрос таков: предполагая, что в этом нет ошибки, и утверждение «С классическими аксиомами мы можем доказать, что когда-либо «Предложение правдоподобно» - это оправдано, я хотел бы знать, как я должен это понимать, чтобы выйти из выдвинутого мною парадокса. Может быть, мы можем доказать существование функции decide
(используя LEM
), но на самом деле не можем предоставить свидетельство этого существования?