Доказуема ли в Coq следующая теорема? А если нет, есть ли способ доказать, что это недоказуемо?
Theorem not_for_all_is_exists:
forall (X : Set) (P : X -> Prop), ~(forall x : X, ~ P x) -> (exists x: X, P x).
Я знаю, что это родственное отношение верно:
Theorem forall_is_not_exists : (forall (X : Set) (P : X -> Prop), (forall x, ~(P x)) -> ~(exists x, P x)).
Proof.
(* This could probably be shortened, but I'm just starting out. *)
intros X P.
intros forall_x_not_Px.
unfold not.
intros exists_x_Px.
destruct exists_x_Px as [ witness proof_of_Pwitness].
pose (not_Pwitness := forall_x_not_Px witness).
unfold not in not_Pwitness.
pose (proof_of_False := not_Pwitness proof_of_Pwitness).
case proof_of_False.
Qed.
Но я не уверен, что это поможет мне без двойного отрицательного исключения. Я также поигрался с доказательством рассматриваемой теоремы, используя разные подходы, но безрезультатно. Я только изучаю Coq, так что, возможно, я просто упускаю что-то очевидное.
N.B. Мне хорошо известно, что это верно для классической логики, поэтому я не ищу доказательства, которые добавляют дополнительные аксиомы к базовой системе.