bookshelf/Common/Logic/Basic.lean

44 lines
1.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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