Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *   INRIA, CNRS and contributors - Copyright 1999-2018       *)
(* <O___,, *       (see CREDITS file for the list of authors)           *)
(*   \VV/  **************************************************************)
(*    //   *    This file is distributed under the terms of the         *)
(*         *     GNU Lesser General Public License Version 2.1          *)
(*         *     (see LICENSE file for the text of the license)         *)
(************************************************************************)

(* This file is a renaming for V5.10.14b, Oct 1995, of file Classical.v
   introduced in Coq V5.8.3, June 1993 *)
Classical Predicate Logic on Type
Require Import Classical_Prop.

Section Generic.
Variable U : Type.
de Morgan laws for quantifiers
U:Type

forall P : U -> Prop, ~ (forall n : U, ~ P n) -> exists n : U, P n
U:Type

forall P : U -> Prop, ~ (forall n : U, ~ P n) -> exists n : U, P n
U:Type
P:U -> Prop
notall:~ (forall n : U, ~ P n)

exists n : U, P n
U:Type
P:U -> Prop
notall:~ (forall n : U, ~ P n)

~ ~ (exists n : U, P n)
U:Type
P:U -> Prop
notall:~ (forall n : U, ~ P n)
abs:~ (exists n : U, P n)

False
U:Type
P:U -> Prop
notall:~ (forall n : U, ~ P n)
abs:~ (exists n : U, P n)

forall n : U, ~ P n
U:Type
P:U -> Prop
notall:~ (forall n0 : U, ~ P n0)
abs:~ (exists n0 : U, P n0)
n:U
H:P n

False
apply abs; exists n; exact H. Qed.
U:Type

forall P : U -> Prop, ~ (forall n : U, P n) -> exists n : U, ~ P n
U:Type

forall P : U -> Prop, ~ (forall n : U, P n) -> exists n : U, ~ P n
U:Type
P:U -> Prop
notall:~ (forall n : U, P n)

exists n : U, ~ P n
U:Type
P:U -> Prop
notall:~ (forall n : U, P n)

~ (forall n : U, ~ ~ P n)
U:Type
P:U -> Prop
notall:~ (forall n : U, P n)
all:forall n : U, ~ ~ P n

forall n : U, P n
U:Type
P:U -> Prop
notall:~ (forall n0 : U, P n0)
all:forall n0 : U, ~ ~ P n0
n:U

~ ~ P n
apply all. Qed.
U:Type

forall P : U -> Prop, ~ (exists n : U, P n) -> forall n : U, ~ P n
U:Type

forall P : U -> Prop, ~ (exists n : U, P n) -> forall n : U, ~ P n
U:Type
P:U -> Prop
notex:(exists n0 : U, P n0) -> False
n:U
abs:P n

False
U:Type
P:U -> Prop
notex:(exists n0 : U, P n0) -> False
n:U
abs:P n

exists n0 : U, P n0
exists n; trivial. Qed.
U:Type

forall P : U -> Prop, ~ (exists n : U, ~ P n) -> forall n : U, P n
U:Type

forall P : U -> Prop, ~ (exists n : U, ~ P n) -> forall n : U, P n
U:Type
P:U -> Prop
H:~ (exists n0 : U, ~ P n0)
n:U

P n
U:Type
P:U -> Prop
H:~ (exists n0 : U, ~ P n0)
n:U

~ ~ P n
red; intro K; apply H; exists n; trivial. Qed.
U:Type

forall P : U -> Prop, (exists n : U, ~ P n) -> ~ (forall n : U, P n)
U:Type

forall P : U -> Prop, (exists n : U, ~ P n) -> ~ (forall n : U, P n)
U:Type
P:U -> Prop
exnot:exists n : U, P n -> False
allP:forall n : U, P n

False
elim exnot; auto. Qed.
U:Type

forall P : U -> Prop, (forall n : U, ~ P n) -> ~ (exists n : U, P n)
U:Type

forall P : U -> Prop, (forall n : U, ~ P n) -> ~ (exists n : U, P n)
U:Type
P:U -> Prop
allnot:forall n0 : U, P n0 -> False
exP:exists n0 : U, P n0
n:U
p:P n

False
apply allnot with n; auto. Qed. End Generic.