44 lines
1.1 KiB
Plaintext
44 lines
1.1 KiB
Plaintext
import Mathlib.Logic.Basic
|
||
import Mathlib.Data.Set.Basic
|
||
import Mathlib.Tactic.Tauto
|
||
|
||
/-! # Common.Logic.Basic
|
||
|
||
Additional theorems and definitions related to basic logic.
|
||
-/
|
||
|
||
/--
|
||
The de Morgan law that distributes negation across a conjunction.
|
||
-/
|
||
theorem not_and_de_morgan : (¬(p ∧ q)) ↔ (¬p ∨ ¬q) := by
|
||
tauto
|
||
|
||
/--
|
||
Renaming of `not_or` to indicate its relationship to de Morgan's laws.
|
||
-/
|
||
theorem not_or_de_morgan : ¬(p ∨ q) ↔ ¬p ∧ ¬q := not_or
|
||
|
||
/--
|
||
The principle of contraposition.
|
||
-/
|
||
theorem contraposition : (p → q) ↔ (¬q → ¬p) := by
|
||
apply Iff.intro
|
||
· intro h nq hp
|
||
exact absurd (h hp) nq
|
||
· intro h hp
|
||
by_contra nq
|
||
exact absurd hp (h nq)
|
||
|
||
/--
|
||
Universal quantification across nested set memberships can be commuted in either
|
||
order.
|
||
-/
|
||
theorem forall_mem_comm {X : Set α} {Y : Set β} (p : α → β → Prop)
|
||
: (∀ u ∈ X, (∀ v, v ∈ Y → p u v)) = (∀ v ∈ Y, (∀ u, u ∈ X → p u v)) := by
|
||
refine propext ?_
|
||
apply Iff.intro
|
||
· intro h v hv u hu
|
||
exact h u hu v hv
|
||
· intro h u hu v hv
|
||
exact h v hv u hu
|