Sets and Logic
1.3 Relations
1.3.1 The Law of the Excluded Middle
The Law of the Excluded Middle states that for any proposition $P$, either $P$, or its negation $¬ P$ is true.
If $P$ is a proposition, then $ ¬ (¬ P) ⇔ P$.
theorem not_not_P_is_P
(P : Prop) : ¬ (¬ P) ↔ P :=
split,
P : Prop
⊢ ¬¬P ↔ P
2 goals
P : Prop
⊢ ¬¬P → P
P : Prop
⊢ P → ¬¬P
intro hp,
2 goals
P : Prop
⊢ ¬¬P → P
P : Prop
⊢ P → ¬¬P
2 goals
P : Prop,
hp : ¬¬P
⊢ P
P : Prop
⊢ P → ¬¬P
apply classical.by_contradiction,
2 goals
P : Prop,
hp : ¬¬P
⊢ P
P : Prop
⊢ P → ¬¬P
2 goals
P : Prop,
hp : ¬¬P
⊢ ¬P → false
P : Prop
⊢ P → ¬¬P
intro hnp,
2 goals
P : Prop,
hp : ¬¬P
⊢ ¬P → false
P : Prop
⊢ P → ¬¬P
2 goals
P : Prop,
hp : ¬¬P,
hnp : ¬P
⊢ false
P : Prop
⊢ P → ¬¬P
contradiction,
2 goals
P : Prop,
hp : ¬¬P,
hnp : ¬P
⊢ false
P : Prop
⊢ P → ¬¬P
P : Prop
⊢ P → ¬¬P
intros hp hnp,
P : Prop
⊢ P → ¬¬P
P : Prop,
hp : P,
hnp : ¬P
⊢ false
contradiction,
P : Prop,
hp : P,
hnp : ¬P
⊢ false
no goals
Remark. Note that for many simple propositions alike the one above, LEAN is able to use automation to complete our proof. Indeed, by using the tactic $\tt{finish}$, the above proof becomes a one-liner!
If $P$ is a proposition, then $ ¬ (¬ P) ⇔ P$. (This time proven using $\tt{finish}$)
theorem not_not_P_is_P_tauto
(P : Prop) : ¬ (¬ P) ↔ P :=
finish
P : Prop
⊢ ¬¬P ↔ P
P : Prop
⊢ ¬¬P ↔ P
1.3.2 De Morgan's Laws
(1) Let $P$ and $Q$ be propositions, then $¬ (P ∨ Q) ⇔ (¬ P) ∧ (¬ Q)$
theorem demorgan_a
(P Q : Prop) : ¬ (P ∨ Q) ↔ (¬ P) ∧ (¬ Q) :=
split,
P Q : Prop
⊢ ¬(P ∨ Q) ↔ ¬P ∧ ¬Q
2 goals
P Q : Prop
⊢ ¬(P ∨ Q) → ¬P ∧ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
intro h,
2 goals
P Q : Prop
⊢ ¬(P ∨ Q) → ¬P ∧ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
2 goals
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬P ∧ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
split,
2 goals
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬P ∧ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
3 goals
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬P
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
intro hp,
3 goals
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬P
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
3 goals
P Q : Prop,
h : ¬(P ∨ Q),
hp : P
⊢ false
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
apply h,
3 goals
P Q : Prop,
h : ¬(P ∨ Q),
hp : P
⊢ false
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
3 goals
P Q : Prop,
h : ¬(P ∨ Q),
hp : P
⊢ P ∨ Q
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
left, exact hp,
3 goals
P Q : Prop,
h : ¬(P ∨ Q),
hp : P
⊢ P ∨ Q
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
2 goals
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
intro hq,
2 goals
P Q : Prop,
h : ¬(P ∨ Q)
⊢ ¬Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
2 goals
P Q : Prop,
h : ¬(P ∨ Q),
hq : Q
⊢ false
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
apply h,
2 goals
P Q : Prop,
h : ¬(P ∨ Q),
hq : Q
⊢ false
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
2 goals
P Q : Prop,
h : ¬(P ∨ Q),
hq : Q
⊢ P ∨ Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
right, exact hq,
2 goals
P Q : Prop,
h : ¬(P ∨ Q),
hq : Q
⊢ P ∨ Q
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
intros h hpq,
P Q : Prop
⊢ ¬P ∧ ¬Q → ¬(P ∨ Q)
P Q : Prop,
h : ¬P ∧ ¬Q,
hpq : P ∨ Q
⊢ false
cases h with hnp hnq,
P Q : Prop,
h : ¬P ∧ ¬Q,
hpq : P ∨ Q
⊢ false
P Q : Prop,
hpq : P ∨ Q,
hnp : ¬P,
hnq : ¬Q
⊢ false
cases hpq with hp hq,
P Q : Prop,
hpq : P ∨ Q,
hnp : ¬P,
hnq : ¬Q
⊢ false
2 goals
case or.inl
P Q : Prop,
hnp : ¬P,
hnq : ¬Q,
hp : P
⊢ false
case or.inr
P Q : Prop,
hnp : ¬P,
hnq : ¬Q,
hq : Q
⊢ false
contradiction,
2 goals
case or.inl
P Q : Prop,
hnp : ¬P,
hnq : ¬Q,
hp : P
⊢ false
case or.inr
P Q : Prop,
hnp : ¬P,
hnq : ¬Q,
hq : Q
⊢ false
case or.inr
P Q : Prop,
hnp : ¬P,
hnq : ¬Q,
hq : Q
⊢ false
contradiction,
case or.inr
P Q : Prop,
hnp : ¬P,
hnq : ¬Q,
hq : Q
⊢ false
no goals
(2) Let $P$ and $Q$ be propositions, then $¬ (P ∧ Q) ⇔ (¬ P) ∨ (¬ Q)$
theorem demorgan_b
(P Q : Prop) : ¬ (P ∧ Q) ↔ (¬ P) ∨ (¬ Q) :=
split,
P Q : Prop
⊢ ¬(P ∧ Q) ↔ ¬P ∨ ¬Q
2 goals
P Q : Prop
⊢ ¬(P ∧ Q) → ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
intro h,
2 goals
P Q : Prop
⊢ ¬(P ∧ Q) → ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
2 goals
P Q : Prop,
h : ¬(P ∧ Q)
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
cases (classical.em P) with hp hnp,
2 goals
P Q : Prop,
h : ¬(P ∧ Q)
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
3 goals
case or.inl
P Q : Prop,
h : ¬(P ∧ Q),
hp : P
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
have hnq : ¬ Q,
3 goals
case or.inl
P Q : Prop,
h : ¬(P ∧ Q),
hp : P
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
4 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P
⊢ ¬Q
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
intro hq,
4 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P
⊢ ¬Q
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
4 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q
⊢ false
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
have hpq : P ∧ Q,
4 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q
⊢ false
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
5 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q
⊢ P ∧ Q
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q,
hpq : P ∧ Q
⊢ false
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
split, exact hp, exact hq,
5 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q
⊢ P ∧ Q
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q,
hpq : P ∧ Q
⊢ false
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
4 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q,
hpq : P ∧ Q
⊢ false
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
contradiction,
4 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hq : Q,
hpq : P ∧ Q
⊢ false
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
3 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
right, exact hnq,
3 goals
P Q : Prop,
h : ¬(P ∧ Q),
hp : P,
hnq : ¬Q
⊢ ¬P ∨ ¬Q
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
2 goals
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
left, exact hnp,
2 goals
case or.inr
P Q : Prop,
h : ¬(P ∧ Q),
hnp : ¬P
⊢ ¬P ∨ ¬Q
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
intros h hpq,
P Q : Prop
⊢ ¬P ∨ ¬Q → ¬(P ∧ Q)
P Q : Prop,
h : ¬P ∨ ¬Q,
hpq : P ∧ Q
⊢ false
cases h with hnp hnq,
P Q : Prop,
h : ¬P ∨ ¬Q,
hpq : P ∧ Q
⊢ false
2 goals
case or.inl
P Q : Prop,
hpq : P ∧ Q,
hnp : ¬P
⊢ false
case or.inr
P Q : Prop,
hpq : P ∧ Q,
hnq : ¬Q
⊢ false
cases hpq with hp hq,
2 goals
case or.inl
P Q : Prop,
hpq : P ∧ Q,
hnp : ¬P
⊢ false
case or.inr
P Q : Prop,
hpq : P ∧ Q,
hnq : ¬Q
⊢ false
2 goals
P Q : Prop,
hnp : ¬P,
hp : P,
hq : Q
⊢ false
case or.inr
P Q : Prop,
hpq : P ∧ Q,
hnq : ¬Q
⊢ false
contradiction,
2 goals
P Q : Prop,
hnp : ¬P,
hp : P,
hq : Q
⊢ false
case or.inr
P Q : Prop,
hpq : P ∧ Q,
hnq : ¬Q
⊢ false
case or.inr
P Q : Prop,
hpq : P ∧ Q,
hnq : ¬Q
⊢ false
cases hpq with hp hq,
case or.inr
P Q : Prop,
hpq : P ∧ Q,
hnq : ¬Q
⊢ false
P Q : Prop,
hnq : ¬Q,
hp : P,
hq : Q
⊢ false
contradiction,
P Q : Prop,
hnq : ¬Q,
hp : P,
hq : Q
⊢ false
no goals
Excercise. As you can see, writing LEAN proofs is so much more fun than drawing truth tables! Why don't you try it out by proving $\lnot P \iff (P \implies \tt{false})$ here?
1.3.3 Transitivity of Implications, and the Contrapositive
$⇒$ is transitive, i.e. if $P$, $Q$, and $R$ are propositions, then $P ⇒ Q$ and $Q ⇒ R$ means $P ⇒ R$.
theorem imp_trans
(P Q R : Prop) : (P → Q) ∧ (Q → R) → (P → R) :=
intro h,
P Q R : Prop
⊢ (P → Q) ∧ (Q → R) → P → R
P Q R : Prop,
h : (P → Q) ∧ (Q → R)
⊢ P → R
cases h with hpq hqr,
P Q R : Prop,
h : (P → Q) ∧ (Q → R)
⊢ P → R
P Q R : Prop,
hpq : P → Q,
hqr : Q → R
⊢ P → R
intro hp,
P Q R : Prop,
hpq : P → Q,
hqr : Q → R
⊢ P → R
P Q R : Prop,
hpq : P → Q,
hqr : Q → R,
hp : P
⊢ R
exact hqr (hpq hp),
P Q R : Prop,
hpq : P → Q,
hqr : Q → R,
hp : P
⊢ R
no goals
If $P$ and $Q$ are propositions, then $(P ⇒ Q) ⇔ (¬ Q ⇒ ¬ P)$.
theorem contra
(P Q : Prop) : (P → Q) ↔ (¬ Q → ¬ P) :=
split,
P Q : Prop
⊢ P → Q ↔ ¬Q → ¬P
2 goals
P Q : Prop
⊢ (P → Q) → ¬Q → ¬P
P Q : Prop
⊢ (¬Q → ¬P) → P → Q
intros h hnq hp,
2 goals
P Q : Prop
⊢ (P → Q) → ¬Q → ¬P
P Q : Prop
⊢ (¬Q → ¬P) → P → Q
2 goals
P Q : Prop,
h : P → Q,
hnq : ¬Q,
hp : P
⊢ false
P Q : Prop
⊢ (¬Q → ¬P) → P → Q
exact hnq (h hp),
2 goals
P Q : Prop,
h : P → Q,
hnq : ¬Q,
hp : P
⊢ false
P Q : Prop
⊢ (¬Q → ¬P) → P → Q
P Q : Prop
⊢ (¬Q → ¬P) → P → Q
intros h hp,
P Q : Prop
⊢ (¬Q → ¬P) → P → Q
P Q : Prop,
h : ¬Q → ¬P,
hp : P
⊢ Q
cases (classical.em Q) with hq hnq,
P Q : Prop,
h : ¬Q → ¬P,
hp : P
⊢ Q
2 goals
case or.inl
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hq : Q
⊢ Q
case or.inr
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hnq : ¬Q
⊢ Q
exact hq,
2 goals
case or.inl
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hq : Q
⊢ Q
case or.inr
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hnq : ¬Q
⊢ Q
case or.inr
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hnq : ¬Q
⊢ Q
exfalso,
case or.inr
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hnq : ¬Q
⊢ Q
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hnq : ¬Q
⊢ false
exact h hnq hp,
P Q : Prop,
h : ¬Q → ¬P,
hp : P,
hnq : ¬Q
⊢ false
no goals
Excercise. What can we deduce if we apply the contrapositive to $\lnot Q \implies \lnot P$? Try it out here?
1.3.4 Distributivity
(1) If $P$, $Q$, and $R$ are propositions. Then, $P ∧ (Q ∨ R) ⇔ (P ∧ Q) ∨ (P ∧ R)$;
theorem dis_and_or
(P Q R : Prop) : P ∧ (Q ∨ R) ↔ (P ∧ Q) ∨ (P ∧ R) :=
split,
P Q R : Prop
⊢ P ∧ (Q ∨ R) ↔ P ∧ Q ∨ P ∧ R
2 goals
P Q R : Prop
⊢ P ∧ (Q ∨ R) → P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
rintro ⟨hp, hqr⟩,
2 goals
P Q R : Prop
⊢ P ∧ (Q ∨ R) → P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
2 goals
P Q R : Prop,
hp : P,
hqr : Q ∨ R
⊢ P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
cases hqr with hq hr,
2 goals
P Q R : Prop,
hp : P,
hqr : Q ∨ R
⊢ P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
3 goals
case or.inl
P Q R : Prop,
hp : P,
hq : Q
⊢ P ∧ Q ∨ P ∧ R
case or.inr
P Q R : Prop,
hp : P,
hr : R
⊢ P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
left, split, repeat {assumption},
3 goals
case or.inl
P Q R : Prop,
hp : P,
hq : Q
⊢ P ∧ Q ∨ P ∧ R
case or.inr
P Q R : Prop,
hp : P,
hr : R
⊢ P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
2 goals
case or.inr
P Q R : Prop,
hp : P,
hr : R
⊢ P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
right, split, repeat {assumption},
2 goals
case or.inr
P Q R : Prop,
hp : P,
hr : R
⊢ P ∧ Q ∨ P ∧ R
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
intro h,
P Q R : Prop
⊢ P ∧ Q ∨ P ∧ R → P ∧ (Q ∨ R)
P Q R : Prop,
h : P ∧ Q ∨ P ∧ R
⊢ P ∧ (Q ∨ R)
cases h with hpq hpr,
P Q R : Prop,
h : P ∧ Q ∨ P ∧ R
⊢ P ∧ (Q ∨ R)
2 goals
case or.inl
P Q R : Prop,
hpq : P ∧ Q
⊢ P ∧ (Q ∨ R)
case or.inr
P Q R : Prop,
hpr : P ∧ R
⊢ P ∧ (Q ∨ R)
cases hpq with hp hq,
2 goals
case or.inl
P Q R : Prop,
hpq : P ∧ Q
⊢ P ∧ (Q ∨ R)
case or.inr
P Q R : Prop,
hpr : P ∧ R
⊢ P ∧ (Q ∨ R)
2 goals
P Q R : Prop,
hp : P,
hq : Q
⊢ P ∧ (Q ∨ R)
case or.inr
P Q R : Prop,
hpr : P ∧ R
⊢ P ∧ (Q ∨ R)
split, assumption, left, assumption,
2 goals
P Q R : Prop,
hp : P,
hq : Q
⊢ P ∧ (Q ∨ R)
case or.inr
P Q R : Prop,
hpr : P ∧ R
⊢ P ∧ (Q ∨ R)
case or.inr
P Q R : Prop,
hpr : P ∧ R
⊢ P ∧ (Q ∨ R)
cases hpr with hp hr,
case or.inr
P Q R : Prop,
hpr : P ∧ R
⊢ P ∧ (Q ∨ R)
P Q R : Prop,
hp : P,
hr : R
⊢ P ∧ (Q ∨ R)
split, assumption, right, assumption,
P Q R : Prop,
hp : P,
hr : R
⊢ P ∧ (Q ∨ R)
no goals
(2) $P ∨ (Q ∧ R) ⇔ (P ∨ Q) ∧ (P ∨ R)$.
theorem dis_or_and
(P Q R : Prop) : P ∨ (Q ∧ R) ↔ (P ∨ Q) ∧ (P ∨ R) :=
split,
P Q R : Prop
⊢ P ∨ Q ∧ R ↔ (P ∨ Q) ∧ (P ∨ R)
2 goals
P Q R : Prop
⊢ P ∨ Q ∧ R → (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
intro h,
2 goals
P Q R : Prop
⊢ P ∨ Q ∧ R → (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
2 goals
P Q R : Prop,
h : P ∨ Q ∧ R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
cases h with hp hqr,
2 goals
P Q R : Prop,
h : P ∨ Q ∧ R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
3 goals
case or.inl
P Q R : Prop,
hp : P
⊢ (P ∨ Q) ∧ (P ∨ R)
case or.inr
P Q R : Prop,
hqr : Q ∧ R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
split, repeat {left, assumption},
3 goals
case or.inl
P Q R : Prop,
hp : P
⊢ (P ∨ Q) ∧ (P ∨ R)
case or.inr
P Q R : Prop,
hqr : Q ∧ R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
2 goals
case or.inr
P Q R : Prop,
hqr : Q ∧ R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
cases hqr with hq hr,
2 goals
case or.inr
P Q R : Prop,
hqr : Q ∧ R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
2 goals
P Q R : Prop,
hq : Q,
hr : R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
split, repeat {right, assumption},
2 goals
P Q R : Prop,
hq : Q,
hr : R
⊢ (P ∨ Q) ∧ (P ∨ R)
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
intro h,
P Q R : Prop
⊢ (P ∨ Q) ∧ (P ∨ R) → P ∨ Q ∧ R
P Q R : Prop,
h : (P ∨ Q) ∧ (P ∨ R)
⊢ P ∨ Q ∧ R
cases h with hpq hpr,
P Q R : Prop,
h : (P ∨ Q) ∧ (P ∨ R)
⊢ P ∨ Q ∧ R
P Q R : Prop,
hpq : P ∨ Q,
hpr : P ∨ R
⊢ P ∨ Q ∧ R
cases hpq with hp hq,
P Q R : Prop,
hpq : P ∨ Q,
hpr : P ∨ R
⊢ P ∨ Q ∧ R
2 goals
case or.inl
P Q R : Prop,
hpr : P ∨ R,
hp : P
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hpr : P ∨ R,
hq : Q
⊢ P ∨ Q ∧ R
cases hpr with hp hr,
2 goals
case or.inl
P Q R : Prop,
hpr : P ∨ R,
hp : P
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hpr : P ∨ R,
hq : Q
⊢ P ∨ Q ∧ R
3 goals
case or.inl
P Q R : Prop,
hp hp : P
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hp : P,
hr : R
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hpr : P ∨ R,
hq : Q
⊢ P ∨ Q ∧ R
repeat {left, assumption},
3 goals
case or.inl
P Q R : Prop,
hp hp : P
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hp : P,
hr : R
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hpr : P ∨ R,
hq : Q
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hpr : P ∨ R,
hq : Q
⊢ P ∨ Q ∧ R
cases hpr with hp hr,
case or.inr
P Q R : Prop,
hpr : P ∨ R,
hq : Q
⊢ P ∨ Q ∧ R
2 goals
case or.inl
P Q R : Prop,
hq : Q,
hp : P
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hq : Q,
hr : R
⊢ P ∨ Q ∧ R
left, assumption,
2 goals
case or.inl
P Q R : Prop,
hq : Q,
hp : P
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hq : Q,
hr : R
⊢ P ∨ Q ∧ R
case or.inr
P Q R : Prop,
hq : Q,
hr : R
⊢ P ∨ Q ∧ R
right, split, repeat {assumption},
case or.inr
P Q R : Prop,
hq : Q,
hr : R
⊢ P ∨ Q ∧ R
no goals
1.7 Sets and Propositions
(1) $\bar{X ∪ Y} = \bar{X} ∩ \bar{Y}$.
theorem de_morg_set_a (X Y : set Ω) : - (X ∪ Y) = - X ∩ - Y :=
ext,
Ω : Type u_1,
X Y : set Ω
⊢ -(X ∪ Y) = -X ∩ -Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -(X ∪ Y) ↔ x ∈ -X ∩ -Y
split,
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -(X ∪ Y) ↔ x ∈ -X ∩ -Y
2 goals
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -(X ∪ Y) → x ∈ -X ∩ -Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
dsimp, intro h,
2 goals
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -(X ∪ Y) → x ∈ -X ∩ -Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
2 goals
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : ¬(x ∈ X ∨ x ∈ Y)
⊢ x ∉ X ∧ x ∉ Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
push_neg at h,
2 goals
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : ¬(x ∈ X ∨ x ∈ Y)
⊢ x ∉ X ∧ x ∉ Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
2 goals
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ x ∉ X ∧ x ∉ Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
assumption,
2 goals
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ x ∉ X ∧ x ∉ Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
dsimp, intro h,
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -X ∩ -Y → x ∈ -(X ∪ Y)
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ ¬(x ∈ X ∨ x ∈ Y)
push_neg,
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ ¬(x ∈ X ∨ x ∈ Y)
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ x ∉ X ∧ x ∉ Y
assumption
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ x ∉ X ∧ x ∉ Y
Ω : Type u_1,
X Y : set Ω,
x : Ω,
h : x ∉ X ∧ x ∉ Y
⊢ x ∉ X ∧ x ∉ Y
(2) $\bar{X ∩ Y} = \bar{X} ∪ \bar{Y}$.
theorem de_morg_set_b (X Y : set Ω) : - (X ∩ Y) = - X ∪ - Y :=
ext, finish
Ω : Type u_1,
X Y : set Ω
⊢ -(X ∩ Y) = -X ∪ -Y
Ω : Type u_1,
X Y : set Ω,
x : Ω
⊢ x ∈ -(X ∩ Y) ↔ x ∈ -X ∪ -Y
Remark. Would you look at that! Proving the de Morgan's law with one single line. Now thats a nice proof if I ever seen one!
1.7.1 "For All" and "There Exists"
Given a propositon $P$ whose truth value is dependent on $x ∈ X$, then $∀ x ∈ X, ¬ P(x) ⇔ ¬ (∃ x ∈ X, P(x))$, and
theorem neg_exist_is_all (X : Type) (P : X → Prop) : (∀ x : X, ¬ P x) ↔ ¬ (∃ x : X, P x) :=
split,
X : Type,
P : X → Prop
⊢ (∀ (x : X), ¬P x) ↔ ¬∃ (x : X), P x
2 goals
X : Type,
P : X → Prop
⊢ (∀ (x : X), ¬P x) → (¬∃ (x : X), P x)
X : Type,
P : X → Prop
⊢ (¬∃ (x : X), P x) → ∀ (x : X), ¬P x
rintro h ⟨x, hx⟩,
2 goals
X : Type,
P : X → Prop
⊢ (∀ (x : X), ¬P x) → (¬∃ (x : X), P x)
X : Type,
P : X → Prop
⊢ (¬∃ (x : X), P x) → ∀ (x : X), ¬P x
2 goals
X : Type,
P : X → Prop,
h : ∀ (x : X), ¬P x,
x : X,
hx : P x
⊢ false
X : Type,
P : X → Prop
⊢ (¬∃ (x : X), P x) → ∀ (x : X), ¬P x
from (h x) hx,
2 goals
X : Type,
P : X → Prop,
h : ∀ (x : X), ¬P x,
x : X,
hx : P x
⊢ false
X : Type,
P : X → Prop
⊢ (¬∃ (x : X), P x) → ∀ (x : X), ¬P x
X : Type,
P : X → Prop
⊢ (¬∃ (x : X), P x) → ∀ (x : X), ¬P x
intro ha,
X : Type,
P : X → Prop
⊢ (¬∃ (x : X), P x) → ∀ (x : X), ¬P x
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x
⊢ ∀ (x : X), ¬P x
intros x hx,
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x
⊢ ∀ (x : X), ¬P x
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x
⊢ false
have : ∃ (x : X), P x,
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x
⊢ false
2 goals
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x
⊢ ∃ (x : X), P x
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x,
this : ∃ (x : X), P x
⊢ false
existsi x, assumption,
2 goals
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x
⊢ ∃ (x : X), P x
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x,
this : ∃ (x : X), P x
⊢ false
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x,
this : ∃ (x : X), P x
⊢ false
contradiction,
X : Type,
P : X → Prop,
ha : ¬∃ (x : X), P x,
x : X,
hx : P x,
this : ∃ (x : X), P x
⊢ false
no goals
$¬ (∀ x ∈ X, ¬ P(x)) ⇔ ∃ x ∈ X, P(x)$.
theorem neg_all_is_exist (X : Type) (P : X → Prop) : ¬ (∀ x : X, ¬ P x) ↔ ∃ x : X, P x :=
split,
X : Type,
P : X → Prop
⊢ (¬∀ (x : X), ¬P x) ↔ ∃ (x : X), P x
2 goals
X : Type,
P : X → Prop
⊢ (¬∀ (x : X), ¬P x) → (∃ (x : X), P x)
X : Type,
P : X → Prop
⊢ (∃ (x : X), P x) → (¬∀ (x : X), ¬P x)
{intro h,
2 goals
X : Type,
P : X → Prop
⊢ (¬∀ (x : X), ¬P x) → (∃ (x : X), P x)
X : Type,
P : X → Prop
⊢ (∃ (x : X), P x) → (¬∀ (x : X), ¬P x)
X : Type,
P : X → Prop,
h : ¬∀ (x : X), ¬P x
⊢ ∃ (x : X), P x
apply classical.by_contradiction,
X : Type,
P : X → Prop,
h : ¬∀ (x : X), ¬P x
⊢ ∃ (x : X), P x
X : Type,
P : X → Prop,
h : ¬∀ (x : X), ¬P x
⊢ (¬∃ (x : X), P x) → false
push_neg, contradiction
X : Type,
P : X → Prop,
h : ¬∀ (x : X), ¬P x
⊢ (¬∃ (x : X), P x) → false
X : Type,
P : X → Prop,
h : ¬∀ (x : X), ¬P x
⊢ (∀ (x : X), ¬P x) → false
},
X : Type,
P : X → Prop,
h : ¬∀ (x : X), ¬P x
⊢ (∀ (x : X), ¬P x) → false
X : Type,
P : X → Prop
⊢ (∃ (x : X), P x) → (¬∀ (x : X), ¬P x)
{rintro ⟨x, hx⟩ h,
X : Type,
P : X → Prop
⊢ (∃ (x : X), P x) → (¬∀ (x : X), ¬P x)
X : Type,
P : X → Prop,
h : ∀ (x : X), ¬P x,
x : X,
hx : P x
⊢ false
from (h x) hx
X : Type,
P : X → Prop,
h : ∀ (x : X), ¬P x,
x : X,
hx : P x
⊢ false
X : Type,
P : X → Prop,
h : ∀ (x : X), ¬P x,
x : X,
hx : P x
⊢ false
}
X : Type,
P : X → Prop,
h : ∀ (x : X), ¬P x,
x : X,
hx : P x
⊢ false
no goals