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)         *)
(************************************************************************)

(* File created for Coq V5.10.14b, Oct 1995 *)
(* Classical tactics for proving disjunctions by Julien Narboux, Jul 2005 *)
(* Inferred proof-irrelevance and eq_rect_eq added by Hugo Herbelin, Mar 2006 *)
Classical Propositional Logic
Require Import ClassicalFacts.

Hint Unfold not: core.

Axiom classic : forall P:Prop, P \/ ~ P.


forall p : Prop, ~ ~ p -> p

forall p : Prop, ~ ~ p -> p
p:Prop
H:(p -> False) -> False

~ p -> p
intro NP; elim (H NP). Qed.
Peirce's law states P Q:Prop, ((P Q) P) P. Thanks to P, False P, it is equivalent to the following form

forall P : Prop, ((P -> False) -> P) -> P

forall P : Prop, ((P -> False) -> P) -> P
intros P H; destruct (classic P); auto. Qed.

forall P Q : Prop, ~ (P -> Q) -> P

forall P Q : Prop, ~ (P -> Q) -> P
P, Q:Prop
H:~ (P -> Q)

~ P -> False
intro; apply H; intro; absurd P; trivial. Qed.

forall P Q : Prop, ~ (P -> Q) -> ~ Q

forall P Q : Prop, ~ (P -> Q) -> ~ Q
tauto. Qed.

forall P Q : Prop, (P -> Q) -> ~ P \/ Q

forall P Q : Prop, (P -> Q) -> ~ P \/ Q
intros; elim (classic P); auto. Qed.

forall P Q : Prop, ~ (P -> Q) -> P /\ ~ Q

forall P Q : Prop, ~ (P -> Q) -> P /\ ~ Q
P, Q:Prop
H:~ (P -> Q)

P
P, Q:Prop
H:~ (P -> Q)
~ Q
P, Q:Prop
H:~ (P -> Q)

~ Q
apply not_imply_elim2 with P; trivial. Qed.

forall P Q : Prop, ~ P \/ Q -> P -> Q

forall P Q : Prop, ~ P \/ Q -> P -> Q
tauto. Qed.

forall P Q : Prop, ~ (P /\ Q) -> ~ P \/ ~ Q

forall P Q : Prop, ~ (P /\ Q) -> ~ P \/ ~ Q
intros; elim (classic P); auto. Qed.

forall P Q : Prop, ~ P \/ ~ Q -> ~ (P /\ Q)

forall P Q : Prop, ~ P \/ ~ Q -> ~ (P /\ Q)
simple induction 1; red; simple induction 2; auto. Qed.

forall P Q : Prop, ~ (P \/ Q) -> ~ P /\ ~ Q

forall P Q : Prop, ~ (P \/ Q) -> ~ P /\ ~ Q
tauto. Qed.

forall P Q : Prop, ~ P /\ ~ Q -> ~ (P \/ Q)

forall P Q : Prop, ~ P /\ ~ Q -> ~ (P \/ Q)
tauto. Qed.

forall P Q : Prop, (P -> Q) -> P \/ Q -> Q

forall P Q : Prop, (P -> Q) -> P \/ Q -> Q
tauto. Qed.

forall P Q R : Prop, (P -> Q) -> P \/ R -> Q \/ R

forall P Q R : Prop, (P -> Q) -> P \/ R -> Q \/ R
tauto. Qed.

forall (P : Prop) (p1 p2 : P), p1 = p2
Proof proof_irrelevance_cci classic. (* classical_left transforms |- A \/ B into ~B |- A *) (* classical_right transforms |- A \/ B into ~A |- B *) Ltac classical_right := match goal with |- ?X \/ _ => (elim (classic X);intro;[left;trivial|right]) end. Ltac classical_left := match goal with |- _ \/ ?X => (elim (classic X);intro;[right;trivial|left]) end. Require Export EqdepFacts. Module Eq_rect_eq.

forall (U : Type) (p : U) (Q : U -> Type) (x : Q p) (h : p = p), x = eq_rect p Q x p h

forall (U : Type) (p : U) (Q : U -> Type) (x : Q p) (h : p = p), x = eq_rect p Q x p h
intros; rewrite proof_irrelevance with (p1:=h) (p2:=eq_refl p); reflexivity. Qed. End Eq_rect_eq. Module EqdepTheory := EqdepTheory(Eq_rect_eq). Export EqdepTheory.