2023-06-20 21:02:09 +00:00
|
|
|
|
import Common.Set.Basic
|
|
|
|
|
|
2023-06-29 21:30:48 +00:00
|
|
|
|
/-! # Enderton.Set.OrderedPair
|
2023-06-20 21:02:09 +00:00
|
|
|
|
|
|
|
|
|
A representation of an ordered pair in basic set theory. Like `Set`, it is
|
|
|
|
|
assumed an ordered pair is homogeneous.
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
/--
|
|
|
|
|
Kazimierz Kuratowski's definition of an ordered pair.
|
|
|
|
|
-/
|
|
|
|
|
def OrderedPair (x y : α) : Set (Set α) := {{x}, {x, y}}
|
|
|
|
|
|
|
|
|
|
namespace OrderedPair
|
|
|
|
|
|
|
|
|
|
/--
|
|
|
|
|
For any sets `x`, `y`, `u`, and `v`, `⟨u, v⟩ = ⟨x, y⟩` **iff** `u = x ∧ v = y`.
|
|
|
|
|
-/
|
|
|
|
|
theorem ext_iff {x y u v : α}
|
|
|
|
|
: (OrderedPair x y = OrderedPair u v) ↔ (x = u ∧ y = v) := by
|
|
|
|
|
unfold OrderedPair
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro h
|
|
|
|
|
have hu := Set.ext_iff.mp h {u}
|
|
|
|
|
have huv := Set.ext_iff.mp h {u, v}
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff, Set.mem_insert_iff, true_or, or_true, iff_true
|
|
|
|
|
] at hu huv
|
|
|
|
|
apply Or.elim hu <;> apply Or.elim huv
|
|
|
|
|
|
2023-11-11 22:15:03 +00:00
|
|
|
|
· -- `{u} = {x}` and `{u, v} = {x}`.
|
2023-06-20 21:02:09 +00:00
|
|
|
|
intro huv_x hu_x
|
|
|
|
|
rw [Set.singleton_eq_singleton_iff] at hu_x
|
|
|
|
|
rw [hu_x] at huv_x
|
|
|
|
|
have hx_v := Set.pair_eq_singleton_mem_imp_eq_self huv_x
|
|
|
|
|
rw [hu_x, hx_v] at h
|
|
|
|
|
simp only [Set.mem_singleton_iff, Set.insert_eq_of_mem] at h
|
|
|
|
|
have := Set.pair_eq_singleton_mem_imp_eq_self $
|
|
|
|
|
Set.pair_eq_singleton_mem_imp_eq_self h
|
|
|
|
|
rw [← hx_v] at this
|
|
|
|
|
exact ⟨hu_x.symm, this⟩
|
|
|
|
|
|
2023-11-11 22:15:03 +00:00
|
|
|
|
· -- `{u} = {x}` and `{u, v} = {x, y}`.
|
2023-06-20 21:02:09 +00:00
|
|
|
|
intro huv_xy hu_x
|
|
|
|
|
rw [Set.singleton_eq_singleton_iff] at hu_x
|
|
|
|
|
rw [hu_x] at huv_xy
|
|
|
|
|
by_cases hx_v : x = v
|
|
|
|
|
· rw [hx_v] at huv_xy
|
|
|
|
|
simp only [Set.mem_singleton_iff, Set.insert_eq_of_mem] at huv_xy
|
|
|
|
|
have := Set.pair_eq_singleton_mem_imp_eq_self huv_xy.symm
|
|
|
|
|
exact ⟨hu_x.symm, this⟩
|
|
|
|
|
· rw [Set.ext_iff] at huv_xy
|
|
|
|
|
have := huv_xy v
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff, Set.mem_insert_iff, or_true, true_iff
|
|
|
|
|
] at this
|
|
|
|
|
exact ⟨hu_x.symm, Or.elim this (absurd ·.symm hx_v) (·.symm)⟩
|
|
|
|
|
|
2023-11-11 22:15:03 +00:00
|
|
|
|
· -- `{u} = {x, y}` and `{u, v} = {x}`.
|
2023-06-20 21:02:09 +00:00
|
|
|
|
intro huv_x hu_xy
|
|
|
|
|
rw [Set.ext_iff] at huv_x hu_xy
|
|
|
|
|
have hu_x := huv_x u
|
|
|
|
|
have hy_u := hu_xy y
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff,
|
|
|
|
|
Set.mem_insert_iff,
|
|
|
|
|
true_or,
|
|
|
|
|
true_iff,
|
|
|
|
|
or_true,
|
|
|
|
|
iff_true
|
2023-11-11 22:15:03 +00:00
|
|
|
|
] at hu_x hy_u
|
2023-06-20 21:02:09 +00:00
|
|
|
|
apply Or.elim huv
|
|
|
|
|
· intro huv_x
|
|
|
|
|
rw [← hu_x, Set.ext_iff] at huv_x
|
|
|
|
|
have := huv_x v
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff, Set.mem_insert_iff, or_true, true_iff
|
|
|
|
|
] at this
|
|
|
|
|
exact ⟨hu_x.symm, by rwa [this]⟩
|
|
|
|
|
· intro huv_xy
|
|
|
|
|
rw [hu_x, Set.ext_iff] at huv_xy
|
|
|
|
|
have := huv_xy v
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff, Set.mem_insert_iff, or_true, true_iff
|
|
|
|
|
] at this
|
|
|
|
|
apply Or.elim this
|
|
|
|
|
· intro hv_x
|
|
|
|
|
rw [hy_u, hu_x]
|
|
|
|
|
exact ⟨rfl, hv_x.symm⟩
|
|
|
|
|
· intro hv_y
|
|
|
|
|
exact ⟨hu_x.symm, hv_y.symm⟩
|
|
|
|
|
|
2023-11-11 22:15:03 +00:00
|
|
|
|
· -- `{u} = {x, y}` and `{u, v} = {x, y}`.
|
2023-06-20 21:02:09 +00:00
|
|
|
|
intro huv_xy hu_xy
|
|
|
|
|
rw [Set.ext_iff] at huv_xy hu_xy
|
|
|
|
|
have hx_u := hu_xy x
|
|
|
|
|
have hy_u := hu_xy y
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff, Set.mem_insert_iff, true_or, iff_true, or_true
|
2023-11-11 22:15:03 +00:00
|
|
|
|
] at hx_u hy_u
|
2023-06-20 21:02:09 +00:00
|
|
|
|
have := huv_xy v
|
|
|
|
|
simp only [
|
|
|
|
|
Set.mem_singleton_iff, Set.mem_insert_iff, or_true, true_iff
|
2023-11-11 22:15:03 +00:00
|
|
|
|
] at this
|
2023-06-20 21:02:09 +00:00
|
|
|
|
apply Or.elim this
|
|
|
|
|
· intro hv_x
|
|
|
|
|
rw [hv_x, hx_u]
|
|
|
|
|
exact ⟨rfl, hy_u⟩
|
|
|
|
|
· intro hv_y
|
|
|
|
|
exact ⟨hx_u, hv_y.symm⟩
|
|
|
|
|
|
|
|
|
|
· intro h
|
|
|
|
|
rw [h.left, h.right]
|
|
|
|
|
|
2023-11-11 22:15:03 +00:00
|
|
|
|
end OrderedPair
|