2023-05-23 15:18:23 +00:00
|
|
|
|
import Mathlib.Data.Set.Basic
|
|
|
|
|
import Mathlib.Data.Set.Lattice
|
|
|
|
|
|
|
|
|
|
import Bookshelf.Enderton.Set.Chapter_1
|
2023-05-23 21:38:33 +00:00
|
|
|
|
import Common.Logic.Basic
|
2023-05-23 15:18:23 +00:00
|
|
|
|
import Common.Set.Basic
|
|
|
|
|
|
|
|
|
|
/-! # Enderton.Chapter_2
|
|
|
|
|
|
|
|
|
|
Axioms and Operations
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
namespace Enderton.Set.Chapter_2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.1
|
|
|
|
|
|
|
|
|
|
Assume that `A` is the set of integers divisible by `4`. Similarly assume that
|
|
|
|
|
`B` and `C` are the sets of integers divisible by `9` and `10`, respectively.
|
|
|
|
|
What is in `A ∩ B ∩ C`?
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_1 {A B C : Set ℤ}
|
|
|
|
|
(hA : A = { x | Dvd.dvd 4 x })
|
|
|
|
|
(hB : B = { x | Dvd.dvd 9 x })
|
|
|
|
|
(hC : C = { x | Dvd.dvd 10 x })
|
|
|
|
|
: ∀ x ∈ (A ∩ B ∩ C), (4 ∣ x) ∧ (9 ∣ x) ∧ (10 ∣ x) := by
|
|
|
|
|
intro x h
|
|
|
|
|
rw [Set.mem_inter_iff] at h
|
|
|
|
|
have ⟨⟨ha, hb⟩, hc⟩ := h
|
|
|
|
|
refine ⟨?_, ⟨?_, ?_⟩⟩
|
|
|
|
|
· rw [hA] at ha
|
|
|
|
|
exact Set.mem_setOf.mp ha
|
|
|
|
|
· rw [hB] at hb
|
|
|
|
|
exact Set.mem_setOf.mp hb
|
|
|
|
|
· rw [hC] at hc
|
|
|
|
|
exact Set.mem_setOf.mp hc
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.2
|
|
|
|
|
|
|
|
|
|
Give an example of sets `A` and `B` for which `⋃ A = ⋃ B` but `A ≠ B`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_2 {A B : Set (Set ℕ)}
|
|
|
|
|
(hA : A = {{1}, {2}}) (hB : B = {{1, 2}})
|
|
|
|
|
: Set.sUnion A = Set.sUnion B ∧ A ≠ B := by
|
|
|
|
|
apply And.intro
|
|
|
|
|
· show ⋃₀ A = ⋃₀ B
|
|
|
|
|
ext x
|
|
|
|
|
show (∃ t, t ∈ A ∧ x ∈ t) ↔ ∃ t, t ∈ B ∧ x ∈ t
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro ⟨t, ⟨ht, hx⟩⟩
|
|
|
|
|
rw [hA] at ht
|
|
|
|
|
refine ⟨{1, 2}, ⟨by rw [hB]; simp, ?_⟩⟩
|
|
|
|
|
apply Or.elim ht <;>
|
|
|
|
|
· intro ht'
|
|
|
|
|
rw [ht'] at hx
|
|
|
|
|
rw [hx]
|
|
|
|
|
simp
|
|
|
|
|
· intro ⟨t, ⟨ht, hx⟩⟩
|
|
|
|
|
rw [hB] at ht
|
|
|
|
|
rw [ht] at hx
|
|
|
|
|
apply Or.elim hx
|
|
|
|
|
· intro hx'
|
|
|
|
|
exact ⟨{1}, ⟨by rw [hA]; simp, by rw [hx']; simp⟩⟩
|
|
|
|
|
· intro hx'
|
|
|
|
|
exact ⟨{2}, ⟨by rw [hA]; simp, by rw [hx']; simp⟩⟩
|
|
|
|
|
· show A ≠ B
|
|
|
|
|
-- Find an element that exists in `B` but not in `A`. Extensionality
|
|
|
|
|
-- concludes the proof.
|
|
|
|
|
intro h
|
|
|
|
|
rw [hA, hB, Set.ext_iff] at h
|
|
|
|
|
have h₁ := h {1, 2}
|
|
|
|
|
simp at h₁
|
|
|
|
|
rw [Set.ext_iff] at h₁
|
|
|
|
|
have h₂ := h₁ 2
|
|
|
|
|
simp at h₂
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.3
|
|
|
|
|
|
|
|
|
|
Show that every member of a set `A` is a subset of `U A`. (This was stated as an
|
|
|
|
|
example in this section.)
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_3 {A : Set (Set α)}
|
2023-06-20 21:02:09 +00:00
|
|
|
|
: ∀ x ∈ A, x ⊆ ⋃₀ A := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
intro x hx
|
|
|
|
|
show ∀ y ∈ x, y ∈ { a | ∃ t, t ∈ A ∧ a ∈ t }
|
|
|
|
|
intro y hy
|
|
|
|
|
rw [Set.mem_setOf_eq]
|
|
|
|
|
exact ⟨x, ⟨hx, hy⟩⟩
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.4
|
|
|
|
|
|
|
|
|
|
Show that if `A ⊆ B`, then `⋃ A ⊆ ⋃ B`.
|
|
|
|
|
-/
|
2023-06-10 18:09:24 +00:00
|
|
|
|
theorem exercise_3_4 {A B : Set (Set α)} (h : A ⊆ B) : ⋃₀ A ⊆ ⋃₀ B := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
show ∀ x ∈ { a | ∃ t, t ∈ A ∧ a ∈ t }, x ∈ { a | ∃ t, t ∈ B ∧ a ∈ t }
|
|
|
|
|
intro x hx
|
|
|
|
|
rw [Set.mem_setOf_eq] at hx
|
|
|
|
|
have ⟨t, ⟨ht, hxt⟩⟩ := hx
|
|
|
|
|
rw [Set.mem_setOf_eq]
|
|
|
|
|
exact ⟨t, ⟨h ht, hxt⟩⟩
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.5
|
|
|
|
|
|
|
|
|
|
Assume that every member of `𝓐` is a subset of `B`. Show that `⋃ 𝓐 ⊆ B`.
|
|
|
|
|
-/
|
2023-06-10 18:09:24 +00:00
|
|
|
|
theorem exercise_3_5 {𝓐 : Set (Set α)} (h : ∀ x ∈ 𝓐, x ⊆ B)
|
|
|
|
|
: ⋃₀ 𝓐 ⊆ B := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
show ∀ y ∈ { a | ∃ t, t ∈ 𝓐 ∧ a ∈ t }, y ∈ B
|
|
|
|
|
intro y hy
|
|
|
|
|
rw [Set.mem_setOf_eq] at hy
|
|
|
|
|
have ⟨t, ⟨ht𝓐, hyt⟩⟩ := hy
|
|
|
|
|
exact (h t ht𝓐) hyt
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.6a
|
|
|
|
|
|
|
|
|
|
Show that for any set `A`, `⋃ 𝓟 A = A`.
|
|
|
|
|
-/
|
2023-06-04 23:34:42 +00:00
|
|
|
|
theorem exercise_3_6a : ⋃₀ (𝒫 A) = A := by
|
|
|
|
|
show { a | ∃ t, t ∈ { t | t ⊆ A } ∧ a ∈ t } = A
|
2023-05-23 15:18:23 +00:00
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
rw [Set.mem_setOf_eq] at hx
|
|
|
|
|
have ⟨t, ⟨htl, htr⟩⟩ := hx
|
|
|
|
|
rw [Set.mem_setOf_eq] at htl
|
|
|
|
|
exact htl htr
|
|
|
|
|
· intro hx
|
|
|
|
|
rw [Set.mem_setOf_eq]
|
|
|
|
|
exact ⟨A, ⟨by rw [Set.mem_setOf_eq], hx⟩⟩
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.6b
|
|
|
|
|
|
|
|
|
|
Show that `A ⊆ 𝓟 ⋃ A`. Under what conditions does equality hold?
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_6b
|
2023-06-04 23:34:42 +00:00
|
|
|
|
: A ⊆ 𝒫 (⋃₀ A)
|
|
|
|
|
∧ (A = 𝒫 (⋃₀ A) ↔ ∃ B, A = 𝒫 B) := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
apply And.intro
|
2023-06-04 23:34:42 +00:00
|
|
|
|
· show ∀ x ∈ A, x ∈ { t | t ⊆ ⋃₀ A }
|
2023-05-23 15:18:23 +00:00
|
|
|
|
intro x hx
|
|
|
|
|
rw [Set.mem_setOf]
|
|
|
|
|
exact exercise_3_3 x hx
|
|
|
|
|
· apply Iff.intro
|
|
|
|
|
· intro hA
|
|
|
|
|
exact ⟨⋃₀ A, hA⟩
|
|
|
|
|
· intro ⟨B, hB⟩
|
|
|
|
|
conv => rhs; rw [hB, exercise_3_6a]
|
|
|
|
|
exact hB
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.7a
|
|
|
|
|
|
|
|
|
|
Show that for any sets `A` and `B`, `𝓟 A ∩ 𝓟 B = 𝓟 (A ∩ B)`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_7A
|
2023-06-04 23:34:42 +00:00
|
|
|
|
: 𝒫 A ∩ 𝒫 B = 𝒫 (A ∩ B) := by
|
|
|
|
|
suffices 𝒫 A ∩ 𝒫 B ⊆ 𝒫 (A ∩ B) ∧ 𝒫 (A ∩ B) ⊆ 𝒫 A ∩ 𝒫 B from
|
2023-05-23 15:18:23 +00:00
|
|
|
|
subset_antisymm this.left this.right
|
|
|
|
|
apply And.intro
|
|
|
|
|
· unfold Set.powerset
|
|
|
|
|
intro x hx
|
|
|
|
|
simp only [Set.mem_inter_iff, Set.mem_setOf_eq] at hx
|
|
|
|
|
rwa [Set.mem_setOf, Set.subset_inter_iff]
|
|
|
|
|
· unfold Set.powerset
|
|
|
|
|
simp
|
|
|
|
|
intro x hA _
|
|
|
|
|
exact hA
|
|
|
|
|
|
|
|
|
|
-- theorem false_of_false_iff_true : (false ↔ true) → false := by simp
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.7b (i)
|
|
|
|
|
|
|
|
|
|
Show that `𝓟 A ∪ 𝓟 B ⊆ 𝓟 (A ∪ B)`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_7b_i
|
2023-06-04 23:34:42 +00:00
|
|
|
|
: 𝒫 A ∪ 𝒫 B ⊆ 𝒫 (A ∪ B) := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
unfold Set.powerset
|
|
|
|
|
intro x hx
|
|
|
|
|
simp at hx
|
|
|
|
|
apply Or.elim hx
|
|
|
|
|
· intro hA
|
|
|
|
|
rw [Set.mem_setOf_eq]
|
|
|
|
|
exact Set.subset_union_of_subset_left hA B
|
|
|
|
|
· intro hB
|
|
|
|
|
rw [Set.mem_setOf_eq]
|
|
|
|
|
exact Set.subset_union_of_subset_right hB A
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.7b (ii)
|
|
|
|
|
|
|
|
|
|
Under what conditions does `𝓟 A ∪ 𝓟 B = 𝓟 (A ∪ B)`.?
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_7b_ii
|
2023-06-04 23:34:42 +00:00
|
|
|
|
: 𝒫 A ∪ 𝒫 B = 𝒫 (A ∪ B) ↔ A ⊆ B ∨ B ⊆ A := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
unfold Set.powerset
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro h
|
|
|
|
|
by_contra nh
|
2023-05-23 21:38:33 +00:00
|
|
|
|
rw [not_or_de_morgan] at nh
|
2023-05-23 15:18:23 +00:00
|
|
|
|
have ⟨a, hA⟩ := Set.not_subset.mp nh.left
|
|
|
|
|
have ⟨b, hB⟩ := Set.not_subset.mp nh.right
|
|
|
|
|
rw [Set.ext_iff] at h
|
|
|
|
|
have hz := h {a, b}
|
|
|
|
|
-- `hz` states that `{a, b} ⊆ A ∨ {a, b} ⊆ B ↔ {a, b} ⊆ A ∪ B`. We show the
|
|
|
|
|
-- left-hand side is false but the right-hand side is true, yielding our
|
|
|
|
|
-- contradiction.
|
|
|
|
|
suffices ¬({a, b} ⊆ A ∨ {a, b} ⊆ B) by
|
|
|
|
|
have hz₁ : a ∈ A ∪ B := by
|
|
|
|
|
rw [Set.mem_union]
|
|
|
|
|
exact Or.inl hA.left
|
|
|
|
|
have hz₂ : b ∈ A ∪ B := by
|
|
|
|
|
rw [Set.mem_union]
|
|
|
|
|
exact Or.inr hB.left
|
|
|
|
|
exact absurd (hz.mpr $ Set.mem_mem_imp_pair_subset hz₁ hz₂) this
|
|
|
|
|
intro hAB
|
|
|
|
|
exact Or.elim hAB
|
|
|
|
|
(fun y => absurd (y $ show b ∈ {a, b} by simp) hB.right)
|
|
|
|
|
(fun y => absurd (y $ show a ∈ {a, b} by simp) hA.right)
|
|
|
|
|
· intro h
|
|
|
|
|
ext x
|
|
|
|
|
apply Or.elim h
|
|
|
|
|
· intro hA
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
exact Or.elim hx
|
|
|
|
|
(Set.subset_union_of_subset_left · B)
|
|
|
|
|
(Set.subset_union_of_subset_right · A)
|
|
|
|
|
· intro hx
|
|
|
|
|
refine Or.inr (Set.Subset.trans hx ?_)
|
|
|
|
|
exact subset_of_eq (Set.left_subset_union_eq_self hA)
|
|
|
|
|
· intro hB
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
exact Or.elim hx
|
|
|
|
|
(Set.subset_union_of_subset_left · B)
|
|
|
|
|
(Set.subset_union_of_subset_right · A)
|
|
|
|
|
· intro hx
|
|
|
|
|
refine Or.inl (Set.Subset.trans hx ?_)
|
|
|
|
|
exact subset_of_eq (Set.right_subset_union_eq_self hB)
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.9
|
|
|
|
|
|
|
|
|
|
Give an example of sets `a` and `B` for which `a ∈ B` but `𝓟 a ∉ 𝓟 B`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_3_9 (ha : a = {1}) (hB : B = {{1}})
|
2023-06-04 23:34:42 +00:00
|
|
|
|
: a ∈ B ∧ 𝒫 a ∉ 𝒫 B := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
apply And.intro
|
|
|
|
|
· rw [ha, hB]
|
|
|
|
|
simp
|
|
|
|
|
· intro h
|
2023-06-04 23:34:42 +00:00
|
|
|
|
have h₁ : 𝒫 a = {∅, {1}} := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
rw [ha]
|
|
|
|
|
exact Set.powerset_singleton 1
|
2023-06-04 23:34:42 +00:00
|
|
|
|
have h₂ : 𝒫 B = {∅, {{1}}} := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
rw [hB]
|
|
|
|
|
exact Set.powerset_singleton {1}
|
|
|
|
|
rw [h₁, h₂] at h
|
|
|
|
|
simp at h
|
|
|
|
|
apply Or.elim h
|
|
|
|
|
· intro h
|
|
|
|
|
rw [Set.ext_iff] at h
|
|
|
|
|
have := h ∅
|
|
|
|
|
simp at this
|
|
|
|
|
· intro h
|
|
|
|
|
rw [Set.ext_iff] at h
|
|
|
|
|
have := h 1
|
|
|
|
|
simp at this
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 3.10
|
|
|
|
|
|
|
|
|
|
Show that if `a ∈ B`, then `𝓟 a ∈ 𝓟 𝓟 ⋃ B`.
|
|
|
|
|
-/
|
2023-06-10 18:09:24 +00:00
|
|
|
|
theorem exercise_3_10 {B : Set (Set α)} (ha : a ∈ B)
|
2023-06-04 23:34:42 +00:00
|
|
|
|
: 𝒫 a ∈ 𝒫 (𝒫 (⋃₀ B)) := by
|
2023-05-23 15:18:23 +00:00
|
|
|
|
have h₁ := exercise_3_3 a ha
|
|
|
|
|
have h₂ := Chapter_1.exercise_1_3 h₁
|
|
|
|
|
generalize hb : 𝒫 (⋃₀ B) = b
|
|
|
|
|
conv => rhs; unfold Set.powerset
|
|
|
|
|
rw [← hb, Set.mem_setOf_eq]
|
|
|
|
|
exact h₂
|
|
|
|
|
|
2023-05-23 21:38:33 +00:00
|
|
|
|
/-- ### Exercise 4.11 (i)
|
|
|
|
|
|
|
|
|
|
Show that for any sets `A` and `B`, `A = (A ∩ B) ∪ (A - B)`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_11_i {A B : Set α}
|
|
|
|
|
: A = (A ∩ B) ∪ (A \ B) := by
|
2023-06-04 23:34:42 +00:00
|
|
|
|
show A = fun a => A a ∧ B a ∨ A a ∧ ¬B a
|
2023-05-23 21:38:33 +00:00
|
|
|
|
suffices ∀ x, (A x ∧ (B x ∨ ¬B x)) = A x by
|
|
|
|
|
conv => rhs; ext x; rw [← and_or_left, this]
|
|
|
|
|
intro x
|
|
|
|
|
refine propext ?_
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
exact hx.left
|
|
|
|
|
· intro hx
|
|
|
|
|
exact ⟨hx, em (B x)⟩
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.11 (ii)
|
|
|
|
|
|
|
|
|
|
Show that for any sets `A` and `B`, `A ∪ (B - A) = A ∪ B`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_11_ii {A B : Set α}
|
|
|
|
|
: A ∪ (B \ A) = A ∪ B := by
|
2023-06-04 23:34:42 +00:00
|
|
|
|
show (fun a => A a ∨ B a ∧ ¬A a) = fun a => A a ∨ B a
|
2023-05-23 21:38:33 +00:00
|
|
|
|
suffices ∀ x, ((A x ∨ B x) ∧ (A x ∨ ¬A x)) = (A x ∨ B x) by
|
|
|
|
|
conv => lhs; ext x; rw [or_and_left, this x]
|
|
|
|
|
intro x
|
|
|
|
|
refine propext ?_
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
exact hx.left
|
|
|
|
|
· intro hx
|
|
|
|
|
exact ⟨hx, em (A x)⟩
|
|
|
|
|
|
|
|
|
|
section
|
|
|
|
|
|
|
|
|
|
variable {A B C : Set ℕ}
|
|
|
|
|
|
|
|
|
|
variable {hA : A = {1, 2, 3}}
|
|
|
|
|
variable {hB : B = {2, 3, 4}}
|
|
|
|
|
variable {hC : C = {3, 4, 5}}
|
|
|
|
|
|
|
|
|
|
lemma right_diff_eq_insert_one_three : A \ (B \ C) = {1, 3} := by
|
|
|
|
|
rw [hA, hB, hC]
|
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
unfold SDiff.sdiff Set.instSDiffSet Set.diff at hx
|
|
|
|
|
unfold Membership.mem Set.instMembershipSet Set.Mem setOf at hx
|
|
|
|
|
unfold insert Set.instInsertSet Set.insert setOf at hx
|
|
|
|
|
have ⟨ha, hb⟩ := hx
|
|
|
|
|
rw [not_and_de_morgan, not_or_de_morgan] at hb
|
|
|
|
|
simp only [Set.mem_singleton_iff, not_not] at hb
|
|
|
|
|
refine Or.elim ha Or.inl ?_
|
|
|
|
|
intro hy
|
|
|
|
|
apply Or.elim hb
|
|
|
|
|
· intro hz
|
|
|
|
|
exact Or.elim hy (absurd · hz.left) Or.inr
|
|
|
|
|
· intro hz
|
|
|
|
|
refine Or.elim hz Or.inr ?_
|
|
|
|
|
intro hz₁
|
|
|
|
|
apply Or.elim hy <;> apply Or.elim hz₁ <;>
|
|
|
|
|
· intro hz₂ hz₃
|
|
|
|
|
rw [hz₂] at hz₃
|
|
|
|
|
simp at hz₃
|
|
|
|
|
· intro hx
|
|
|
|
|
unfold SDiff.sdiff Set.instSDiffSet Set.diff
|
|
|
|
|
unfold Membership.mem Set.instMembershipSet Set.Mem setOf
|
|
|
|
|
unfold insert Set.instInsertSet Set.insert setOf
|
|
|
|
|
apply Or.elim hx
|
|
|
|
|
· intro hy
|
|
|
|
|
refine ⟨Or.inl hy, ?_⟩
|
|
|
|
|
intro hz
|
|
|
|
|
rw [hy] at hz
|
|
|
|
|
unfold Membership.mem Set.instMembershipSet Set.Mem at hz
|
|
|
|
|
unfold singleton Set.instSingletonSet Set.singleton setOf at hz
|
|
|
|
|
simp only at hz
|
|
|
|
|
· intro hy
|
|
|
|
|
refine ⟨Or.inr (Or.inr hy), ?_⟩
|
|
|
|
|
intro hz
|
|
|
|
|
have hzr := hz.right
|
|
|
|
|
rw [not_or_de_morgan] at hzr
|
|
|
|
|
exact absurd hy hzr.left
|
|
|
|
|
|
|
|
|
|
lemma left_diff_eq_singleton_one : (A \ B) \ C = {1} := by
|
|
|
|
|
rw [hA, hB, hC]
|
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
unfold SDiff.sdiff Set.instSDiffSet Set.diff at hx
|
|
|
|
|
unfold Membership.mem Set.instMembershipSet Set.Mem setOf at hx
|
|
|
|
|
unfold insert Set.instInsertSet Set.insert setOf at hx
|
|
|
|
|
have ⟨⟨ha, hb⟩, hc⟩ := hx
|
|
|
|
|
rw [not_or_de_morgan] at hb hc
|
|
|
|
|
apply Or.elim ha
|
|
|
|
|
· simp
|
|
|
|
|
· intro hy
|
|
|
|
|
apply Or.elim hy
|
|
|
|
|
· intro hz
|
|
|
|
|
exact absurd hz hb.left
|
|
|
|
|
· intro hz
|
|
|
|
|
exact absurd hz hc.left
|
|
|
|
|
· intro hx
|
|
|
|
|
refine ⟨⟨Or.inl hx, ?_⟩, ?_⟩ <;>
|
|
|
|
|
· intro hy
|
|
|
|
|
cases hy with
|
|
|
|
|
| inl y => rw [hx] at y; simp at y
|
|
|
|
|
| inr hz => cases hz with
|
|
|
|
|
| inl y => rw [hx] at y; simp at y
|
|
|
|
|
| inr y => rw [hx] at y; simp at y
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.14
|
|
|
|
|
|
|
|
|
|
Show by example that for some sets `A`, `B`, and `C`, the set `A - (B - C)` is
|
|
|
|
|
different from `(A - B) - C`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_14 : A \ (B \ C) ≠ (A \ B) \ C := by
|
|
|
|
|
rw [
|
|
|
|
|
@right_diff_eq_insert_one_three A B C hA hB hC,
|
|
|
|
|
@left_diff_eq_singleton_one A B C hA hB hC
|
|
|
|
|
]
|
|
|
|
|
intro h
|
|
|
|
|
rw [Set.ext_iff] at h
|
|
|
|
|
have := h 3
|
|
|
|
|
simp at this
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
2023-06-04 23:34:42 +00:00
|
|
|
|
/-- ### Exercise 4.16
|
|
|
|
|
|
|
|
|
|
Simplify:
|
|
|
|
|
`[(A ∪ B ∪ C) ∩ (A ∪ B)] - [(A ∪ (B - C)) ∩ A]`
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_16 {A B C : Set α}
|
|
|
|
|
: ((A ∪ B ∪ C) ∩ (A ∪ B)) \ ((A ∪ (B \ C)) ∩ A) = B \ A := by
|
|
|
|
|
calc ((A ∪ B ∪ C) ∩ (A ∪ B)) \ ((A ∪ (B \ C)) ∩ A)
|
|
|
|
|
_ = (A ∪ B) \ ((A ∪ (B \ C)) ∩ A) := by rw [Set.union_inter_cancel_left]
|
|
|
|
|
_ = (A ∪ B) \ A := by rw [Set.union_inter_cancel_left]
|
|
|
|
|
_ = B \ A := by rw [Set.union_diff_left]
|
|
|
|
|
|
|
|
|
|
/-! ### Exercise 4.17
|
|
|
|
|
|
|
|
|
|
Show that the following four conditions are equivalent.
|
|
|
|
|
|
|
|
|
|
(a) `A ⊆ B`
|
|
|
|
|
(b) `A - B = ∅`
|
|
|
|
|
(c) `A ∪ B = B`
|
|
|
|
|
(d) `A ∩ B = A`
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
theorem exercise_4_17_i {A B : Set α} (h : A ⊆ B)
|
|
|
|
|
: A \ B = ∅ := by
|
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
exact absurd (h hx.left) hx.right
|
|
|
|
|
· intro hx
|
|
|
|
|
exact False.elim hx
|
|
|
|
|
|
|
|
|
|
theorem exercise_4_17_ii {A B : Set α} (h : A \ B = ∅)
|
|
|
|
|
: A ∪ B = B := by
|
|
|
|
|
suffices A ⊆ B from Set.left_subset_union_eq_self this
|
|
|
|
|
show ∀ t, t ∈ A → t ∈ B
|
|
|
|
|
intro t ht
|
|
|
|
|
rw [Set.ext_iff] at h
|
|
|
|
|
by_contra nt
|
|
|
|
|
exact (h t).mp ⟨ht, nt⟩
|
|
|
|
|
|
|
|
|
|
theorem exercise_4_17_iii {A B : Set α} (h : A ∪ B = B)
|
|
|
|
|
: A ∩ B = A := by
|
|
|
|
|
suffices A ⊆ B from Set.inter_eq_left_iff_subset.mpr this
|
|
|
|
|
exact Set.union_eq_right_iff_subset.mp h
|
|
|
|
|
|
|
|
|
|
theorem exercise_4_17_iv {A B : Set α} (h : A ∩ B = A)
|
|
|
|
|
: A ⊆ B := Set.inter_eq_left_iff_subset.mp h
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.19
|
|
|
|
|
|
|
|
|
|
Is `𝒫 (A - B)` always equal to `𝒫 A - 𝒫 B`? Is it ever equal to `𝒫 A - 𝒫 B`?
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_19 {A B : Set α}
|
|
|
|
|
: 𝒫 (A \ B) ≠ (𝒫 A) \ (𝒫 B) := by
|
|
|
|
|
intro h
|
|
|
|
|
have he : ∅ ∈ 𝒫 (A \ B) := by simp
|
|
|
|
|
have ne : ∅ ∉ (𝒫 A) \ (𝒫 B) := by simp
|
|
|
|
|
rw [Set.ext_iff] at h
|
|
|
|
|
have := h ∅
|
|
|
|
|
exact absurd (this.mp he) ne
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.20
|
|
|
|
|
|
|
|
|
|
Let `A`, `B`, and `C` be sets such that `A ∪ B = A ∪ C` and `A ∩ B = A ∩ C`.
|
|
|
|
|
Show that `B = C`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_20 {A B C : Set α}
|
|
|
|
|
(hu : A ∪ B = A ∪ C) (hi : A ∩ B = A ∩ C) : B = C := by
|
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hB
|
|
|
|
|
by_cases hA : x ∈ A
|
|
|
|
|
· have : x ∈ A ∩ B := Set.mem_inter hA hB
|
|
|
|
|
rw [hi] at this
|
|
|
|
|
exact this.right
|
|
|
|
|
· have : x ∈ A ∪ B := Set.mem_union_right A hB
|
|
|
|
|
rw [hu] at this
|
|
|
|
|
exact Or.elim this (absurd · hA) (by simp)
|
|
|
|
|
· intro hC
|
|
|
|
|
by_cases hA : x ∈ A
|
|
|
|
|
· have : x ∈ A ∩ C := Set.mem_inter hA hC
|
|
|
|
|
rw [← hi] at this
|
|
|
|
|
exact this.right
|
|
|
|
|
· have : x ∈ A ∪ C := Set.mem_union_right A hC
|
|
|
|
|
rw [← hu] at this
|
|
|
|
|
exact Or.elim this (absurd · hA) (by simp)
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.21
|
|
|
|
|
|
|
|
|
|
Show that `⋃ (A ∪ B) = (⋃ A) ∪ (⋃ B)`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_21 {A B : Set (Set α)}
|
|
|
|
|
: ⋃₀ (A ∪ B) = (⋃₀ A) ∪ (⋃₀ B) := by
|
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
have ⟨t, ht⟩ : ∃ t, t ∈ A ∪ B ∧ x ∈ t := hx
|
|
|
|
|
apply Or.elim ht.left
|
|
|
|
|
· intro hA
|
|
|
|
|
exact Or.inl ⟨t, ⟨hA, ht.right⟩⟩
|
|
|
|
|
· intro hB
|
|
|
|
|
exact Or.inr ⟨t, ⟨hB, ht.right⟩⟩
|
|
|
|
|
· intro hx
|
|
|
|
|
apply Or.elim hx
|
|
|
|
|
· intro hA
|
|
|
|
|
have ⟨t, ht⟩ : ∃ t, t ∈ A ∧ x ∈ t := hA
|
|
|
|
|
exact ⟨t, ⟨Set.mem_union_left B ht.left, ht.right⟩⟩
|
|
|
|
|
· intro hB
|
|
|
|
|
have ⟨t, ht⟩ : ∃ t, t ∈ B ∧ x ∈ t := hB
|
|
|
|
|
exact ⟨t, ⟨Set.mem_union_right A ht.left, ht.right⟩⟩
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.22
|
|
|
|
|
|
|
|
|
|
Show that if `A` and `B` are nonempty sets, then `⋂ (A ∪ B) = ⋂ A ∩ ⋂ B`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_22 {A B : Set (Set α)}
|
|
|
|
|
: ⋂₀ (A ∪ B) = ⋂₀ A ∩ ⋂₀ B := by
|
|
|
|
|
ext x
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
have : ∀ t : Set α, t ∈ A ∪ B → x ∈ t := hx
|
|
|
|
|
show (∀ t : Set α, t ∈ A → x ∈ t) ∧ (∀ t : Set α, t ∈ B → x ∈ t)
|
|
|
|
|
rw [← forall_and]
|
|
|
|
|
intro t
|
|
|
|
|
exact ⟨
|
|
|
|
|
fun ht => this t (Set.mem_union_left B ht),
|
|
|
|
|
fun ht => this t (Set.mem_union_right A ht)
|
|
|
|
|
⟩
|
|
|
|
|
· intro hx
|
|
|
|
|
have : ∀ t : Set α, (t ∈ A → x ∈ t) ∧ (t ∈ B → x ∈ t) := by
|
|
|
|
|
have : (∀ t : Set α, t ∈ A → x ∈ t) ∧ (∀ t : Set α, t ∈ B → x ∈ t) := hx
|
|
|
|
|
rwa [← forall_and] at this
|
|
|
|
|
show ∀ (t : Set α), t ∈ A ∪ B → x ∈ t
|
|
|
|
|
intro t ht
|
|
|
|
|
apply Or.elim ht
|
|
|
|
|
· intro hA
|
|
|
|
|
exact (this t).left hA
|
|
|
|
|
· intro hB
|
|
|
|
|
exact (this t).right hB
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.24a
|
|
|
|
|
|
|
|
|
|
Show that is `𝓐` is nonempty, then `𝒫 (⋂ 𝓐) = ⋂ { 𝒫 X | X ∈ 𝓐 }`.
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_24a {𝓐 : Set (Set α)}
|
|
|
|
|
: 𝒫 (⋂₀ 𝓐) = ⋂₀ { 𝒫 X | X ∈ 𝓐 } := by
|
|
|
|
|
calc 𝒫 (⋂₀ 𝓐)
|
|
|
|
|
_ = { x | x ⊆ ⋂₀ 𝓐 } := rfl
|
|
|
|
|
_ = { x | x ⊆ { y | ∀ X, X ∈ 𝓐 → y ∈ X } } := rfl
|
|
|
|
|
_ = { x | ∀ t ∈ x, t ∈ { y | ∀ X, X ∈ 𝓐 → y ∈ X } } := rfl
|
|
|
|
|
_ = { x | ∀ t ∈ x, (∀ X, X ∈ 𝓐 → t ∈ X) } := rfl
|
|
|
|
|
_ = { x | ∀ X ∈ 𝓐, (∀ t, t ∈ x → t ∈ X) } := by
|
|
|
|
|
ext
|
|
|
|
|
rw [Set.mem_setOf, Set.mem_setOf, forall_mem_comm (· ∈ ·)]
|
|
|
|
|
_ = { x | ∀ X ∈ 𝓐, x ⊆ X} := rfl
|
|
|
|
|
_ = { x | ∀ X ∈ 𝓐, x ∈ 𝒫 X } := rfl
|
|
|
|
|
_ = { x | ∀ t ∈ { 𝒫 X | X ∈ 𝓐 }, x ∈ t} := by simp
|
|
|
|
|
_ = ⋂₀ { 𝒫 X | X ∈ 𝓐 } := rfl
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.24b
|
|
|
|
|
|
|
|
|
|
Show that
|
|
|
|
|
```
|
|
|
|
|
⋃ {𝒫 X | X ∈ 𝓐} ⊆ 𝒫 ⋃ 𝓐.
|
|
|
|
|
```
|
|
|
|
|
Under what conditions does equality hold?
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_24b {𝓐 : Set (Set α)}
|
|
|
|
|
: (⋃₀ { 𝒫 X | X ∈ 𝓐 } ⊆ 𝒫 ⋃₀ 𝓐)
|
|
|
|
|
∧ ((⋃₀ { 𝒫 X | X ∈ 𝓐 } = 𝒫 ⋃₀ 𝓐) ↔ (⋃₀ 𝓐 ∈ 𝓐)) := by
|
|
|
|
|
have hS : (⋃₀ { 𝒫 X | X ∈ 𝓐 } ⊆ 𝒫 ⋃₀ 𝓐) := by
|
|
|
|
|
simp
|
|
|
|
|
exact exercise_3_3
|
|
|
|
|
refine ⟨hS, ?_⟩
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro rS
|
|
|
|
|
have rS : 𝒫 ⋃₀ 𝓐 ⊆ ⋃₀ { 𝒫 X | X ∈ 𝓐 } :=
|
|
|
|
|
(Set.Subset.antisymm_iff.mp rS).right
|
|
|
|
|
have hA : ⋃₀ 𝓐 ∈ ⋃₀ { 𝒫 X | X ∈ 𝓐 } :=
|
|
|
|
|
rS Set.self_mem_powerset_self
|
|
|
|
|
conv at hA =>
|
|
|
|
|
rhs
|
|
|
|
|
unfold Set.sUnion sSup Set.instSupSetSet
|
|
|
|
|
simp only
|
|
|
|
|
have ⟨X, ⟨⟨x, hx⟩, ht⟩⟩ := Set.mem_setOf.mp hA
|
|
|
|
|
have : ⋃₀ 𝓐 = x := by
|
|
|
|
|
rw [← hx.right] at ht
|
|
|
|
|
have hl : ⋃₀ 𝓐 ⊆ x := ht
|
|
|
|
|
have hr : x ⊆ ⋃₀ 𝓐 := exercise_3_3 x hx.left
|
|
|
|
|
exact Set.Subset.antisymm hl hr
|
|
|
|
|
rw [← this] at hx
|
|
|
|
|
exact hx.left
|
|
|
|
|
· intro hA
|
|
|
|
|
suffices 𝒫 ⋃₀ 𝓐 ⊆ ⋃₀ { 𝒫 X | X ∈ 𝓐 } from
|
|
|
|
|
subset_antisymm hS this
|
|
|
|
|
show ∀ x, x ∈ 𝒫 ⋃₀ 𝓐 → x ∈ ⋃₀ { x | ∃ X, X ∈ 𝓐 ∧ 𝒫 X = x }
|
|
|
|
|
intro x hx
|
|
|
|
|
unfold Set.sUnion sSup Set.instSupSetSet
|
|
|
|
|
simp only [Set.mem_setOf_eq, exists_exists_and_eq_and, Set.mem_powerset_iff]
|
|
|
|
|
exact ⟨⋃₀ 𝓐, ⟨hA, hx⟩⟩
|
|
|
|
|
|
|
|
|
|
/-- ### Exercise 4.25
|
|
|
|
|
|
|
|
|
|
Is `A ∪ (⋃ 𝓑)` always the same as `⋃ { A ∪ X | X ∈ 𝓑 }`? If not, then under
|
|
|
|
|
what conditions does equality hold?
|
|
|
|
|
-/
|
|
|
|
|
theorem exercise_4_25 {A : Set α} (𝓑 : Set (Set α))
|
|
|
|
|
: (A ∪ (⋃₀ 𝓑) = ⋃₀ { A ∪ X | X ∈ 𝓑 }) ↔ (A = ∅ ∨ Set.Nonempty 𝓑) := by
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro h
|
|
|
|
|
by_cases h𝓑 : Set.Nonempty 𝓑
|
|
|
|
|
· exact Or.inr h𝓑
|
|
|
|
|
· have : 𝓑 = ∅ := Set.not_nonempty_iff_eq_empty.mp h𝓑
|
|
|
|
|
rw [this] at h
|
|
|
|
|
simp at h
|
|
|
|
|
exact Or.inl h
|
|
|
|
|
· intro h
|
|
|
|
|
apply Or.elim h
|
|
|
|
|
· intro hA
|
|
|
|
|
rw [hA]
|
|
|
|
|
simp
|
|
|
|
|
· intro h𝓑
|
|
|
|
|
calc A ∪ (⋃₀ 𝓑)
|
|
|
|
|
_ = { x | x ∈ A ∨ x ∈ ⋃₀ 𝓑} := rfl
|
|
|
|
|
_ = { x | x ∈ A ∨ (∃ b ∈ 𝓑, x ∈ b) } := rfl
|
|
|
|
|
_ = { x | ∃ b ∈ 𝓑, x ∈ A ∨ x ∈ b } := by
|
|
|
|
|
ext x
|
|
|
|
|
rw [Set.mem_setOf, Set.mem_setOf]
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro hx
|
|
|
|
|
apply Or.elim hx
|
|
|
|
|
· intro hA
|
|
|
|
|
have ⟨b, hb⟩ := Set.nonempty_def.mp h𝓑
|
|
|
|
|
exact ⟨b, ⟨hb, Or.inl hA⟩⟩
|
|
|
|
|
· intro ⟨b, hb⟩
|
|
|
|
|
exact ⟨b, ⟨hb.left, Or.inr hb.right⟩⟩
|
|
|
|
|
· intro ⟨b, ⟨hb, hx⟩⟩
|
|
|
|
|
apply Or.elim hx
|
|
|
|
|
· exact (Or.inl ·)
|
|
|
|
|
· intro h
|
|
|
|
|
exact Or.inr ⟨b, ⟨hb, h⟩⟩
|
|
|
|
|
_ = { x | ∃ b ∈ 𝓑, x ∈ A ∪ b } := rfl
|
|
|
|
|
_ = { x | ∃ t, t ∈ { y | ∃ X, X ∈ 𝓑 ∧ A ∪ X = y } ∧ x ∈ t } := by simp
|
|
|
|
|
_ = ⋃₀ { A ∪ X | X ∈ 𝓑 } := rfl
|
|
|
|
|
|
2023-05-23 15:18:23 +00:00
|
|
|
|
end Enderton.Set.Chapter_2
|