-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathClassical.v
65 lines (43 loc) · 1.25 KB
/
Classical.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Inductive and (P Q : Prop) : Prop :=
| conj : P -> Q -> and P Q
.
Notation "P /\ Q" := (and P Q) : type_scope.
Inductive or (P Q : Prop) : Prop :=
| orl : P -> or P Q
| orr : Q -> or P Q
.
Notation "P \/ Q" := (or P Q) : type_scope.
Inductive False : Prop := .
(* nothing can prove False . False is a inductive/type/proposition with no constructor/value/proof *)
Inductive True : Prop := truth : True.
Theorem Truth : True.
Proof. apply truth. Qed.
(*
apply :proof
true witnesses True
true proves proposition True
true is of type True
*)
Definition not (P:Prop) := P -> False.
Notation "~ x" := (not x) : type_scope.
Theorem not_False :
~ False.
Proof.
unfold not. intros H. assumption. Qed.
Definition peirce := forall P Q: Prop,
((P->Q)->P)->P.
Definition classic := forall P:Prop,
~~P -> P.
Definition excluded_middle := forall P:Prop,
P \/ ~P.
Definition de_morgan_not_and_not := forall P Q:Prop,
~(~P/\~Q) -> P\/Q.
Definition implies_to_or := forall P Q:Prop,
(P->Q) -> (~P\/Q).
Theorem peirce_to_classic : peirce -> classic.
unfold classic. unfold peirce. unfold not.
intro H. intro P. intro A. (* CONTRAPOSITIVE *)
Theorem classicals :
(*
peirce <-> classic <-> excluded_middle <-> de_morgan_not_and_not <-> implies_to_or.
*)