Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit a130c73

Browse files
urkudsgouezel
andcommitted
feat(topology/algebra/ordered): list of preconnected sets (#2943)
A subset of a densely ordered conditionally complete lattice (e.g., `ℝ`) with order topology is preconnected if and only if it is one of the intervals. Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr>
1 parent 8f89bd8 commit a130c73

File tree

5 files changed

+268
-63
lines changed

5 files changed

+268
-63
lines changed

src/data/set/basic.lean

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -854,12 +854,23 @@ by rw [union_comm, ←diff_subset_iff]
854854
@[simp] lemma diff_singleton_subset_iff {x : α} {s t : set α} : s \ {x} ⊆ t ↔ s ⊆ insert x t :=
855855
by { rw [←union_singleton, union_comm], apply diff_subset_iff }
856856

857+
lemma subset_diff_singleton {x : α} {s t : set α} (h : s ⊆ t) (hx : x ∉ s) : s ⊆ t \ {x} :=
858+
subset_inter h $ subset_compl_comm.1 $ singleton_subset_iff.2 hx
859+
857860
lemma subset_insert_diff_singleton (x : α) (s : set α) : s ⊆ insert x (s \ {x}) :=
858861
by rw [←diff_singleton_subset_iff]
859862

860863
lemma diff_subset_comm {s t u : set α} : s \ t ⊆ u ↔ s \ u ⊆ t :=
861864
by rw [diff_subset_iff, diff_subset_iff, union_comm]
862865

866+
lemma diff_inter {s t u : set α} : s \ (t ∩ u) = (s \ t) ∪ (s \ u) :=
867+
ext $ λ x, by simp [classical.not_and_distrib, and_or_distrib_left]
868+
869+
lemma diff_compl : s \ -t = s ∩ t := by rw [diff_eq, compl_compl]
870+
871+
lemma diff_diff_right {s t u : set α} : s \ (t \ u) = (s \ t) ∪ (s ∩ u) :=
872+
by rw [diff_eq t u, diff_inter, diff_compl]
873+
863874
@[simp] theorem insert_diff_of_mem (s) (h : a ∈ t) : insert a s \ t = s \ t :=
864875
ext $ by intro; constructor; simp [or_imp_distrib, h] {contextual := tt}
865876

@@ -897,8 +908,11 @@ by simp [insert_eq, union_diff_self, -union_singleton, -singleton_union]
897908

898909
@[simp] lemma diff_self {s : set α} : s \ s = ∅ := ext $ by simp
899910

900-
lemma mem_diff_singleton {s s' : set α} {t : set (set α)} : s ∈ t \ {s'} ↔ (s ∈ t ∧ s ≠ s') :=
901-
by simp
911+
lemma diff_diff_cancel_left {s t : set α} (h : s ⊆ t) : t \ (t \ s) = s :=
912+
by simp only [diff_diff_right, diff_self, inter_eq_self_of_subset_right h, empty_union]
913+
914+
lemma mem_diff_singleton {x y : α} {s : set α} : x ∈ s \ {y} ↔ (x ∈ s ∧ x ≠ y) :=
915+
iff.rfl
902916

903917
lemma mem_diff_singleton_empty {s : set α} {t : set (set α)} :
904918
s ∈ t \ {∅} ↔ (s ∈ t ∧ s.nonempty) :=

src/data/set/intervals/basic.lean

Lines changed: 72 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -280,38 +280,81 @@ variables {α : Type u} [partial_order α] {a b : α}
280280
@[simp] lemma Icc_self (a : α) : Icc a a = {a} :=
281281
set.ext $ by simp [Icc, le_antisymm_iff, and_comm]
282282

283-
lemma Ico_diff_Ioo_eq_singleton (h : a < b) : Ico a b \ Ioo a b = {a} :=
284-
set.ext $ λ x, begin
285-
simp [not_and'], split,
286-
{ rintro ⟨⟨ax, xb⟩, hne⟩,
287-
exact (eq_or_lt_of_le ax).elim eq.symm (λ h', absurd h' (hne xb)) },
288-
{ rintro rfl, exact ⟨⟨le_refl _, h⟩, λ _, lt_irrefl x⟩ }
289-
end
283+
lemma Icc_diff_left : Icc a b \ {a} = Ioc a b :=
284+
ext $ λ x, by simp [lt_iff_le_and_ne, eq_comm, and.right_comm]
290285

291-
lemma Ioc_diff_Ioo_eq_singleton (h : a < b) : Ioc a b \ Ioo a b = {b} :=
292-
set.ext $ λ x, begin
293-
simp, split,
294-
{ rintro ⟨⟨ax, xb⟩, hne⟩,
295-
exact (eq_or_lt_of_le xb).elim id (λ h', absurd h' (hne ax)) },
296-
{ rintro rfl, exact ⟨⟨h, le_refl _⟩, λ _, lt_irrefl x⟩ }
297-
end
286+
lemma Icc_diff_right : Icc a b \ {b} = Ico a b :=
287+
ext $ λ x, by simp [lt_iff_le_and_ne, and_assoc]
298288

299-
lemma Icc_diff_Ico_eq_singleton (h : a ≤ b) : Icc a b \ Ico a b = {b} :=
300-
set.ext $ λ x, begin
301-
simp, split,
302-
{ rintro ⟨⟨ax, xb⟩, h⟩,
303-
exact classical.by_contradiction
304-
(λ ne, h ax (lt_of_le_of_ne xb ne)) },
305-
{ rintro rfl, exact ⟨⟨h, le_refl _⟩, λ _, lt_irrefl x⟩ }
306-
end
289+
lemma Ico_diff_left : Ico a b \ {a} = Ioo a b :=
290+
ext $ λ x, by simp [and.right_comm, ← lt_iff_le_and_ne, eq_comm]
291+
292+
lemma Ioc_diff_right : Ioc a b \ {b} = Ioo a b :=
293+
ext $ λ x, by simp [and_assoc, ← lt_iff_le_and_ne]
294+
295+
lemma Icc_diff_both : Icc a b \ {a, b} = Ioo a b :=
296+
by rw [insert_eq, ← diff_diff, Icc_diff_left, Ioc_diff_right]
297+
298+
lemma Ici_diff_left : Ici a \ {a} = Ioi a :=
299+
ext $ λ x, by simp [lt_iff_le_and_ne, eq_comm]
300+
301+
lemma Iic_diff_right : Iic a \ {a} = Iio a :=
302+
ext $ λ x, by simp [lt_iff_le_and_ne]
303+
304+
lemma Ico_diff_Ioo_same (h : a < b) : Ico a b \ Ioo a b = {a} :=
305+
by rw [← Ico_diff_left, diff_diff_cancel_left (singleton_subset_iff.2 $ left_mem_Ico.2 h)]
306+
307+
lemma Ioc_diff_Ioo_same (h : a < b) : Ioc a b \ Ioo a b = {b} :=
308+
by rw [← Ioc_diff_right, diff_diff_cancel_left (singleton_subset_iff.2 $ right_mem_Ioc.2 h)]
309+
310+
lemma Icc_diff_Ico_same (h : a ≤ b) : Icc a b \ Ico a b = {b} :=
311+
by rw [← Icc_diff_right, diff_diff_cancel_left (singleton_subset_iff.2 $ right_mem_Icc.2 h)]
307312

308-
lemma Icc_diff_Ioc_eq_singleton (h : a ≤ b) : Icc a b \ Ioc a b = {a} :=
309-
set.ext $ λ x, begin
310-
simp [not_and'], split,
311-
{ rintro ⟨⟨ax, xb⟩, h⟩,
312-
exact classical.by_contradiction
313-
(λ hne, h xb (lt_of_le_of_ne ax (ne.symm hne))) },
314-
{ rintro rfl, exact ⟨⟨le_refl _, h⟩, λ _, lt_irrefl x⟩ }
313+
lemma Icc_diff_Ioc_same (h : a ≤ b) : Icc a b \ Ioc a b = {a} :=
314+
by rw [← Icc_diff_left, diff_diff_cancel_left (singleton_subset_iff.2 $ left_mem_Icc.2 h)]
315+
316+
lemma Icc_diff_Ioo_same (h : a ≤ b) : Icc a b \ Ioo a b = {a, b} :=
317+
by { rw [← Icc_diff_both, diff_diff_cancel_left], simp [insert_subset, h] }
318+
319+
lemma Ici_diff_Ioi_same : Ici a \ Ioi a = {a} :=
320+
by rw [← Ici_diff_left, diff_diff_cancel_left (singleton_subset_iff.2 left_mem_Ici)]
321+
322+
lemma Iic_diff_Iio_same : Iic a \ Iio a = {a} :=
323+
by rw [← Iic_diff_right, diff_diff_cancel_left (singleton_subset_iff.2 right_mem_Iic)]
324+
325+
lemma Ioi_union_left : Ioi a ∪ {a} = Ici a := ext $ λ x, by simp [eq_comm, le_iff_eq_or_lt]
326+
327+
lemma Iio_union_right : Iio a ∪ {a} = Iic a := ext $ λ x, le_iff_lt_or_eq.symm
328+
329+
lemma mem_Ici_Ioi_of_subset_of_subset {s : set α} (ho : Ioi a ⊆ s) (hc : s ⊆ Ici a) :
330+
s ∈ ({Ici a, Ioi a} : set (set α)) :=
331+
classical.by_cases
332+
(λ h : a ∈ s, or.inl $ subset.antisymm hc $ by simp [← Ioi_union_left, insert_subset, *])
333+
(λ h, or.inr $ subset.antisymm (λ x hx, lt_of_le_of_ne (hc hx) (λ heq, h $ heq.symm ▸ hx)) ho)
334+
335+
lemma mem_Iic_Iio_of_subset_of_subset {s : set α} (ho : Iio a ⊆ s) (hc : s ⊆ Iic a) :
336+
s ∈ ({Iic a, Iio a} : set (set α)) :=
337+
@mem_Ici_Ioi_of_subset_of_subset (order_dual α) _ a s ho hc
338+
339+
lemma mem_Icc_Ico_Ioc_Ioo_of_subset_of_subset {s : set α} (ho : Ioo a b ⊆ s) (hc : s ⊆ Icc a b) :
340+
s ∈ ({Icc a b, Ico a b, Ioc a b, Ioo a b} : set (set α)) :=
341+
begin
342+
classical,
343+
by_cases ha : a ∈ s; by_cases hb : b ∈ s,
344+
{ refine or.inl (subset.antisymm hc _),
345+
rwa [← Ico_diff_left, diff_singleton_subset_iff, insert_eq_of_mem ha,
346+
← Icc_diff_right, diff_singleton_subset_iff, insert_eq_of_mem hb] at ho },
347+
{ refine (or.inr $ or.inl $ subset.antisymm _ _),
348+
{ rw [← Icc_diff_right],
349+
exact subset_diff_singleton hc hb },
350+
{ rwa [← Ico_diff_left, diff_singleton_subset_iff, insert_eq_of_mem ha] at ho } },
351+
{ refine (or.inr $ or.inr $ or.inl $ subset.antisymm _ _),
352+
{ rw [← Icc_diff_left],
353+
exact subset_diff_singleton hc ha },
354+
{ rwa [← Ioc_diff_right, diff_singleton_subset_iff, insert_eq_of_mem hb] at ho } },
355+
{ refine (or.inr $ or.inr $ or.inr $ subset.antisymm _ ho),
356+
rw [← Ico_diff_left, ← Icc_diff_right],
357+
apply_rules [subset_diff_singleton] }
315358
end
316359

317360
end partial_order

src/order/bounds.lean

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,30 @@ lemma mem_upper_bounds : a ∈ upper_bounds s ↔ ∀ x ∈ s, x ≤ a := iff.rf
5757

5858
lemma mem_lower_bounds : a ∈ lower_bounds s ↔ ∀ x ∈ s, a ≤ x := iff.rfl
5959

60+
/-- A set `s` is not bounded above if and only if for each `x` there exists `y ∈ s` such that `x`
61+
is not greater than or equal to `y`. This version only assumes `preorder` structure and uses
62+
`¬(y ≤ x)`. A version for linear orders is called `not_bdd_above_iff`. -/
63+
lemma not_bdd_above_iff' : ¬bdd_above s ↔ ∀ x, ∃ y ∈ s, ¬(y ≤ x) :=
64+
by simp [bdd_above, upper_bounds, set.nonempty]
65+
66+
/-- A set `s` is not bounded below if and only if for each `x` there exists `y ∈ s` such that `x`
67+
is not less than or equal to `y`. This version only assumes `preorder` structure and uses
68+
`¬(x ≤ y)`. A version for linear orders is called `not_bdd_below_iff`. -/
69+
lemma not_bdd_below_iff' : ¬bdd_below s ↔ ∀ x, ∃ y ∈ s, ¬(x ≤ y) :=
70+
@not_bdd_above_iff' (order_dual α) _ _
71+
72+
/-- A set `s` is not bounded above if and only if for each `x` there exists `y ∈ s` that is greater
73+
than `x`. A version for preorders is called `not_bdd_above_iff'`. -/
74+
lemma not_bdd_above_iff {α : Type*} [linear_order α] {s : set α} :
75+
¬bdd_above s ↔ ∀ x, ∃ y ∈ s, x < y :=
76+
by simp only [not_bdd_above_iff', not_le]
77+
78+
/-- A set `s` is not bounded below if and only if for each `x` there exists `y ∈ s` that is less
79+
than `x`. A version for preorders is called `not_bdd_below_iff'`. -/
80+
lemma not_bdd_below_iff {α : Type*} [linear_order α] {s : set α} :
81+
¬bdd_below s ↔ ∀ x, ∃ y ∈ s, y < x :=
82+
@not_bdd_above_iff (order_dual α) _ _
83+
6084
/-!
6185
### Monotonicity
6286
-/
@@ -476,6 +500,12 @@ not_le_of_lt ha' this
476500
lemma is_glb.nonempty [no_top_order α] (hs : is_glb s a) : s.nonempty :=
477501
@is_lub.nonempty (order_dual α) _ _ _ _ hs
478502

503+
lemma nonempty_of_not_bdd_above [ha : nonempty α] (h : ¬bdd_above s) : s.nonempty :=
504+
nonempty.elim ha $ λ x, (not_bdd_above_iff'.1 h x).imp $ λ a ha, ha.fst
505+
506+
lemma nonempty_of_not_bdd_below [ha : nonempty α] (h : ¬bdd_below s) : s.nonempty :=
507+
@nonempty_of_not_bdd_above (order_dual α) _ _ _ h
508+
479509
/-!
480510
### insert
481511
-/

0 commit comments

Comments
 (0)