lean4-htt/library/data/set/basic.lean
2017-02-08 17:23:04 -08:00

90 lines
2.6 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2014 Jeremy Avigad. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Jeremy Avigad, Leonardo de Moura
-/
namespace set
universes u
variable {α : Type u}
lemma ext {a b : set α} (h : ∀ x, x ∈ a ↔ x ∈ b) : a = b :=
funext (take x, propext (h x))
lemma subset.refl (a : set α) : a ⊆ a := take x, assume H, H
lemma subset.trans {a b c : set α} (subab : a ⊆ b) (subbc : b ⊆ c) : a ⊆ c :=
take x, assume ax, subbc (subab ax)
lemma subset.antisymm {a b : set α} (h₁ : a ⊆ b) (h₂ : b ⊆ a) : a = b :=
ext (λ x, iff.intro (λ ina, h₁ ina) (λ inb, h₂ inb))
-- an alterantive name
lemma eq_of_subset_of_subset {a b : set α} (h₁ : a ⊆ b) (h₂ : b ⊆ a) : a = b :=
subset.antisymm h₁ h₂
lemma mem_of_subset_of_mem {s₁ s₂ : set α} {a : α} : s₁ ⊆ s₂ → a ∈ s₁ → a ∈ s₂ :=
assume h₁ h₂, h₁ h₂
lemma not_mem_empty (x : α) : ¬ (x ∈ (∅ : set α)) :=
assume h : x ∈ ∅, h
lemma mem_empty_eq (x : α) : x ∈ (∅ : set α) = false :=
rfl
lemma eq_empty_of_forall_not_mem {s : set α} (h : ∀ x, x ∉ s) : s = ∅ :=
ext (take x, iff.intro
(assume xs, absurd xs (h x))
(assume xe, absurd xe (not_mem_empty _)))
lemma ne_empty_of_mem {s : set α} {x : α} (h : x ∈ s) : s ≠ ∅ :=
begin intro hs, rewrite hs at h, apply not_mem_empty _ h end
lemma empty_subset (s : set α) : ∅ ⊆ s :=
take x, assume h, false.elim h
lemma eq_empty_of_subset_empty {s : set α} (h : s ⊆ ∅) : s = ∅ :=
subset.antisymm h (empty_subset s)
lemma union_comm (a b : set α) : a b = b a :=
ext (take x, or.comm)
lemma union_assoc (a b c : set α) : (a b) c = a (b c) :=
ext (take x, or.assoc)
instance union_is_assoc : is_associative (set α) union :=
⟨union_assoc⟩
instance union_is_comm : is_commutative (set α) union :=
⟨union_comm⟩
lemma union_self (a : set α) : a a = a :=
ext (take x, or_self _)
lemma union_empty (a : set α) : a ∅ = a :=
ext (take x, or_false _)
lemma empty_union (a : set α) : ∅ a = a :=
ext (take x, false_or _)
lemma inter_comm (a b : set α) : a ∩ b = b ∩ a :=
ext (take x, and.comm)
lemma inter_assoc (a b c : set α) : (a ∩ b) ∩ c = a ∩ (b ∩ c) :=
ext (take x, and.assoc)
instance inter_is_assoc : is_associative (set α) inter :=
⟨inter_assoc⟩
instance inter_is_comm : is_commutative (set α) union :=
⟨union_comm⟩
lemma inter_self (a : set α) : a ∩ a = a :=
ext (take x, and_self _)
lemma inter_empty (a : set α) : a ∩ ∅ = ∅ :=
ext (take x, and_false _)
lemma empty_inter (a : set α) : ∅ ∩ a = ∅ :=
ext (take x, false_and _)
end set