topology.connected
⟷
Mathlib.Topology.Connected.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
Backport various changes I made to the API while porting to Lean 4 in leanprover-community/mathlib4#2157.
setoid X
;setoid
s;comap
;simp
lemmas;order_bot
instance from a discrete space to a locally connected space;@@ -678,6 +678,10 @@ eq_of_subset_of_subset
(set.mem_of_mem_of_subset mem_connected_component
(is_connected_connected_component.subset_connected_component h)))
+theorem connected_component_eq_iff_mem {x y : α} :
+ connected_component x = connected_component y ↔ x ∈ connected_component y :=
+⟨λ h, h ▸ mem_connected_component, λ h, (connected_component_eq h).symm⟩
+
lemma connected_component_in_eq {x y : α} {F : set α} (h : y ∈ connected_component_in F x) :
connected_component_in F x = connected_component_in F y :=
begin
@@ -1168,6 +1172,14 @@ begin
λ ⟨V, ⟨hV, hxV, _⟩, hVU⟩, mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩ }
end
+/-- A space with discrete topology is a locally connected space. -/
+@[priority 100]
+instance discrete_topology.to_locally_connected_space (α) [topological_space α]
+ [discrete_topology α] : locally_connected_space α :=
+locally_connected_space_iff_open_connected_subsets.2 $ λ x _U hU,
+ ⟨{x}, singleton_subset_iff.2 $ mem_of_mem_nhds hU, is_open_discrete _, mem_singleton _,
+ is_connected_singleton⟩
+
lemma connected_component_in_mem_nhds [locally_connected_space α] {F : set α} {x : α}
(h : F ∈ 𝓝 x) :
connected_component_in F x ∈ 𝓝 x :=
@@ -1353,6 +1365,10 @@ begin
exact mem_connected_component
end
+@[simp] theorem connected_component_eq_singleton [totally_disconnected_space α] (x : α) :
+ connected_component x = {x} :=
+totally_disconnected_space_iff_connected_component_singleton.1 ‹_› x
+
/-- The image of a connected component in a totally disconnected space is a singleton. -/
@[simp] lemma continuous.image_connected_component_eq_singleton {β : Type*} [topological_space β]
[totally_disconnected_space β] {f : α → β} (h : continuous f) (a : α) :
@@ -1463,7 +1479,7 @@ not_congr coe_eq_coe
lemma coe_eq_coe' {x y : α} :
(x : connected_components α) = y ↔ x ∈ connected_component y :=
-coe_eq_coe.trans ⟨λ h, h ▸ mem_connected_component, λ h, (connected_component_eq h).symm⟩
+coe_eq_coe.trans connected_component_eq_iff_mem
instance [inhabited α] : inhabited (connected_components α) := ⟨↑(default : α)⟩
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
wlog
(#16495)
Benefits:
Downside:
Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/wlog/near/296996966
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -94,7 +94,9 @@ theorem is_preconnected_of_forall {s : set α} (x : α)
begin
rintros u v hu hv hs ⟨z, zs, zu⟩ ⟨y, ys, yv⟩,
have xs : x ∈ s, by { rcases H y ys with ⟨t, ts, xt, yt, ht⟩, exact ts xt },
- wlog xu : x ∈ u := hs xs using [u v y z, v u z y],
+ wlog xu : x ∈ u,
+ { rw inter_comm u v, rw union_comm at hs,
+ exact this x H v u hv hu hs y ys yv z zs zu xs ((hs xs).resolve_right xu), },
rcases H y ys with ⟨t, ts, xt, yt, ht⟩,
have := ht u v hu hv(subset.trans ts hs) ⟨x, xt, xu⟩ ⟨y, yt, yv⟩,
exact this.imp (λ z hz, ⟨ts hz.1, hz.2⟩)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -119,7 +119,7 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
#align set.subsingleton.is_preconnected Set.Subsingleton.isPreconnected
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print isPreconnected_of_forall /-
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
@@ -137,8 +137,8 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
#align is_preconnected_of_forall isPreconnected_of_forall
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print isPreconnected_of_forall_pair /-
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
@@ -211,9 +211,9 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i j «expr ∈ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (p «expr ⊆ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (p «expr ⊆ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (i j «expr ∈ » t) -/
#print IsPreconnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -253,7 +253,7 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (i j «expr ∈ » t) -/
#print IsConnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -1453,7 +1453,7 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (V «expr ⊆ » U) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (V «expr ⊆ » U) -/
#print locallyConnectedSpace_iff_open_connected_subsets /-
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -129,7 +129,7 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
rintro u v hu hv hs ⟨z, zs, zu⟩ ⟨y, ys, yv⟩
have xs : x ∈ s := by rcases H y ys with ⟨t, ts, xt, yt, ht⟩; exact ts xt
wlog xu : x ∈ u
- · rw [inter_comm u v]; rw [union_comm] at hs
+ · rw [inter_comm u v]; rw [union_comm] at hs
exact this x H v u hv hu hs y ys yv z zs zu xs ((hs xs).resolve_right xu)
rcases H y ys with ⟨t, ts, xt, yt, ht⟩
have := ht u v hu hv (subset.trans ts hs) ⟨x, xt, xu⟩ ⟨y, yt, yv⟩
@@ -165,7 +165,7 @@ theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x
#print isPreconnected_iUnion /-
theorem isPreconnected_iUnion {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
- Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
+ Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_mem_range.2 h₂)
#align is_preconnected_Union isPreconnected_iUnion
-/
@@ -398,9 +398,9 @@ theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : IsPreconnec
rcases continuousOn_iff'.1 hf v hv with ⟨v', hv', v'_eq⟩
-- Reformulate `huv : f '' s ⊆ u ∪ v` in terms of `u'` and `v'`
replace huv : s ⊆ u' ∪ v'
- · rw [image_subset_iff, preimage_union] at huv
+ · rw [image_subset_iff, preimage_union] at huv
replace huv := subset_inter huv (subset.refl _)
- rw [inter_distrib_right, u'_eq, v'_eq, ← inter_distrib_right] at huv
+ rw [inter_distrib_right, u'_eq, v'_eq, ← inter_distrib_right] at huv
exact (subset_inter_iff.1 huv).1
-- Now `s ⊆ u' ∪ v'`, so we can apply `‹is_preconnected s›`
obtain ⟨z, hz⟩ : (s ∩ (u' ∩ v')).Nonempty :=
@@ -408,7 +408,7 @@ theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : IsPreconnec
refine' H u' v' hu' hv' huv ⟨x, _⟩ ⟨y, _⟩ <;> rw [inter_comm]
exacts [u'_eq ▸ ⟨xu, xs⟩, v'_eq ▸ ⟨yv, ys⟩]
rw [← inter_self s, inter_assoc, inter_left_comm s u', ← inter_assoc, inter_comm s, inter_comm s,
- ← u'_eq, ← v'_eq] at hz
+ ← u'_eq, ← v'_eq] at hz
exact ⟨f z, ⟨z, hz.1.2, rfl⟩, hz.1.1, hz.2.1⟩
#align is_preconnected.image IsPreconnected.image
-/
@@ -434,7 +434,7 @@ theorem isPreconnected_closed_iff {s : Set α} :
have xt' : x ∉ t' := (h' xs).resolve_left (absurd xt)
have yt : y ∉ t := (h' ys).resolve_right (absurd yt')
have := h _ _ ht.is_open_compl ht'.is_open_compl h' ⟨y, ys, yt⟩ ⟨x, xs, xt'⟩
- rw [← compl_union] at this
+ rw [← compl_union] at this
exact this.ne_empty htt'.disjoint_compl_right.inter_eq,
by
rintro h u v hu hv huv ⟨x, xs, xu⟩ ⟨y, ys, yv⟩
@@ -443,7 +443,7 @@ theorem isPreconnected_closed_iff {s : Set α} :
have xv : x ∉ v := (h' xs).elim (absurd xu) id
have yu : y ∉ u := (h' ys).elim id (absurd yv)
have := h _ _ hu.is_closed_compl hv.is_closed_compl h' ⟨y, ys, yu⟩ ⟨x, xs, xv⟩
- rw [← compl_union] at this
+ rw [← compl_union] at this
exact this.ne_empty huv.disjoint_compl_right.inter_eq⟩
#align is_preconnected_closed_iff isPreconnected_closed_iff
-/
@@ -472,10 +472,10 @@ theorem IsPreconnected.preimage_of_isOpenMap [TopologicalSpace β] {s : Set β}
by
obtain ⟨b, hbs, hbu, hbv⟩ := hs (f '' u) (f '' v) (hf u hu) (hf v hv) _ _ _
obtain ⟨a, rfl⟩ := hsf hbs
- rw [hinj.mem_set_image] at hbu hbv
+ rw [hinj.mem_set_image] at hbu hbv
exact ⟨a, hbs, hbu, hbv⟩
· have := image_subset f hsuv
- rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
+ rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
· obtain ⟨x, hx1, hx2⟩ := hsu
exact ⟨f x, hx1, x, hx2, rfl⟩
· obtain ⟨y, hy1, hy2⟩ := hsv
@@ -492,10 +492,10 @@ theorem IsPreconnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β
obtain ⟨b, hbs, hbu, hbv⟩ :=
isPreconnected_closed_iff.1 hs (f '' u) (f '' v) (hf u hu) (hf v hv) _ _ _
obtain ⟨a, rfl⟩ := hsf hbs
- rw [hinj.mem_set_image] at hbu hbv
+ rw [hinj.mem_set_image] at hbu hbv
exact ⟨a, hbs, hbu, hbv⟩
· have := image_subset f hsuv
- rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
+ rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
· obtain ⟨x, hx1, hx2⟩ := hsu
exact ⟨f x, hx1, x, hx2, rfl⟩
· obtain ⟨y, hy1, hy2⟩ := hsv
@@ -528,7 +528,7 @@ theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : D
· exact Or.inr ((Set.disjoint_iff_inter_eq_empty.2 hsu).subset_right_of_subset_union hsuv)
· replace hs := mt (hs hsu)
simp_rw [Set.not_nonempty_iff_eq_empty, ← Set.disjoint_iff_inter_eq_empty,
- disjoint_iff_inter_eq_empty.1 huv] at hs
+ disjoint_iff_inter_eq_empty.1 huv] at hs
exact Or.inl ((hs s.disjoint_empty).subset_left_of_subset_union hsuv)
#align is_preconnected.subset_or_subset IsPreconnected.subset_or_subset
-/
@@ -540,7 +540,7 @@ theorem IsPreconnected.subset_left_of_subset_union (hu : IsOpen u) (hv : IsOpen
Disjoint.subset_left_of_subset_union hsuv
(by
by_contra hsv
- rw [not_disjoint_iff_nonempty_inter] at hsv
+ rw [not_disjoint_iff_nonempty_inter] at hsv
obtain ⟨x, _, hx⟩ := hs u v hu hv hsuv hsu hsv
exact Set.disjoint_iff.1 huv hx)
#align is_preconnected.subset_left_of_subset_union IsPreconnected.subset_left_of_subset_union
@@ -606,7 +606,7 @@ theorem isPreconnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set
rcases exists_finset_piecewise_mem_of_mem_nhds (uo.mem_nhds hfu) g with ⟨I, hI⟩
induction' I using Finset.induction_on with i I hi ihI
· refine' ⟨g, hgs, ⟨_, hgv⟩⟩; simpa using hI
- · rw [Finset.piecewise_insert] at hI
+ · rw [Finset.piecewise_insert] at hI
have := I.piecewise_mem_set_pi hfs hgs
refine' (hsuv this).elim ihI fun h => _
set S := update (I.piecewise f g) i '' s i
@@ -1137,7 +1137,7 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
specialize h u v hu hv hs
contrapose! huv
rw [← nonempty_iff_ne_empty]
- simp [not_subset] at huv
+ simp [not_subset] at huv
rcases huv with ⟨⟨x, hxs, hxu⟩, ⟨y, hys, hyv⟩⟩
have hxv : x ∈ v := or_iff_not_imp_left.mp (hs hxs) hxu
have hyu : y ∈ u := or_iff_not_imp_right.mp (hs hys) hyv
@@ -1170,7 +1170,7 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
suffices s ⊆ ∅ → False by simpa
intro; solve_by_elim
· intro u U hu IH hs hU H
- rw [Finset.coe_insert, sUnion_insert] at H
+ rw [Finset.coe_insert, sUnion_insert] at H
cases' h.2 u (⋃₀ ↑U) _ _ H _ with hsu hsU
· exact ⟨u, Finset.mem_insert_self _ _, hsu⟩
· rcases IH _ _ hsU with ⟨v, hvU, hsv⟩
@@ -1182,7 +1182,7 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
intros; solve_by_elim [Finset.mem_insert_of_mem]
· apply eq_empty_of_subset_empty
rintro x ⟨hxs, hxu, hxU⟩
- rw [mem_sUnion] at hxU
+ rw [mem_sUnion] at hxU
rcases hxU with ⟨v, hvU, hxv⟩
rcases hs u v (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hvU) _ with rfl
· contradiction
@@ -1193,18 +1193,18 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
simpa using h ∅ _ _ _ <;> simp
intro u v hu hv hs hsuv
rcases h {u, v} _ _ _ with ⟨t, ht, ht'⟩
- · rw [Finset.mem_insert, Finset.mem_singleton] at ht
+ · rw [Finset.mem_insert, Finset.mem_singleton] at ht
rcases ht with (rfl | rfl) <;> tauto
· intro t₁ t₂ ht₁ ht₂ hst
- rw [nonempty_iff_ne_empty] at hst
- rw [Finset.mem_insert, Finset.mem_singleton] at ht₁ ht₂
+ rw [nonempty_iff_ne_empty] at hst
+ rw [Finset.mem_insert, Finset.mem_singleton] at ht₁ ht₂
rcases ht₁ with (rfl | rfl) <;> rcases ht₂ with (rfl | rfl)
all_goals
first
| rfl
| contradiction
| skip
- rw [inter_comm t₁] at hst ; contradiction
+ rw [inter_comm t₁] at hst; contradiction
· intro t
rw [Finset.mem_insert, Finset.mem_singleton]
rintro (rfl | rfl) <;> assumption
@@ -1243,11 +1243,11 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
by
constructor <;> intro h
· intro u v hu hv hs huv
- rw [isPreconnected_closed_iff] at h
+ rw [isPreconnected_closed_iff] at h
specialize h u v hu hv hs
contrapose! huv
rw [← nonempty_iff_ne_empty]
- simp [not_subset] at huv
+ simp [not_subset] at huv
rcases huv with ⟨⟨x, hxs, hxu⟩, ⟨y, hys, hyv⟩⟩
have hxv : x ∈ v := or_iff_not_imp_left.mp (hs hxs) hxu
have hyu : y ∈ u := or_iff_not_imp_right.mp (hs hys) hyv
@@ -1282,8 +1282,8 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
rw [isPreconnected_iff_subset_of_disjoint_closed]
intro u v hu hv hss huv
have H1 := H (u ∩ s) (v ∩ s)
- rw [subset_inter_iff, subset_inter_iff] at H1
- simp only [subset.refl, and_true_iff] at H1
+ rw [subset_inter_iff, subset_inter_iff] at H1
+ simp only [subset.refl, and_true_iff] at H1
apply H1 (IsClosed.inter hu hs) (IsClosed.inter hv hs)
· rw [← inter_distrib_right]
exact subset_inter hss subset.rfl
@@ -1399,12 +1399,12 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
(isPreconnected_iff_subset_of_fully_disjoint_closed isClosed_connectedComponent).1
isPreconnected_connectedComponent T₁ T₂ hT₁ hT₂ T_decomp T_disjoint
· left
- rw [subset.antisymm_iff] at T₁_u
+ rw [subset.antisymm_iff] at T₁_u
suffices f ⁻¹' connectedComponent t ⊆ f ⁻¹' T₁ by
exact subset.trans (subset.trans this T₁_u.1) (inter_subset_right _ _)
exact preimage_mono h
right
- rw [subset.antisymm_iff] at T₂_v
+ rw [subset.antisymm_iff] at T₂_v
suffices f ⁻¹' connectedComponent t ⊆ f ⁻¹' T₂ by
exact subset.trans (subset.trans this T₂_v.1) (inter_subset_right _ _)
exact preimage_mono h
@@ -1490,7 +1490,7 @@ instance (priority := 100) DiscreteTopology.toLocallyConnectedSpace (α) [Topolo
theorem connectedComponentIn_mem_nhds [LocallyConnectedSpace α] {F : Set α} {x : α} (h : F ∈ 𝓝 x) :
connectedComponentIn F x ∈ 𝓝 x :=
by
- rw [(LocallyConnectedSpace.open_connected_basis x).mem_iff] at h
+ rw [(LocallyConnectedSpace.open_connected_basis x).mem_iff] at h
rcases h with ⟨s, ⟨h1s, hxs, h2s⟩, hsF⟩
exact mem_nhds_iff.mpr ⟨s, h2s.is_preconnected.subset_connected_component_in hxs hsF, h1s, hxs⟩
#align connected_component_in_mem_nhds connectedComponentIn_mem_nhds
@@ -1677,7 +1677,7 @@ theorem isTotallyDisconnected_of_isClopen_set {X : Type _} [TopologicalSpace X]
obtain ⟨U, h_clopen, hxU, hyU⟩ := hX hxy
specialize
hS U (Uᶜ) h_clopen.1 h_clopen.compl.1 (fun a ha => em (a ∈ U)) ⟨x, hx, hxU⟩ ⟨y, hy, hyU⟩
- rw [inter_compl_self, Set.inter_empty] at hS
+ rw [inter_compl_self, Set.inter_empty] at hS
exact Set.not_nonempty_empty hS
#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_isClopen_set
-/
@@ -1837,8 +1837,8 @@ theorem exists_isClopen_of_totally_separated {α : Type _} [TopologicalSpace α]
obtain ⟨U, V, hU, hV, Ux, Vy, f, disj⟩ :=
TotallySeparatedSpace.isTotallySeparated_univ α x (Set.mem_univ x) y (Set.mem_univ y) hxy
have clopen_U := isClopen_inter_of_disjoint_cover_clopen isClopen_univ f hU hV disj
- rw [univ_inter _] at clopen_U
- rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
+ rw [univ_inter _] at clopen_U
+ rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
exact ⟨U, clopen_U, Ux, disj Vy⟩
#align exists_clopen_of_totally_separated exists_isClopen_of_totally_separated
-/
@@ -2048,7 +2048,7 @@ theorem isPreconnected_of_forall_constant {s : Set α}
unfold IsPreconnected
by_contra!
rcases this with ⟨u, v, u_op, v_op, hsuv, ⟨x, x_in_s, x_in_u⟩, ⟨y, y_in_s, y_in_v⟩, H⟩
- rw [not_nonempty_iff_eq_empty] at H
+ rw [not_nonempty_iff_eq_empty] at H
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.bool_indicator s :=
by
@@ -2086,7 +2086,7 @@ theorem IsPreconnected.constant_of_mapsTo [TopologicalSpace β] {S : Set α} (hS
{x y : α} (hx : x ∈ S) (hy : y ∈ S) : f x = f y :=
by
let F : S → T := fun x : S => ⟨f x.val, hTm x.property⟩
- suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rw [← Subtype.coe_inj] at this ; exact this
+ suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rw [← Subtype.coe_inj] at this; exact this
exact
(is_preconnected_iff_preconnected_space.mp hS).constant
(continuous_induced_rng.mpr <| continuous_on_iff_continuous_restrict.mp hc)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1805,7 +1805,7 @@ alias IsTotallySeparated.isTotallyDisconnected := isTotallyDisconnected_of_isTot
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
/-- A space is totally separated if any two points can be separated by two disjoint open sets
covering the whole space. -/
class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -416,7 +416,7 @@ theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : IsPreconnec
#print IsConnected.image /-
theorem IsConnected.image [TopologicalSpace β] {s : Set α} (H : IsConnected s) (f : α → β)
(hf : ContinuousOn f s) : IsConnected (f '' s) :=
- ⟨nonempty_image_iff.mpr H.Nonempty, H.IsPreconnected.image f hf⟩
+ ⟨image_nonempty.mpr H.Nonempty, H.IsPreconnected.image f hf⟩
#align is_connected.image IsConnected.image
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1805,7 +1805,7 @@ alias IsTotallySeparated.isTotallyDisconnected := isTotallyDisconnected_of_isTot
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
/-- A space is totally separated if any two points can be separated by two disjoint open sets
covering the whole space. -/
class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1672,7 +1672,7 @@ theorem isTotallyDisconnected_of_isClopen_set {X : Type _} [TopologicalSpace X]
by
rintro S - hS
unfold Set.Subsingleton
- by_contra' h_contra
+ by_contra! h_contra
rcases h_contra with ⟨x, hx, y, hy, hxy⟩
obtain ⟨U, h_clopen, hxU, hyU⟩ := hX hxy
specialize
@@ -2046,7 +2046,7 @@ theorem isPreconnected_of_forall_constant {s : Set α}
(hs : ∀ f : α → Bool, ContinuousOn f s → ∀ x ∈ s, ∀ y ∈ s, f x = f y) : IsPreconnected s :=
by
unfold IsPreconnected
- by_contra'
+ by_contra!
rcases this with ⟨u, v, u_op, v_op, hsuv, ⟨x, x_in_s, x_in_u⟩, ⟨y, y_in_s, y_in_v⟩, H⟩
rw [not_nonempty_iff_eq_empty] at H
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -463,12 +463,12 @@ theorem Inducing.isPreconnected_image [TopologicalSpace β] {s : Set α} {f : α
#align inducing.is_preconnected_image Inducing.isPreconnected_image
-/
-#print IsPreconnected.preimage_of_open_map /-
+#print IsPreconnected.preimage_of_isOpenMap /-
/- TODO: The following lemmas about connection of preimages hold more generally for strict maps
(the quotient and subspace topologies of the image agree) whose fibers are preconnected. -/
-theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (hs : IsPreconnected s)
- {f : α → β} (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
- IsPreconnected (f ⁻¹' s) := fun u v hu hv hsuv hsu hsv =>
+theorem IsPreconnected.preimage_of_isOpenMap [TopologicalSpace β] {s : Set β}
+ (hs : IsPreconnected s) {f : α → β} (hinj : Function.Injective f) (hf : IsOpenMap f)
+ (hsf : s ⊆ range f) : IsPreconnected (f ⁻¹' s) := fun u v hu hv hsuv hsu hsv =>
by
obtain ⟨b, hbs, hbu, hbv⟩ := hs (f '' u) (f '' v) (hf u hu) (hf v hv) _ _ _
obtain ⟨a, rfl⟩ := hsf hbs
@@ -480,7 +480,7 @@ theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (
exact ⟨f x, hx1, x, hx2, rfl⟩
· obtain ⟨y, hy1, hy2⟩ := hsv
exact ⟨f y, hy1, y, hy2, rfl⟩
-#align is_preconnected.preimage_of_open_map IsPreconnected.preimage_of_open_map
+#align is_preconnected.preimage_of_open_map IsPreconnected.preimage_of_isOpenMap
-/
#print IsPreconnected.preimage_of_isClosedMap /-
@@ -503,12 +503,12 @@ theorem IsPreconnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β
#align is_preconnected.preimage_of_closed_map IsPreconnected.preimage_of_isClosedMap
-/
-#print IsConnected.preimage_of_openMap /-
-theorem IsConnected.preimage_of_openMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
+#print IsConnected.preimage_of_isOpenMap /-
+theorem IsConnected.preimage_of_isOpenMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
{f : α → β} (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
IsConnected (f ⁻¹' s) :=
- ⟨hs.Nonempty.preimage' hsf, hs.IsPreconnected.preimage_of_open_map hinj hf hsf⟩
-#align is_connected.preimage_of_open_map IsConnected.preimage_of_openMap
+ ⟨hs.Nonempty.preimage' hsf, hs.IsPreconnected.preimage_of_isOpenMap hinj hf hsf⟩
+#align is_connected.preimage_of_open_map IsConnected.preimage_of_isOpenMap
-/
#print IsConnected.preimage_of_isClosedMap /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1212,24 +1212,24 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
-/
-#print IsPreconnected.subset_clopen /-
+#print IsPreconnected.subset_isClopen /-
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
-theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
+theorem IsPreconnected.subset_isClopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
(hne : (s ∩ t).Nonempty) : s ⊆ t := by
by_contra h
have : (s ∩ tᶜ).Nonempty := inter_compl_nonempty_iff.2 h
obtain ⟨x, -, hx, hx'⟩ : (s ∩ (t ∩ tᶜ)).Nonempty
exact hs t (tᶜ) ht.is_open ht.compl.is_open (fun x hx => em _) hne this
exact hx' hx
-#align is_preconnected.subset_clopen IsPreconnected.subset_clopen
+#align is_preconnected.subset_clopen IsPreconnected.subset_isClopen
-/
-#print disjoint_or_subset_of_clopen /-
+#print disjoint_or_subset_of_isClopen /-
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
-theorem disjoint_or_subset_of_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
+theorem disjoint_or_subset_of_isClopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
Disjoint s t ∨ s ⊆ t :=
- (disjoint_or_nonempty_inter s t).imp_right <| hs.subset_clopen ht
-#align disjoint_or_subset_of_clopen disjoint_or_subset_of_clopen
+ (disjoint_or_nonempty_inter s t).imp_right <| hs.subset_isClopen ht
+#align disjoint_or_subset_of_clopen disjoint_or_subset_of_isClopen
-/
#print isPreconnected_iff_subset_of_disjoint_closed /-
@@ -1294,17 +1294,17 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
#print IsClopen.connectedComponent_subset /-
theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s) :
connectedComponent x ⊆ s :=
- isPreconnected_connectedComponent.subset_clopen hs ⟨x, mem_connectedComponent, hx⟩
+ isPreconnected_connectedComponent.subset_isClopen hs ⟨x, mem_connectedComponent, hx⟩
#align is_clopen.connected_component_subset IsClopen.connectedComponent_subset
-/
-#print connectedComponent_subset_iInter_clopen /-
+#print connectedComponent_subset_iInter_isClopen /-
/-- The connected component of a point is always a subset of the intersection of all its clopen
neighbourhoods. -/
-theorem connectedComponent_subset_iInter_clopen {x : α} :
+theorem connectedComponent_subset_iInter_isClopen {x : α} :
connectedComponent x ⊆ ⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, Z :=
subset_iInter fun Z => Z.2.1.connectedComponent_subset Z.2.2
-#align connected_component_subset_Inter_clopen connectedComponent_subset_iInter_clopen
+#align connected_component_subset_Inter_clopen connectedComponent_subset_iInter_isClopen
-/
#print IsClopen.biUnion_connectedComponent_eq /-
@@ -1663,10 +1663,10 @@ instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i
· obtain ⟨a, t, ht, rfl⟩ := Sigma.isConnected_iff.1 ⟨h, hs⟩
exact ht.is_preconnected.subsingleton.image _
-#print isTotallyDisconnected_of_clopen_set /-
+#print isTotallyDisconnected_of_isClopen_set /-
/-- Let `X` be a topological space, and suppose that for all distinct `x,y ∈ X`, there
is some clopen set `U` such that `x ∈ U` and `y ∉ U`. Then `X` is totally disconnected. -/
-theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
+theorem isTotallyDisconnected_of_isClopen_set {X : Type _} [TopologicalSpace X]
(hX : ∀ {x y : X} (h_diff : x ≠ y), ∃ (U : Set X) (h_clopen : IsClopen U), x ∈ U ∧ y ∉ U) :
IsTotallyDisconnected (Set.univ : Set X) :=
by
@@ -1679,7 +1679,7 @@ theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
hS U (Uᶜ) h_clopen.1 h_clopen.compl.1 (fun a ha => em (a ∈ U)) ⟨x, hx, hxU⟩ ⟨y, hy, hyU⟩
rw [inter_compl_self, Set.inter_empty] at hS
exact Set.not_nonempty_empty hS
-#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_clopen_set
+#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_isClopen_set
-/
#print totallyDisconnectedSpace_iff_connectedComponent_subsingleton /-
@@ -1829,8 +1829,8 @@ instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type _) [Topo
#align totally_separated_space.of_discrete TotallySeparatedSpace.of_discrete
-/
-#print exists_clopen_of_totally_separated /-
-theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
+#print exists_isClopen_of_totally_separated /-
+theorem exists_isClopen_of_totally_separated {α : Type _} [TopologicalSpace α]
[TotallySeparatedSpace α] {x y : α} (hxy : x ≠ y) :
∃ (U : Set α) (hU : IsClopen U), x ∈ U ∧ y ∈ Uᶜ :=
by
@@ -1840,7 +1840,7 @@ theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
rw [univ_inter _] at clopen_U
rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
exact ⟨U, clopen_U, Ux, disj Vy⟩
-#align exists_clopen_of_totally_separated exists_clopen_of_totally_separated
+#align exists_clopen_of_totally_separated exists_isClopen_of_totally_separated
-/
end TotallySeparated
@@ -2052,7 +2052,7 @@ theorem isPreconnected_of_forall_constant {s : Set α}
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.bool_indicator s :=
by
- apply (continuousOn_boolIndicator_iff_clopen _ _).mpr ⟨_, _⟩
+ apply (continuousOn_boolIndicator_iff_isClopen _ _).mpr ⟨_, _⟩
· exact continuous_subtype_coe.is_open_preimage u u_op
· rw [preimage_subtype_coe_eq_compl hsuv H]
exact (continuous_subtype_coe.is_open_preimage v v_op).isClosed_compl
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -483,8 +483,8 @@ theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (
#align is_preconnected.preimage_of_open_map IsPreconnected.preimage_of_open_map
-/
-#print IsPreconnected.preimage_of_closed_map /-
-theorem IsPreconnected.preimage_of_closed_map [TopologicalSpace β] {s : Set β}
+#print IsPreconnected.preimage_of_isClosedMap /-
+theorem IsPreconnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β}
(hs : IsPreconnected s) {f : α → β} (hinj : Function.Injective f) (hf : IsClosedMap f)
(hsf : s ⊆ range f) : IsPreconnected (f ⁻¹' s) :=
isPreconnected_closed_iff.2 fun u v hu hv hsuv hsu hsv =>
@@ -500,7 +500,7 @@ theorem IsPreconnected.preimage_of_closed_map [TopologicalSpace β] {s : Set β}
exact ⟨f x, hx1, x, hx2, rfl⟩
· obtain ⟨y, hy1, hy2⟩ := hsv
exact ⟨f y, hy1, y, hy2, rfl⟩
-#align is_preconnected.preimage_of_closed_map IsPreconnected.preimage_of_closed_map
+#align is_preconnected.preimage_of_closed_map IsPreconnected.preimage_of_isClosedMap
-/
#print IsConnected.preimage_of_openMap /-
@@ -511,12 +511,12 @@ theorem IsConnected.preimage_of_openMap [TopologicalSpace β] {s : Set β} (hs :
#align is_connected.preimage_of_open_map IsConnected.preimage_of_openMap
-/
-#print IsConnected.preimage_of_closedMap /-
-theorem IsConnected.preimage_of_closedMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
+#print IsConnected.preimage_of_isClosedMap /-
+theorem IsConnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
{f : α → β} (hinj : Function.Injective f) (hf : IsClosedMap f) (hsf : s ⊆ range f) :
IsConnected (f ⁻¹' s) :=
- ⟨hs.Nonempty.preimage' hsf, hs.IsPreconnected.preimage_of_closed_map hinj hf hsf⟩
-#align is_connected.preimage_of_closed_map IsConnected.preimage_of_closedMap
+ ⟨hs.Nonempty.preimage' hsf, hs.IsPreconnected.preimage_of_isClosedMap hinj hf hsf⟩
+#align is_connected.preimage_of_closed_map IsConnected.preimage_of_isClosedMap
-/
#print IsPreconnected.subset_or_subset /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
-/
-import Mathbin.Data.Set.BoolIndicator
-import Mathbin.Order.SuccPred.Relation
-import Mathbin.Topology.SubsetProperties
-import Mathbin.Tactic.Congrm
+import Data.Set.BoolIndicator
+import Order.SuccPred.Relation
+import Topology.SubsetProperties
+import Tactic.Congrm
#align_import topology.connected from "leanprover-community/mathlib"@"d101e93197bb5f6ea89bd7ba386b7f7dff1f3903"
@@ -119,7 +119,7 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
#align set.subsingleton.is_preconnected Set.Subsingleton.isPreconnected
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print isPreconnected_of_forall /-
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
@@ -137,8 +137,8 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
#align is_preconnected_of_forall isPreconnected_of_forall
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print isPreconnected_of_forall_pair /-
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
@@ -211,9 +211,9 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (p «expr ⊆ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (p «expr ⊆ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i j «expr ∈ » t) -/
#print IsPreconnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -253,7 +253,7 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i j «expr ∈ » t) -/
#print IsConnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -1453,7 +1453,7 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr ⊆ » U) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (V «expr ⊆ » U) -/
#print locallyConnectedSpace_iff_open_connected_subsets /-
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
@@ -1805,7 +1805,7 @@ alias IsTotallySeparated.isTotallyDisconnected := isTotallyDisconnected_of_isTot
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
/-- A space is totally separated if any two points can be separated by two disjoint open sets
covering the whole space. -/
class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -1801,7 +1801,7 @@ theorem isTotallyDisconnected_of_isTotallySeparated {s : Set α} (H : IsTotallyS
#align is_totally_disconnected_of_is_totally_separated isTotallyDisconnected_of_isTotallySeparated
-/
-alias isTotallyDisconnected_of_isTotallySeparated ← IsTotallySeparated.isTotallyDisconnected
+alias IsTotallySeparated.isTotallyDisconnected := isTotallyDisconnected_of_isTotallySeparated
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.connected
-! leanprover-community/mathlib commit d101e93197bb5f6ea89bd7ba386b7f7dff1f3903
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Set.BoolIndicator
import Mathbin.Order.SuccPred.Relation
import Mathbin.Topology.SubsetProperties
import Mathbin.Tactic.Congrm
+#align_import topology.connected from "leanprover-community/mathlib"@"d101e93197bb5f6ea89bd7ba386b7f7dff1f3903"
+
/-!
# Connected subsets of topological spaces
@@ -122,7 +119,7 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
#align set.subsingleton.is_preconnected Set.Subsingleton.isPreconnected
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print isPreconnected_of_forall /-
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
@@ -140,8 +137,8 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
#align is_preconnected_of_forall isPreconnected_of_forall
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print isPreconnected_of_forall_pair /-
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
@@ -214,9 +211,9 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (p «expr ⊆ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (p «expr ⊆ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
#print IsPreconnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -256,7 +253,7 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
#print IsConnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -1456,7 +1453,7 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr ⊆ » U) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr ⊆ » U) -/
#print locallyConnectedSpace_iff_open_connected_subsets /-
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -123,6 +123,7 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+#print isPreconnected_of_forall /-
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall {s : Set α} (x : α)
@@ -137,9 +138,11 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
have := ht u v hu hv (subset.trans ts hs) ⟨x, xt, xu⟩ ⟨y, yt, yv⟩
exact this.imp fun z hz => ⟨ts hz.1, hz.2⟩
#align is_preconnected_of_forall isPreconnected_of_forall
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+#print isPreconnected_of_forall_pair /-
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall_pair {s : Set α}
@@ -149,6 +152,7 @@ theorem isPreconnected_of_forall_pair {s : Set α}
rcases eq_empty_or_nonempty s with (rfl | ⟨x, hx⟩)
exacts [isPreconnected_empty, isPreconnected_of_forall x fun y => H x hx y]
#align is_preconnected_of_forall_pair isPreconnected_of_forall_pair
+-/
#print isPreconnected_sUnion /-
/-- A union of a family of preconnected sets with a common point is preconnected as well. -/
@@ -161,23 +165,30 @@ theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x
#align is_preconnected_sUnion isPreconnected_sUnion
-/
+#print isPreconnected_iUnion /-
theorem isPreconnected_iUnion {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
#align is_preconnected_Union isPreconnected_iUnion
+-/
+#print IsPreconnected.union /-
theorem IsPreconnected.union (x : α) {s t : Set α} (H1 : x ∈ s) (H2 : x ∈ t) (H3 : IsPreconnected s)
(H4 : IsPreconnected t) : IsPreconnected (s ∪ t) :=
sUnion_pair s t ▸
isPreconnected_sUnion x {s, t} (by rintro r (rfl | rfl | h) <;> assumption)
(by rintro r (rfl | rfl | h) <;> assumption)
#align is_preconnected.union IsPreconnected.union
+-/
+#print IsPreconnected.union' /-
theorem IsPreconnected.union' {s t : Set α} (H : (s ∩ t).Nonempty) (hs : IsPreconnected s)
(ht : IsPreconnected t) : IsPreconnected (s ∪ t) := by rcases H with ⟨x, hxs, hxt⟩;
exact hs.union x hxs hxt ht
#align is_preconnected.union' IsPreconnected.union'
+-/
+#print IsConnected.union /-
theorem IsConnected.union {s t : Set α} (H : (s ∩ t).Nonempty) (Hs : IsConnected s)
(Ht : IsConnected t) : IsConnected (s ∪ t) :=
by
@@ -187,6 +198,7 @@ theorem IsConnected.union {s t : Set α} (H : (s ∩ t).Nonempty) (Hs : IsConnec
IsPreconnected.union x (mem_of_mem_inter_left hx) (mem_of_mem_inter_right hx) Hs.is_preconnected
Ht.is_preconnected
#align is_connected.union IsConnected.union
+-/
#print IsPreconnected.sUnion_directed /-
/-- The directed sUnion of a set S of preconnected subsets is preconnected. -/
@@ -205,6 +217,7 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (p «expr ⊆ » t) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+#print IsPreconnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
@@ -241,8 +254,10 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
obtain ⟨p, hpt, hip, hjp, hp⟩ := P i hi j hj (K i hi j hj)
exact ⟨⋃ j ∈ p, s j, bUnion_subset_bUnion_left hpt, mem_bUnion hip hxi, mem_bUnion hjp hyj, hp⟩
#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+#print IsConnected.biUnion_of_reflTransGen /-
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
@@ -254,7 +269,9 @@ theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι
⟨nonempty_biUnion.2 <| ⟨ht.some, ht.some_mem, (H _ ht.some_mem).Nonempty⟩,
IsPreconnected.biUnion_of_reflTransGen (fun i hi => (H i hi).IsPreconnected) K⟩
#align is_connected.bUnion_of_refl_trans_gen IsConnected.biUnion_of_reflTransGen
+-/
+#print IsPreconnected.iUnion_of_reflTransGen /-
/-- Preconnectedness of the Union of a family of preconnected sets
indexed by the vertices of a preconnected graph,
where two vertices are joined when the corresponding sets intersect. -/
@@ -266,13 +283,16 @@ theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
IsPreconnected.biUnion_of_reflTransGen (fun i _ => H i) fun i _ j _ => by
simpa [mem_univ] using K i j
#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGen
+-/
+#print IsConnected.iUnion_of_reflTransGen /-
theorem IsConnected.iUnion_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
(H : ∀ i, IsConnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) : IsConnected (⋃ n, s n) :=
⟨nonempty_iUnion.2 <| Nonempty.elim ‹_› fun i : ι => ⟨i, (H _).Nonempty⟩,
IsPreconnected.iUnion_of_reflTransGen (fun i => (H i).IsPreconnected) K⟩
#align is_connected.Union_of_refl_trans_gen IsConnected.iUnion_of_reflTransGen
+-/
section SuccOrder
@@ -280,6 +300,7 @@ open Order
variable [LinearOrder β] [SuccOrder β] [IsSuccArchimedean β]
+#print IsPreconnected.iUnion_of_chain /-
/-- The Union of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is preconnected. -/
theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
@@ -287,7 +308,9 @@ theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconn
IsPreconnected.iUnion_of_reflTransGen H fun i j =>
reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by rw [inter_comm]; exact K i
#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chain
+-/
+#print IsConnected.iUnion_of_chain /-
/-- The Union of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is connected. -/
theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
@@ -295,7 +318,9 @@ theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n
IsConnected.iUnion_of_reflTransGen H fun i j =>
reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by rw [inter_comm]; exact K i
#align is_connected.Union_of_chain IsConnected.iUnion_of_chain
+-/
+#print IsPreconnected.biUnion_of_chain /-
/-- The Union of preconnected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : OrdConnected t)
@@ -314,7 +339,9 @@ theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : O
reflTransGen_of_succ _ (fun k hk => ⟨h3 hi hj hk, h1 hi hj hk⟩) fun k hk =>
⟨by rw [inter_comm]; exact h3 hj hi hk, h2 hj hi hk⟩
#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chain
+-/
+#print IsConnected.biUnion_of_chain /-
/-- The Union of connected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
theorem IsConnected.biUnion_of_chain {s : β → Set α} {t : Set β} (hnt : t.Nonempty)
@@ -323,6 +350,7 @@ theorem IsConnected.biUnion_of_chain {s : β → Set α} {t : Set β} (hnt : t.N
⟨nonempty_biUnion.2 <| ⟨hnt.some, hnt.some_mem, (H _ hnt.some_mem).Nonempty⟩,
IsPreconnected.biUnion_of_chain ht (fun i hi => (H i hi).IsPreconnected) K⟩
#align is_connected.bUnion_of_chain IsConnected.biUnion_of_chain
+-/
end SuccOrder
@@ -395,6 +423,7 @@ theorem IsConnected.image [TopologicalSpace β] {s : Set α} (H : IsConnected s)
#align is_connected.image IsConnected.image
-/
+#print isPreconnected_closed_iff /-
theorem isPreconnected_closed_iff {s : Set α} :
IsPreconnected s ↔
∀ t t',
@@ -420,6 +449,7 @@ theorem isPreconnected_closed_iff {s : Set α} :
rw [← compl_union] at this
exact this.ne_empty huv.disjoint_compl_right.inter_eq⟩
#align is_preconnected_closed_iff isPreconnected_closed_iff
+-/
#print Inducing.isPreconnected_image /-
theorem Inducing.isPreconnected_image [TopologicalSpace β] {s : Set α} {f : α → β}
@@ -492,6 +522,7 @@ theorem IsConnected.preimage_of_closedMap [TopologicalSpace β] {s : Set β} (hs
#align is_connected.preimage_of_closed_map IsConnected.preimage_of_closedMap
-/
+#print IsPreconnected.subset_or_subset /-
theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : Disjoint u v)
(hsuv : s ⊆ u ∪ v) (hs : IsPreconnected s) : s ⊆ u ∨ s ⊆ v :=
by
@@ -503,7 +534,9 @@ theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : D
disjoint_iff_inter_eq_empty.1 huv] at hs
exact Or.inl ((hs s.disjoint_empty).subset_left_of_subset_union hsuv)
#align is_preconnected.subset_or_subset IsPreconnected.subset_or_subset
+-/
+#print IsPreconnected.subset_left_of_subset_union /-
theorem IsPreconnected.subset_left_of_subset_union (hu : IsOpen u) (hv : IsOpen v)
(huv : Disjoint u v) (hsuv : s ⊆ u ∪ v) (hsu : (s ∩ u).Nonempty) (hs : IsPreconnected s) :
s ⊆ u :=
@@ -514,13 +547,17 @@ theorem IsPreconnected.subset_left_of_subset_union (hu : IsOpen u) (hv : IsOpen
obtain ⟨x, _, hx⟩ := hs u v hu hv hsuv hsu hsv
exact Set.disjoint_iff.1 huv hx)
#align is_preconnected.subset_left_of_subset_union IsPreconnected.subset_left_of_subset_union
+-/
+#print IsPreconnected.subset_right_of_subset_union /-
theorem IsPreconnected.subset_right_of_subset_union (hu : IsOpen u) (hv : IsOpen v)
(huv : Disjoint u v) (hsuv : s ⊆ u ∪ v) (hsv : (s ∩ v).Nonempty) (hs : IsPreconnected s) :
s ⊆ v :=
hs.subset_left_of_subset_union hv hu huv.symm (union_comm u v ▸ hsuv) hsv
#align is_preconnected.subset_right_of_subset_union IsPreconnected.subset_right_of_subset_union
+-/
+#print IsPreconnected.subset_of_closure_inter_subset /-
/-- If a preconnected set `s` intersects an open set `u`, and limit points of `u` inside `s` are
contained in `u`, then the whole set `s` is contained in `u`. -/
theorem IsPreconnected.subset_of_closure_inter_subset (hs : IsPreconnected s) (hu : IsOpen u)
@@ -536,8 +573,10 @@ theorem IsPreconnected.subset_of_closure_inter_subset (hs : IsPreconnected s) (h
apply hs.subset_left_of_subset_union hu is_closed_closure.is_open_compl _ A h'u
exact disjoint_compl_right.mono_right (compl_subset_compl.2 subset_closure)
#align is_preconnected.subset_of_closure_inter_subset IsPreconnected.subset_of_closure_inter_subset
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print IsPreconnected.prod /-
theorem IsPreconnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs : IsPreconnected s)
(ht : IsPreconnected t) : IsPreconnected (s ×ˢ t) :=
by
@@ -552,12 +591,15 @@ theorem IsPreconnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs
(ht.image _ (Continuous.Prod.mk _).ContinuousOn).union (a₁, b₂) ⟨b₂, hb₂, rfl⟩ ⟨a₁, ha₁, rfl⟩
(hs.image _ (continuous_id.prod_mk continuous_const).ContinuousOn)
#align is_preconnected.prod IsPreconnected.prod
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print IsConnected.prod /-
theorem IsConnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs : IsConnected s)
(ht : IsConnected t) : IsConnected (s ×ˢ t) :=
⟨hs.1.Prod ht.1, hs.2.Prod ht.2⟩
#align is_connected.prod IsConnected.prod
+-/
#print isPreconnected_univ_pi /-
theorem isPreconnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set (π i)}
@@ -597,6 +639,7 @@ theorem isConnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set (π
#align is_connected_univ_pi isConnected_univ_pi
-/
+#print Sigma.isConnected_iff /-
theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σ i, π i)} :
IsConnected s ↔ ∃ i t, IsConnected t ∧ s = Sigma.mk i '' t :=
by
@@ -616,7 +659,9 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σ i,
· rintro ⟨i, t, ht, rfl⟩
exact ht.image _ continuous_sigma_mk.continuous_on
#align sigma.is_connected_iff Sigma.isConnected_iff
+-/
+#print Sigma.isPreconnected_iff /-
theorem Sigma.isPreconnected_iff [hι : Nonempty ι] [∀ i, TopologicalSpace (π i)]
{s : Set (Σ i, π i)} : IsPreconnected s ↔ ∃ i t, IsPreconnected t ∧ s = Sigma.mk i '' t :=
by
@@ -628,7 +673,9 @@ theorem Sigma.isPreconnected_iff [hι : Nonempty ι] [∀ i, TopologicalSpace (
· rintro ⟨a, t, ht, rfl⟩
exact ht.image _ continuous_sigma_mk.continuous_on
#align sigma.is_preconnected_iff Sigma.isPreconnected_iff
+-/
+#print Sum.isConnected_iff /-
theorem Sum.isConnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
IsConnected s ↔
(∃ t, IsConnected t ∧ s = Sum.inl '' t) ∨ ∃ t, IsConnected t ∧ s = Sum.inr '' t :=
@@ -654,7 +701,9 @@ theorem Sum.isConnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
· exact ht.image _ continuous_inl.continuous_on
· exact ht.image _ continuous_inr.continuous_on
#align sum.is_connected_iff Sum.isConnected_iff
+-/
+#print Sum.isPreconnected_iff /-
theorem Sum.isPreconnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
IsPreconnected s ↔
(∃ t, IsPreconnected t ∧ s = Sum.inl '' t) ∨ ∃ t, IsPreconnected t ∧ s = Sum.inr '' t :=
@@ -669,6 +718,7 @@ theorem Sum.isPreconnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
· exact ht.image _ continuous_inl.continuous_on
· exact ht.image _ continuous_inr.continuous_on
#align sum.is_preconnected_iff Sum.isPreconnected_iff
+-/
#print connectedComponent /-
/-- The connected component of a point is the maximal connected set
@@ -839,11 +889,13 @@ theorem connectedComponentIn_univ (x : α) : connectedComponentIn univ x = conne
#align connected_component_in_univ connectedComponentIn_univ
-/
+#print connectedComponent_disjoint /-
theorem connectedComponent_disjoint {x y : α} (h : connectedComponent x ≠ connectedComponent y) :
Disjoint (connectedComponent x) (connectedComponent y) :=
Set.disjoint_left.2 fun a h1 h2 =>
h ((connectedComponent_eq h1).trans (connectedComponent_eq h2).symm)
#align connected_component_disjoint connectedComponent_disjoint
+-/
#print isClosed_connectedComponent /-
theorem isClosed_connectedComponent {x : α} : IsClosed (connectedComponent x) :=
@@ -1000,10 +1052,12 @@ instance (priority := 100) IrreducibleSpace.connectedSpace (α : Type u) [Topolo
#align irreducible_space.connected_space IrreducibleSpace.connectedSpace
-/
+#print nonempty_inter /-
theorem nonempty_inter [PreconnectedSpace α] {s t : Set α} :
IsOpen s → IsOpen t → s ∪ t = univ → s.Nonempty → t.Nonempty → (s ∩ t).Nonempty := by
simpa only [univ_inter, univ_subset_iff] using @PreconnectedSpace.isPreconnected_univ α _ _ s t
#align nonempty_inter nonempty_inter
+-/
#print isClopen_iff /-
theorem isClopen_iff [PreconnectedSpace α] {s : Set α} : IsClopen s ↔ s = ∅ ∨ s = univ :=
@@ -1072,6 +1126,7 @@ theorem isConnected_iff_connectedSpace {s : Set α} : IsConnected s ↔ Connecte
#align is_connected_iff_connected_space isConnected_iff_connectedSpace
-/
+#print isPreconnected_iff_subset_of_disjoint /-
/-- A set `s` is preconnected if and only if
for every cover by two open sets that are disjoint on `s`,
it is contained in one of the two covering sets. -/
@@ -1100,7 +1155,9 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
· rcases hsv with ⟨x, hxs, hxv⟩; exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
· rcases hsu with ⟨x, hxs, hxu⟩; exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint isPreconnected_iff_subset_of_disjoint
+-/
+#print isConnected_iff_sUnion_disjoint_open /-
/-- A set `s` is connected if and only if
for every cover by a finite collection of open sets that are pairwise disjoint on `s`,
it is contained in one of the members of the collection. -/
@@ -1156,7 +1213,9 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
rintro (rfl | rfl) <;> assumption
· simpa using hs
#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
+-/
+#print IsPreconnected.subset_clopen /-
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
(hne : (s ∩ t).Nonempty) : s ⊆ t := by
@@ -1166,13 +1225,17 @@ theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht
exact hs t (tᶜ) ht.is_open ht.compl.is_open (fun x hx => em _) hne this
exact hx' hx
#align is_preconnected.subset_clopen IsPreconnected.subset_clopen
+-/
+#print disjoint_or_subset_of_clopen /-
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
theorem disjoint_or_subset_of_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
Disjoint s t ∨ s ⊆ t :=
(disjoint_or_nonempty_inter s t).imp_right <| hs.subset_clopen ht
#align disjoint_or_subset_of_clopen disjoint_or_subset_of_clopen
+-/
+#print isPreconnected_iff_subset_of_disjoint_closed /-
/-- A set `s` is preconnected if and only if
for every cover by two closed sets that are disjoint on `s`,
it is contained in one of the two covering sets. -/
@@ -1203,7 +1266,9 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
· rcases hsv with ⟨x, hxs, hxv⟩; exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
· rcases hsu with ⟨x, hxs, hxu⟩; exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint_closed isPreconnected_iff_subset_of_disjoint_closed
+-/
+#print isPreconnected_iff_subset_of_fully_disjoint_closed /-
/-- A closed set `s` is preconnected if and only if
for every cover by two closed sets that are disjoint,
it is contained in one of the two covering sets. -/
@@ -1227,6 +1292,7 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
exact subset_inter hss subset.rfl
· rwa [disjoint_iff_inter_eq_empty, ← inter_inter_distrib_right, inter_comm]
#align is_preconnected_iff_subset_of_fully_disjoint_closed isPreconnected_iff_subset_of_fully_disjoint_closed
+-/
#print IsClopen.connectedComponent_subset /-
theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s) :
@@ -1391,6 +1457,7 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr ⊆ » U) -/
+#print locallyConnectedSpace_iff_open_connected_subsets /-
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
∀ (x : α), ∀ U ∈ 𝓝 x, ∃ (V : _) (_ : V ⊆ U), IsOpen V ∧ x ∈ V ∧ IsConnected V :=
@@ -1410,6 +1477,7 @@ theorem locallyConnectedSpace_iff_open_connected_subsets :
⟨V, hV, hVU⟩,
fun ⟨V, ⟨hV, hxV, _⟩, hVU⟩ => mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩
#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsets
+-/
#print DiscreteTopology.toLocallyConnectedSpace /-
/-- A space with discrete topology is a locally connected space. -/
@@ -1477,6 +1545,7 @@ theorem locallyConnectedSpace_iff_connectedComponentIn_open :
#align locally_connected_space_iff_connected_component_in_open locallyConnectedSpace_iff_connectedComponentIn_open
-/
+#print locallyConnectedSpace_iff_connected_subsets /-
theorem locallyConnectedSpace_iff_connected_subsets :
LocallyConnectedSpace α ↔ ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ V ∈ 𝓝 x, IsPreconnected V ∧ V ⊆ U :=
by
@@ -1491,6 +1560,7 @@ theorem locallyConnectedSpace_iff_connected_subsets :
rcases h y U (hU.mem_nhds <| (connectedComponentIn_subset _ _) hy) with ⟨V, hVy, hV, hVU⟩
exact Filter.mem_of_superset hVy (hV.subset_connected_component_in (mem_of_mem_nhds hVy) hVU)
#align locally_connected_space_iff_connected_subsets locallyConnectedSpace_iff_connected_subsets
+-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
#print locallyConnectedSpace_iff_connected_basis /-
@@ -1505,6 +1575,7 @@ theorem locallyConnectedSpace_iff_connected_basis :
#align locally_connected_space_iff_connected_basis locallyConnectedSpace_iff_connected_basis
-/
+#print locallyConnectedSpace_of_connected_bases /-
theorem locallyConnectedSpace_of_connected_bases {ι : Type _} (b : α → ι → Set α) (p : α → ι → Prop)
(hbasis : ∀ x, (𝓝 x).HasBasis (p x) (b x))
(hconnected : ∀ x i, p x i → IsPreconnected (b x i)) : LocallyConnectedSpace α :=
@@ -1515,6 +1586,7 @@ theorem locallyConnectedSpace_of_connected_bases {ι : Type _} (b : α → ι
(fun i hi => ⟨b x i, ⟨(hbasis x).mem_of_mem hi, hconnected x i hi⟩, subset_rfl⟩) fun s hs =>
⟨(hbasis x).index s hs.1, ⟨(hbasis x).property_index hs.1, (hbasis x).set_index_subset hs.1⟩⟩
#align locally_connected_space_of_connected_bases locallyConnectedSpace_of_connected_bases
+-/
end LocallyConnectedSpace
@@ -1565,6 +1637,7 @@ instance Pi.totallyDisconnectedSpace {α : Type _} {β : α → Type _}
#align pi.totally_disconnected_space Pi.totallyDisconnectedSpace
-/
+#print Prod.totallyDisconnectedSpace /-
instance Prod.totallyDisconnectedSpace [TopologicalSpace β] [TotallyDisconnectedSpace α]
[TotallyDisconnectedSpace β] : TotallyDisconnectedSpace (α × β) :=
⟨fun t h1 h2 =>
@@ -1574,6 +1647,7 @@ instance Prod.totallyDisconnectedSpace [TopologicalSpace β] [TotallyDisconnecte
Prod.ext (H1.Subsingleton ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩)
(H2.Subsingleton ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩)⟩
#align prod.totally_disconnected_space Prod.totallyDisconnectedSpace
+-/
instance [TopologicalSpace β] [TotallyDisconnectedSpace α] [TotallyDisconnectedSpace β] :
TotallyDisconnectedSpace (Sum α β) :=
@@ -1592,6 +1666,7 @@ instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i
· obtain ⟨a, t, ht, rfl⟩ := Sigma.isConnected_iff.1 ⟨h, hs⟩
exact ht.is_preconnected.subsingleton.image _
+#print isTotallyDisconnected_of_clopen_set /-
/-- Let `X` be a topological space, and suppose that for all distinct `x,y ∈ X`, there
is some clopen set `U` such that `x ∈ U` and `y ∉ U`. Then `X` is totally disconnected. -/
theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
@@ -1608,6 +1683,7 @@ theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
rw [inter_compl_self, Set.inter_empty] at hS
exact Set.not_nonempty_empty hS
#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_clopen_set
+-/
#print totallyDisconnectedSpace_iff_connectedComponent_subsingleton /-
/-- A space is totally disconnected iff its connected components are subsingletons. -/
@@ -1647,6 +1723,7 @@ theorem connectedComponent_eq_singleton [TotallyDisconnectedSpace α] (x : α) :
#align connected_component_eq_singleton connectedComponent_eq_singleton
-/
+#print Continuous.image_connectedComponent_eq_singleton /-
/-- The image of a connected component in a totally disconnected space is a singleton. -/
@[simp]
theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [TopologicalSpace β]
@@ -1655,6 +1732,7 @@ theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [Topologi
(Set.subsingleton_iff_singleton <| mem_image_of_mem f mem_connectedComponent).mp
(isPreconnected_connectedComponent.image f h.ContinuousOn).Subsingleton
#align continuous.image_connected_component_eq_singleton Continuous.image_connectedComponent_eq_singleton
+-/
#print isTotallyDisconnected_of_totallyDisconnectedSpace /-
theorem isTotallyDisconnected_of_totallyDisconnectedSpace [TotallyDisconnectedSpace α] (s : Set α) :
@@ -1730,7 +1808,7 @@ alias isTotallyDisconnected_of_isTotallySeparated ← IsTotallySeparated.isTotal
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
/-- A space is totally separated if any two points can be separated by two disjoint open sets
covering the whole space. -/
class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
@@ -1754,6 +1832,7 @@ instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type _) [Topo
#align totally_separated_space.of_discrete TotallySeparatedSpace.of_discrete
-/
+#print exists_clopen_of_totally_separated /-
theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
[TotallySeparatedSpace α] {x y : α} (hxy : x ≠ y) :
∃ (U : Set α) (hU : IsClopen U), x ∈ U ∧ y ∈ Uᶜ :=
@@ -1765,6 +1844,7 @@ theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
exact ⟨U, clopen_U, Ux, disj Vy⟩
#align exists_clopen_of_totally_separated exists_clopen_of_totally_separated
+-/
end TotallySeparated
@@ -1889,10 +1969,12 @@ theorem Continuous.connectedComponentsLift_comp_coe (h : Continuous f) :
#align continuous.connected_components_lift_comp_coe Continuous.connectedComponentsLift_comp_coe
-/
+#print connectedComponents_lift_unique' /-
theorem connectedComponents_lift_unique' {β : Sort _} {g₁ g₂ : ConnectedComponents α → β}
(hg : g₁ ∘ (coe : α → ConnectedComponents α) = g₂ ∘ coe) : g₁ = g₂ :=
ConnectedComponents.surjective_coe.injective_comp_right hg
#align connected_components_lift_unique' connectedComponents_lift_unique'
+-/
#print Continuous.connectedComponentsLift_unique /-
theorem Continuous.connectedComponentsLift_unique (h : Continuous f) (g : ConnectedComponents α → β)
@@ -1941,13 +2023,16 @@ def Continuous.connectedComponentsMap {β : Type _} [TopologicalSpace β] {f :
#align continuous.connected_components_map Continuous.connectedComponentsMap
-/
+#print Continuous.connectedComponentsMap_continuous /-
theorem Continuous.connectedComponentsMap_continuous {β : Type _} [TopologicalSpace β] {f : α → β}
(h : Continuous f) : Continuous h.connectedComponentsMap :=
Continuous.connectedComponentsLift_continuous (continuous_quotient_mk'.comp h)
#align continuous.connected_components_map_continuous Continuous.connectedComponentsMap_continuous
+-/
end connectedComponentSetoid
+#print IsPreconnected.constant /-
/-- A preconnected set `s` has the property that every map to a
discrete space that is continuous on `s` is constant on `s` -/
theorem IsPreconnected.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopology Y] {s : Set α}
@@ -1955,7 +2040,9 @@ theorem IsPreconnected.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopol
(hy : y ∈ s) : f x = f y :=
(hs.image f hf).Subsingleton (mem_image_of_mem f hx) (mem_image_of_mem f hy)
#align is_preconnected.constant IsPreconnected.constant
+-/
+#print isPreconnected_of_forall_constant /-
/-- If every map to `bool` (a discrete two-element space), that is
continuous on a set `s`, is constant on s, then s is preconnected -/
theorem isPreconnected_of_forall_constant {s : Set α}
@@ -1975,19 +2062,24 @@ theorem isPreconnected_of_forall_constant {s : Set α}
simpa [(u.mem_iff_bool_indicator _).mp x_in_u, (u.not_mem_iff_bool_indicator _).mp hy] using
hs _ this x x_in_s y y_in_s
#align is_preconnected_of_forall_constant isPreconnected_of_forall_constant
+-/
+#print PreconnectedSpace.constant /-
/-- A `preconnected_space` version of `is_preconnected.constant` -/
theorem PreconnectedSpace.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopology Y]
(hp : PreconnectedSpace α) {f : α → Y} (hf : Continuous f) {x y : α} : f x = f y :=
IsPreconnected.constant hp.isPreconnected_univ (Continuous.continuousOn hf) trivial trivial
#align preconnected_space.constant PreconnectedSpace.constant
+-/
+#print preconnectedSpace_of_forall_constant /-
/-- A `preconnected_space` version of `is_preconnected_of_forall_constant` -/
theorem preconnectedSpace_of_forall_constant
(hs : ∀ f : α → Bool, Continuous f → ∀ x y, f x = f y) : PreconnectedSpace α :=
⟨isPreconnected_of_forall_constant fun f hf x hx y hy =>
hs f (continuous_iff_continuousOn_univ.mpr hf) x y⟩
#align preconnected_space_of_forall_constant preconnectedSpace_of_forall_constant
+-/
#print IsPreconnected.constant_of_mapsTo /-
/-- Refinement of `is_preconnected.constant` only assuming the map factors through a
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -122,7 +122,7 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
#align set.subsingleton.is_preconnected Set.Subsingleton.isPreconnected
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall {s : Set α} (x : α)
@@ -138,8 +138,8 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
exact this.imp fun z hz => ⟨ts hz.1, hz.2⟩
#align is_preconnected_of_forall isPreconnected_of_forall
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall_pair {s : Set α}
@@ -202,9 +202,9 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (p «expr ⊆ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (p «expr ⊆ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
@@ -242,7 +242,7 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
exact ⟨⋃ j ∈ p, s j, bUnion_subset_bUnion_left hpt, mem_bUnion hip hxi, mem_bUnion hjp hyj, hp⟩
#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
@@ -1390,7 +1390,7 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr ⊆ » U) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr ⊆ » U) -/
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
∀ (x : α), ∀ U ∈ 𝓝 x, ∃ (V : _) (_ : V ⊆ U), IsOpen V ∧ x ∈ V ∧ IsConnected V :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -608,7 +608,7 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σ i,
rw [h]
exact
IsPreconnected.subset_left_of_subset_union (isOpen_sigma_fst_preimage _)
- (isOpen_sigma_fst_preimage { x | x ≠ i }) (Set.disjoint_iff.2 fun x hx => hx.2 hx.1)
+ (isOpen_sigma_fst_preimage {x | x ≠ i}) (Set.disjoint_iff.2 fun x hx => hx.2 hx.1)
(fun y hy => by simp [Classical.em]) ⟨⟨i, x⟩, hx, rfl⟩ hs.2
exact
⟨i, Sigma.mk i ⁻¹' s, hs.preimage_of_open_map sigma_mk_injective isOpenMap_sigmaMk this,
@@ -674,7 +674,7 @@ theorem Sum.isPreconnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
/-- The connected component of a point is the maximal connected set
that contains this point. -/
def connectedComponent (x : α) : Set α :=
- ⋃₀ { s : Set α | IsPreconnected s ∧ x ∈ s }
+ ⋃₀ {s : Set α | IsPreconnected s ∧ x ∈ s}
#align connected_component connectedComponent
-/
@@ -1278,8 +1278,8 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
-- To do this we decompose connected_component t into T₁ and T₂
-- we will show that connected_component t is a subset of either and hence
-- (f ⁻¹' connected_component t) is a subset of u or v
- let T₁ := { t' ∈ connectedComponent t | f ⁻¹' {t'} ⊆ u }
- let T₂ := { t' ∈ connectedComponent t | f ⁻¹' {t'} ⊆ v }
+ let T₁ := {t' ∈ connectedComponent t | f ⁻¹' {t'} ⊆ u}
+ let T₂ := {t' ∈ connectedComponent t | f ⁻¹' {t'} ⊆ v}
have fiber_decomp : ∀ t' ∈ connectedComponent t, f ⁻¹' {t'} ⊆ u ∨ f ⁻¹' {t'} ⊆ v :=
by
intro t' ht'
@@ -1730,7 +1730,7 @@ alias isTotallyDisconnected_of_isTotallySeparated ← IsTotallySeparated.isTotal
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
/-- A space is totally separated if any two points can be separated by two disjoint open sets
covering the whole space. -/
class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -126,12 +126,12 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall {s : Set α} (x : α)
- (H : ∀ y ∈ s, ∃ (t : _)(_ : t ⊆ s), x ∈ t ∧ y ∈ t ∧ IsPreconnected t) : IsPreconnected s :=
+ (H : ∀ y ∈ s, ∃ (t : _) (_ : t ⊆ s), x ∈ t ∧ y ∈ t ∧ IsPreconnected t) : IsPreconnected s :=
by
rintro u v hu hv hs ⟨z, zs, zu⟩ ⟨y, ys, yv⟩
have xs : x ∈ s := by rcases H y ys with ⟨t, ts, xt, yt, ht⟩; exact ts xt
wlog xu : x ∈ u
- · rw [inter_comm u v]; rw [union_comm] at hs
+ · rw [inter_comm u v]; rw [union_comm] at hs
exact this x H v u hv hu hs y ys yv z zs zu xs ((hs xs).resolve_right xu)
rcases H y ys with ⟨t, ts, xt, yt, ht⟩
have := ht u v hu hv (subset.trans ts hs) ⟨x, xt, xu⟩ ⟨y, yt, yv⟩
@@ -144,10 +144,10 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall_pair {s : Set α}
(H :
- ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), ∃ (t : _)(_ : t ⊆ s), x ∈ t ∧ y ∈ t ∧ IsPreconnected t) :
+ ∀ (x) (_ : x ∈ s) (y) (_ : y ∈ s), ∃ (t : _) (_ : t ⊆ s), x ∈ t ∧ y ∈ t ∧ IsPreconnected t) :
IsPreconnected s := by
rcases eq_empty_or_nonempty s with (rfl | ⟨x, hx⟩)
- exacts[isPreconnected_empty, isPreconnected_of_forall x fun y => H x hx y]
+ exacts [isPreconnected_empty, isPreconnected_of_forall x fun y => H x hx y]
#align is_preconnected_of_forall_pair isPreconnected_of_forall_pair
#print isPreconnected_sUnion /-
@@ -217,7 +217,7 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
let R := fun i j : ι => (s i ∩ s j).Nonempty ∧ i ∈ t
have P :
∀ (i) (_ : i ∈ t) (j) (_ : j ∈ t),
- refl_trans_gen R i j → ∃ (p : _)(_ : p ⊆ t), i ∈ p ∧ j ∈ p ∧ IsPreconnected (⋃ j ∈ p, s j) :=
+ refl_trans_gen R i j → ∃ (p : _) (_ : p ⊆ t), i ∈ p ∧ j ∈ p ∧ IsPreconnected (⋃ j ∈ p, s j) :=
by
intro i hi j hj h
induction h
@@ -373,17 +373,17 @@ theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : IsPreconnec
rcases continuousOn_iff'.1 hf v hv with ⟨v', hv', v'_eq⟩
-- Reformulate `huv : f '' s ⊆ u ∪ v` in terms of `u'` and `v'`
replace huv : s ⊆ u' ∪ v'
- · rw [image_subset_iff, preimage_union] at huv
+ · rw [image_subset_iff, preimage_union] at huv
replace huv := subset_inter huv (subset.refl _)
- rw [inter_distrib_right, u'_eq, v'_eq, ← inter_distrib_right] at huv
+ rw [inter_distrib_right, u'_eq, v'_eq, ← inter_distrib_right] at huv
exact (subset_inter_iff.1 huv).1
-- Now `s ⊆ u' ∪ v'`, so we can apply `‹is_preconnected s›`
obtain ⟨z, hz⟩ : (s ∩ (u' ∩ v')).Nonempty :=
by
refine' H u' v' hu' hv' huv ⟨x, _⟩ ⟨y, _⟩ <;> rw [inter_comm]
- exacts[u'_eq ▸ ⟨xu, xs⟩, v'_eq ▸ ⟨yv, ys⟩]
+ exacts [u'_eq ▸ ⟨xu, xs⟩, v'_eq ▸ ⟨yv, ys⟩]
rw [← inter_self s, inter_assoc, inter_left_comm s u', ← inter_assoc, inter_comm s, inter_comm s,
- ← u'_eq, ← v'_eq] at hz
+ ← u'_eq, ← v'_eq] at hz
exact ⟨f z, ⟨z, hz.1.2, rfl⟩, hz.1.1, hz.2.1⟩
#align is_preconnected.image IsPreconnected.image
-/
@@ -408,7 +408,7 @@ theorem isPreconnected_closed_iff {s : Set α} :
have xt' : x ∉ t' := (h' xs).resolve_left (absurd xt)
have yt : y ∉ t := (h' ys).resolve_right (absurd yt')
have := h _ _ ht.is_open_compl ht'.is_open_compl h' ⟨y, ys, yt⟩ ⟨x, xs, xt'⟩
- rw [← compl_union] at this
+ rw [← compl_union] at this
exact this.ne_empty htt'.disjoint_compl_right.inter_eq,
by
rintro h u v hu hv huv ⟨x, xs, xu⟩ ⟨y, ys, yv⟩
@@ -417,7 +417,7 @@ theorem isPreconnected_closed_iff {s : Set α} :
have xv : x ∉ v := (h' xs).elim (absurd xu) id
have yu : y ∉ u := (h' ys).elim id (absurd yv)
have := h _ _ hu.is_closed_compl hv.is_closed_compl h' ⟨y, ys, yu⟩ ⟨x, xs, xv⟩
- rw [← compl_union] at this
+ rw [← compl_union] at this
exact this.ne_empty huv.disjoint_compl_right.inter_eq⟩
#align is_preconnected_closed_iff isPreconnected_closed_iff
@@ -445,10 +445,10 @@ theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (
by
obtain ⟨b, hbs, hbu, hbv⟩ := hs (f '' u) (f '' v) (hf u hu) (hf v hv) _ _ _
obtain ⟨a, rfl⟩ := hsf hbs
- rw [hinj.mem_set_image] at hbu hbv
+ rw [hinj.mem_set_image] at hbu hbv
exact ⟨a, hbs, hbu, hbv⟩
· have := image_subset f hsuv
- rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
+ rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
· obtain ⟨x, hx1, hx2⟩ := hsu
exact ⟨f x, hx1, x, hx2, rfl⟩
· obtain ⟨y, hy1, hy2⟩ := hsv
@@ -465,10 +465,10 @@ theorem IsPreconnected.preimage_of_closed_map [TopologicalSpace β] {s : Set β}
obtain ⟨b, hbs, hbu, hbv⟩ :=
isPreconnected_closed_iff.1 hs (f '' u) (f '' v) (hf u hu) (hf v hv) _ _ _
obtain ⟨a, rfl⟩ := hsf hbs
- rw [hinj.mem_set_image] at hbu hbv
+ rw [hinj.mem_set_image] at hbu hbv
exact ⟨a, hbs, hbu, hbv⟩
· have := image_subset f hsuv
- rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
+ rwa [Set.image_preimage_eq_of_subset hsf, image_union] at this
· obtain ⟨x, hx1, hx2⟩ := hsu
exact ⟨f x, hx1, x, hx2, rfl⟩
· obtain ⟨y, hy1, hy2⟩ := hsv
@@ -500,7 +500,7 @@ theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : D
· exact Or.inr ((Set.disjoint_iff_inter_eq_empty.2 hsu).subset_right_of_subset_union hsuv)
· replace hs := mt (hs hsu)
simp_rw [Set.not_nonempty_iff_eq_empty, ← Set.disjoint_iff_inter_eq_empty,
- disjoint_iff_inter_eq_empty.1 huv] at hs
+ disjoint_iff_inter_eq_empty.1 huv] at hs
exact Or.inl ((hs s.disjoint_empty).subset_left_of_subset_union hsuv)
#align is_preconnected.subset_or_subset IsPreconnected.subset_or_subset
@@ -510,7 +510,7 @@ theorem IsPreconnected.subset_left_of_subset_union (hu : IsOpen u) (hv : IsOpen
Disjoint.subset_left_of_subset_union hsuv
(by
by_contra hsv
- rw [not_disjoint_iff_nonempty_inter] at hsv
+ rw [not_disjoint_iff_nonempty_inter] at hsv
obtain ⟨x, _, hx⟩ := hs u v hu hv hsuv hsu hsv
exact Set.disjoint_iff.1 huv hx)
#align is_preconnected.subset_left_of_subset_union IsPreconnected.subset_left_of_subset_union
@@ -546,7 +546,7 @@ theorem IsPreconnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs
refine'
⟨Prod.mk a₁ '' t ∪ flip Prod.mk b₂ '' s, _, Or.inl ⟨b₁, hb₁, rfl⟩, Or.inr ⟨a₂, ha₂, rfl⟩, _⟩
· rintro _ (⟨y, hy, rfl⟩ | ⟨x, hx, rfl⟩)
- exacts[⟨ha₁, hy⟩, ⟨hx, hb₂⟩]
+ exacts [⟨ha₁, hy⟩, ⟨hx, hb₂⟩]
·
exact
(ht.image _ (Continuous.Prod.mk _).ContinuousOn).union (a₁, b₂) ⟨b₂, hb₂, rfl⟩ ⟨a₁, ha₁, rfl⟩
@@ -567,7 +567,7 @@ theorem isPreconnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set
rcases exists_finset_piecewise_mem_of_mem_nhds (uo.mem_nhds hfu) g with ⟨I, hI⟩
induction' I using Finset.induction_on with i I hi ihI
· refine' ⟨g, hgs, ⟨_, hgv⟩⟩; simpa using hI
- · rw [Finset.piecewise_insert] at hI
+ · rw [Finset.piecewise_insert] at hI
have := I.piecewise_mem_set_pi hfs hgs
refine' (hsuv this).elim ihI fun h => _
set S := update (I.piecewise f g) i '' s i
@@ -597,7 +597,7 @@ theorem isConnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set (π
#align is_connected_univ_pi isConnected_univ_pi
-/
-theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π i)} :
+theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σ i, π i)} :
IsConnected s ↔ ∃ i t, IsConnected t ∧ s = Sigma.mk i '' t :=
by
refine' ⟨fun hs => _, _⟩
@@ -618,7 +618,7 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π
#align sigma.is_connected_iff Sigma.isConnected_iff
theorem Sigma.isPreconnected_iff [hι : Nonempty ι] [∀ i, TopologicalSpace (π i)]
- {s : Set (Σi, π i)} : IsPreconnected s ↔ ∃ i t, IsPreconnected t ∧ s = Sigma.mk i '' t :=
+ {s : Set (Σ i, π i)} : IsPreconnected s ↔ ∃ i t, IsPreconnected t ∧ s = Sigma.mk i '' t :=
by
refine' ⟨fun hs => _, _⟩
· obtain rfl | h := s.eq_empty_or_nonempty
@@ -823,7 +823,7 @@ theorem connectedComponentIn_eq {x y : α} {F : Set α} (h : y ∈ connectedComp
connectedComponentIn F x = connectedComponentIn F y :=
by
have hx : x ∈ F := connected_component_in_nonempty_iff.mp ⟨y, h⟩
- simp_rw [connectedComponentIn_eq_image hx] at h⊢
+ simp_rw [connectedComponentIn_eq_image hx] at h ⊢
obtain ⟨⟨y, hy⟩, h2y, rfl⟩ := h
simp_rw [Subtype.coe_mk, connectedComponentIn_eq_image hy, connectedComponent_eq h2y]
#align connected_component_in_eq connectedComponentIn_eq
@@ -1016,7 +1016,7 @@ theorem isClopen_iff [PreconnectedSpace α] {s : Set α} : IsClopen s ↔ s =
nonempty_inter hs.1 hs.2.isOpen_compl (union_compl_self s) (nonempty_iff_ne_empty.2 h1.1)
(nonempty_iff_ne_empty.2 h1.2)
h3 h2,
- by rintro (rfl | rfl) <;> [exact isClopen_empty;exact isClopen_univ]⟩
+ by rintro (rfl | rfl) <;> [exact isClopen_empty; exact isClopen_univ]⟩
#align is_clopen_iff isClopen_iff
-/
@@ -1085,7 +1085,7 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
specialize h u v hu hv hs
contrapose! huv
rw [← nonempty_iff_ne_empty]
- simp [not_subset] at huv
+ simp [not_subset] at huv
rcases huv with ⟨⟨x, hxs, hxu⟩, ⟨y, hys, hyv⟩⟩
have hxv : x ∈ v := or_iff_not_imp_left.mp (hs hxs) hxu
have hyu : y ∈ u := or_iff_not_imp_right.mp (hs hys) hyv
@@ -1114,21 +1114,21 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
· intro U; apply Finset.induction_on U
· rcases h.left with ⟨⟩
suffices s ⊆ ∅ → False by simpa
- intro ; solve_by_elim
+ intro; solve_by_elim
· intro u U hu IH hs hU H
- rw [Finset.coe_insert, sUnion_insert] at H
+ rw [Finset.coe_insert, sUnion_insert] at H
cases' h.2 u (⋃₀ ↑U) _ _ H _ with hsu hsU
· exact ⟨u, Finset.mem_insert_self _ _, hsu⟩
· rcases IH _ _ hsU with ⟨v, hvU, hsv⟩
· exact ⟨v, Finset.mem_insert_of_mem hvU, hsv⟩
- · intros ; apply hs <;> solve_by_elim [Finset.mem_insert_of_mem]
- · intros ; solve_by_elim [Finset.mem_insert_of_mem]
+ · intros; apply hs <;> solve_by_elim [Finset.mem_insert_of_mem]
+ · intros; solve_by_elim [Finset.mem_insert_of_mem]
· solve_by_elim [Finset.mem_insert_self]
· apply isOpen_sUnion
- intros ; solve_by_elim [Finset.mem_insert_of_mem]
+ intros; solve_by_elim [Finset.mem_insert_of_mem]
· apply eq_empty_of_subset_empty
rintro x ⟨hxs, hxu, hxU⟩
- rw [mem_sUnion] at hxU
+ rw [mem_sUnion] at hxU
rcases hxU with ⟨v, hvU, hxv⟩
rcases hs u v (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hvU) _ with rfl
· contradiction
@@ -1139,14 +1139,18 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
simpa using h ∅ _ _ _ <;> simp
intro u v hu hv hs hsuv
rcases h {u, v} _ _ _ with ⟨t, ht, ht'⟩
- · rw [Finset.mem_insert, Finset.mem_singleton] at ht
+ · rw [Finset.mem_insert, Finset.mem_singleton] at ht
rcases ht with (rfl | rfl) <;> tauto
· intro t₁ t₂ ht₁ ht₂ hst
- rw [nonempty_iff_ne_empty] at hst
- rw [Finset.mem_insert, Finset.mem_singleton] at ht₁ ht₂
+ rw [nonempty_iff_ne_empty] at hst
+ rw [Finset.mem_insert, Finset.mem_singleton] at ht₁ ht₂
rcases ht₁ with (rfl | rfl) <;> rcases ht₂ with (rfl | rfl)
- all_goals first |rfl|contradiction|skip
- rw [inter_comm t₁] at hst; contradiction
+ all_goals
+ first
+ | rfl
+ | contradiction
+ | skip
+ rw [inter_comm t₁] at hst ; contradiction
· intro t
rw [Finset.mem_insert, Finset.mem_singleton]
rintro (rfl | rfl) <;> assumption
@@ -1179,11 +1183,11 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
by
constructor <;> intro h
· intro u v hu hv hs huv
- rw [isPreconnected_closed_iff] at h
+ rw [isPreconnected_closed_iff] at h
specialize h u v hu hv hs
contrapose! huv
rw [← nonempty_iff_ne_empty]
- simp [not_subset] at huv
+ simp [not_subset] at huv
rcases huv with ⟨⟨x, hxs, hxu⟩, ⟨y, hys, hyv⟩⟩
have hxv : x ∈ v := or_iff_not_imp_left.mp (hs hxs) hxu
have hyu : y ∈ u := or_iff_not_imp_right.mp (hs hys) hyv
@@ -1216,8 +1220,8 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
rw [isPreconnected_iff_subset_of_disjoint_closed]
intro u v hu hv hss huv
have H1 := H (u ∩ s) (v ∩ s)
- rw [subset_inter_iff, subset_inter_iff] at H1
- simp only [subset.refl, and_true_iff] at H1
+ rw [subset_inter_iff, subset_inter_iff] at H1
+ simp only [subset.refl, and_true_iff] at H1
apply H1 (IsClosed.inter hu hs) (IsClosed.inter hv hs)
· rw [← inter_distrib_right]
exact subset_inter hss subset.rfl
@@ -1332,12 +1336,12 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
(isPreconnected_iff_subset_of_fully_disjoint_closed isClosed_connectedComponent).1
isPreconnected_connectedComponent T₁ T₂ hT₁ hT₂ T_decomp T_disjoint
· left
- rw [subset.antisymm_iff] at T₁_u
+ rw [subset.antisymm_iff] at T₁_u
suffices f ⁻¹' connectedComponent t ⊆ f ⁻¹' T₁ by
exact subset.trans (subset.trans this T₁_u.1) (inter_subset_right _ _)
exact preimage_mono h
right
- rw [subset.antisymm_iff] at T₂_v
+ rw [subset.antisymm_iff] at T₂_v
suffices f ⁻¹' connectedComponent t ⊆ f ⁻¹' T₂ by
exact subset.trans (subset.trans this T₂_v.1) (inter_subset_right _ _)
exact preimage_mono h
@@ -1389,7 +1393,7 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr ⊆ » U) -/
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
- ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ (V : _)(_ : V ⊆ U), IsOpen V ∧ x ∈ V ∧ IsConnected V :=
+ ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ (V : _) (_ : V ⊆ U), IsOpen V ∧ x ∈ V ∧ IsConnected V :=
by
rw [locallyConnectedSpace_iff_open_connected_basis]
trace
@@ -1421,7 +1425,7 @@ instance (priority := 100) DiscreteTopology.toLocallyConnectedSpace (α) [Topolo
theorem connectedComponentIn_mem_nhds [LocallyConnectedSpace α] {F : Set α} {x : α} (h : F ∈ 𝓝 x) :
connectedComponentIn F x ∈ 𝓝 x :=
by
- rw [(LocallyConnectedSpace.open_connected_basis x).mem_iff] at h
+ rw [(LocallyConnectedSpace.open_connected_basis x).mem_iff] at h
rcases h with ⟨s, ⟨h1s, hxs, h2s⟩, hsF⟩
exact mem_nhds_iff.mpr ⟨s, h2s.is_preconnected.subset_connected_component_in hxs hsF, h1s, hxs⟩
#align connected_component_in_mem_nhds connectedComponentIn_mem_nhds
@@ -1580,7 +1584,7 @@ instance [TopologicalSpace β] [TotallyDisconnectedSpace α] [TotallyDisconnecte
· exact ht.subsingleton.image _
instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i)] :
- TotallyDisconnectedSpace (Σi, π i) :=
+ TotallyDisconnectedSpace (Σ i, π i) :=
by
refine' ⟨fun s _ hs => _⟩
obtain rfl | h := s.eq_empty_or_nonempty
@@ -1591,7 +1595,7 @@ instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i
/-- Let `X` be a topological space, and suppose that for all distinct `x,y ∈ X`, there
is some clopen set `U` such that `x ∈ U` and `y ∉ U`. Then `X` is totally disconnected. -/
theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
- (hX : ∀ {x y : X} (h_diff : x ≠ y), ∃ (U : Set X)(h_clopen : IsClopen U), x ∈ U ∧ y ∉ U) :
+ (hX : ∀ {x y : X} (h_diff : x ≠ y), ∃ (U : Set X) (h_clopen : IsClopen U), x ∈ U ∧ y ∉ U) :
IsTotallyDisconnected (Set.univ : Set X) :=
by
rintro S - hS
@@ -1601,7 +1605,7 @@ theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
obtain ⟨U, h_clopen, hxU, hyU⟩ := hX hxy
specialize
hS U (Uᶜ) h_clopen.1 h_clopen.compl.1 (fun a ha => em (a ∈ U)) ⟨x, hx, hxU⟩ ⟨y, hy, hyU⟩
- rw [inter_compl_self, Set.inter_empty] at hS
+ rw [inter_compl_self, Set.inter_empty] at hS
exact Set.not_nonempty_empty hS
#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_clopen_set
@@ -1752,13 +1756,13 @@ instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type _) [Topo
theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
[TotallySeparatedSpace α] {x y : α} (hxy : x ≠ y) :
- ∃ (U : Set α)(hU : IsClopen U), x ∈ U ∧ y ∈ Uᶜ :=
+ ∃ (U : Set α) (hU : IsClopen U), x ∈ U ∧ y ∈ Uᶜ :=
by
obtain ⟨U, V, hU, hV, Ux, Vy, f, disj⟩ :=
TotallySeparatedSpace.isTotallySeparated_univ α x (Set.mem_univ x) y (Set.mem_univ y) hxy
have clopen_U := isClopen_inter_of_disjoint_cover_clopen isClopen_univ f hU hV disj
- rw [univ_inter _] at clopen_U
- rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
+ rw [univ_inter _] at clopen_U
+ rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
exact ⟨U, clopen_U, Ux, disj Vy⟩
#align exists_clopen_of_totally_separated exists_clopen_of_totally_separated
@@ -1960,7 +1964,7 @@ theorem isPreconnected_of_forall_constant {s : Set α}
unfold IsPreconnected
by_contra'
rcases this with ⟨u, v, u_op, v_op, hsuv, ⟨x, x_in_s, x_in_u⟩, ⟨y, y_in_s, y_in_v⟩, H⟩
- rw [not_nonempty_iff_eq_empty] at H
+ rw [not_nonempty_iff_eq_empty] at H
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.bool_indicator s :=
by
@@ -1993,7 +1997,7 @@ theorem IsPreconnected.constant_of_mapsTo [TopologicalSpace β] {S : Set α} (hS
{x y : α} (hx : x ∈ S) (hy : y ∈ S) : f x = f y :=
by
let F : S → T := fun x : S => ⟨f x.val, hTm x.property⟩
- suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rw [← Subtype.coe_inj] at this; exact this
+ suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rw [← Subtype.coe_inj] at this ; exact this
exact
(is_preconnected_iff_preconnected_space.mp hS).constant
(continuous_induced_rng.mpr <| continuous_on_iff_continuous_restrict.mp hc)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -50,7 +50,7 @@ https://ncatlab.org/nlab/show/too+simple+to+be+simple#relationship_to_biased_def
open Set Function TopologicalSpace Relation
-open Classical Topology
+open scoped Classical Topology
universe u v
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -122,12 +122,6 @@ theorem Set.Subsingleton.isPreconnected {s : Set α} (hs : s.Subsingleton) : IsP
#align set.subsingleton.is_preconnected Set.Subsingleton.isPreconnected
-/
-/- warning: is_preconnected_of_forall -> isPreconnected_of_forall is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} (x : α), (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => Exists.{0} (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t s) (fun (H : HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t s) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) (And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (IsPreconnected.{u1} α _inst_1 t)))))) -> (IsPreconnected.{u1} α _inst_1 s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} (x : α), (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) t s) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (IsPreconnected.{u1} α _inst_1 t)))))) -> (IsPreconnected.{u1} α _inst_1 s)
-Case conversion may be inaccurate. Consider using '#align is_preconnected_of_forall isPreconnected_of_forallₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
@@ -144,12 +138,6 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
exact this.imp fun z hz => ⟨ts hz.1, hz.2⟩
#align is_preconnected_of_forall isPreconnected_of_forall
-/- warning: is_preconnected_of_forall_pair -> isPreconnected_of_forall_pair is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => Exists.{0} (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t s) (fun (H : HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) t s) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) (And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (IsPreconnected.{u1} α _inst_1 t))))))) -> (IsPreconnected.{u1} α _inst_1 s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) t s) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (IsPreconnected.{u1} α _inst_1 t))))))) -> (IsPreconnected.{u1} α _inst_1 s)
-Case conversion may be inaccurate. Consider using '#align is_preconnected_of_forall_pair isPreconnected_of_forall_pairₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
/-- If any two points of a set are contained in a preconnected subset,
@@ -173,23 +161,11 @@ theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x
#align is_preconnected_sUnion isPreconnected_sUnion
-/
-/- warning: is_preconnected_Union -> isPreconnected_iUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Set.Nonempty.{u1} α (Set.iInter.{u1, u2} α ι (fun (i : ι) => s i))) -> (forall (i : ι), IsPreconnected.{u1} α _inst_1 (s i)) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, u2} α ι (fun (i : ι) => s i)))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u2} α (Set.iInter.{u2, u1} α ι (fun (i : ι) => s i))) -> (forall (i : ι), IsPreconnected.{u2} α _inst_1 (s i)) -> (IsPreconnected.{u2} α _inst_1 (Set.iUnion.{u2, u1} α ι (fun (i : ι) => s i)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected_Union isPreconnected_iUnionₓ'. -/
theorem isPreconnected_iUnion {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
#align is_preconnected_Union isPreconnected_iUnion
-/- warning: is_preconnected.union -> IsPreconnected.union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] (x : α) {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u1} α _inst_1 t) -> (IsPreconnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] (x : α) {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u1} α _inst_1 t) -> (IsPreconnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.union IsPreconnected.unionₓ'. -/
theorem IsPreconnected.union (x : α) {s t : Set α} (H1 : x ∈ s) (H2 : x ∈ t) (H3 : IsPreconnected s)
(H4 : IsPreconnected t) : IsPreconnected (s ∪ t) :=
sUnion_pair s t ▸
@@ -197,23 +173,11 @@ theorem IsPreconnected.union (x : α) {s t : Set α} (H1 : x ∈ s) (H2 : x ∈
(by rintro r (rfl | rfl | h) <;> assumption)
#align is_preconnected.union IsPreconnected.union
-/- warning: is_preconnected.union' -> IsPreconnected.union' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t)) -> (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u1} α _inst_1 t) -> (IsPreconnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)) -> (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u1} α _inst_1 t) -> (IsPreconnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.union' IsPreconnected.union'ₓ'. -/
theorem IsPreconnected.union' {s t : Set α} (H : (s ∩ t).Nonempty) (hs : IsPreconnected s)
(ht : IsPreconnected t) : IsPreconnected (s ∪ t) := by rcases H with ⟨x, hxs, hxt⟩;
exact hs.union x hxs hxt ht
#align is_preconnected.union' IsPreconnected.union'
-/- warning: is_connected.union -> IsConnected.union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t)) -> (IsConnected.{u1} α _inst_1 s) -> (IsConnected.{u1} α _inst_1 t) -> (IsConnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)) -> (IsConnected.{u1} α _inst_1 s) -> (IsConnected.{u1} α _inst_1 t) -> (IsConnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align is_connected.union IsConnected.unionₓ'. -/
theorem IsConnected.union {s t : Set α} (H : (s ∩ t).Nonempty) (Hs : IsConnected s)
(Ht : IsConnected t) : IsConnected (s ∪ t) :=
by
@@ -238,12 +202,6 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/
-/- warning: is_preconnected.bUnion_of_refl_trans_gen -> IsPreconnected.biUnion_of_reflTransGen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {t : Set.{u2} ι} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (IsPreconnected.{u1} α _inst_1 (s i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (forall (j : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) j t) -> (Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t)) i j))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) => s n))))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsPreconnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsPreconnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGenₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (p «expr ⊆ » t) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
@@ -284,12 +242,6 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
exact ⟨⋃ j ∈ p, s j, bUnion_subset_bUnion_left hpt, mem_bUnion hip hxi, mem_bUnion hjp hyj, hp⟩
#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/- warning: is_connected.bUnion_of_refl_trans_gen -> IsConnected.biUnion_of_reflTransGen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {t : Set.{u2} ι} {s : ι -> (Set.{u1} α)}, (Set.Nonempty.{u2} ι t) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (IsConnected.{u1} α _inst_1 (s i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (forall (j : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) j t) -> (Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t)) i j))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) => s n))))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u1} ι t) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsConnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsConnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_refl_trans_gen IsConnected.biUnion_of_reflTransGenₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
@@ -303,12 +255,6 @@ theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι
IsPreconnected.biUnion_of_reflTransGen (fun i hi => (H i hi).IsPreconnected) K⟩
#align is_connected.bUnion_of_refl_trans_gen IsConnected.biUnion_of_reflTransGen
-/- warning: is_preconnected.Union_of_refl_trans_gen -> IsPreconnected.iUnion_of_reflTransGen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {s : ι -> (Set.{u1} α)}, (forall (i : ι), IsPreconnected.{u1} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) i j) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => s n)))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {s : ι -> (Set.{u2} α)}, (forall (i : ι), IsPreconnected.{u2} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) i j) -> (IsPreconnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGenₓ'. -/
/-- Preconnectedness of the Union of a family of preconnected sets
indexed by the vertices of a preconnected graph,
where two vertices are joined when the corresponding sets intersect. -/
@@ -321,12 +267,6 @@ theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
simpa [mem_univ] using K i j
#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGen
-/- warning: is_connected.Union_of_refl_trans_gen -> IsConnected.iUnion_of_reflTransGen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} [_inst_2 : Nonempty.{succ u2} ι] {s : ι -> (Set.{u1} α)}, (forall (i : ι), IsConnected.{u1} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) i j) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => s n)))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} [_inst_2 : Nonempty.{succ u1} ι] {s : ι -> (Set.{u2} α)}, (forall (i : ι), IsConnected.{u2} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) i j) -> (IsConnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_refl_trans_gen IsConnected.iUnion_of_reflTransGenₓ'. -/
theorem IsConnected.iUnion_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
(H : ∀ i, IsConnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) : IsConnected (⋃ n, s n) :=
@@ -340,12 +280,6 @@ open Order
variable [LinearOrder β] [SuccOrder β] [IsSuccArchimedean β]
-/- warning: is_preconnected.Union_of_chain -> IsPreconnected.iUnion_of_chain is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)}, (forall (n : β), IsPreconnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n)))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)}, (forall (n : β), IsPreconnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n)))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chainₓ'. -/
/-- The Union of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is preconnected. -/
theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
@@ -354,12 +288,6 @@ theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconn
reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by rw [inter_comm]; exact K i
#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chain
-/- warning: is_connected.Union_of_chain -> IsConnected.iUnion_of_chain is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] [_inst_5 : Nonempty.{succ u2} β] {s : β -> (Set.{u1} α)}, (forall (n : β), IsConnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n)))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] [_inst_5 : Nonempty.{succ u2} β] {s : β -> (Set.{u1} α)}, (forall (n : β), IsConnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n)))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_chain IsConnected.iUnion_of_chainₓ'. -/
/-- The Union of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is connected. -/
theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
@@ -368,12 +296,6 @@ theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n
reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by rw [inter_comm]; exact K i
#align is_connected.Union_of_chain IsConnected.iUnion_of_chain
-/- warning: is_preconnected.bUnion_of_chain -> IsPreconnected.biUnion_of_chain is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) t) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (IsPreconnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n))))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) => s n))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) t) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (IsPreconnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n))))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) (fun (H : Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chainₓ'. -/
/-- The Union of preconnected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : OrdConnected t)
@@ -393,12 +315,6 @@ theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : O
⟨by rw [inter_comm]; exact h3 hj hi hk, h2 hj hi hk⟩
#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chain
-/- warning: is_connected.bUnion_of_chain -> IsConnected.biUnion_of_chain is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.Nonempty.{u2} β t) -> (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) t) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (IsConnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n))))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) => s n))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.Nonempty.{u2} β t) -> (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) t) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (IsConnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n))))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) (fun (H : Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_chain IsConnected.biUnion_of_chainₓ'. -/
/-- The Union of connected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
theorem IsConnected.biUnion_of_chain {s : β → Set α} {t : Set β} (hnt : t.Nonempty)
@@ -479,12 +395,6 @@ theorem IsConnected.image [TopologicalSpace β] {s : Set α} (H : IsConnected s)
#align is_connected.image IsConnected.image
-/
-/- warning: is_preconnected_closed_iff -> isPreconnected_closed_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsPreconnected.{u1} α _inst_1 s) (forall (t : Set.{u1} α) (t' : Set.{u1} α), (IsClosed.{u1} α _inst_1 t) -> (IsClosed.{u1} α _inst_1 t') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) t t')) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t)) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t')) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) t t'))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsPreconnected.{u1} α _inst_1 s) (forall (t : Set.{u1} α) (t' : Set.{u1} α), (IsClosed.{u1} α _inst_1 t) -> (IsClosed.{u1} α _inst_1 t') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) t t')) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t')) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) t t'))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected_closed_iff isPreconnected_closed_iffₓ'. -/
theorem isPreconnected_closed_iff {s : Set α} :
IsPreconnected s ↔
∀ t t',
@@ -582,12 +492,6 @@ theorem IsConnected.preimage_of_closedMap [TopologicalSpace β] {s : Set β} (hs
#align is_connected.preimage_of_closed_map IsConnected.preimage_of_closedMap
-/
-/- warning: is_preconnected.subset_or_subset -> IsPreconnected.subset_or_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α} {v : Set.{u1} α}, (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) u v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) u v)) -> (IsPreconnected.{u1} α _inst_1 s) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s v))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α} {v : Set.{u1} α}, (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) u v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) u v)) -> (IsPreconnected.{u1} α _inst_1 s) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s v))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.subset_or_subset IsPreconnected.subset_or_subsetₓ'. -/
theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : Disjoint u v)
(hsuv : s ⊆ u ∪ v) (hs : IsPreconnected s) : s ⊆ u ∨ s ⊆ v :=
by
@@ -600,12 +504,6 @@ theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : D
exact Or.inl ((hs s.disjoint_empty).subset_left_of_subset_union hsuv)
#align is_preconnected.subset_or_subset IsPreconnected.subset_or_subset
-/- warning: is_preconnected.subset_left_of_subset_union -> IsPreconnected.subset_left_of_subset_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α} {v : Set.{u1} α}, (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) u v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) u v)) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s u)) -> (IsPreconnected.{u1} α _inst_1 s) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α} {v : Set.{u1} α}, (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) u v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) u v)) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s u)) -> (IsPreconnected.{u1} α _inst_1 s) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u)
-Case conversion may be inaccurate. Consider using '#align is_preconnected.subset_left_of_subset_union IsPreconnected.subset_left_of_subset_unionₓ'. -/
theorem IsPreconnected.subset_left_of_subset_union (hu : IsOpen u) (hv : IsOpen v)
(huv : Disjoint u v) (hsuv : s ⊆ u ∪ v) (hsu : (s ∩ u).Nonempty) (hs : IsPreconnected s) :
s ⊆ u :=
@@ -617,24 +515,12 @@ theorem IsPreconnected.subset_left_of_subset_union (hu : IsOpen u) (hv : IsOpen
exact Set.disjoint_iff.1 huv hx)
#align is_preconnected.subset_left_of_subset_union IsPreconnected.subset_left_of_subset_union
-/- warning: is_preconnected.subset_right_of_subset_union -> IsPreconnected.subset_right_of_subset_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α} {v : Set.{u1} α}, (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) u v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) u v)) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s v)) -> (IsPreconnected.{u1} α _inst_1 s) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s v)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α} {v : Set.{u1} α}, (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) u v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) u v)) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s v)) -> (IsPreconnected.{u1} α _inst_1 s) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s v)
-Case conversion may be inaccurate. Consider using '#align is_preconnected.subset_right_of_subset_union IsPreconnected.subset_right_of_subset_unionₓ'. -/
theorem IsPreconnected.subset_right_of_subset_union (hu : IsOpen u) (hv : IsOpen v)
(huv : Disjoint u v) (hsuv : s ⊆ u ∪ v) (hsv : (s ∩ v).Nonempty) (hs : IsPreconnected s) :
s ⊆ v :=
hs.subset_left_of_subset_union hv hu huv.symm (union_comm u v ▸ hsuv) hsv
#align is_preconnected.subset_right_of_subset_union IsPreconnected.subset_right_of_subset_union
-/- warning: is_preconnected.subset_of_closure_inter_subset -> IsPreconnected.subset_of_closure_inter_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (IsOpen.{u1} α _inst_1 u) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (closure.{u1} α _inst_1 u) s) u) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {u : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (IsOpen.{u1} α _inst_1 u) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (closure.{u1} α _inst_1 u) s) u) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u)
-Case conversion may be inaccurate. Consider using '#align is_preconnected.subset_of_closure_inter_subset IsPreconnected.subset_of_closure_inter_subsetₓ'. -/
/-- If a preconnected set `s` intersects an open set `u`, and limit points of `u` inside `s` are
contained in `u`, then the whole set `s` is contained in `u`. -/
theorem IsPreconnected.subset_of_closure_inter_subset (hs : IsPreconnected s) (hu : IsOpen u)
@@ -651,12 +537,6 @@ theorem IsPreconnected.subset_of_closure_inter_subset (hs : IsPreconnected s) (h
exact disjoint_compl_right.mono_right (compl_subset_compl.2 subset_closure)
#align is_preconnected.subset_of_closure_inter_subset IsPreconnected.subset_of_closure_inter_subset
-/- warning: is_preconnected.prod -> IsPreconnected.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{u1} α} {t : Set.{u2} β}, (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u2} β _inst_2 t) -> (IsPreconnected.{max u1 u2} (Prod.{u1, u2} α β) (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) (Set.prod.{u1, u2} α β s t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{u1} α} {t : Set.{u2} β}, (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u2} β _inst_2 t) -> (IsPreconnected.{max u2 u1} (Prod.{u1, u2} α β) (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) (Set.prod.{u1, u2} α β s t))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.prod IsPreconnected.prodₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem IsPreconnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs : IsPreconnected s)
(ht : IsPreconnected t) : IsPreconnected (s ×ˢ t) :=
@@ -673,12 +553,6 @@ theorem IsPreconnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs
(hs.image _ (continuous_id.prod_mk continuous_const).ContinuousOn)
#align is_preconnected.prod IsPreconnected.prod
-/- warning: is_connected.prod -> IsConnected.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{u1} α} {t : Set.{u2} β}, (IsConnected.{u1} α _inst_1 s) -> (IsConnected.{u2} β _inst_2 t) -> (IsConnected.{max u1 u2} (Prod.{u1, u2} α β) (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) (Set.prod.{u1, u2} α β s t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{u1} α} {t : Set.{u2} β}, (IsConnected.{u1} α _inst_1 s) -> (IsConnected.{u2} β _inst_2 t) -> (IsConnected.{max u2 u1} (Prod.{u1, u2} α β) (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) (Set.prod.{u1, u2} α β s t))
-Case conversion may be inaccurate. Consider using '#align is_connected.prod IsConnected.prodₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem IsConnected.prod [TopologicalSpace β] {s : Set α} {t : Set β} (hs : IsConnected s)
(ht : IsConnected t) : IsConnected (s ×ˢ t) :=
@@ -723,12 +597,6 @@ theorem isConnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set (π
#align is_connected_univ_pi isConnected_univ_pi
-/
-/- warning: sigma.is_connected_iff -> Sigma.isConnected_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {π : ι -> Type.{u2}} [_inst_2 : forall (i : ι), TopologicalSpace.{u2} (π i)] {s : Set.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i))}, Iff (IsConnected.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i)) (Sigma.topologicalSpace.{u1, u2} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_2 a)) s) (Exists.{succ u1} ι (fun (i : ι) => Exists.{succ u2} (Set.{u2} (π i)) (fun (t : Set.{u2} (π i)) => And (IsConnected.{u2} (π i) (_inst_2 i) t) (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i))) s (Set.image.{u2, max u1 u2} (π i) (Sigma.{u1, u2} ι (fun (i : ι) => π i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => π i) i) t)))))
-but is expected to have type
- forall {ι : Type.{u1}} {π : ι -> Type.{u2}} [_inst_2 : forall (i : ι), TopologicalSpace.{u2} (π i)] {s : Set.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => π i))}, Iff (IsConnected.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i)) (instTopologicalSpaceSigma.{u1, u2} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_2 a)) s) (Exists.{succ u1} ι (fun (i : ι) => Exists.{succ u2} (Set.{u2} (π i)) (fun (t : Set.{u2} (π i)) => And (IsConnected.{u2} (π i) (_inst_2 i) t) (Eq.{max (succ u1) (succ u2)} (Set.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => π i))) s (Set.image.{u2, max u2 u1} (π i) (Sigma.{u1, u2} ι (fun (i : ι) => π i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => π i) i) t)))))
-Case conversion may be inaccurate. Consider using '#align sigma.is_connected_iff Sigma.isConnected_iffₓ'. -/
theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π i)} :
IsConnected s ↔ ∃ i t, IsConnected t ∧ s = Sigma.mk i '' t :=
by
@@ -749,12 +617,6 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π
exact ht.image _ continuous_sigma_mk.continuous_on
#align sigma.is_connected_iff Sigma.isConnected_iff
-/- warning: sigma.is_preconnected_iff -> Sigma.isPreconnected_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {π : ι -> Type.{u2}} [hι : Nonempty.{succ u1} ι] [_inst_2 : forall (i : ι), TopologicalSpace.{u2} (π i)] {s : Set.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i))}, Iff (IsPreconnected.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i)) (Sigma.topologicalSpace.{u1, u2} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_2 a)) s) (Exists.{succ u1} ι (fun (i : ι) => Exists.{succ u2} (Set.{u2} (π i)) (fun (t : Set.{u2} (π i)) => And (IsPreconnected.{u2} (π i) (_inst_2 i) t) (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => π i))) s (Set.image.{u2, max u1 u2} (π i) (Sigma.{u1, u2} ι (fun (i : ι) => π i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => π i) i) t)))))
-but is expected to have type
- forall {ι : Type.{u2}} {π : ι -> Type.{u1}} [hι : Nonempty.{succ u2} ι] [_inst_2 : forall (i : ι), TopologicalSpace.{u1} (π i)] {s : Set.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => π i))}, Iff (IsPreconnected.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => π i)) (instTopologicalSpaceSigma.{u2, u1} ι (fun (i : ι) => π i) (fun (a : ι) => _inst_2 a)) s) (Exists.{succ u2} ι (fun (i : ι) => Exists.{succ u1} (Set.{u1} (π i)) (fun (t : Set.{u1} (π i)) => And (IsPreconnected.{u1} (π i) (_inst_2 i) t) (Eq.{max (succ u2) (succ u1)} (Set.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => π i))) s (Set.image.{u1, max u1 u2} (π i) (Sigma.{u2, u1} ι (fun (i : ι) => π i)) (Sigma.mk.{u2, u1} ι (fun (i : ι) => π i) i) t)))))
-Case conversion may be inaccurate. Consider using '#align sigma.is_preconnected_iff Sigma.isPreconnected_iffₓ'. -/
theorem Sigma.isPreconnected_iff [hι : Nonempty ι] [∀ i, TopologicalSpace (π i)]
{s : Set (Σi, π i)} : IsPreconnected s ↔ ∃ i t, IsPreconnected t ∧ s = Sigma.mk i '' t :=
by
@@ -767,12 +629,6 @@ theorem Sigma.isPreconnected_iff [hι : Nonempty ι] [∀ i, TopologicalSpace (
exact ht.image _ continuous_sigma_mk.continuous_on
#align sigma.is_preconnected_iff Sigma.isPreconnected_iff
-/- warning: sum.is_connected_iff -> Sum.isConnected_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{max u1 u2} (Sum.{u1, u2} α β)}, Iff (IsConnected.{max u1 u2} (Sum.{u1, u2} α β) (Sum.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) s) (Or (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (IsConnected.{u1} α _inst_1 t) (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Sum.{u1, u2} α β)) s (Set.image.{u1, max u1 u2} α (Sum.{u1, u2} α β) (Sum.inl.{u1, u2} α β) t)))) (Exists.{succ u2} (Set.{u2} β) (fun (t : Set.{u2} β) => And (IsConnected.{u2} β _inst_2 t) (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Sum.{u1, u2} α β)) s (Set.image.{u2, max u1 u2} β (Sum.{u1, u2} α β) (Sum.inr.{u1, u2} α β) t)))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{max u2 u1} (Sum.{u1, u2} α β)}, Iff (IsConnected.{max u1 u2} (Sum.{u1, u2} α β) (instTopologicalSpaceSum.{u1, u2} α β _inst_1 _inst_2) s) (Or (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (IsConnected.{u1} α _inst_1 t) (Eq.{max (succ u1) (succ u2)} (Set.{max u2 u1} (Sum.{u1, u2} α β)) s (Set.image.{u1, max u2 u1} α (Sum.{u1, u2} α β) (Sum.inl.{u1, u2} α β) t)))) (Exists.{succ u2} (Set.{u2} β) (fun (t : Set.{u2} β) => And (IsConnected.{u2} β _inst_2 t) (Eq.{max (succ u1) (succ u2)} (Set.{max u2 u1} (Sum.{u1, u2} α β)) s (Set.image.{u2, max u2 u1} β (Sum.{u1, u2} α β) (Sum.inr.{u1, u2} α β) t)))))
-Case conversion may be inaccurate. Consider using '#align sum.is_connected_iff Sum.isConnected_iffₓ'. -/
theorem Sum.isConnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
IsConnected s ↔
(∃ t, IsConnected t ∧ s = Sum.inl '' t) ∨ ∃ t, IsConnected t ∧ s = Sum.inr '' t :=
@@ -799,12 +655,6 @@ theorem Sum.isConnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
· exact ht.image _ continuous_inr.continuous_on
#align sum.is_connected_iff Sum.isConnected_iff
-/- warning: sum.is_preconnected_iff -> Sum.isPreconnected_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{max u1 u2} (Sum.{u1, u2} α β)}, Iff (IsPreconnected.{max u1 u2} (Sum.{u1, u2} α β) (Sum.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) s) (Or (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (IsPreconnected.{u1} α _inst_1 t) (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Sum.{u1, u2} α β)) s (Set.image.{u1, max u1 u2} α (Sum.{u1, u2} α β) (Sum.inl.{u1, u2} α β) t)))) (Exists.{succ u2} (Set.{u2} β) (fun (t : Set.{u2} β) => And (IsPreconnected.{u2} β _inst_2 t) (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Sum.{u1, u2} α β)) s (Set.image.{u2, max u1 u2} β (Sum.{u1, u2} α β) (Sum.inr.{u1, u2} α β) t)))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{max u2 u1} (Sum.{u1, u2} α β)}, Iff (IsPreconnected.{max u1 u2} (Sum.{u1, u2} α β) (instTopologicalSpaceSum.{u1, u2} α β _inst_1 _inst_2) s) (Or (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (IsPreconnected.{u1} α _inst_1 t) (Eq.{max (succ u1) (succ u2)} (Set.{max u2 u1} (Sum.{u1, u2} α β)) s (Set.image.{u1, max u2 u1} α (Sum.{u1, u2} α β) (Sum.inl.{u1, u2} α β) t)))) (Exists.{succ u2} (Set.{u2} β) (fun (t : Set.{u2} β) => And (IsPreconnected.{u2} β _inst_2 t) (Eq.{max (succ u1) (succ u2)} (Set.{max u2 u1} (Sum.{u1, u2} α β)) s (Set.image.{u2, max u2 u1} β (Sum.{u1, u2} α β) (Sum.inr.{u1, u2} α β) t)))))
-Case conversion may be inaccurate. Consider using '#align sum.is_preconnected_iff Sum.isPreconnected_iffₓ'. -/
theorem Sum.isPreconnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
IsPreconnected s ↔
(∃ t, IsPreconnected t ∧ s = Sum.inl '' t) ∨ ∃ t, IsPreconnected t ∧ s = Sum.inr '' t :=
@@ -989,12 +839,6 @@ theorem connectedComponentIn_univ (x : α) : connectedComponentIn univ x = conne
#align connected_component_in_univ connectedComponentIn_univ
-/
-/- warning: connected_component_disjoint -> connectedComponent_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {x : α} {y : α}, (Ne.{succ u1} (Set.{u1} α) (connectedComponent.{u1} α _inst_1 x) (connectedComponent.{u1} α _inst_1 y)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (connectedComponent.{u1} α _inst_1 x) (connectedComponent.{u1} α _inst_1 y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {x : α} {y : α}, (Ne.{succ u1} (Set.{u1} α) (connectedComponent.{u1} α _inst_1 x) (connectedComponent.{u1} α _inst_1 y)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (connectedComponent.{u1} α _inst_1 x) (connectedComponent.{u1} α _inst_1 y))
-Case conversion may be inaccurate. Consider using '#align connected_component_disjoint connectedComponent_disjointₓ'. -/
theorem connectedComponent_disjoint {x y : α} (h : connectedComponent x ≠ connectedComponent y) :
Disjoint (connectedComponent x) (connectedComponent y) :=
Set.disjoint_left.2 fun a h1 h2 =>
@@ -1156,12 +1000,6 @@ instance (priority := 100) IrreducibleSpace.connectedSpace (α : Type u) [Topolo
#align irreducible_space.connected_space IrreducibleSpace.connectedSpace
-/
-/- warning: nonempty_inter -> nonempty_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : PreconnectedSpace.{u1} α _inst_1] {s : Set.{u1} α} {t : Set.{u1} α}, (IsOpen.{u1} α _inst_1 s) -> (IsOpen.{u1} α _inst_1 t) -> (Eq.{succ u1} (Set.{u1} α) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) (Set.univ.{u1} α)) -> (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : PreconnectedSpace.{u1} α _inst_1] {s : Set.{u1} α} {t : Set.{u1} α}, (IsOpen.{u1} α _inst_1 s) -> (IsOpen.{u1} α _inst_1 t) -> (Eq.{succ u1} (Set.{u1} α) (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t) (Set.univ.{u1} α)) -> (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align nonempty_inter nonempty_interₓ'. -/
theorem nonempty_inter [PreconnectedSpace α] {s t : Set α} :
IsOpen s → IsOpen t → s ∪ t = univ → s.Nonempty → t.Nonempty → (s ∩ t).Nonempty := by
simpa only [univ_inter, univ_subset_iff] using @PreconnectedSpace.isPreconnected_univ α _ _ s t
@@ -1234,12 +1072,6 @@ theorem isConnected_iff_connectedSpace {s : Set α} : IsConnected s ↔ Connecte
#align is_connected_iff_connected_space isConnected_iff_connectedSpace
-/
-/- warning: is_preconnected_iff_subset_of_disjoint -> isPreconnected_iff_subset_of_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsPreconnected.{u1} α _inst_1 s) (forall (u : Set.{u1} α) (v : Set.{u1} α), (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) u v)) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) u v)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s v)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsPreconnected.{u1} α _inst_1 s) (forall (u : Set.{u1} α) (v : Set.{u1} α), (IsOpen.{u1} α _inst_1 u) -> (IsOpen.{u1} α _inst_1 v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) u v)) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) u v)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s v)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected_iff_subset_of_disjoint isPreconnected_iff_subset_of_disjointₓ'. -/
/-- A set `s` is preconnected if and only if
for every cover by two open sets that are disjoint on `s`,
it is contained in one of the two covering sets. -/
@@ -1269,12 +1101,6 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
· rcases hsu with ⟨x, hxs, hxu⟩; exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint isPreconnected_iff_subset_of_disjoint
-/- warning: is_connected_iff_sUnion_disjoint_open -> isConnected_iff_sUnion_disjoint_open is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsConnected.{u1} α _inst_1 s) (forall (U : Finset.{u1} (Set.{u1} α)), (forall (u : Set.{u1} α) (v : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) v U) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) u v))) -> (Eq.{succ u1} (Set.{u1} α) u v)) -> (forall (u : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) -> (IsOpen.{u1} α _inst_1 u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.sUnion.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) U))) -> (Exists.{succ u1} (Set.{u1} α) (fun (u : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) => HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsConnected.{u1} α _inst_1 s) (forall (U : Finset.{u1} (Set.{u1} α)), (forall (u : Set.{u1} α) (v : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) v U) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) u v))) -> (Eq.{succ u1} (Set.{u1} α) u v)) -> (forall (u : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) -> (IsOpen.{u1} α _inst_1 u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Set.sUnion.{u1} α (Finset.toSet.{u1} (Set.{u1} α) U))) -> (Exists.{succ u1} (Set.{u1} α) (fun (u : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u))))
-Case conversion may be inaccurate. Consider using '#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_openₓ'. -/
/-- A set `s` is connected if and only if
for every cover by a finite collection of open sets that are pairwise disjoint on `s`,
it is contained in one of the members of the collection. -/
@@ -1327,12 +1153,6 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
· simpa using hs
#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
-/- warning: is_preconnected.subset_clopen -> IsPreconnected.subset_clopen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (IsClopen.{u1} α _inst_1 t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (IsClopen.{u1} α _inst_1 t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t)
-Case conversion may be inaccurate. Consider using '#align is_preconnected.subset_clopen IsPreconnected.subset_clopenₓ'. -/
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
(hne : (s ∩ t).Nonempty) : s ⊆ t := by
@@ -1343,24 +1163,12 @@ theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht
exact hx' hx
#align is_preconnected.subset_clopen IsPreconnected.subset_clopen
-/- warning: disjoint_or_subset_of_clopen -> disjoint_or_subset_of_clopen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (IsClopen.{u1} α _inst_1 t) -> (Or (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (IsClopen.{u1} α _inst_1 t) -> (Or (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align disjoint_or_subset_of_clopen disjoint_or_subset_of_clopenₓ'. -/
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
theorem disjoint_or_subset_of_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
Disjoint s t ∨ s ⊆ t :=
(disjoint_or_nonempty_inter s t).imp_right <| hs.subset_clopen ht
#align disjoint_or_subset_of_clopen disjoint_or_subset_of_clopen
-/- warning: is_preconnected_iff_subset_of_disjoint_closed -> isPreconnected_iff_subset_of_disjoint_closed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsPreconnected.{u1} α _inst_1 s) (forall (u : Set.{u1} α) (v : Set.{u1} α), (IsClosed.{u1} α _inst_1 u) -> (IsClosed.{u1} α _inst_1 v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) u v)) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) u v)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s v)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsPreconnected.{u1} α _inst_1 s) (forall (u : Set.{u1} α) (v : Set.{u1} α), (IsClosed.{u1} α _inst_1 u) -> (IsClosed.{u1} α _inst_1 v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) u v)) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) u v)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s v)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected_iff_subset_of_disjoint_closed isPreconnected_iff_subset_of_disjoint_closedₓ'. -/
/-- A set `s` is preconnected if and only if
for every cover by two closed sets that are disjoint on `s`,
it is contained in one of the two covering sets. -/
@@ -1392,12 +1200,6 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
· rcases hsu with ⟨x, hxs, hxu⟩; exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint_closed isPreconnected_iff_subset_of_disjoint_closed
-/- warning: is_preconnected_iff_subset_of_fully_disjoint_closed -> isPreconnected_iff_subset_of_fully_disjoint_closed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (IsClosed.{u1} α _inst_1 s) -> (Iff (IsPreconnected.{u1} α _inst_1 s) (forall (u : Set.{u1} α) (v : Set.{u1} α), (IsClosed.{u1} α _inst_1 u) -> (IsClosed.{u1} α _inst_1 v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) u v)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) u v) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s v))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (IsClosed.{u1} α _inst_1 s) -> (Iff (IsPreconnected.{u1} α _inst_1 s) (forall (u : Set.{u1} α) (v : Set.{u1} α), (IsClosed.{u1} α _inst_1 u) -> (IsClosed.{u1} α _inst_1 v) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) u v)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) u v) -> (Or (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s v))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected_iff_subset_of_fully_disjoint_closed isPreconnected_iff_subset_of_fully_disjoint_closedₓ'. -/
/-- A closed set `s` is preconnected if and only if
for every cover by two closed sets that are disjoint,
it is contained in one of the two covering sets. -/
@@ -1583,12 +1385,6 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
#align locally_connected_space_iff_open_connected_basis locallyConnectedSpace_iff_open_connected_basis
-/
-/- warning: locally_connected_space_iff_open_connected_subsets -> locallyConnectedSpace_iff_open_connected_subsets is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], Iff (LocallyConnectedSpace.{u1} α _inst_1) (forall (x : α) (U : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U (nhds.{u1} α _inst_1 x)) -> (Exists.{succ u1} (Set.{u1} α) (fun (V : Set.{u1} α) => Exists.{0} (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) V U) (fun (H : HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) V U) => And (IsOpen.{u1} α _inst_1 V) (And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x V) (IsConnected.{u1} α _inst_1 V))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], Iff (LocallyConnectedSpace.{u1} α _inst_1) (forall (x : α) (U : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U (nhds.{u1} α _inst_1 x)) -> (Exists.{succ u1} (Set.{u1} α) (fun (V : Set.{u1} α) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) V U) (And (IsOpen.{u1} α _inst_1 V) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x V) (IsConnected.{u1} α _inst_1 V))))))
-Case conversion may be inaccurate. Consider using '#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsetsₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr ⊆ » U) -/
theorem locallyConnectedSpace_iff_open_connected_subsets :
@@ -1677,12 +1473,6 @@ theorem locallyConnectedSpace_iff_connectedComponentIn_open :
#align locally_connected_space_iff_connected_component_in_open locallyConnectedSpace_iff_connectedComponentIn_open
-/
-/- warning: locally_connected_space_iff_connected_subsets -> locallyConnectedSpace_iff_connected_subsets is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], Iff (LocallyConnectedSpace.{u1} α _inst_1) (forall (x : α) (U : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U (nhds.{u1} α _inst_1 x)) -> (Exists.{succ u1} (Set.{u1} α) (fun (V : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V (nhds.{u1} α _inst_1 x)) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V (nhds.{u1} α _inst_1 x)) => And (IsPreconnected.{u1} α _inst_1 V) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) V U)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], Iff (LocallyConnectedSpace.{u1} α _inst_1) (forall (x : α) (U : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U (nhds.{u1} α _inst_1 x)) -> (Exists.{succ u1} (Set.{u1} α) (fun (V : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) V (nhds.{u1} α _inst_1 x)) (And (IsPreconnected.{u1} α _inst_1 V) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) V U)))))
-Case conversion may be inaccurate. Consider using '#align locally_connected_space_iff_connected_subsets locallyConnectedSpace_iff_connected_subsetsₓ'. -/
theorem locallyConnectedSpace_iff_connected_subsets :
LocallyConnectedSpace α ↔ ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ V ∈ 𝓝 x, IsPreconnected V ∧ V ⊆ U :=
by
@@ -1711,12 +1501,6 @@ theorem locallyConnectedSpace_iff_connected_basis :
#align locally_connected_space_iff_connected_basis locallyConnectedSpace_iff_connected_basis
-/
-/- warning: locally_connected_space_of_connected_bases -> locallyConnectedSpace_of_connected_bases is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} (b : α -> ι -> (Set.{u1} α)) (p : α -> ι -> Prop), (forall (x : α), Filter.HasBasis.{u1, succ u2} α ι (nhds.{u1} α _inst_1 x) (p x) (b x)) -> (forall (x : α) (i : ι), (p x i) -> (IsPreconnected.{u1} α _inst_1 (b x i))) -> (LocallyConnectedSpace.{u1} α _inst_1)
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} (b : α -> ι -> (Set.{u2} α)) (p : α -> ι -> Prop), (forall (x : α), Filter.HasBasis.{u2, succ u1} α ι (nhds.{u2} α _inst_1 x) (p x) (b x)) -> (forall (x : α) (i : ι), (p x i) -> (IsPreconnected.{u2} α _inst_1 (b x i))) -> (LocallyConnectedSpace.{u2} α _inst_1)
-Case conversion may be inaccurate. Consider using '#align locally_connected_space_of_connected_bases locallyConnectedSpace_of_connected_basesₓ'. -/
theorem locallyConnectedSpace_of_connected_bases {ι : Type _} (b : α → ι → Set α) (p : α → ι → Prop)
(hbasis : ∀ x, (𝓝 x).HasBasis (p x) (b x))
(hconnected : ∀ x i, p x i → IsPreconnected (b x i)) : LocallyConnectedSpace α :=
@@ -1777,12 +1561,6 @@ instance Pi.totallyDisconnectedSpace {α : Type _} {β : α → Type _}
#align pi.totally_disconnected_space Pi.totallyDisconnectedSpace
-/
-/- warning: prod.totally_disconnected_space -> Prod.totallyDisconnectedSpace is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TotallyDisconnectedSpace.{u1} α _inst_1] [_inst_4 : TotallyDisconnectedSpace.{u2} β _inst_2], TotallyDisconnectedSpace.{max u1 u2} (Prod.{u1, u2} α β) (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TotallyDisconnectedSpace.{u1} α _inst_1] [_inst_4 : TotallyDisconnectedSpace.{u2} β _inst_2], TotallyDisconnectedSpace.{max u2 u1} (Prod.{u1, u2} α β) (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align prod.totally_disconnected_space Prod.totallyDisconnectedSpaceₓ'. -/
instance Prod.totallyDisconnectedSpace [TopologicalSpace β] [TotallyDisconnectedSpace α]
[TotallyDisconnectedSpace β] : TotallyDisconnectedSpace (α × β) :=
⟨fun t h1 h2 =>
@@ -1810,12 +1588,6 @@ instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i
· obtain ⟨a, t, ht, rfl⟩ := Sigma.isConnected_iff.1 ⟨h, hs⟩
exact ht.is_preconnected.subsingleton.image _
-/- warning: is_totally_disconnected_of_clopen_set -> isTotallyDisconnected_of_clopen_set is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} X], (forall {x : X} {y : X}, (Ne.{succ u1} X x y) -> (Exists.{succ u1} (Set.{u1} X) (fun (U : Set.{u1} X) => Exists.{0} (IsClopen.{u1} X _inst_2 U) (fun (h_clopen : IsClopen.{u1} X _inst_2 U) => And (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U) (Not (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) y U)))))) -> (IsTotallyDisconnected.{u1} X _inst_2 (Set.univ.{u1} X))
-but is expected to have type
- forall {X : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} X], (Pairwise.{u1} X (fun (x : X) (y : X) => Exists.{succ u1} (Set.{u1} X) (fun (U : Set.{u1} X) => And (IsClopen.{u1} X _inst_2 U) (And (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U) (Not (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) y U)))))) -> (IsTotallyDisconnected.{u1} X _inst_2 (Set.univ.{u1} X))
-Case conversion may be inaccurate. Consider using '#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_clopen_setₓ'. -/
/-- Let `X` be a topological space, and suppose that for all distinct `x,y ∈ X`, there
is some clopen set `U` such that `x ∈ U` and `y ∉ U`. Then `X` is totally disconnected. -/
theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
@@ -1871,12 +1643,6 @@ theorem connectedComponent_eq_singleton [TotallyDisconnectedSpace α] (x : α) :
#align connected_component_eq_singleton connectedComponent_eq_singleton
-/
-/- warning: continuous.image_connected_component_eq_singleton -> Continuous.image_connectedComponent_eq_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {β : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TotallyDisconnectedSpace.{u2} β _inst_2] {f : α -> β}, (Continuous.{u1, u2} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β f (connectedComponent.{u1} α _inst_1 a)) (Singleton.singleton.{u2, u2} β (Set.{u2} β) (Set.hasSingleton.{u2} β) (f a)))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {β : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TotallyDisconnectedSpace.{u1} β _inst_2] {f : α -> β}, (Continuous.{u2, u1} α β _inst_1 _inst_2 f) -> (forall (a : α), Eq.{succ u1} (Set.{u1} β) (Set.image.{u2, u1} α β f (connectedComponent.{u2} α _inst_1 a)) (Singleton.singleton.{u1, u1} β (Set.{u1} β) (Set.instSingletonSet.{u1} β) (f a)))
-Case conversion may be inaccurate. Consider using '#align continuous.image_connected_component_eq_singleton Continuous.image_connectedComponent_eq_singletonₓ'. -/
/-- The image of a connected component in a totally disconnected space is a singleton. -/
@[simp]
theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [TopologicalSpace β]
@@ -1984,12 +1750,6 @@ instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type _) [Topo
#align totally_separated_space.of_discrete TotallySeparatedSpace.of_discrete
-/
-/- warning: exists_clopen_of_totally_separated -> exists_clopen_of_totally_separated is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : TotallySeparatedSpace.{u1} α _inst_2] {x : α} {y : α}, (Ne.{succ u1} α x y) -> (Exists.{succ u1} (Set.{u1} α) (fun (U : Set.{u1} α) => Exists.{0} (IsClopen.{u1} α _inst_2 U) (fun (hU : IsClopen.{u1} α _inst_2 U) => And (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x U) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) U)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} α] [_inst_3 : TotallySeparatedSpace.{u1} α _inst_2] {x : α} {y : α}, (Ne.{succ u1} α x y) -> (Exists.{succ u1} (Set.{u1} α) (fun (U : Set.{u1} α) => And (IsClopen.{u1} α _inst_2 U) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x U) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) U)))))
-Case conversion may be inaccurate. Consider using '#align exists_clopen_of_totally_separated exists_clopen_of_totally_separatedₓ'. -/
theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
[TotallySeparatedSpace α] {x y : α} (hxy : x ≠ y) :
∃ (U : Set α)(hU : IsClopen U), x ∈ U ∧ y ∈ Uᶜ :=
@@ -2125,12 +1885,6 @@ theorem Continuous.connectedComponentsLift_comp_coe (h : Continuous f) :
#align continuous.connected_components_lift_comp_coe Continuous.connectedComponentsLift_comp_coe
-/
-/- warning: connected_components_lift_unique' -> connectedComponents_lift_unique' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {β : Sort.{u2}} {g₁ : (ConnectedComponents.{u1} α _inst_1) -> β} {g₂ : (ConnectedComponents.{u1} α _inst_1) -> β}, (Eq.{imax (succ u1) u2} (α -> β) (Function.comp.{succ u1, succ u1, u2} α (ConnectedComponents.{u1} α _inst_1) β g₁ ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (ConnectedComponents.{u1} α _inst_1) (HasLiftT.mk.{succ u1, succ u1} α (ConnectedComponents.{u1} α _inst_1) (CoeTCₓ.coe.{succ u1, succ u1} α (ConnectedComponents.{u1} α _inst_1) (ConnectedComponents.hasCoeT.{u1} α _inst_1))))) (Function.comp.{succ u1, succ u1, u2} α (ConnectedComponents.{u1} α _inst_1) β g₂ ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) α (ConnectedComponents.{u1} α _inst_1) (HasLiftT.mk.{succ u1, succ u1} α (ConnectedComponents.{u1} α _inst_1) (CoeTCₓ.coe.{succ u1, succ u1} α (ConnectedComponents.{u1} α _inst_1) (ConnectedComponents.hasCoeT.{u1} α _inst_1)))))) -> (Eq.{imax (succ u1) u2} ((ConnectedComponents.{u1} α _inst_1) -> β) g₁ g₂)
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {β : Sort.{u1}} {g₁ : (ConnectedComponents.{u2} α _inst_1) -> β} {g₂ : (ConnectedComponents.{u2} α _inst_1) -> β}, (Eq.{imax (succ u2) u1} (α -> β) (Function.comp.{succ u2, succ u2, u1} α (ConnectedComponents.{u2} α _inst_1) β g₁ (ConnectedComponents.mk.{u2} α _inst_1)) (Function.comp.{succ u2, succ u2, u1} α (ConnectedComponents.{u2} α _inst_1) β g₂ (ConnectedComponents.mk.{u2} α _inst_1))) -> (Eq.{imax (succ u2) u1} ((ConnectedComponents.{u2} α _inst_1) -> β) g₁ g₂)
-Case conversion may be inaccurate. Consider using '#align connected_components_lift_unique' connectedComponents_lift_unique'ₓ'. -/
theorem connectedComponents_lift_unique' {β : Sort _} {g₁ g₂ : ConnectedComponents α → β}
(hg : g₁ ∘ (coe : α → ConnectedComponents α) = g₂ ∘ coe) : g₁ = g₂ :=
ConnectedComponents.surjective_coe.injective_comp_right hg
@@ -2183,12 +1937,6 @@ def Continuous.connectedComponentsMap {β : Type _} [TopologicalSpace β] {f :
#align continuous.connected_components_map Continuous.connectedComponentsMap
-/
-/- warning: continuous.connected_components_map_continuous -> Continuous.connectedComponentsMap_continuous is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {β : Type.{u2}} [_inst_4 : TopologicalSpace.{u2} β] {f : α -> β} (h : Continuous.{u1, u2} α β _inst_1 _inst_4 f), Continuous.{u1, u2} (ConnectedComponents.{u1} α _inst_1) (ConnectedComponents.{u2} β _inst_4) (ConnectedComponents.topologicalSpace.{u1} α _inst_1) (ConnectedComponents.topologicalSpace.{u2} β _inst_4) (Continuous.connectedComponentsMap.{u1, u2} α _inst_1 β _inst_4 f h)
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {β : Type.{u1}} [_inst_4 : TopologicalSpace.{u1} β] {f : α -> β} (h : Continuous.{u2, u1} α β _inst_1 _inst_4 f), Continuous.{u2, u1} (ConnectedComponents.{u2} α _inst_1) (ConnectedComponents.{u1} β _inst_4) (ConnectedComponents.instTopologicalSpaceConnectedComponents.{u2} α _inst_1) (ConnectedComponents.instTopologicalSpaceConnectedComponents.{u1} β _inst_4) (Continuous.connectedComponentsMap.{u2, u1} α _inst_1 β _inst_4 f h)
-Case conversion may be inaccurate. Consider using '#align continuous.connected_components_map_continuous Continuous.connectedComponentsMap_continuousₓ'. -/
theorem Continuous.connectedComponentsMap_continuous {β : Type _} [TopologicalSpace β] {f : α → β}
(h : Continuous f) : Continuous h.connectedComponentsMap :=
Continuous.connectedComponentsLift_continuous (continuous_quotient_mk'.comp h)
@@ -2196,12 +1944,6 @@ theorem Continuous.connectedComponentsMap_continuous {β : Type _} [TopologicalS
end connectedComponentSetoid
-/- warning: is_preconnected.constant -> IsPreconnected.constant is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {Y : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : DiscreteTopology.{u2} Y _inst_2] {s : Set.{u1} α}, (IsPreconnected.{u1} α _inst_1 s) -> (forall {f : α -> Y}, (ContinuousOn.{u1, u2} α Y _inst_1 _inst_2 f s) -> (forall {x : α} {y : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Eq.{succ u2} Y (f x) (f y))))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {Y : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} Y] [_inst_3 : DiscreteTopology.{u1} Y _inst_2] {s : Set.{u2} α}, (IsPreconnected.{u2} α _inst_1 s) -> (forall {f : α -> Y}, (ContinuousOn.{u2, u1} α Y _inst_1 _inst_2 f s) -> (forall {x : α} {y : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) y s) -> (Eq.{succ u1} Y (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.constant IsPreconnected.constantₓ'. -/
/-- A preconnected set `s` has the property that every map to a
discrete space that is continuous on `s` is constant on `s` -/
theorem IsPreconnected.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopology Y] {s : Set α}
@@ -2210,12 +1952,6 @@ theorem IsPreconnected.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopol
(hs.image f hf).Subsingleton (mem_image_of_mem f hx) (mem_image_of_mem f hy)
#align is_preconnected.constant IsPreconnected.constant
-/- warning: is_preconnected_of_forall_constant -> isPreconnected_of_forall_constant is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (forall (f : α -> Bool), (ContinuousOn.{u1, 0} α Bool _inst_1 Bool.topologicalSpace f s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (Eq.{1} Bool (f x) (f y))))) -> (IsPreconnected.{u1} α _inst_1 s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (forall (f : α -> Bool), (ContinuousOn.{u1, 0} α Bool _inst_1 instTopologicalSpaceBool f s) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (Eq.{1} Bool (f x) (f y))))) -> (IsPreconnected.{u1} α _inst_1 s)
-Case conversion may be inaccurate. Consider using '#align is_preconnected_of_forall_constant isPreconnected_of_forall_constantₓ'. -/
/-- If every map to `bool` (a discrete two-element space), that is
continuous on a set `s`, is constant on s, then s is preconnected -/
theorem isPreconnected_of_forall_constant {s : Set α}
@@ -2236,24 +1972,12 @@ theorem isPreconnected_of_forall_constant {s : Set α}
hs _ this x x_in_s y y_in_s
#align is_preconnected_of_forall_constant isPreconnected_of_forall_constant
-/- warning: preconnected_space.constant -> PreconnectedSpace.constant is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {Y : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} Y] [_inst_3 : DiscreteTopology.{u2} Y _inst_2], (PreconnectedSpace.{u1} α _inst_1) -> (forall {f : α -> Y}, (Continuous.{u1, u2} α Y _inst_1 _inst_2 f) -> (forall {x : α} {y : α}, Eq.{succ u2} Y (f x) (f y)))
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {Y : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} Y] [_inst_3 : DiscreteTopology.{u1} Y _inst_2], (PreconnectedSpace.{u2} α _inst_1) -> (forall {f : α -> Y}, (Continuous.{u2, u1} α Y _inst_1 _inst_2 f) -> (forall {x : α} {y : α}, Eq.{succ u1} Y (f x) (f y)))
-Case conversion may be inaccurate. Consider using '#align preconnected_space.constant PreconnectedSpace.constantₓ'. -/
/-- A `preconnected_space` version of `is_preconnected.constant` -/
theorem PreconnectedSpace.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopology Y]
(hp : PreconnectedSpace α) {f : α → Y} (hf : Continuous f) {x y : α} : f x = f y :=
IsPreconnected.constant hp.isPreconnected_univ (Continuous.continuousOn hf) trivial trivial
#align preconnected_space.constant PreconnectedSpace.constant
-/- warning: preconnected_space_of_forall_constant -> preconnectedSpace_of_forall_constant is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], (forall (f : α -> Bool), (Continuous.{u1, 0} α Bool _inst_1 Bool.topologicalSpace f) -> (forall (x : α) (y : α), Eq.{1} Bool (f x) (f y))) -> (PreconnectedSpace.{u1} α _inst_1)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], (forall (f : α -> Bool), (Continuous.{u1, 0} α Bool _inst_1 instTopologicalSpaceBool f) -> (forall (x : α) (y : α), Eq.{1} Bool (f x) (f y))) -> (PreconnectedSpace.{u1} α _inst_1)
-Case conversion may be inaccurate. Consider using '#align preconnected_space_of_forall_constant preconnectedSpace_of_forall_constantₓ'. -/
/-- A `preconnected_space` version of `is_preconnected_of_forall_constant` -/
theorem preconnectedSpace_of_forall_constant
(hs : ∀ f : α → Bool, Continuous f → ∀ x y, f x = f y) : PreconnectedSpace α :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -135,12 +135,9 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
(H : ∀ y ∈ s, ∃ (t : _)(_ : t ⊆ s), x ∈ t ∧ y ∈ t ∧ IsPreconnected t) : IsPreconnected s :=
by
rintro u v hu hv hs ⟨z, zs, zu⟩ ⟨y, ys, yv⟩
- have xs : x ∈ s := by
- rcases H y ys with ⟨t, ts, xt, yt, ht⟩
- exact ts xt
+ have xs : x ∈ s := by rcases H y ys with ⟨t, ts, xt, yt, ht⟩; exact ts xt
wlog xu : x ∈ u
- · rw [inter_comm u v]
- rw [union_comm] at hs
+ · rw [inter_comm u v]; rw [union_comm] at hs
exact this x H v u hv hu hs y ys yv z zs zu xs ((hs xs).resolve_right xu)
rcases H y ys with ⟨t, ts, xt, yt, ht⟩
have := ht u v hu hv (subset.trans ts hs) ⟨x, xt, xu⟩ ⟨y, yt, yv⟩
@@ -207,9 +204,7 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s t)) -> (IsPreconnected.{u1} α _inst_1 s) -> (IsPreconnected.{u1} α _inst_1 t) -> (IsPreconnected.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t))
Case conversion may be inaccurate. Consider using '#align is_preconnected.union' IsPreconnected.union'ₓ'. -/
theorem IsPreconnected.union' {s t : Set α} (H : (s ∩ t).Nonempty) (hs : IsPreconnected s)
- (ht : IsPreconnected t) : IsPreconnected (s ∪ t) :=
- by
- rcases H with ⟨x, hxs, hxt⟩
+ (ht : IsPreconnected t) : IsPreconnected (s ∪ t) := by rcases H with ⟨x, hxs, hxt⟩;
exact hs.union x hxs hxt ht
#align is_preconnected.union' IsPreconnected.union'
@@ -320,8 +315,7 @@ where two vertices are joined when the corresponding sets intersect. -/
theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
(H : ∀ i, IsPreconnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) :
- IsPreconnected (⋃ n, s n) := by
- rw [← bUnion_univ]
+ IsPreconnected (⋃ n, s n) := by rw [← bUnion_univ];
exact
IsPreconnected.biUnion_of_reflTransGen (fun i _ => H i) fun i _ j _ => by
simpa [mem_univ] using K i j
@@ -357,10 +351,7 @@ Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_
theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
(K : ∀ n, (s n ∩ s (succ n)).Nonempty) : IsPreconnected (⋃ n, s n) :=
IsPreconnected.iUnion_of_reflTransGen H fun i j =>
- reflTransGen_of_succ _ (fun i _ => K i) fun i _ =>
- by
- rw [inter_comm]
- exact K i
+ reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by rw [inter_comm]; exact K i
#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chain
/- warning: is_connected.Union_of_chain -> IsConnected.iUnion_of_chain is a dubious translation:
@@ -374,10 +365,7 @@ Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_
theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
(K : ∀ n, (s n ∩ s (succ n)).Nonempty) : IsConnected (⋃ n, s n) :=
IsConnected.iUnion_of_reflTransGen H fun i j =>
- reflTransGen_of_succ _ (fun i _ => K i) fun i _ =>
- by
- rw [inter_comm]
- exact K i
+ reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by rw [inter_comm]; exact K i
#align is_connected.Union_of_chain IsConnected.iUnion_of_chain
/- warning: is_preconnected.bUnion_of_chain -> IsPreconnected.biUnion_of_chain is a dubious translation:
@@ -402,9 +390,7 @@ theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : O
refine' IsPreconnected.biUnion_of_reflTransGen H fun i hi j hj => _
exact
reflTransGen_of_succ _ (fun k hk => ⟨h3 hi hj hk, h1 hi hj hk⟩) fun k hk =>
- ⟨by
- rw [inter_comm]
- exact h3 hj hi hk, h2 hj hi hk⟩
+ ⟨by rw [inter_comm]; exact h3 hj hi hk, h2 hj hi hk⟩
#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chain
/- warning: is_connected.bUnion_of_chain -> IsConnected.biUnion_of_chain is a dubious translation:
@@ -706,8 +692,7 @@ theorem isPreconnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set
rintro u v uo vo hsuv ⟨f, hfs, hfu⟩ ⟨g, hgs, hgv⟩
rcases exists_finset_piecewise_mem_of_mem_nhds (uo.mem_nhds hfu) g with ⟨I, hI⟩
induction' I using Finset.induction_on with i I hi ihI
- · refine' ⟨g, hgs, ⟨_, hgv⟩⟩
- simpa using hI
+ · refine' ⟨g, hgs, ⟨_, hgv⟩⟩; simpa using hI
· rw [Finset.piecewise_insert] at hI
have := I.piecewise_mem_set_pi hfs hgs
refine' (hsuv this).elim ihI fun h => _
@@ -751,10 +736,7 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π
· obtain ⟨⟨i, x⟩, hx⟩ := hs.nonempty
have : s ⊆ range (Sigma.mk i) :=
by
- have h : range (Sigma.mk i) = Sigma.fst ⁻¹' {i} :=
- by
- ext
- simp
+ have h : range (Sigma.mk i) = Sigma.fst ⁻¹' {i} := by ext; simp
rw [h]
exact
IsPreconnected.subset_left_of_subset_union (isOpen_sigma_fst_preimage _)
@@ -890,18 +872,14 @@ theorem connectedComponent_nonempty {x : α} : (connectedComponent x).Nonempty :
#print connectedComponentIn_nonempty_iff /-
theorem connectedComponentIn_nonempty_iff {x : α} {F : Set α} :
- (connectedComponentIn F x).Nonempty ↔ x ∈ F :=
- by
- rw [connectedComponentIn]
+ (connectedComponentIn F x).Nonempty ↔ x ∈ F := by rw [connectedComponentIn];
split_ifs <;> simp [connectedComponent_nonempty, h]
#align connected_component_in_nonempty_iff connectedComponentIn_nonempty_iff
-/
#print connectedComponentIn_subset /-
-theorem connectedComponentIn_subset (F : Set α) (x : α) : connectedComponentIn F x ⊆ F :=
- by
- rw [connectedComponentIn]
- split_ifs <;> simp
+theorem connectedComponentIn_subset (F : Set α) (x : α) : connectedComponentIn F x ⊆ F := by
+ rw [connectedComponentIn]; split_ifs <;> simp
#align connected_component_in_subset connectedComponentIn_subset
-/
@@ -951,10 +929,7 @@ theorem IsPreconnected.subset_connectedComponentIn {x : α} {F : Set α} (hs : I
by
refine' embedding_subtype_coe.to_inducing.is_preconnected_image.mp _
rwa [Subtype.image_preimage_coe, inter_eq_left_iff_subset.mpr hsF]
- have h2xs : (⟨x, hsF hxs⟩ : F) ∈ coe ⁻¹' s :=
- by
- rw [mem_preimage]
- exact hxs
+ have h2xs : (⟨x, hsF hxs⟩ : F) ∈ coe ⁻¹' s := by rw [mem_preimage]; exact hxs
have := this.subset_connected_component h2xs
rw [connectedComponentIn_eq_image (hsF hxs)]
refine' subset.trans _ (image_subset _ this)
@@ -1125,10 +1100,7 @@ theorem connectedSpace_iff_connectedComponent :
exact
⟨x, eq_univ_of_univ_subset <| is_preconnected_univ.subset_connected_component (mem_univ x)⟩
· rintro ⟨x, h⟩
- haveI : PreconnectedSpace α :=
- ⟨by
- rw [← h]
- exact isPreconnected_connectedComponent⟩
+ haveI : PreconnectedSpace α := ⟨by rw [← h]; exact isPreconnected_connectedComponent⟩
exact ⟨⟨x⟩⟩
#align connected_space_iff_connected_component connectedSpace_iff_connectedComponent
-/
@@ -1142,16 +1114,8 @@ theorem preconnectedSpace_iff_connectedComponent :
exact eq_univ_of_univ_subset <| is_preconnected_univ.subset_connected_component (mem_univ x)
· intro h
cases' isEmpty_or_nonempty α with hα hα
- ·
- exact
- ⟨by
- rw [univ_eq_empty_iff.mpr hα]
- exact isPreconnected_empty⟩
- ·
- exact
- ⟨by
- rw [← h (Classical.choice hα)]
- exact isPreconnected_connectedComponent⟩
+ · exact ⟨by rw [univ_eq_empty_iff.mpr hα]; exact isPreconnected_empty⟩
+ · exact ⟨by rw [← h (Classical.choice hα)]; exact isPreconnected_connectedComponent⟩
#align preconnected_space_iff_connected_component preconnectedSpace_iff_connectedComponent
-/
@@ -1165,18 +1129,14 @@ theorem PreconnectedSpace.connectedComponent_eq_univ {X : Type _} [TopologicalSp
instance [TopologicalSpace β] [PreconnectedSpace α] [PreconnectedSpace β] :
PreconnectedSpace (α × β) :=
- ⟨by
- rw [← univ_prod_univ]
- exact is_preconnected_univ.prod is_preconnected_univ⟩
+ ⟨by rw [← univ_prod_univ]; exact is_preconnected_univ.prod is_preconnected_univ⟩
instance [TopologicalSpace β] [ConnectedSpace α] [ConnectedSpace β] : ConnectedSpace (α × β) :=
⟨Prod.nonempty⟩
instance [∀ i, TopologicalSpace (π i)] [∀ i, PreconnectedSpace (π i)] :
PreconnectedSpace (∀ i, π i) :=
- ⟨by
- rw [← pi_univ univ]
- exact isPreconnected_univ_pi fun i => is_preconnected_univ⟩
+ ⟨by rw [← pi_univ univ]; exact isPreconnected_univ_pi fun i => is_preconnected_univ⟩
instance [∀ i, TopologicalSpace (π i)] [∀ i, ConnectedSpace (π i)] : ConnectedSpace (∀ i, π i) :=
⟨Classical.nonempty_pi.2 fun i => by infer_instance⟩
@@ -1305,10 +1265,8 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
contrapose H
apply nonempty.ne_empty
cases h
- · rcases hsv with ⟨x, hxs, hxv⟩
- exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
- · rcases hsu with ⟨x, hxs, hxu⟩
- exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
+ · rcases hsv with ⟨x, hxs, hxv⟩; exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
+ · rcases hsu with ⟨x, hxs, hxu⟩; exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint isPreconnected_iff_subset_of_disjoint
/- warning: is_connected_iff_sUnion_disjoint_open -> isConnected_iff_sUnion_disjoint_open is a dubious translation:
@@ -1327,26 +1285,21 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
by
rw [IsConnected, isPreconnected_iff_subset_of_disjoint]
constructor <;> intro h
- · intro U
- apply Finset.induction_on U
+ · intro U; apply Finset.induction_on U
· rcases h.left with ⟨⟩
suffices s ⊆ ∅ → False by simpa
- intro
- solve_by_elim
+ intro ; solve_by_elim
· intro u U hu IH hs hU H
rw [Finset.coe_insert, sUnion_insert] at H
cases' h.2 u (⋃₀ ↑U) _ _ H _ with hsu hsU
· exact ⟨u, Finset.mem_insert_self _ _, hsu⟩
· rcases IH _ _ hsU with ⟨v, hvU, hsv⟩
· exact ⟨v, Finset.mem_insert_of_mem hvU, hsv⟩
- · intros
- apply hs <;> solve_by_elim [Finset.mem_insert_of_mem]
- · intros
- solve_by_elim [Finset.mem_insert_of_mem]
+ · intros ; apply hs <;> solve_by_elim [Finset.mem_insert_of_mem]
+ · intros ; solve_by_elim [Finset.mem_insert_of_mem]
· solve_by_elim [Finset.mem_insert_self]
· apply isOpen_sUnion
- intros
- solve_by_elim [Finset.mem_insert_of_mem]
+ intros ; solve_by_elim [Finset.mem_insert_of_mem]
· apply eq_empty_of_subset_empty
rintro x ⟨hxs, hxu, hxU⟩
rw [mem_sUnion] at hxU
@@ -1356,8 +1309,7 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
· exact ⟨x, hxs, hxu, hxv⟩
· constructor
· rw [nonempty_iff_ne_empty]
- by_contra hs
- subst hs
+ by_contra hs; subst hs
simpa using h ∅ _ _ _ <;> simp
intro u v hu hv hs hsuv
rcases h {u, v} _ _ _ with ⟨t, ht, ht'⟩
@@ -1368,8 +1320,7 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
rw [Finset.mem_insert, Finset.mem_singleton] at ht₁ ht₂
rcases ht₁ with (rfl | rfl) <;> rcases ht₂ with (rfl | rfl)
all_goals first |rfl|contradiction|skip
- rw [inter_comm t₁] at hst
- contradiction
+ rw [inter_comm t₁] at hst; contradiction
· intro t
rw [Finset.mem_insert, Finset.mem_singleton]
rintro (rfl | rfl) <;> assumption
@@ -1437,10 +1388,8 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
contrapose H
apply nonempty.ne_empty
cases h
- · rcases hsv with ⟨x, hxs, hxv⟩
- exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
- · rcases hsu with ⟨x, hxs, hxu⟩
- exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
+ · rcases hsv with ⟨x, hxs, hxv⟩; exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
+ · rcases hsu with ⟨x, hxs, hxu⟩; exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint_closed isPreconnected_iff_subset_of_disjoint_closed
/- warning: is_preconnected_iff_subset_of_fully_disjoint_closed -> isPreconnected_iff_subset_of_fully_disjoint_closed is a dubious translation:
@@ -1568,10 +1517,8 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
intro t' ht'
rw [mem_union t' T₁ T₂]
cases' fiber_decomp t' ht' with htu htv
- · left
- exact ⟨ht', htu⟩
- right
- exact ⟨ht', htv⟩
+ · left; exact ⟨ht', htu⟩
+ right; exact ⟨ht', htv⟩
have T_disjoint : Disjoint T₁ T₂ :=
by
refine' Disjoint.of_preimage hf _
@@ -2200,9 +2147,7 @@ theorem Continuous.connectedComponentsLift_unique (h : Continuous f) (g : Connec
/-- The preimage of a singleton in `connected_components` is the connected component
of an element in the equivalence class. -/
theorem connectedComponents_preimage_singleton {x : α} :
- coe ⁻¹' ({x} : Set (ConnectedComponents α)) = connectedComponent x :=
- by
- ext y
+ coe ⁻¹' ({x} : Set (ConnectedComponents α)) = connectedComponent x := by ext y;
simp [ConnectedComponents.coe_eq_coe']
#align connected_components_preimage_singleton connectedComponents_preimage_singleton
-/
@@ -2324,9 +2269,7 @@ theorem IsPreconnected.constant_of_mapsTo [TopologicalSpace β] {S : Set α} (hS
{x y : α} (hx : x ∈ S) (hy : y ∈ S) : f x = f y :=
by
let F : S → T := fun x : S => ⟨f x.val, hTm x.property⟩
- suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by
- rw [← Subtype.coe_inj] at this
- exact this
+ suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rw [← Subtype.coe_inj] at this; exact this
exact
(is_preconnected_iff_preconnected_space.mp hS).constant
(continuous_induced_rng.mpr <| continuous_on_iff_continuous_restrict.mp hc)
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -1218,7 +1218,7 @@ theorem isClopen_iff [PreconnectedSpace α] {s : Set α} : IsClopen s ↔ s =
nonempty_inter hs.1 hs.2.isOpen_compl (union_compl_self s) (nonempty_iff_ne_empty.2 h1.1)
(nonempty_iff_ne_empty.2 h1.2)
h3 h2,
- by rintro (rfl | rfl) <;> [exact isClopen_empty, exact isClopen_univ]⟩
+ by rintro (rfl | rfl) <;> [exact isClopen_empty;exact isClopen_univ]⟩
#align is_clopen_iff isClopen_iff
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -165,27 +165,27 @@ theorem isPreconnected_of_forall_pair {s : Set α}
exacts[isPreconnected_empty, isPreconnected_of_forall x fun y => H x hx y]
#align is_preconnected_of_forall_pair isPreconnected_of_forall_pair
-#print isPreconnected_unionₛ /-
+#print isPreconnected_sUnion /-
/-- A union of a family of preconnected sets with a common point is preconnected as well. -/
-theorem isPreconnected_unionₛ (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x ∈ s)
+theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x ∈ s)
(H2 : ∀ s ∈ c, IsPreconnected s) : IsPreconnected (⋃₀ c) :=
by
apply isPreconnected_of_forall x
rintro y ⟨s, sc, ys⟩
exact ⟨s, subset_sUnion_of_mem sc, H1 s sc, ys, H2 s sc⟩
-#align is_preconnected_sUnion isPreconnected_unionₛ
+#align is_preconnected_sUnion isPreconnected_sUnion
-/
-/- warning: is_preconnected_Union -> isPreconnected_unionᵢ is a dubious translation:
+/- warning: is_preconnected_Union -> isPreconnected_iUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Set.Nonempty.{u1} α (Set.interᵢ.{u1, u2} α ι (fun (i : ι) => s i))) -> (forall (i : ι), IsPreconnected.{u1} α _inst_1 (s i)) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => s i)))
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Set.Nonempty.{u1} α (Set.iInter.{u1, u2} α ι (fun (i : ι) => s i))) -> (forall (i : ι), IsPreconnected.{u1} α _inst_1 (s i)) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, u2} α ι (fun (i : ι) => s i)))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u2} α (Set.interᵢ.{u2, u1} α ι (fun (i : ι) => s i))) -> (forall (i : ι), IsPreconnected.{u2} α _inst_1 (s i)) -> (IsPreconnected.{u2} α _inst_1 (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => s i)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected_Union isPreconnected_unionᵢₓ'. -/
-theorem isPreconnected_unionᵢ {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
+ forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u2} α (Set.iInter.{u2, u1} α ι (fun (i : ι) => s i))) -> (forall (i : ι), IsPreconnected.{u2} α _inst_1 (s i)) -> (IsPreconnected.{u2} α _inst_1 (Set.iUnion.{u2, u1} α ι (fun (i : ι) => s i)))
+Case conversion may be inaccurate. Consider using '#align is_preconnected_Union isPreconnected_iUnionₓ'. -/
+theorem isPreconnected_iUnion {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
- Exists.elim h₁ fun f hf => isPreconnected_unionₛ f _ hf (forall_range_iff.2 h₂)
-#align is_preconnected_Union isPreconnected_unionᵢ
+ Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
+#align is_preconnected_Union isPreconnected_iUnion
/- warning: is_preconnected.union -> IsPreconnected.union is a dubious translation:
lean 3 declaration is
@@ -195,8 +195,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align is_preconnected.union IsPreconnected.unionₓ'. -/
theorem IsPreconnected.union (x : α) {s t : Set α} (H1 : x ∈ s) (H2 : x ∈ t) (H3 : IsPreconnected s)
(H4 : IsPreconnected t) : IsPreconnected (s ∪ t) :=
- unionₛ_pair s t ▸
- isPreconnected_unionₛ x {s, t} (by rintro r (rfl | rfl | h) <;> assumption)
+ sUnion_pair s t ▸
+ isPreconnected_sUnion x {s, t} (by rintro r (rfl | rfl | h) <;> assumption)
(by rintro r (rfl | rfl | h) <;> assumption)
#align is_preconnected.union IsPreconnected.union
@@ -229,9 +229,9 @@ theorem IsConnected.union {s t : Set α} (H : (s ∩ t).Nonempty) (Hs : IsConnec
Ht.is_preconnected
#align is_connected.union IsConnected.union
-#print IsPreconnected.unionₛ_directed /-
+#print IsPreconnected.sUnion_directed /-
/-- The directed sUnion of a set S of preconnected subsets is preconnected. -/
-theorem IsPreconnected.unionₛ_directed {S : Set (Set α)} (K : DirectedOn (· ⊆ ·) S)
+theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (· ⊆ ·) S)
(H : ∀ s ∈ S, IsPreconnected s) : IsPreconnected (⋃₀ S) :=
by
rintro u v hu hv Huv ⟨a, ⟨s, hsS, has⟩, hau⟩ ⟨b, ⟨t, htS, hbt⟩, hbv⟩
@@ -240,21 +240,21 @@ theorem IsPreconnected.unionₛ_directed {S : Set (Set α)} (K : DirectedOn (·
H _ hrS u v hu hv ((subset_sUnion_of_mem hrS).trans Huv) ⟨a, hsr has, hau⟩ ⟨b, htr hbt, hbv⟩
have Kruv : r ∩ (u ∩ v) ⊆ ⋃₀ S ∩ (u ∩ v) := inter_subset_inter_left _ (subset_sUnion_of_mem hrS)
exact Hnuv.mono Kruv
-#align is_preconnected.sUnion_directed IsPreconnected.unionₛ_directed
+#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/
-/- warning: is_preconnected.bUnion_of_refl_trans_gen -> IsPreconnected.bunionᵢ_of_reflTransGen is a dubious translation:
+/- warning: is_preconnected.bUnion_of_refl_trans_gen -> IsPreconnected.biUnion_of_reflTransGen is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {t : Set.{u2} ι} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (IsPreconnected.{u1} α _inst_1 (s i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (forall (j : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) j t) -> (Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t)) i j))) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α ι (fun (n : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) => s n))))
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {t : Set.{u2} ι} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (IsPreconnected.{u1} α _inst_1 (s i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (forall (j : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) j t) -> (Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t)) i j))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) => s n))))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsPreconnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsPreconnected.{u2} α _inst_1 (Set.unionᵢ.{u2, succ u1} α ι (fun (n : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.bunionᵢ_of_reflTransGenₓ'. -/
+ forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsPreconnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsPreconnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
+Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGenₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (p «expr ⊆ » t) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
-theorem IsPreconnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
+theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
(H : ∀ i ∈ t, IsPreconnected (s i))
(K :
∀ (i) (_ : i ∈ t) (j) (_ : j ∈ t),
@@ -287,58 +287,58 @@ theorem IsPreconnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s :
obtain ⟨j : ι, hj : j ∈ t, hyj : y ∈ s j⟩ := mem_Union₂.1 hy
obtain ⟨p, hpt, hip, hjp, hp⟩ := P i hi j hj (K i hi j hj)
exact ⟨⋃ j ∈ p, s j, bUnion_subset_bUnion_left hpt, mem_bUnion hip hxi, mem_bUnion hjp hyj, hp⟩
-#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.bunionᵢ_of_reflTransGen
+#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/- warning: is_connected.bUnion_of_refl_trans_gen -> IsConnected.bunionᵢ_of_reflTransGen is a dubious translation:
+/- warning: is_connected.bUnion_of_refl_trans_gen -> IsConnected.biUnion_of_reflTransGen is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {t : Set.{u2} ι} {s : ι -> (Set.{u1} α)}, (Set.Nonempty.{u2} ι t) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (IsConnected.{u1} α _inst_1 (s i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (forall (j : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) j t) -> (Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t)) i j))) -> (IsConnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α ι (fun (n : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) => s n))))
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {t : Set.{u2} ι} {s : ι -> (Set.{u1} α)}, (Set.Nonempty.{u2} ι t) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (IsConnected.{u1} α _inst_1 (s i))) -> (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) -> (forall (j : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) j t) -> (Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t)) i j))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) n t) => s n))))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u1} ι t) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsConnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsConnected.{u2} α _inst_1 (Set.unionᵢ.{u2, succ u1} α ι (fun (n : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_refl_trans_gen IsConnected.bunionᵢ_of_reflTransGenₓ'. -/
+ forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u1} ι t) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsConnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsConnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
+Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_refl_trans_gen IsConnected.biUnion_of_reflTransGenₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
-theorem IsConnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
+theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
(ht : t.Nonempty) (H : ∀ i ∈ t, IsConnected (s i))
(K :
∀ (i) (_ : i ∈ t) (j) (_ : j ∈ t),
ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty ∧ i ∈ t) i j) :
IsConnected (⋃ n ∈ t, s n) :=
- ⟨nonempty_bunionᵢ.2 <| ⟨ht.some, ht.some_mem, (H _ ht.some_mem).Nonempty⟩,
- IsPreconnected.bunionᵢ_of_reflTransGen (fun i hi => (H i hi).IsPreconnected) K⟩
-#align is_connected.bUnion_of_refl_trans_gen IsConnected.bunionᵢ_of_reflTransGen
+ ⟨nonempty_biUnion.2 <| ⟨ht.some, ht.some_mem, (H _ ht.some_mem).Nonempty⟩,
+ IsPreconnected.biUnion_of_reflTransGen (fun i hi => (H i hi).IsPreconnected) K⟩
+#align is_connected.bUnion_of_refl_trans_gen IsConnected.biUnion_of_reflTransGen
-/- warning: is_preconnected.Union_of_refl_trans_gen -> IsPreconnected.unionᵢ_of_reflTransGen is a dubious translation:
+/- warning: is_preconnected.Union_of_refl_trans_gen -> IsPreconnected.iUnion_of_reflTransGen is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {s : ι -> (Set.{u1} α)}, (forall (i : ι), IsPreconnected.{u1} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) i j) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α ι (fun (n : ι) => s n)))
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} {s : ι -> (Set.{u1} α)}, (forall (i : ι), IsPreconnected.{u1} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) i j) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => s n)))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {s : ι -> (Set.{u2} α)}, (forall (i : ι), IsPreconnected.{u2} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) i j) -> (IsPreconnected.{u2} α _inst_1 (Set.unionᵢ.{u2, succ u1} α ι (fun (n : ι) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.unionᵢ_of_reflTransGenₓ'. -/
+ forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {s : ι -> (Set.{u2} α)}, (forall (i : ι), IsPreconnected.{u2} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) i j) -> (IsPreconnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => s n)))
+Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGenₓ'. -/
/-- Preconnectedness of the Union of a family of preconnected sets
indexed by the vertices of a preconnected graph,
where two vertices are joined when the corresponding sets intersect. -/
-theorem IsPreconnected.unionᵢ_of_reflTransGen {ι : Type _} {s : ι → Set α}
+theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
(H : ∀ i, IsPreconnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) :
IsPreconnected (⋃ n, s n) := by
rw [← bUnion_univ]
exact
- IsPreconnected.bunionᵢ_of_reflTransGen (fun i _ => H i) fun i _ j _ => by
+ IsPreconnected.biUnion_of_reflTransGen (fun i _ => H i) fun i _ j _ => by
simpa [mem_univ] using K i j
-#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.unionᵢ_of_reflTransGen
+#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGen
-/- warning: is_connected.Union_of_refl_trans_gen -> IsConnected.unionᵢ_of_reflTransGen is a dubious translation:
+/- warning: is_connected.Union_of_refl_trans_gen -> IsConnected.iUnion_of_reflTransGen is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} [_inst_2 : Nonempty.{succ u2} ι] {s : ι -> (Set.{u1} α)}, (forall (i : ι), IsConnected.{u1} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) i j) -> (IsConnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α ι (fun (n : ι) => s n)))
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {ι : Type.{u2}} [_inst_2 : Nonempty.{succ u2} ι] {s : ι -> (Set.{u1} α)}, (forall (i : ι), IsConnected.{u1} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u2} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s j))) i j) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α ι (fun (n : ι) => s n)))
but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} [_inst_2 : Nonempty.{succ u1} ι] {s : ι -> (Set.{u2} α)}, (forall (i : ι), IsConnected.{u2} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) i j) -> (IsConnected.{u2} α _inst_1 (Set.unionᵢ.{u2, succ u1} α ι (fun (n : ι) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_refl_trans_gen IsConnected.unionᵢ_of_reflTransGenₓ'. -/
-theorem IsConnected.unionᵢ_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
+ forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} [_inst_2 : Nonempty.{succ u1} ι] {s : ι -> (Set.{u2} α)}, (forall (i : ι), IsConnected.{u2} α _inst_1 (s i)) -> (forall (i : ι) (j : ι), Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) i j) -> (IsConnected.{u2} α _inst_1 (Set.iUnion.{u2, succ u1} α ι (fun (n : ι) => s n)))
+Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_refl_trans_gen IsConnected.iUnion_of_reflTransGenₓ'. -/
+theorem IsConnected.iUnion_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
(H : ∀ i, IsConnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) : IsConnected (⋃ n, s n) :=
- ⟨nonempty_unionᵢ.2 <| Nonempty.elim ‹_› fun i : ι => ⟨i, (H _).Nonempty⟩,
- IsPreconnected.unionᵢ_of_reflTransGen (fun i => (H i).IsPreconnected) K⟩
-#align is_connected.Union_of_refl_trans_gen IsConnected.unionᵢ_of_reflTransGen
+ ⟨nonempty_iUnion.2 <| Nonempty.elim ‹_› fun i : ι => ⟨i, (H _).Nonempty⟩,
+ IsPreconnected.iUnion_of_reflTransGen (fun i => (H i).IsPreconnected) K⟩
+#align is_connected.Union_of_refl_trans_gen IsConnected.iUnion_of_reflTransGen
section SuccOrder
@@ -346,49 +346,49 @@ open Order
variable [LinearOrder β] [SuccOrder β] [IsSuccArchimedean β]
-/- warning: is_preconnected.Union_of_chain -> IsPreconnected.unionᵢ_of_chain is a dubious translation:
+/- warning: is_preconnected.Union_of_chain -> IsPreconnected.iUnion_of_chain is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)}, (forall (n : β), IsPreconnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n)))) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => s n)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)}, (forall (n : β), IsPreconnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n)))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)}, (forall (n : β), IsPreconnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n)))) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_of_chain IsPreconnected.unionᵢ_of_chainₓ'. -/
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)}, (forall (n : β), IsPreconnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n)))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
+Case conversion may be inaccurate. Consider using '#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chainₓ'. -/
/-- The Union of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is preconnected. -/
-theorem IsPreconnected.unionᵢ_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
+theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
(K : ∀ n, (s n ∩ s (succ n)).Nonempty) : IsPreconnected (⋃ n, s n) :=
- IsPreconnected.unionᵢ_of_reflTransGen H fun i j =>
+ IsPreconnected.iUnion_of_reflTransGen H fun i j =>
reflTransGen_of_succ _ (fun i _ => K i) fun i _ =>
by
rw [inter_comm]
exact K i
-#align is_preconnected.Union_of_chain IsPreconnected.unionᵢ_of_chain
+#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chain
-/- warning: is_connected.Union_of_chain -> IsConnected.unionᵢ_of_chain is a dubious translation:
+/- warning: is_connected.Union_of_chain -> IsConnected.iUnion_of_chain is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] [_inst_5 : Nonempty.{succ u2} β] {s : β -> (Set.{u1} α)}, (forall (n : β), IsConnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n)))) -> (IsConnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => s n)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] [_inst_5 : Nonempty.{succ u2} β] {s : β -> (Set.{u1} α)}, (forall (n : β), IsConnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n)))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] [_inst_5 : Nonempty.{succ u2} β] {s : β -> (Set.{u1} α)}, (forall (n : β), IsConnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n)))) -> (IsConnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => s n)))
-Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_chain IsConnected.unionᵢ_of_chainₓ'. -/
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] [_inst_5 : Nonempty.{succ u2} β] {s : β -> (Set.{u1} α)}, (forall (n : β), IsConnected.{u1} α _inst_1 (s n)) -> (forall (n : β), Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n)))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => s n)))
+Case conversion may be inaccurate. Consider using '#align is_connected.Union_of_chain IsConnected.iUnion_of_chainₓ'. -/
/-- The Union of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is connected. -/
-theorem IsConnected.unionᵢ_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
+theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
(K : ∀ n, (s n ∩ s (succ n)).Nonempty) : IsConnected (⋃ n, s n) :=
- IsConnected.unionᵢ_of_reflTransGen H fun i j =>
+ IsConnected.iUnion_of_reflTransGen H fun i j =>
reflTransGen_of_succ _ (fun i _ => K i) fun i _ =>
by
rw [inter_comm]
exact K i
-#align is_connected.Union_of_chain IsConnected.unionᵢ_of_chain
+#align is_connected.Union_of_chain IsConnected.iUnion_of_chain
-/- warning: is_preconnected.bUnion_of_chain -> IsPreconnected.bunionᵢ_of_chain is a dubious translation:
+/- warning: is_preconnected.bUnion_of_chain -> IsPreconnected.biUnion_of_chain is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) t) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (IsPreconnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n))))) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) => s n))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) t) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (IsPreconnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n))))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) => s n))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) t) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (IsPreconnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n))))) -> (IsPreconnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) (fun (H : Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_chain IsPreconnected.bunionᵢ_of_chainₓ'. -/
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) t) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (IsPreconnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n))))) -> (IsPreconnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) (fun (H : Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) => s n))))
+Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chainₓ'. -/
/-- The Union of preconnected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
-theorem IsPreconnected.bunionᵢ_of_chain {s : β → Set α} {t : Set β} (ht : OrdConnected t)
+theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : OrdConnected t)
(H : ∀ n ∈ t, IsPreconnected (s n))
(K : ∀ n : β, n ∈ t → succ n ∈ t → (s n ∩ s (succ n)).Nonempty) :
IsPreconnected (⋃ n ∈ t, s n) :=
@@ -399,28 +399,28 @@ theorem IsPreconnected.bunionᵢ_of_chain {s : β → Set α} {t : Set β} (ht :
ht.out hi hj ⟨hk.1.trans <| le_succ k, succ_le_of_lt hk.2⟩
have h3 : ∀ {i j k : β}, i ∈ t → j ∈ t → k ∈ Ico i j → (s k ∩ s (succ k)).Nonempty :=
fun i j k hi hj hk => K _ (h1 hi hj hk) (h2 hi hj hk)
- refine' IsPreconnected.bunionᵢ_of_reflTransGen H fun i hi j hj => _
+ refine' IsPreconnected.biUnion_of_reflTransGen H fun i hi j hj => _
exact
reflTransGen_of_succ _ (fun k hk => ⟨h3 hi hj hk, h1 hi hj hk⟩) fun k hk =>
⟨by
rw [inter_comm]
exact h3 hj hi hk, h2 hj hi hk⟩
-#align is_preconnected.bUnion_of_chain IsPreconnected.bunionᵢ_of_chain
+#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chain
-/- warning: is_connected.bUnion_of_chain -> IsConnected.bunionᵢ_of_chain is a dubious translation:
+/- warning: is_connected.bUnion_of_chain -> IsConnected.biUnion_of_chain is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.Nonempty.{u2} β t) -> (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) t) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (IsConnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n))))) -> (IsConnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) => s n))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.Nonempty.{u2} β t) -> (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) t) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (IsConnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_2)))) _inst_3 n))))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) n t) => s n))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.Nonempty.{u2} β t) -> (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) t) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (IsConnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n))))) -> (IsConnected.{u1} α _inst_1 (Set.unionᵢ.{u1, succ u2} α β (fun (n : β) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) (fun (H : Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) => s n))))
-Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_chain IsConnected.bunionᵢ_of_chainₓ'. -/
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : LinearOrder.{u2} β] [_inst_3 : SuccOrder.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2)))))] [_inst_4 : IsSuccArchimedean.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3] {s : β -> (Set.{u1} α)} {t : Set.{u2} β}, (Set.Nonempty.{u2} β t) -> (Set.OrdConnected.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) t) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (IsConnected.{u1} α _inst_1 (s n))) -> (forall (n : β), (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) -> (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n) t) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s n) (s (Order.succ.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_2))))) _inst_3 n))))) -> (IsConnected.{u1} α _inst_1 (Set.iUnion.{u1, succ u2} α β (fun (n : β) => Set.iUnion.{u1, 0} α (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) (fun (H : Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) n t) => s n))))
+Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_chain IsConnected.biUnion_of_chainₓ'. -/
/-- The Union of connected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
-theorem IsConnected.bunionᵢ_of_chain {s : β → Set α} {t : Set β} (hnt : t.Nonempty)
+theorem IsConnected.biUnion_of_chain {s : β → Set α} {t : Set β} (hnt : t.Nonempty)
(ht : OrdConnected t) (H : ∀ n ∈ t, IsConnected (s n))
(K : ∀ n : β, n ∈ t → succ n ∈ t → (s n ∩ s (succ n)).Nonempty) : IsConnected (⋃ n ∈ t, s n) :=
- ⟨nonempty_bunionᵢ.2 <| ⟨hnt.some, hnt.some_mem, (H _ hnt.some_mem).Nonempty⟩,
- IsPreconnected.bunionᵢ_of_chain ht (fun i hi => (H i hi).IsPreconnected) K⟩
-#align is_connected.bUnion_of_chain IsConnected.bunionᵢ_of_chain
+ ⟨nonempty_biUnion.2 <| ⟨hnt.some, hnt.some_mem, (H _ hnt.some_mem).Nonempty⟩,
+ IsPreconnected.biUnion_of_chain ht (fun i hi => (H i hi).IsPreconnected) K⟩
+#align is_connected.bUnion_of_chain IsConnected.biUnion_of_chain
end SuccOrder
@@ -872,7 +872,7 @@ theorem connectedComponentIn_eq_empty {F : Set α} {x : α} (h : x ∉ F) :
#print mem_connectedComponent /-
theorem mem_connectedComponent {x : α} : x ∈ connectedComponent x :=
- mem_unionₛ_of_mem (mem_singleton x) ⟨isConnected_singleton.IsPreconnected, mem_singleton x⟩
+ mem_sUnion_of_mem (mem_singleton x) ⟨isConnected_singleton.IsPreconnected, mem_singleton x⟩
#align mem_connected_component mem_connectedComponent
-/
@@ -907,7 +907,7 @@ theorem connectedComponentIn_subset (F : Set α) (x : α) : connectedComponentIn
#print isPreconnected_connectedComponent /-
theorem isPreconnected_connectedComponent {x : α} : IsPreconnected (connectedComponent x) :=
- isPreconnected_unionₛ x _ (fun _ => And.right) fun _ => And.left
+ isPreconnected_sUnion x _ (fun _ => And.right) fun _ => And.left
#align is_preconnected_connected_component isPreconnected_connectedComponent
-/
@@ -939,7 +939,7 @@ theorem isConnected_connectedComponentIn_iff {x : α} {F : Set α} :
#print IsPreconnected.subset_connectedComponent /-
theorem IsPreconnected.subset_connectedComponent {x : α} {s : Set α} (H1 : IsPreconnected s)
- (H2 : x ∈ s) : s ⊆ connectedComponent x := fun z hz => mem_unionₛ_of_mem hz ⟨H1, H2⟩
+ (H2 : x ∈ s) : s ⊆ connectedComponent x := fun z hz => mem_sUnion_of_mem hz ⟨H1, H2⟩
#align is_preconnected.subset_connected_component IsPreconnected.subset_connectedComponent
-/
@@ -1311,16 +1311,16 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
exact ⟨x, hxs, ⟨hxu, h hxs⟩⟩
#align is_preconnected_iff_subset_of_disjoint isPreconnected_iff_subset_of_disjoint
-/- warning: is_connected_iff_sUnion_disjoint_open -> isConnected_iff_unionₛ_disjoint_open is a dubious translation:
+/- warning: is_connected_iff_sUnion_disjoint_open -> isConnected_iff_sUnion_disjoint_open is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsConnected.{u1} α _inst_1 s) (forall (U : Finset.{u1} (Set.{u1} α)), (forall (u : Set.{u1} α) (v : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) v U) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) u v))) -> (Eq.{succ u1} (Set.{u1} α) u v)) -> (forall (u : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) -> (IsOpen.{u1} α _inst_1 u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.unionₛ.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) U))) -> (Exists.{succ u1} (Set.{u1} α) (fun (u : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) => HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u))))
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsConnected.{u1} α _inst_1 s) (forall (U : Finset.{u1} (Set.{u1} α)), (forall (u : Set.{u1} α) (v : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) v U) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) u v))) -> (Eq.{succ u1} (Set.{u1} α) u v)) -> (forall (u : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) -> (IsOpen.{u1} α _inst_1 u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (Set.sUnion.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Set.{u1} α)) (Set.{u1} (Set.{u1} α)) (Finset.Set.hasCoeT.{u1} (Set.{u1} α)))) U))) -> (Exists.{succ u1} (Set.{u1} α) (fun (u : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.hasMem.{u1} (Set.{u1} α)) u U) => HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s u))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsConnected.{u1} α _inst_1 s) (forall (U : Finset.{u1} (Set.{u1} α)), (forall (u : Set.{u1} α) (v : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) v U) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) u v))) -> (Eq.{succ u1} (Set.{u1} α) u v)) -> (forall (u : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) -> (IsOpen.{u1} α _inst_1 u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Set.unionₛ.{u1} α (Finset.toSet.{u1} (Set.{u1} α) U))) -> (Exists.{succ u1} (Set.{u1} α) (fun (u : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u))))
-Case conversion may be inaccurate. Consider using '#align is_connected_iff_sUnion_disjoint_open isConnected_iff_unionₛ_disjoint_openₓ'. -/
+ forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, Iff (IsConnected.{u1} α _inst_1 s) (forall (U : Finset.{u1} (Set.{u1} α)), (forall (u : Set.{u1} α) (v : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) v U) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) u v))) -> (Eq.{succ u1} (Set.{u1} α) u v)) -> (forall (u : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) -> (IsOpen.{u1} α _inst_1 u)) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s (Set.sUnion.{u1} α (Finset.toSet.{u1} (Set.{u1} α) U))) -> (Exists.{succ u1} (Set.{u1} α) (fun (u : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Finset.{u1} (Set.{u1} α)) (Finset.instMembershipFinset.{u1} (Set.{u1} α)) u U) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s u))))
+Case conversion may be inaccurate. Consider using '#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_openₓ'. -/
/-- A set `s` is connected if and only if
for every cover by a finite collection of open sets that are pairwise disjoint on `s`,
it is contained in one of the members of the collection. -/
-theorem isConnected_iff_unionₛ_disjoint_open {s : Set α} :
+theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
IsConnected s ↔
∀ (U : Finset (Set α)) (H : ∀ u v : Set α, u ∈ U → v ∈ U → (s ∩ (u ∩ v)).Nonempty → u = v)
(hU : ∀ u ∈ U, IsOpen u) (hs : s ⊆ ⋃₀ ↑U), ∃ u ∈ U, s ⊆ u :=
@@ -1344,7 +1344,7 @@ theorem isConnected_iff_unionₛ_disjoint_open {s : Set α} :
· intros
solve_by_elim [Finset.mem_insert_of_mem]
· solve_by_elim [Finset.mem_insert_self]
- · apply isOpen_unionₛ
+ · apply isOpen_sUnion
intros
solve_by_elim [Finset.mem_insert_of_mem]
· apply eq_empty_of_subset_empty
@@ -1374,7 +1374,7 @@ theorem isConnected_iff_unionₛ_disjoint_open {s : Set α} :
rw [Finset.mem_insert, Finset.mem_singleton]
rintro (rfl | rfl) <;> assumption
· simpa using hs
-#align is_connected_iff_sUnion_disjoint_open isConnected_iff_unionₛ_disjoint_open
+#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
/- warning: is_preconnected.subset_clopen -> IsPreconnected.subset_clopen is a dubious translation:
lean 3 declaration is
@@ -1480,22 +1480,22 @@ theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s)
#align is_clopen.connected_component_subset IsClopen.connectedComponent_subset
-/
-#print connectedComponent_subset_interᵢ_clopen /-
+#print connectedComponent_subset_iInter_clopen /-
/-- The connected component of a point is always a subset of the intersection of all its clopen
neighbourhoods. -/
-theorem connectedComponent_subset_interᵢ_clopen {x : α} :
+theorem connectedComponent_subset_iInter_clopen {x : α} :
connectedComponent x ⊆ ⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, Z :=
- subset_interᵢ fun Z => Z.2.1.connectedComponent_subset Z.2.2
-#align connected_component_subset_Inter_clopen connectedComponent_subset_interᵢ_clopen
+ subset_iInter fun Z => Z.2.1.connectedComponent_subset Z.2.2
+#align connected_component_subset_Inter_clopen connectedComponent_subset_iInter_clopen
-/
-#print IsClopen.bunionᵢ_connectedComponent_eq /-
+#print IsClopen.biUnion_connectedComponent_eq /-
/-- A clopen set is the union of its connected components. -/
-theorem IsClopen.bunionᵢ_connectedComponent_eq {Z : Set α} (h : IsClopen Z) :
+theorem IsClopen.biUnion_connectedComponent_eq {Z : Set α} (h : IsClopen Z) :
(⋃ x ∈ Z, connectedComponent x) = Z :=
- Subset.antisymm (unionᵢ₂_subset fun x => h.connectedComponent_subset) fun x hx =>
- mem_unionᵢ₂_of_mem hx mem_connectedComponent
-#align is_clopen.bUnion_connected_component_eq IsClopen.bunionᵢ_connectedComponent_eq
+ Subset.antisymm (iUnion₂_subset fun x => h.connectedComponent_subset) fun x hx =>
+ mem_iUnion₂_of_mem hx mem_connectedComponent
+#align is_clopen.bUnion_connected_component_eq IsClopen.biUnion_connectedComponent_eq
-/
#print preimage_connectedComponent_connected /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -1086,7 +1086,7 @@ class ConnectedSpace (α : Type u) [TopologicalSpace α] extends PreconnectedSpa
#align connected_space ConnectedSpace
-/
-attribute [instance] ConnectedSpace.to_nonempty
+attribute [instance 50] ConnectedSpace.to_nonempty
#print isConnected_univ /-
-- see Note [lower instance priority]
@@ -2013,7 +2013,7 @@ alias isTotallyDisconnected_of_isTotallySeparated ← IsTotallySeparated.isTotal
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
#print TotallySeparatedSpace /-
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`isTotallySeparated_univ] [] -/
/-- A space is totally separated if any two points can be separated by two disjoint open sets
covering the whole space. -/
class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -128,7 +128,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} (x : α), (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) t s) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (IsPreconnected.{u1} α _inst_1 t)))))) -> (IsPreconnected.{u1} α _inst_1 s)
Case conversion may be inaccurate. Consider using '#align is_preconnected_of_forall isPreconnected_of_forallₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
/-- If any point of a set is joined to a fixed point by a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall {s : Set α} (x : α)
@@ -153,8 +153,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) t s) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (IsPreconnected.{u1} α _inst_1 t))))))) -> (IsPreconnected.{u1} α _inst_1 s)
Case conversion may be inaccurate. Consider using '#align is_preconnected_of_forall_pair isPreconnected_of_forall_pairₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall_pair {s : Set α}
@@ -249,9 +249,9 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsPreconnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsPreconnected.{u2} α _inst_1 (Set.unionᵢ.{u2, succ u1} α ι (fun (n : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
Case conversion may be inaccurate. Consider using '#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.bunionᵢ_of_reflTransGenₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (i j «expr ∈ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (p «expr ⊆ » t) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (p «expr ⊆ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
theorem IsPreconnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
@@ -295,7 +295,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} α] {ι : Type.{u1}} {t : Set.{u1} ι} {s : ι -> (Set.{u2} α)}, (Set.Nonempty.{u1} ι t) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (IsConnected.{u2} α _inst_1 (s i))) -> (forall (i : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t) -> (forall (j : ι), (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) j t) -> (Relation.ReflTransGen.{u1} ι (fun (i : ι) (j : ι) => And (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) (s j))) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) i t)) i j))) -> (IsConnected.{u2} α _inst_1 (Set.unionᵢ.{u2, succ u1} α ι (fun (n : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) n t) => s n))))
Case conversion may be inaccurate. Consider using '#align is_connected.bUnion_of_refl_trans_gen IsConnected.bunionᵢ_of_reflTransGenₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (i j «expr ∈ » t) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i j «expr ∈ » t) -/
/-- The bUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
theorem IsConnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
@@ -1642,15 +1642,15 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α], Iff (LocallyConnectedSpace.{u1} α _inst_1) (forall (x : α) (U : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U (nhds.{u1} α _inst_1 x)) -> (Exists.{succ u1} (Set.{u1} α) (fun (V : Set.{u1} α) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) V U) (And (IsOpen.{u1} α _inst_1 V) (And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x V) (IsConnected.{u1} α _inst_1 V))))))
Case conversion may be inaccurate. Consider using '#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsetsₓ'. -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (V «expr ⊆ » U) -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr ⊆ » U) -/
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
∀ (x : α), ∀ U ∈ 𝓝 x, ∃ (V : _)(_ : V ⊆ U), IsOpen V ∧ x ∈ V ∧ IsConnected V :=
by
rw [locallyConnectedSpace_iff_open_connected_basis]
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
constructor
· intro h U hU
rcases h.mem_iff.mp hU with ⟨V, hV, hVU⟩
@@ -1751,7 +1751,7 @@ theorem locallyConnectedSpace_iff_connected_subsets :
exact Filter.mem_of_superset hVy (hV.subset_connected_component_in (mem_of_mem_nhds hVy) hVU)
#align locally_connected_space_iff_connected_subsets locallyConnectedSpace_iff_connected_subsets
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
#print locallyConnectedSpace_iff_connected_basis /-
theorem locallyConnectedSpace_iff_connected_basis :
LocallyConnectedSpace α ↔
@@ -1759,7 +1759,7 @@ theorem locallyConnectedSpace_iff_connected_basis :
by
rw [locallyConnectedSpace_iff_connected_subsets]
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
exact filter.has_basis_self.symm
#align locally_connected_space_iff_connected_basis locallyConnectedSpace_iff_connected_basis
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
All of these changes appear to be oversights to me.
@@ -372,6 +372,7 @@ theorem Inducing.isPreconnected_image [TopologicalSpace β] {s : Set α} {f : α
/- TODO: The following lemmas about connection of preimages hold more generally for strict maps
(the quotient and subspace topologies of the image agree) whose fibers are preconnected. -/
+
theorem IsPreconnected.preimage_of_isOpenMap [TopologicalSpace β] {f : α → β} {s : Set β}
(hs : IsPreconnected s) (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
IsPreconnected (f ⁻¹' s) := fun u v hu hv hsuv hsu hsv => by
bex
and ball
from lemma names (#11615)
Follow-up to #10816.
Remaining places containing such lemmas are
Option.bex_ne_none
and Option.ball_ne_none
: defined in Lean coreNat.decidableBallLT
and Nat.decidableBallLE
: defined in Lean corebef_def
is still used in a number of places and could be renamedBAll.imp_{left,right}
, BEx.imp_{left,right}
, BEx.intro
and BEx.elim
I only audited the first ~150 lemmas mentioning "ball"; too many lemmas named after Metric.ball/openBall/closedBall.
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -1057,7 +1057,7 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
· induction U using Finset.induction_on with
| empty => exact absurd (by simpa using hsU) hne.not_subset_empty
| @insert u U uU IH =>
- simp only [← ball_cond_comm, Finset.forall_mem_insert, Finset.exists_mem_insert,
+ simp only [← forall_cond_comm, Finset.forall_mem_insert, Finset.exists_mem_insert,
Finset.coe_insert, sUnion_insert, implies_true, true_and] at *
refine (h _ hUo.1 (⋃₀ ↑U) (isOpen_sUnion hUo.2) hsU ?_).imp_right ?_
· refine subset_empty_iff.1 fun x ⟨hxs, hxu, v, hvU, hxv⟩ => ?_
@@ -938,7 +938,7 @@ theorem frontier_eq_empty_iff [PreconnectedSpace α] {s : Set α} :
theorem nonempty_frontier_iff [PreconnectedSpace α] {s : Set α} :
(frontier s).Nonempty ↔ s.Nonempty ∧ s ≠ univ := by
- simp only [nonempty_iff_ne_empty, Ne.def, frontier_eq_empty_iff, not_or]
+ simp only [nonempty_iff_ne_empty, Ne, frontier_eq_empty_iff, not_or]
#align nonempty_frontier_iff nonempty_frontier_iff
theorem Subtype.preconnectedSpace {s : Set α} (h : IsPreconnected s) : PreconnectedSpace s where
These will be caught by the linter in a future lean version.
@@ -1095,11 +1095,9 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
exact h ⟨y, hys, hyu⟩ ⟨x, hxs, hxv⟩
· rw [isPreconnected_closed_iff]
intro u v hu hv hs hsu hsv
- rw [nonempty_iff_ne_empty]
- intro H
- specialize h u v hu hv hs H
- contrapose H
- apply Nonempty.ne_empty
+ by_contra H
+ specialize h u v hu hv hs (Set.not_nonempty_iff_eq_empty.mp H)
+ apply H
cases' h with h h
· rcases hsv with ⟨x, hxs, hxv⟩
exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
These will be caught by the linter in a future lean version.
@@ -1035,11 +1035,9 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
have hyu : y ∈ u := or_iff_not_imp_right.mp (hs hys) hyv
exact h ⟨y, hys, hyu⟩ ⟨x, hxs, hxv⟩
· intro u v hu hv hs hsu hsv
- rw [nonempty_iff_ne_empty]
- intro H
- specialize h u v hu hv hs H
- contrapose H
- apply Nonempty.ne_empty
+ by_contra H
+ specialize h u v hu hv hs (Set.not_nonempty_iff_eq_empty.mp H)
+ apply H
cases' h with h h
· rcases hsv with ⟨x, hxs, hxv⟩
exact ⟨x, hxs, ⟨h hxs, hxv⟩⟩
Standardizes the following names for distributivity laws across Finset
and Set
:
inter_union_distrib_left
inter_union_distrib_right
union_inter_distrib_left
union_inter_distrib_right
Makes arguments explicit in:
Set.union_inter_distrib_right
Set.union_inter_distrib_left
Set.inter_union_distrib_right
Deprecates these theorem names:
Finset.inter_distrib_left
Finset.inter_distrib_right
Finset.union_distrib_right
Finset.union_distrib_left
Set.inter_distrib_left
Set.inter_distrib_right
Set.union_distrib_right
Set.union_distrib_left
Fixes use of deprecated names and implicit arguments in these files:
@@ -318,7 +318,7 @@ protected theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : I
replace huv : s ⊆ u' ∪ v' := by
rw [image_subset_iff, preimage_union] at huv
replace huv := subset_inter huv Subset.rfl
- rw [inter_distrib_right, u'_eq, v'_eq, ← inter_distrib_right] at huv
+ rw [union_inter_distrib_right, u'_eq, v'_eq, ← union_inter_distrib_right] at huv
exact (subset_inter_iff.1 huv).1
-- Now `s ⊆ u' ∪ v'`, so we can apply `‹IsPreconnected s›`
obtain ⟨z, hz⟩ : (s ∩ (u' ∩ v')).Nonempty := by
@@ -1121,7 +1121,7 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
rw [subset_inter_iff, subset_inter_iff] at H1
simp only [Subset.refl, and_true] at H1
apply H1 (hu.inter hs) (hv.inter hs)
- · rw [← inter_distrib_right]
+ · rw [← union_inter_distrib_right]
exact subset_inter hss Subset.rfl
· rwa [disjoint_iff_inter_eq_empty, ← inter_inter_distrib_right, inter_comm]
#align is_preconnected_iff_subset_of_fully_disjoint_closed isPreconnected_iff_subset_of_fully_disjoint_closed
@@ -99,7 +99,7 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
have xs : x ∈ s := by
rcases H y ys with ⟨t, ts, xt, -, -⟩
exact ts xt
- -- Porting note: todo: use `wlog xu : x ∈ u := hs xs using u v y z, v u z y`
+ -- Porting note (#11215): TODO: use `wlog xu : x ∈ u := hs xs using u v y z, v u z y`
cases hs xs with
| inl xu =>
rcases H y ys with ⟨t, ts, xt, yt, ht⟩
ball
and bex
from lemma names (#10816)
ball
for "bounded forall" and bex
for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem
and exists_mem
in the few Set
lemma names that mention them.
Also deprecate ball_image_of_ball
, mem_image_elim
, mem_image_elim_on
since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image
semi-implicit), have obscure names and are completely unused.
@@ -130,7 +130,7 @@ theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x
theorem isPreconnected_iUnion {ι : Sort*} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
- Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
+ Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_mem_range.2 h₂)
#align is_preconnected_Union isPreconnected_iUnion
theorem IsPreconnected.union (x : α) {s t : Set α} (H1 : x ∈ s) (H2 : x ∈ t) (H3 : IsPreconnected s)
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -99,7 +99,7 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
have xs : x ∈ s := by
rcases H y ys with ⟨t, ts, xt, -, -⟩
exact ts xt
- -- porting note: todo: use `wlog xu : x ∈ u := hs xs using u v y z, v u z y`
+ -- Porting note: todo: use `wlog xu : x ∈ u := hs xs using u v y z, v u z y`
cases hs xs with
| inl xu =>
rcases H y ys with ⟨t, ts, xt, yt, ht⟩
@@ -437,7 +437,7 @@ theorem IsPreconnected.subset_right_of_subset_union (hu : IsOpen u) (hv : IsOpen
hs.subset_left_of_subset_union hv hu huv.symm (union_comm u v ▸ hsuv) hsv
#align is_preconnected.subset_right_of_subset_union IsPreconnected.subset_right_of_subset_union
--- porting note: moved up
+-- Porting note: moved up
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
theorem IsPreconnected.subset_isClopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
(hne : (s ∩ t).Nonempty) : s ⊆ t :=
@@ -1071,7 +1071,7 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
simpa [*, or_imp, forall_and] using h {u, v}
#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
--- porting note: `IsPreconnected.subset_isClopen` moved up from here
+-- Porting note: `IsPreconnected.subset_isClopen` moved up from here
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
theorem disjoint_or_subset_of_isClopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -525,7 +525,7 @@ theorem Sigma.isPreconnected_iff [hι : Nonempty ι] [∀ i, TopologicalSpace (
· obtain rfl | h := s.eq_empty_or_nonempty
· exact ⟨Classical.choice hι, ∅, isPreconnected_empty, (Set.image_empty _).symm⟩
· obtain ⟨a, t, ht, rfl⟩ := Sigma.isConnected_iff.1 ⟨h, hs⟩
- refine' ⟨a, t, ht.isPreconnected, rfl⟩
+ exact ⟨a, t, ht.isPreconnected, rfl⟩
· rintro ⟨a, t, ht, rfl⟩
exact ht.image _ continuous_sigmaMk.continuousOn
#align sigma.is_preconnected_iff Sigma.isPreconnected_iff
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -315,8 +315,8 @@ protected theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : I
rcases continuousOn_iff'.1 hf u hu with ⟨u', hu', u'_eq⟩
rcases continuousOn_iff'.1 hf v hv with ⟨v', hv', v'_eq⟩
-- Reformulate `huv : f '' s ⊆ u ∪ v` in terms of `u'` and `v'`
- replace huv : s ⊆ u' ∪ v'
- · rw [image_subset_iff, preimage_union] at huv
+ replace huv : s ⊆ u' ∪ v' := by
+ rw [image_subset_iff, preimage_union] at huv
replace huv := subset_inter huv Subset.rfl
rw [inter_distrib_right, u'_eq, v'_eq, ← inter_distrib_right] at huv
exact (subset_inter_iff.1 huv).1
@@ -364,7 +364,7 @@ theorem Inducing.isPreconnected_image [TopologicalSpace β] {s : Set α} {f : α
rintro u v hu' hv' huv ⟨x, hxs, hxu⟩ ⟨y, hys, hyv⟩
rcases hf.isOpen_iff.1 hu' with ⟨u, hu, rfl⟩
rcases hf.isOpen_iff.1 hv' with ⟨v, hv, rfl⟩
- replace huv : f '' s ⊆ u ∪ v; · rwa [image_subset_iff]
+ replace huv : f '' s ⊆ u ∪ v := by rwa [image_subset_iff]
rcases h u v hu hv huv ⟨f x, mem_image_of_mem _ hxs, hxu⟩ ⟨f y, mem_image_of_mem _ hys, hyv⟩ with
⟨_, ⟨z, hzs, rfl⟩, hzuv⟩
exact ⟨z, hzs, hzuv⟩
s ∩ .
when passing to a subset of s
(#10433)
This is partial work to make s ∩ .
be consistently used for passing to a subset of s
. This is sort of an adjoint to (Subtype.val : s -> _) '' .
, except for the fact that it does not produce a Set s
.
The main API changes are to Subtype.image_preimage_val
and Subtype.preimage_val_eq_preimage_val_iff
in Mathlib.Data.Set.Image
. Changes in other modules are all proof fixups.
@@ -640,14 +640,14 @@ theorem IsPreconnected.subset_connectedComponentIn {x : α} {F : Set α} (hs : I
(hxs : x ∈ s) (hsF : s ⊆ F) : s ⊆ connectedComponentIn F x := by
have : IsPreconnected (((↑) : F → α) ⁻¹' s) := by
refine' inducing_subtype_val.isPreconnected_image.mp _
- rwa [Subtype.image_preimage_coe, inter_eq_left.mpr hsF]
+ rwa [Subtype.image_preimage_coe, inter_eq_right.mpr hsF]
have h2xs : (⟨x, hsF hxs⟩ : F) ∈ (↑) ⁻¹' s := by
rw [mem_preimage]
exact hxs
have := this.subset_connectedComponent h2xs
rw [connectedComponentIn_eq_image (hsF hxs)]
refine' Subset.trans _ (image_subset _ this)
- rw [Subtype.image_preimage_coe, inter_eq_left.mpr hsF]
+ rw [Subtype.image_preimage_coe, inter_eq_right.mpr hsF]
#align is_preconnected.subset_connected_component_in IsPreconnected.subset_connectedComponentIn
theorem IsConnected.subset_connectedComponent {x : α} {s : Set α} (H1 : IsConnected s)
@@ -873,7 +873,7 @@ theorem isClopen_iff [PreconnectedSpace α] {s : Set α} : IsClopen s ↔ s =
⟨mt Or.inl h,
mt (fun h2 => Or.inr <| (by rw [← compl_compl s, h2, compl_empty] : s = univ)) h⟩
let ⟨_, h2, h3⟩ :=
- nonempty_inter hs.1 hs.2.isOpen_compl (union_compl_self s) (nonempty_iff_ne_empty.2 h1.1)
+ nonempty_inter hs.2 hs.1.isOpen_compl (union_compl_self s) (nonempty_iff_ne_empty.2 h1.1)
(nonempty_iff_ne_empty.2 h1.2)
h3 h2,
by rintro (rfl | rfl) <;> [exact isClopen_empty; exact isClopen_univ]⟩
@@ -910,7 +910,7 @@ element. -/
lemma subsingleton_of_disjoint_isOpen_iUnion_eq_univ
(h_open : ∀ i, IsOpen (s i)) (h_Union : ⋃ i, s i = univ) :
Subsingleton ι := by
- refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨h_open i, _⟩)
+ refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨_, h_open i⟩)
rw [← isOpen_compl_iff, compl_eq_univ_diff, ← h_Union, iUnion_diff]
refine' isOpen_iUnion (fun j ↦ _)
rcases eq_or_ne i j with rfl | h_ne
@@ -922,7 +922,7 @@ element. -/
lemma subsingleton_of_disjoint_isClosed_iUnion_eq_univ [Finite ι]
(h_closed : ∀ i, IsClosed (s i)) (h_Union : ⋃ i, s i = univ) :
Subsingleton ι := by
- refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨_, h_closed i⟩)
+ refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨h_closed i, _⟩)
rw [← isClosed_compl_iff, compl_eq_univ_diff, ← h_Union, iUnion_diff]
refine' isClosed_iUnion_of_finite (fun j ↦ _)
rcases eq_or_ne i j with rfl | h_ne
@@ -968,14 +968,14 @@ lemma PreconnectedSpace.induction₂' [PreconnectedSpace α] (P : α → α →
(h : ∀ x, ∀ᶠ y in 𝓝 x, P x y ∧ P y x) (h' : Transitive P) (x y : α) :
P x y := by
let u := {z | P x z}
- have A : IsOpen u := by
- apply isOpen_iff_mem_nhds.2 (fun z hz ↦ ?_)
- filter_upwards [h z] with t ht
- exact h' hz ht.1
- have B : IsClosed u := by
+ have A : IsClosed u := by
apply isClosed_iff_nhds.2 (fun z hz ↦ ?_)
rcases hz _ (h z) with ⟨t, ht, h't⟩
exact h' h't ht.2
+ have B : IsOpen u := by
+ apply isOpen_iff_mem_nhds.2 (fun z hz ↦ ?_)
+ filter_upwards [h z] with t ht
+ exact h' hz ht.1
have C : u.Nonempty := ⟨x, (mem_of_mem_nhds (h x)).1⟩
have D : u = Set.univ := IsClopen.eq_univ ⟨A, B⟩ C
show y ∈ u
@@ -1329,9 +1329,9 @@ theorem isPreconnected_of_forall_constant {s : Set α}
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.boolIndicator s := by
apply (continuousOn_boolIndicator_iff_isClopen _ _).mpr ⟨_, _⟩
- · exact u_op.preimage continuous_subtype_val
· rw [preimage_subtype_coe_eq_compl hsuv H]
exact (v_op.preimage continuous_subtype_val).isClosed_compl
+ · exact u_op.preimage continuous_subtype_val
simpa [(u.mem_iff_boolIndicator _).mp x_in_u, (u.not_mem_iff_boolIndicator _).mp hy] using
hs _ this x x_in_s y y_in_s
#align is_preconnected_of_forall_constant isPreconnected_of_forall_constant
Continuous.image_connectedComponentIn_subset
(#9983)
and a version for homeomorphisms. From sphere-eversion; I'm just submitting things upstream.
@@ -707,11 +707,23 @@ theorem Continuous.image_connectedComponent_subset [TopologicalSpace β] {f : α
((mem_image f (connectedComponent a) (f a)).2 ⟨a, mem_connectedComponent, rfl⟩)
#align continuous.image_connected_component_subset Continuous.image_connectedComponent_subset
+theorem Continuous.image_connectedComponentIn_subset [TopologicalSpace β] {f : α → β} {s : Set α}
+ {a : α} (hf : Continuous f) (hx : a ∈ s) :
+ f '' connectedComponentIn s a ⊆ connectedComponentIn (f '' s) (f a) :=
+ (isPreconnected_connectedComponentIn.image _ hf.continuousOn).subset_connectedComponentIn
+ (mem_image_of_mem _ <| mem_connectedComponentIn hx)
+ (image_subset _ <| connectedComponentIn_subset _ _)
+
theorem Continuous.mapsTo_connectedComponent [TopologicalSpace β] {f : α → β} (h : Continuous f)
(a : α) : MapsTo f (connectedComponent a) (connectedComponent (f a)) :=
mapsTo'.2 <| h.image_connectedComponent_subset a
#align continuous.maps_to_connected_component Continuous.mapsTo_connectedComponent
+theorem Continuous.mapsTo_connectedComponentIn [TopologicalSpace β] {f : α → β} {s : Set α}
+ (h : Continuous f) {a : α} (hx : a ∈ s) :
+ MapsTo f (connectedComponentIn s a) (connectedComponentIn (f '' s) (f a)) :=
+ mapsTo'.2 <| image_connectedComponentIn_subset h hx
+
theorem irreducibleComponent_subset_connectedComponent {x : α} :
irreducibleComponent x ⊆ connectedComponent x :=
isIrreducible_irreducibleComponent.isConnected.subset_connectedComponent mem_irreducibleComponent
@@ -3,6 +3,7 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
-/
+import Mathlib.Data.Set.Image
import Mathlib.Order.SuccPred.Relation
import Mathlib.Topology.Clopen
import Mathlib.Topology.Irreducible
Nonempty
arguments (#9377)
Finset.Nonempty.image_iff
to Finset.image_nonempty
, deprecate the old version;Set.nonempty_image_iff
to Set.image_nonempty
, deprecate the old version;Finset.Nonempty
arguments here and there;Nonempty s
instead of Nonempty (s.image f)
or Nonempty (s.map f)
.@@ -331,7 +331,7 @@ protected theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : I
/-- The image of a connected set is connected as well. -/
protected theorem IsConnected.image [TopologicalSpace β] {s : Set α} (H : IsConnected s) (f : α → β)
(hf : ContinuousOn f s) : IsConnected (f '' s) :=
- ⟨nonempty_image_iff.mpr H.nonempty, H.isPreconnected.image f hf⟩
+ ⟨image_nonempty.mpr H.nonempty, H.isPreconnected.image f hf⟩
#align is_connected.image IsConnected.image
theorem isPreconnected_closed_iff {s : Set α} :
cases x with | ...
instead of cases x; case => ...
(#9321)
This converts usages of the pattern
cases h
case inl h' => ...
case inr h' => ...
which derive from mathported code, to the "structured cases
" syntax:
cases h with
| inl h' => ...
| inr h' => ...
The case where the subgoals are handled with ·
instead of case
is more contentious (and much more numerous) so I left those alone. This pattern also appears with cases'
, induction
, induction'
, and rcases
. Furthermore, there is a similar transformation for by_cases
:
by_cases h : cond
case pos => ...
case neg => ...
is replaced by:
if h : cond then
...
else
...
Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@@ -99,12 +99,12 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
rcases H y ys with ⟨t, ts, xt, -, -⟩
exact ts xt
-- porting note: todo: use `wlog xu : x ∈ u := hs xs using u v y z, v u z y`
- cases hs xs
- case inl xu =>
+ cases hs xs with
+ | inl xu =>
rcases H y ys with ⟨t, ts, xt, yt, ht⟩
have := ht u v hu hv (ts.trans hs) ⟨x, xt, xu⟩ ⟨y, yt, yv⟩
exact this.imp fun z hz => ⟨ts hz.1, hz.2⟩
- case inr xv =>
+ | inr xv =>
rcases H z zs with ⟨t, ts, xt, zt, ht⟩
have := ht v u hv hu (ts.trans <| by rwa [union_comm]) ⟨x, xt, xv⟩ ⟨z, zt, zu⟩
exact this.imp fun _ h => ⟨ts h.1, h.2.2, h.2.1⟩
@@ -172,12 +172,12 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type*} {t : Set ι} {s : ι
let R := fun i j : ι => (s i ∩ s j).Nonempty ∧ i ∈ t
have P : ∀ i, i ∈ t → ∀ j, j ∈ t → ReflTransGen R i j →
∃ p, p ⊆ t ∧ i ∈ p ∧ j ∈ p ∧ IsPreconnected (⋃ j ∈ p, s j) := fun i hi j hj h => by
- induction h
- case refl =>
+ induction h with
+ | refl =>
refine ⟨{i}, singleton_subset_iff.mpr hi, mem_singleton i, mem_singleton i, ?_⟩
rw [biUnion_singleton]
exact H i hi
- case tail j k _ hjk ih =>
+ | @tail j k _ hjk ih =>
obtain ⟨p, hpt, hip, hjp, hp⟩ := ih hjk.2
refine ⟨insert k p, insert_subset_iff.mpr ⟨hj, hpt⟩, mem_insert_of_mem k hip,
mem_insert k p, ?_⟩
@@ -1043,9 +1043,9 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
(∀ u ∈ U, IsOpen u) → (s ⊆ ⋃₀ ↑U) → ∃ u ∈ U, s ⊆ u := by
rw [IsConnected, isPreconnected_iff_subset_of_disjoint]
refine ⟨fun ⟨hne, h⟩ U hU hUo hsU => ?_, fun h => ⟨?_, fun u v hu hv hs hsuv => ?_⟩⟩
- · induction U using Finset.induction_on
- case empty => exact absurd (by simpa using hsU) hne.not_subset_empty
- case insert u U uU IH =>
+ · induction U using Finset.induction_on with
+ | empty => exact absurd (by simpa using hsU) hne.not_subset_empty
+ | @insert u U uU IH =>
simp only [← ball_cond_comm, Finset.forall_mem_insert, Finset.exists_mem_insert,
Finset.coe_insert, sUnion_insert, implies_true, true_and] at *
refine (h _ hUo.1 (⋃₀ ↑U) (isOpen_sUnion hUo.2) hsU ?_).imp_right ?_
@@ -1311,7 +1311,7 @@ continuous on a set `s`, is constant on s, then s is preconnected -/
theorem isPreconnected_of_forall_constant {s : Set α}
(hs : ∀ f : α → Bool, ContinuousOn f s → ∀ x ∈ s, ∀ y ∈ s, f x = f y) : IsPreconnected s := by
unfold IsPreconnected
- by_contra'
+ by_contra!
rcases this with ⟨u, v, u_op, v_op, hsuv, ⟨x, x_in_s, x_in_u⟩, ⟨y, y_in_s, y_in_v⟩, H⟩
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.boolIndicator s := by
Mostly, this means replacing "of_open" by "of_isOpen". A few lemmas names were misleading and are corrected differently. Zulip discussion.
@@ -371,8 +371,8 @@ theorem Inducing.isPreconnected_image [TopologicalSpace β] {s : Set α} {f : α
/- TODO: The following lemmas about connection of preimages hold more generally for strict maps
(the quotient and subspace topologies of the image agree) whose fibers are preconnected. -/
-theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (hs : IsPreconnected s)
- {f : α → β} (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
+theorem IsPreconnected.preimage_of_isOpenMap [TopologicalSpace β] {f : α → β} {s : Set β}
+ (hs : IsPreconnected s) (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
IsPreconnected (f ⁻¹' s) := fun u v hu hv hsuv hsu hsv => by
replace hsf : f '' (f ⁻¹' s) = s := image_preimage_eq_of_subset hsf
obtain ⟨_, has, ⟨a, hau, rfl⟩, hav⟩ : (s ∩ (f '' u ∩ f '' v)).Nonempty
@@ -381,7 +381,7 @@ theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (
· simpa only [image_preimage_inter] using hsu.image f
· simpa only [image_preimage_inter] using hsv.image f
· exact ⟨a, has, hau, hinj.mem_set_image.1 hav⟩
-#align is_preconnected.preimage_of_open_map IsPreconnected.preimage_of_open_map
+#align is_preconnected.preimage_of_open_map IsPreconnected.preimage_of_isOpenMap
theorem IsPreconnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β}
(hs : IsPreconnected s) {f : α → β} (hinj : Function.Injective f) (hf : IsClosedMap f)
@@ -396,11 +396,11 @@ theorem IsPreconnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β
· exact ⟨a, has, hau, hinj.mem_set_image.1 hav⟩
#align is_preconnected.preimage_of_closed_map IsPreconnected.preimage_of_isClosedMap
-theorem IsConnected.preimage_of_openMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
+theorem IsConnected.preimage_of_isOpenMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
{f : α → β} (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
IsConnected (f ⁻¹' s) :=
- ⟨hs.nonempty.preimage' hsf, hs.isPreconnected.preimage_of_open_map hinj hf hsf⟩
-#align is_connected.preimage_of_open_map IsConnected.preimage_of_openMap
+ ⟨hs.nonempty.preimage' hsf, hs.isPreconnected.preimage_of_isOpenMap hinj hf hsf⟩
+#align is_connected.preimage_of_open_map IsConnected.preimage_of_isOpenMap
theorem IsConnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
{f : α → β} (hinj : Function.Injective f) (hf : IsClosedMap f) (hsf : s ⊆ range f) :
@@ -512,7 +512,7 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π
· obtain ⟨⟨i, x⟩, hx⟩ := hs.nonempty
have : s ⊆ range (Sigma.mk i) :=
hs.isPreconnected.subset_isClopen isClopen_range_sigmaMk ⟨⟨i, x⟩, hx, x, rfl⟩
- exact ⟨i, Sigma.mk i ⁻¹' s, hs.preimage_of_openMap sigma_mk_injective isOpenMap_sigmaMk this,
+ exact ⟨i, Sigma.mk i ⁻¹' s, hs.preimage_of_isOpenMap sigma_mk_injective isOpenMap_sigmaMk this,
(Set.image_preimage_eq_of_subset this).symm⟩
· rintro ⟨i, t, ht, rfl⟩
exact ht.image _ continuous_sigmaMk.continuousOn
@@ -537,12 +537,12 @@ theorem Sum.isConnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
· have h : s ⊆ range Sum.inl :=
hs.isPreconnected.subset_isClopen isClopen_range_inl ⟨.inl x, hx, x, rfl⟩
refine' Or.inl ⟨Sum.inl ⁻¹' s, _, _⟩
- · exact hs.preimage_of_openMap Sum.inl_injective isOpenMap_inl h
+ · exact hs.preimage_of_isOpenMap Sum.inl_injective isOpenMap_inl h
· exact (image_preimage_eq_of_subset h).symm
· have h : s ⊆ range Sum.inr :=
hs.isPreconnected.subset_isClopen isClopen_range_inr ⟨.inr x, hx, x, rfl⟩
refine' Or.inr ⟨Sum.inr ⁻¹' s, _, _⟩
- · exact hs.preimage_of_openMap Sum.inr_injective isOpenMap_inr h
+ · exact hs.preimage_of_isOpenMap Sum.inr_injective isOpenMap_inr h
· exact (image_preimage_eq_of_subset h).symm
· rintro (⟨t, ht, rfl⟩ | ⟨t, ht, rfl⟩)
· exact ht.image _ continuous_inl.continuousOn
This PR renames the field Clopens.clopen' -> Clopens.isClopen', and the lemmas
as well as: ClopenUpperSet.clopen -> ClopenUpperSet.isClopen connectedComponent_eq_iInter_clopen -> connectedComponent_eq_iInter_isClopen connectedComponent_subset_iInter_clopen -> connectedComponent_subset_iInter_isClopen continuous_boolIndicator_iff_clopen -> continuous_boolIndicator_iff_isClopen continuousOn_boolIndicator_iff_clopen -> continuousOn_boolIndicator_iff_isClopen DiscreteQuotient.ofClopen -> DiscreteQuotient.ofIsClopen disjoint_or_subset_of_clopen -> disjoint_or_subset_of_isClopen exists_clopen_{lower,upper}of_not_le -> exists_isClopen{lower,upper}_of_not_le exists_clopen_of_cofiltered -> exists_isClopen_of_cofiltered exists_clopen_of_totally_separated -> exists_isClopen_of_totally_separated exists_clopen_upper_or_lower_of_ne -> exists_isClopen_upper_or_lower_of_ne IsPreconnected.subset_clopen -> IsPreconnected.subset_isClopen isTotallyDisconnected_of_clopen_set -> isTotallyDisconnected_of_isClopen_set LocallyConstant.ofClopen_fiber_one -> LocallyConstant.ofIsClopen_fiber_one LocallyConstant.ofClopen_fiber_zero -> LocallyConstant.ofIsClopen_fiber_zero LocallyConstant.ofClopen -> LocallyConstant.ofIsClopen preimage_clopen_of_clopen -> preimage_isClopen_of_isClopen TopologicalSpace.Clopens.clopen -> TopologicalSpace.Clopens.isClopen
@@ -438,10 +438,10 @@ theorem IsPreconnected.subset_right_of_subset_union (hu : IsOpen u) (hv : IsOpen
-- porting note: moved up
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
-theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
+theorem IsPreconnected.subset_isClopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t)
(hne : (s ∩ t).Nonempty) : s ⊆ t :=
hs.subset_left_of_subset_union ht.isOpen ht.compl.isOpen disjoint_compl_right (by simp) hne
-#align is_preconnected.subset_clopen IsPreconnected.subset_clopen
+#align is_preconnected.subset_clopen IsPreconnected.subset_isClopen
/-- If a preconnected set `s` intersects an open set `u`, and limit points of `u` inside `s` are
contained in `u`, then the whole set `s` is contained in `u`. -/
@@ -511,7 +511,7 @@ theorem Sigma.isConnected_iff [∀ i, TopologicalSpace (π i)] {s : Set (Σi, π
refine' ⟨fun hs => _, _⟩
· obtain ⟨⟨i, x⟩, hx⟩ := hs.nonempty
have : s ⊆ range (Sigma.mk i) :=
- hs.isPreconnected.subset_clopen isClopen_range_sigmaMk ⟨⟨i, x⟩, hx, x, rfl⟩
+ hs.isPreconnected.subset_isClopen isClopen_range_sigmaMk ⟨⟨i, x⟩, hx, x, rfl⟩
exact ⟨i, Sigma.mk i ⁻¹' s, hs.preimage_of_openMap sigma_mk_injective isOpenMap_sigmaMk this,
(Set.image_preimage_eq_of_subset this).symm⟩
· rintro ⟨i, t, ht, rfl⟩
@@ -535,12 +535,12 @@ theorem Sum.isConnected_iff [TopologicalSpace β] {s : Set (Sum α β)} :
refine' ⟨fun hs => _, _⟩
· obtain ⟨x | x, hx⟩ := hs.nonempty
· have h : s ⊆ range Sum.inl :=
- hs.isPreconnected.subset_clopen isClopen_range_inl ⟨.inl x, hx, x, rfl⟩
+ hs.isPreconnected.subset_isClopen isClopen_range_inl ⟨.inl x, hx, x, rfl⟩
refine' Or.inl ⟨Sum.inl ⁻¹' s, _, _⟩
· exact hs.preimage_of_openMap Sum.inl_injective isOpenMap_inl h
· exact (image_preimage_eq_of_subset h).symm
· have h : s ⊆ range Sum.inr :=
- hs.isPreconnected.subset_clopen isClopen_range_inr ⟨.inr x, hx, x, rfl⟩
+ hs.isPreconnected.subset_isClopen isClopen_range_inr ⟨.inr x, hx, x, rfl⟩
refine' Or.inr ⟨Sum.inr ⁻¹' s, _, _⟩
· exact hs.preimage_of_openMap Sum.inr_injective isOpenMap_inr h
· exact (image_preimage_eq_of_subset h).symm
@@ -1058,13 +1058,13 @@ theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
simpa [*, or_imp, forall_and] using h {u, v}
#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
--- porting note: `IsPreconnected.subset_clopen` moved up from here
+-- porting note: `IsPreconnected.subset_isClopen` moved up from here
/-- Preconnected sets are either contained in or disjoint to any given clopen set. -/
-theorem disjoint_or_subset_of_clopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
+theorem disjoint_or_subset_of_isClopen {s t : Set α} (hs : IsPreconnected s) (ht : IsClopen t) :
Disjoint s t ∨ s ⊆ t :=
- (disjoint_or_nonempty_inter s t).imp_right <| hs.subset_clopen ht
-#align disjoint_or_subset_of_clopen disjoint_or_subset_of_clopen
+ (disjoint_or_nonempty_inter s t).imp_right <| hs.subset_isClopen ht
+#align disjoint_or_subset_of_clopen disjoint_or_subset_of_isClopen
/-- A set `s` is preconnected if and only if
for every cover by two closed sets that are disjoint on `s`,
@@ -1115,15 +1115,15 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s) :
connectedComponent x ⊆ s :=
- isPreconnected_connectedComponent.subset_clopen hs ⟨x, mem_connectedComponent, hx⟩
+ isPreconnected_connectedComponent.subset_isClopen hs ⟨x, mem_connectedComponent, hx⟩
#align is_clopen.connected_component_subset IsClopen.connectedComponent_subset
/-- The connected component of a point is always a subset of the intersection of all its clopen
neighbourhoods. -/
-theorem connectedComponent_subset_iInter_clopen {x : α} :
+theorem connectedComponent_subset_iInter_isClopen {x : α} :
connectedComponent x ⊆ ⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, Z :=
subset_iInter fun Z => Z.2.1.connectedComponent_subset Z.2.2
-#align connected_component_subset_Inter_clopen connectedComponent_subset_iInter_clopen
+#align connected_component_subset_Inter_clopen connectedComponent_subset_iInter_isClopen
/-- A clopen set is the union of its connected components. -/
theorem IsClopen.biUnion_connectedComponent_eq {Z : Set α} (h : IsClopen Z) :
@@ -1315,7 +1315,7 @@ theorem isPreconnected_of_forall_constant {s : Set α}
rcases this with ⟨u, v, u_op, v_op, hsuv, ⟨x, x_in_s, x_in_u⟩, ⟨y, y_in_s, y_in_v⟩, H⟩
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.boolIndicator s := by
- apply (continuousOn_boolIndicator_iff_clopen _ _).mpr ⟨_, _⟩
+ apply (continuousOn_boolIndicator_iff_isClopen _ _).mpr ⟨_, _⟩
· exact u_op.preimage continuous_subtype_val
· rw [preimage_subtype_coe_eq_compl hsuv H]
exact (v_op.preimage continuous_subtype_val).isClosed_compl
Three particular examples which caught my eye; not exhaustive.
@@ -383,7 +383,7 @@ theorem IsPreconnected.preimage_of_open_map [TopologicalSpace β] {s : Set β} (
· exact ⟨a, has, hau, hinj.mem_set_image.1 hav⟩
#align is_preconnected.preimage_of_open_map IsPreconnected.preimage_of_open_map
-theorem IsPreconnected.preimage_of_closed_map [TopologicalSpace β] {s : Set β}
+theorem IsPreconnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β}
(hs : IsPreconnected s) {f : α → β} (hinj : Function.Injective f) (hf : IsClosedMap f)
(hsf : s ⊆ range f) : IsPreconnected (f ⁻¹' s) :=
isPreconnected_closed_iff.2 fun u v hu hv hsuv hsu hsv => by
@@ -394,7 +394,7 @@ theorem IsPreconnected.preimage_of_closed_map [TopologicalSpace β] {s : Set β}
· simpa only [image_preimage_inter] using hsu.image f
· simpa only [image_preimage_inter] using hsv.image f
· exact ⟨a, has, hau, hinj.mem_set_image.1 hav⟩
-#align is_preconnected.preimage_of_closed_map IsPreconnected.preimage_of_closed_map
+#align is_preconnected.preimage_of_closed_map IsPreconnected.preimage_of_isClosedMap
theorem IsConnected.preimage_of_openMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
{f : α → β} (hinj : Function.Injective f) (hf : IsOpenMap f) (hsf : s ⊆ range f) :
@@ -402,11 +402,11 @@ theorem IsConnected.preimage_of_openMap [TopologicalSpace β] {s : Set β} (hs :
⟨hs.nonempty.preimage' hsf, hs.isPreconnected.preimage_of_open_map hinj hf hsf⟩
#align is_connected.preimage_of_open_map IsConnected.preimage_of_openMap
-theorem IsConnected.preimage_of_closedMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
+theorem IsConnected.preimage_of_isClosedMap [TopologicalSpace β] {s : Set β} (hs : IsConnected s)
{f : α → β} (hinj : Function.Injective f) (hf : IsClosedMap f) (hsf : s ⊆ range f) :
IsConnected (f ⁻¹' s) :=
- ⟨hs.nonempty.preimage' hsf, hs.isPreconnected.preimage_of_closed_map hinj hf hsf⟩
-#align is_connected.preimage_of_closed_map IsConnected.preimage_of_closedMap
+ ⟨hs.nonempty.preimage' hsf, hs.isPreconnected.preimage_of_isClosedMap hinj hf hsf⟩
+#align is_connected.preimage_of_closed_map IsConnected.preimage_of_isClosedMap
theorem IsPreconnected.subset_or_subset (hu : IsOpen u) (hv : IsOpen v) (huv : Disjoint u v)
(hsuv : s ⊆ u ∪ v) (hs : IsPreconnected s) : s ⊆ u ∨ s ⊆ v := by
@@ -714,8 +714,7 @@ theorem Continuous.mapsTo_connectedComponent [TopologicalSpace β] {f : α →
theorem irreducibleComponent_subset_connectedComponent {x : α} :
irreducibleComponent x ⊆ connectedComponent x :=
isIrreducible_irreducibleComponent.isConnected.subset_connectedComponent mem_irreducibleComponent
-#align irreducible_component_subset_connected_component
- irreducibleComponent_subset_connectedComponent
+#align irreducible_component_subset_connected_component irreducibleComponent_subset_connectedComponent
@[mono]
theorem connectedComponentIn_mono (x : α) {F G : Set α} (h : F ⊆ G) :
@@ -1112,8 +1111,7 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
· rw [← inter_distrib_right]
exact subset_inter hss Subset.rfl
· rwa [disjoint_iff_inter_eq_empty, ← inter_inter_distrib_right, inter_comm]
-#align is_preconnected_iff_subset_of_fully_disjoint_closed
- isPreconnected_iff_subset_of_fully_disjoint_closed
+#align is_preconnected_iff_subset_of_fully_disjoint_closed isPreconnected_iff_subset_of_fully_disjoint_closed
theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s) :
connectedComponent x ⊆ s :=
@@ -977,7 +977,7 @@ lemma PreconnectedSpace.induction₂ [PreconnectedSpace α] (P : α → α → P
P x y := by
refine PreconnectedSpace.induction₂' P (fun z ↦ ?_) h' x y
filter_upwards [h z] with a ha
- refine ⟨ha, h'' ha⟩
+ exact ⟨ha, h'' ha⟩
/-- In a preconnected set, given a transitive relation `P`, if `P x y` and `P y x` are true
for `y` close enough to `x`, then `P x y` holds for all `x, y`. This is a version of the fact
@@ -1017,7 +1017,6 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
· intro u v hu hv hs huv
specialize h u v hu hv hs
contrapose! huv
- rw [← nonempty_iff_ne_empty]
simp [not_subset] at huv
rcases huv with ⟨⟨x, hxs, hxu⟩, ⟨y, hys, hyv⟩⟩
have hxv : x ∈ v := or_iff_not_imp_left.mp (hs hxs) hxu
@@ -1079,7 +1078,6 @@ theorem isPreconnected_iff_subset_of_disjoint_closed :
rw [isPreconnected_closed_iff] at h
specialize h u v hu hv hs
contrapose! huv
- rw [← nonempty_iff_ne_empty]
simp [not_subset] at huv
rcases huv with ⟨⟨x, hxs, hxu⟩, ⟨y, hys, hyv⟩⟩
have hxv : x ∈ v := or_iff_not_imp_left.mp (hs hxs) hxu
@@ -1317,7 +1315,6 @@ theorem isPreconnected_of_forall_constant {s : Set α}
unfold IsPreconnected
by_contra'
rcases this with ⟨u, v, u_op, v_op, hsuv, ⟨x, x_in_s, x_in_u⟩, ⟨y, y_in_s, y_in_v⟩, H⟩
- rw [not_nonempty_iff_eq_empty] at H
have hy : y ∉ u := fun y_in_u => eq_empty_iff_forall_not_mem.mp H y ⟨y_in_s, ⟨y_in_u, y_in_v⟩⟩
have : ContinuousOn u.boolIndicator s := by
apply (continuousOn_boolIndicator_iff_clopen _ _).mpr ⟨_, _⟩
@@ -994,7 +994,7 @@ lemma IsPreconnected.induction₂' {s : Set α} (hs : IsPreconnected s) (P : α
have Z := h x hx
rwa [nhdsWithin_eq_map_subtype_coe] at Z
· rintro ⟨a, ha⟩ ⟨b, hb⟩ ⟨c, hc⟩ hab hbc
- exact h' a b c ha hb hc hab hbc
+ exact h' a b c ha hb hc hab hbc
/-- In a preconnected set, if a symmetric transitive relation `P x y` is true for `y` close
enough to `x`, then it holds for all `x, y`. This is a version of the fact that, if an equivalence
For faster build times and clearer dependencies. No attempt at being exhaustive.
The new import in Clopen.lean
had been transitively imported before.
@@ -3,7 +3,6 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
-/
-import Mathlib.Data.Set.BoolIndicator
import Mathlib.Order.SuccPred.Relation
import Mathlib.Topology.Clopen
import Mathlib.Topology.Irreducible
In the last step, I have removed redundant imports: those which are implied by the other imports. I can revert those changes if desired/if this seems too brittle.
@@ -23,12 +23,8 @@ We define the following properties for sets in a topological space:
* `IsConnected`: a nonempty set that has no non-trivial open partition.
See also the section below in the module doc.
* `connectedComponent` is the connected component of an element in the space.
-* `IsTotallyDisconnected`: all of its connected components are singletons.
-* `IsTotallySeparated`: any two points can be separated by two disjoint opens that cover the set.
-For each of these definitions, we also have a class stating that the whole space
-satisfies that property:
-`ConnectedSpace`, `TotallyDisconnectedSpace`, `TotallySeparatedSpace`.
+We also have a class stating that the whole space satisfies that property: `ConnectedSpace`
## On the definition of connected sets/spaces
@@ -1236,345 +1232,7 @@ theorem QuotientMap.image_connectedComponent [TopologicalSpace β] {f : α →
end Preconnected
-section LocallyConnectedSpace
-
-/-- A topological space is **locally connected** if each neighborhood filter admits a basis
-of connected *open* sets. Note that it is equivalent to each point having a basis of connected
-(non necessarily open) sets but in a non-trivial way, so we choose this definition and prove the
-equivalence later in `locallyConnectedSpace_iff_connected_basis`. -/
-class LocallyConnectedSpace (α : Type*) [TopologicalSpace α] : Prop where
- /-- Open connected neighborhoods form a basis of the neighborhoods filter. -/
- open_connected_basis : ∀ x, (𝓝 x).HasBasis (fun s : Set α => IsOpen s ∧ x ∈ s ∧ IsConnected s) id
-#align locally_connected_space LocallyConnectedSpace
-
-theorem locallyConnectedSpace_iff_open_connected_basis :
- LocallyConnectedSpace α ↔
- ∀ x, (𝓝 x).HasBasis (fun s : Set α => IsOpen s ∧ x ∈ s ∧ IsConnected s) id :=
- ⟨@LocallyConnectedSpace.open_connected_basis _ _, LocallyConnectedSpace.mk⟩
-#align locally_connected_space_iff_open_connected_basis
- locallyConnectedSpace_iff_open_connected_basis
-
-theorem locallyConnectedSpace_iff_open_connected_subsets :
- LocallyConnectedSpace α ↔
- ∀ x, ∀ U ∈ 𝓝 x, ∃ V : Set α, V ⊆ U ∧ IsOpen V ∧ x ∈ V ∧ IsConnected V := by
- simp_rw [locallyConnectedSpace_iff_open_connected_basis]
- refine forall_congr' fun _ => ?_
- constructor
- · intro h U hU
- rcases h.mem_iff.mp hU with ⟨V, hV, hVU⟩
- exact ⟨V, hVU, hV⟩
- · exact fun h => ⟨fun U => ⟨fun hU =>
- let ⟨V, hVU, hV⟩ := h U hU
- ⟨V, hV, hVU⟩, fun ⟨V, ⟨hV, hxV, _⟩, hVU⟩ => mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩
-#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsets
-
-/-- A space with discrete topology is a locally connected space. -/
-instance (priority := 100) DiscreteTopology.toLocallyConnectedSpace (α) [TopologicalSpace α]
- [DiscreteTopology α] : LocallyConnectedSpace α :=
- locallyConnectedSpace_iff_open_connected_subsets.2 fun x _U hU =>
- ⟨{x}, singleton_subset_iff.2 <| mem_of_mem_nhds hU, isOpen_discrete _, rfl,
- isConnected_singleton⟩
-#align discrete_topology.to_locally_connected_space DiscreteTopology.toLocallyConnectedSpace
-
-theorem connectedComponentIn_mem_nhds [LocallyConnectedSpace α] {F : Set α} {x : α} (h : F ∈ 𝓝 x) :
- connectedComponentIn F x ∈ 𝓝 x := by
- rw [(LocallyConnectedSpace.open_connected_basis x).mem_iff] at h
- rcases h with ⟨s, ⟨h1s, hxs, h2s⟩, hsF⟩
- exact mem_nhds_iff.mpr ⟨s, h2s.isPreconnected.subset_connectedComponentIn hxs hsF, h1s, hxs⟩
-#align connected_component_in_mem_nhds connectedComponentIn_mem_nhds
-
-protected theorem IsOpen.connectedComponentIn [LocallyConnectedSpace α] {F : Set α} {x : α}
- (hF : IsOpen F) : IsOpen (connectedComponentIn F x) := by
- rw [isOpen_iff_mem_nhds]
- intro y hy
- rw [connectedComponentIn_eq hy]
- exact connectedComponentIn_mem_nhds (hF.mem_nhds <| connectedComponentIn_subset F x hy)
-#align is_open.connected_component_in IsOpen.connectedComponentIn
-
-theorem isOpen_connectedComponent [LocallyConnectedSpace α] {x : α} :
- IsOpen (connectedComponent x) := by
- rw [← connectedComponentIn_univ]
- exact isOpen_univ.connectedComponentIn
-#align is_open_connected_component isOpen_connectedComponent
-
-theorem isClopen_connectedComponent [LocallyConnectedSpace α] {x : α} :
- IsClopen (connectedComponent x) :=
- ⟨isOpen_connectedComponent, isClosed_connectedComponent⟩
-#align is_clopen_connected_component isClopen_connectedComponent
-
-theorem locallyConnectedSpace_iff_connectedComponentIn_open :
- LocallyConnectedSpace α ↔
- ∀ F : Set α, IsOpen F → ∀ x ∈ F, IsOpen (connectedComponentIn F x) := by
- constructor
- · intro h
- exact fun F hF x _ => hF.connectedComponentIn
- · intro h
- rw [locallyConnectedSpace_iff_open_connected_subsets]
- refine' fun x U hU =>
- ⟨connectedComponentIn (interior U) x,
- (connectedComponentIn_subset _ _).trans interior_subset, h _ isOpen_interior x _,
- mem_connectedComponentIn _, isConnected_connectedComponentIn_iff.mpr _⟩ <;>
- exact mem_interior_iff_mem_nhds.mpr hU
-#align locally_connected_space_iff_connected_component_in_open locallyConnectedSpace_iff_connectedComponentIn_open
-
-theorem locallyConnectedSpace_iff_connected_subsets :
- LocallyConnectedSpace α ↔ ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ V ∈ 𝓝 x, IsPreconnected V ∧ V ⊆ U := by
- constructor
- · rw [locallyConnectedSpace_iff_open_connected_subsets]
- intro h x U hxU
- rcases h x U hxU with ⟨V, hVU, hV₁, hxV, hV₂⟩
- exact ⟨V, hV₁.mem_nhds hxV, hV₂.isPreconnected, hVU⟩
- · rw [locallyConnectedSpace_iff_connectedComponentIn_open]
- refine' fun h U hU x _ => isOpen_iff_mem_nhds.mpr fun y hy => _
- rw [connectedComponentIn_eq hy]
- rcases h y U (hU.mem_nhds <| (connectedComponentIn_subset _ _) hy) with ⟨V, hVy, hV, hVU⟩
- exact Filter.mem_of_superset hVy (hV.subset_connectedComponentIn (mem_of_mem_nhds hVy) hVU)
-#align locally_connected_space_iff_connected_subsets locallyConnectedSpace_iff_connected_subsets
-
-theorem locallyConnectedSpace_iff_connected_basis :
- LocallyConnectedSpace α ↔
- ∀ x, (𝓝 x).HasBasis (fun s : Set α => s ∈ 𝓝 x ∧ IsPreconnected s) id := by
- rw [locallyConnectedSpace_iff_connected_subsets]
- exact forall_congr' <| fun x => Filter.hasBasis_self.symm
-#align locally_connected_space_iff_connected_basis locallyConnectedSpace_iff_connected_basis
-
-theorem locallyConnectedSpace_of_connected_bases {ι : Type*} (b : α → ι → Set α) (p : α → ι → Prop)
- (hbasis : ∀ x, (𝓝 x).HasBasis (p x) (b x))
- (hconnected : ∀ x i, p x i → IsPreconnected (b x i)) : LocallyConnectedSpace α := by
- rw [locallyConnectedSpace_iff_connected_basis]
- exact fun x =>
- (hbasis x).to_hasBasis
- (fun i hi => ⟨b x i, ⟨(hbasis x).mem_of_mem hi, hconnected x i hi⟩, subset_rfl⟩) fun s hs =>
- ⟨(hbasis x).index s hs.1, ⟨(hbasis x).property_index hs.1, (hbasis x).set_index_subset hs.1⟩⟩
-#align locally_connected_space_of_connected_bases locallyConnectedSpace_of_connected_bases
-
-theorem OpenEmbedding.locallyConnectedSpace [LocallyConnectedSpace α] [TopologicalSpace β]
- {f : β → α} (h : OpenEmbedding f) : LocallyConnectedSpace β := by
- refine locallyConnectedSpace_of_connected_bases (fun _ s ↦ f ⁻¹' s)
- (fun x s ↦ (IsOpen s ∧ f x ∈ s ∧ IsConnected s) ∧ s ⊆ range f) (fun x ↦ ?_)
- (fun x s hxs ↦ hxs.1.2.2.isPreconnected.preimage_of_open_map h.inj h.isOpenMap hxs.2)
- rw [h.nhds_eq_comap]
- exact LocallyConnectedSpace.open_connected_basis (f x) |>.restrict_subset
- (h.open_range.mem_nhds <| mem_range_self _) |>.comap _
-
-theorem IsOpen.locallyConnectedSpace [LocallyConnectedSpace α] {U : Set α} (hU : IsOpen U) :
- LocallyConnectedSpace U :=
- hU.openEmbedding_subtype_val.locallyConnectedSpace
-
-end LocallyConnectedSpace
-
-section TotallyDisconnected
-
-/-- A set `s` is called totally disconnected if every subset `t ⊆ s` which is preconnected is
-a subsingleton, ie either empty or a singleton.-/
-def IsTotallyDisconnected (s : Set α) : Prop :=
- ∀ t, t ⊆ s → IsPreconnected t → t.Subsingleton
-#align is_totally_disconnected IsTotallyDisconnected
-
-theorem isTotallyDisconnected_empty : IsTotallyDisconnected (∅ : Set α) := fun _ ht _ _ x_in _ _ =>
- (ht x_in).elim
-#align is_totally_disconnected_empty isTotallyDisconnected_empty
-
-theorem isTotallyDisconnected_singleton {x} : IsTotallyDisconnected ({x} : Set α) := fun _ ht _ =>
- subsingleton_singleton.anti ht
-#align is_totally_disconnected_singleton isTotallyDisconnected_singleton
-
-/-- A space is totally disconnected if all of its connected components are singletons. -/
-class TotallyDisconnectedSpace (α : Type u) [TopologicalSpace α] : Prop where
- /-- The universal set `Set.univ` in a totally disconnected space is totally disconnected. -/
- isTotallyDisconnected_univ : IsTotallyDisconnected (univ : Set α)
-#align totally_disconnected_space TotallyDisconnectedSpace
-
-theorem IsPreconnected.subsingleton [TotallyDisconnectedSpace α] {s : Set α}
- (h : IsPreconnected s) : s.Subsingleton :=
- TotallyDisconnectedSpace.isTotallyDisconnected_univ s (subset_univ s) h
-#align is_preconnected.subsingleton IsPreconnected.subsingleton
-
-instance Pi.totallyDisconnectedSpace {α : Type*} {β : α → Type*}
- [∀ a, TopologicalSpace (β a)] [∀ a, TotallyDisconnectedSpace (β a)] :
- TotallyDisconnectedSpace (∀ a : α, β a) :=
- ⟨fun t _ h2 =>
- have this : ∀ a, IsPreconnected ((fun x : ∀ a, β a => x a) '' t) := fun a =>
- h2.image (fun x => x a) (continuous_apply a).continuousOn
- fun x x_in y y_in => funext fun a => (this a).subsingleton ⟨x, x_in, rfl⟩ ⟨y, y_in, rfl⟩⟩
-#align pi.totally_disconnected_space Pi.totallyDisconnectedSpace
-
-instance Prod.totallyDisconnectedSpace [TopologicalSpace β] [TotallyDisconnectedSpace α]
- [TotallyDisconnectedSpace β] : TotallyDisconnectedSpace (α × β) :=
- ⟨fun t _ h2 =>
- have H1 : IsPreconnected (Prod.fst '' t) := h2.image Prod.fst continuous_fst.continuousOn
- have H2 : IsPreconnected (Prod.snd '' t) := h2.image Prod.snd continuous_snd.continuousOn
- fun x hx y hy =>
- Prod.ext (H1.subsingleton ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩)
- (H2.subsingleton ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩)⟩
-#align prod.totally_disconnected_space Prod.totallyDisconnectedSpace
-
-instance [TopologicalSpace β] [TotallyDisconnectedSpace α] [TotallyDisconnectedSpace β] :
- TotallyDisconnectedSpace (Sum α β) := by
- refine' ⟨fun s _ hs => _⟩
- obtain ⟨t, ht, rfl⟩ | ⟨t, ht, rfl⟩ := Sum.isPreconnected_iff.1 hs
- · exact ht.subsingleton.image _
- · exact ht.subsingleton.image _
-
-instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i)] :
- TotallyDisconnectedSpace (Σi, π i) := by
- refine' ⟨fun s _ hs => _⟩
- obtain rfl | h := s.eq_empty_or_nonempty
- · exact subsingleton_empty
- · obtain ⟨a, t, ht, rfl⟩ := Sigma.isConnected_iff.1 ⟨h, hs⟩
- exact ht.isPreconnected.subsingleton.image _
-
--- porting note: reformulated using `Pairwise`
-/-- Let `X` be a topological space, and suppose that for all distinct `x,y ∈ X`, there
- is some clopen set `U` such that `x ∈ U` and `y ∉ U`. Then `X` is totally disconnected. -/
-theorem isTotallyDisconnected_of_clopen_set {X : Type*} [TopologicalSpace X]
- (hX : Pairwise fun x y => ∃ (U : Set X), IsClopen U ∧ x ∈ U ∧ y ∉ U) :
- IsTotallyDisconnected (Set.univ : Set X) := by
- rintro S - hS
- unfold Set.Subsingleton
- by_contra' h_contra
- rcases h_contra with ⟨x, hx, y, hy, hxy⟩
- obtain ⟨U, h_clopen, hxU, hyU⟩ := hX hxy
- specialize
- hS U Uᶜ h_clopen.1 h_clopen.compl.1 (fun a _ => em (a ∈ U)) ⟨x, hx, hxU⟩ ⟨y, hy, hyU⟩
- rw [inter_compl_self, Set.inter_empty] at hS
- exact Set.not_nonempty_empty hS
-#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_clopen_set
-
-/-- A space is totally disconnected iff its connected components are subsingletons. -/
-theorem totallyDisconnectedSpace_iff_connectedComponent_subsingleton :
- TotallyDisconnectedSpace α ↔ ∀ x : α, (connectedComponent x).Subsingleton := by
- constructor
- · intro h x
- apply h.1
- · exact subset_univ _
- exact isPreconnected_connectedComponent
- intro h; constructor
- intro s s_sub hs
- rcases eq_empty_or_nonempty s with (rfl | ⟨x, x_in⟩)
- · exact subsingleton_empty
- · exact (h x).anti (hs.subset_connectedComponent x_in)
-#align totally_disconnected_space_iff_connected_component_subsingleton
- totallyDisconnectedSpace_iff_connectedComponent_subsingleton
-
-/-- A space is totally disconnected iff its connected components are singletons. -/
-theorem totallyDisconnectedSpace_iff_connectedComponent_singleton :
- TotallyDisconnectedSpace α ↔ ∀ x : α, connectedComponent x = {x} := by
- rw [totallyDisconnectedSpace_iff_connectedComponent_subsingleton]
- refine forall_congr' fun x => ?_
- rw [subsingleton_iff_singleton]
- exact mem_connectedComponent
-#align totally_disconnected_space_iff_connected_component_singleton
- totallyDisconnectedSpace_iff_connectedComponent_singleton
-
-@[simp] theorem connectedComponent_eq_singleton [TotallyDisconnectedSpace α] (x : α) :
- connectedComponent x = {x} :=
- totallyDisconnectedSpace_iff_connectedComponent_singleton.1 ‹_› x
-#align connected_component_eq_singleton connectedComponent_eq_singleton
-
-/-- The image of a connected component in a totally disconnected space is a singleton. -/
-@[simp]
-theorem Continuous.image_connectedComponent_eq_singleton {β : Type*} [TopologicalSpace β]
- [TotallyDisconnectedSpace β] {f : α → β} (h : Continuous f) (a : α) :
- f '' connectedComponent a = {f a} :=
- (Set.subsingleton_iff_singleton <| mem_image_of_mem f mem_connectedComponent).mp
- (isPreconnected_connectedComponent.image f h.continuousOn).subsingleton
-#align continuous.image_connected_component_eq_singleton Continuous.image_connectedComponent_eq_singleton
-
-theorem isTotallyDisconnected_of_totallyDisconnectedSpace [TotallyDisconnectedSpace α] (s : Set α) :
- IsTotallyDisconnected s := fun t _ ht =>
- TotallyDisconnectedSpace.isTotallyDisconnected_univ _ t.subset_univ ht
-#align is_totally_disconnected_of_totally_disconnected_space isTotallyDisconnected_of_totallyDisconnectedSpace
-
-theorem isTotallyDisconnected_of_image [TopologicalSpace β] {f : α → β} (hf : ContinuousOn f s)
- (hf' : Injective f) (h : IsTotallyDisconnected (f '' s)) : IsTotallyDisconnected s :=
- fun _t hts ht _x x_in _y y_in =>
- hf' <|
- h _ (image_subset f hts) (ht.image f <| hf.mono hts) (mem_image_of_mem f x_in)
- (mem_image_of_mem f y_in)
-#align is_totally_disconnected_of_image isTotallyDisconnected_of_image
-
-theorem Embedding.isTotallyDisconnected [TopologicalSpace β] {f : α → β} (hf : Embedding f)
- {s : Set α} (h : IsTotallyDisconnected (f '' s)) : IsTotallyDisconnected s :=
- isTotallyDisconnected_of_image hf.continuous.continuousOn hf.inj h
-#align embedding.is_totally_disconnected Embedding.isTotallyDisconnected
-
-instance Subtype.totallyDisconnectedSpace {α : Type*} {p : α → Prop} [TopologicalSpace α]
- [TotallyDisconnectedSpace α] : TotallyDisconnectedSpace (Subtype p) :=
- ⟨embedding_subtype_val.isTotallyDisconnected
- (isTotallyDisconnected_of_totallyDisconnectedSpace _)⟩
-#align subtype.totally_disconnected_space Subtype.totallyDisconnectedSpace
-
-end TotallyDisconnected
-
-section TotallySeparated
-
--- todo: reformulate using `Set.Pairwise`
-/-- A set `s` is called totally separated if any two points of this set can be separated
-by two disjoint open sets covering `s`. -/
-def IsTotallySeparated (s : Set α) : Prop :=
- ∀ x ∈ s, ∀ y ∈ s, x ≠ y →
- ∃ u v : Set α, IsOpen u ∧ IsOpen v ∧ x ∈ u ∧ y ∈ v ∧ s ⊆ u ∪ v ∧ Disjoint u v
-#align is_totally_separated IsTotallySeparated
-
-theorem isTotallySeparated_empty : IsTotallySeparated (∅ : Set α) := fun _ => False.elim
-#align is_totally_separated_empty isTotallySeparated_empty
-
-theorem isTotallySeparated_singleton {x} : IsTotallySeparated ({x} : Set α) := fun _ hp _ hq hpq =>
- (hpq <| (eq_of_mem_singleton hp).symm ▸ (eq_of_mem_singleton hq).symm).elim
-#align is_totally_separated_singleton isTotallySeparated_singleton
-
-theorem isTotallyDisconnected_of_isTotallySeparated {s : Set α} (H : IsTotallySeparated s) :
- IsTotallyDisconnected s := by
- intro t hts ht x x_in y y_in
- by_contra h
- obtain
- ⟨u : Set α, v : Set α, hu : IsOpen u, hv : IsOpen v, hxu : x ∈ u, hyv : y ∈ v, hs : s ⊆ u ∪ v,
- huv⟩ :=
- H x (hts x_in) y (hts y_in) h
- refine' (ht _ _ hu hv (hts.trans hs) ⟨x, x_in, hxu⟩ ⟨y, y_in, hyv⟩).ne_empty _
- rw [huv.inter_eq, inter_empty]
-#align is_totally_disconnected_of_is_totally_separated isTotallyDisconnected_of_isTotallySeparated
-
-alias IsTotallySeparated.isTotallyDisconnected := isTotallyDisconnected_of_isTotallySeparated
-#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
-
-/-- A space is totally separated if any two points can be separated by two disjoint open sets
-covering the whole space. -/
-class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
- /-- The universal set `Set.univ` in a totally separated space is totally separated. -/
- isTotallySeparated_univ : IsTotallySeparated (univ : Set α)
-#align totally_separated_space TotallySeparatedSpace
-
--- see Note [lower instance priority]
-instance (priority := 100) TotallySeparatedSpace.totallyDisconnectedSpace (α : Type u)
- [TopologicalSpace α] [TotallySeparatedSpace α] : TotallyDisconnectedSpace α :=
- ⟨TotallySeparatedSpace.isTotallySeparated_univ.isTotallyDisconnected⟩
-#align totally_separated_space.totally_disconnected_space
- TotallySeparatedSpace.totallyDisconnectedSpace
-
--- see Note [lower instance priority]
-instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type*) [TopologicalSpace α]
- [DiscreteTopology α] : TotallySeparatedSpace α :=
- ⟨fun _ _ b _ h => ⟨{b}ᶜ, {b}, isOpen_discrete _, isOpen_discrete _, h, rfl,
- (compl_union_self _).symm.subset, disjoint_compl_left⟩⟩
-#align totally_separated_space.of_discrete TotallySeparatedSpace.of_discrete
-
-theorem exists_clopen_of_totally_separated {α : Type*} [TopologicalSpace α]
- [TotallySeparatedSpace α] {x y : α} (hxy : x ≠ y) :
- ∃ U : Set α, IsClopen U ∧ x ∈ U ∧ y ∈ Uᶜ := by
- obtain ⟨U, V, hU, hV, Ux, Vy, f, disj⟩ :=
- TotallySeparatedSpace.isTotallySeparated_univ x (Set.mem_univ x) y (Set.mem_univ y) hxy
- have clopen_U := isClopen_inter_of_disjoint_cover_clopen isClopen_univ f hU hV disj
- rw [univ_inter _] at clopen_U
- rw [← Set.subset_compl_iff_disjoint_right, subset_compl_comm] at disj
- exact ⟨U, clopen_U, Ux, disj Vy⟩
-#align exists_clopen_of_totally_separated exists_clopen_of_totally_separated
-
-end TotallySeparated
-
section connectedComponentSetoid
-
/-- The setoid of connected components of a topological space -/
def connectedComponentSetoid (α : Type*) [TopologicalSpace α] : Setoid α :=
⟨fun x y => connectedComponent x = connectedComponent y,
@@ -1634,50 +1292,6 @@ theorem range_coe : range (mk : α → ConnectedComponents α) = univ :=
end ConnectedComponents
-variable [TopologicalSpace β] [TotallyDisconnectedSpace β] {f : α → β}
-
-theorem Continuous.image_eq_of_connectedComponent_eq (h : Continuous f) (a b : α)
- (hab : connectedComponent a = connectedComponent b) : f a = f b :=
- singleton_eq_singleton_iff.1 <|
- h.image_connectedComponent_eq_singleton a ▸
- h.image_connectedComponent_eq_singleton b ▸ hab ▸ rfl
-#align continuous.image_eq_of_connected_component_eq Continuous.image_eq_of_connectedComponent_eq
-
-/--
-The lift to `connectedComponents α` of a continuous map from `α` to a totally disconnected space
--/
-def Continuous.connectedComponentsLift (h : Continuous f) : ConnectedComponents α → β := fun x =>
- Quotient.liftOn' x f h.image_eq_of_connectedComponent_eq
-#align continuous.connected_components_lift Continuous.connectedComponentsLift
-
-@[continuity]
-theorem Continuous.connectedComponentsLift_continuous (h : Continuous f) :
- Continuous h.connectedComponentsLift :=
- h.quotient_liftOn' <| by convert h.image_eq_of_connectedComponent_eq
-#align continuous.connected_components_lift_continuous Continuous.connectedComponentsLift_continuous
-
-@[simp]
-theorem Continuous.connectedComponentsLift_apply_coe (h : Continuous f) (x : α) :
- h.connectedComponentsLift x = f x :=
- rfl
-#align continuous.connected_components_lift_apply_coe Continuous.connectedComponentsLift_apply_coe
-
-@[simp]
-theorem Continuous.connectedComponentsLift_comp_coe (h : Continuous f) :
- h.connectedComponentsLift ∘ (↑) = f :=
- rfl
-#align continuous.connected_components_lift_comp_coe Continuous.connectedComponentsLift_comp_coe
-
-theorem connectedComponents_lift_unique' {β : Sort*} {g₁ g₂ : ConnectedComponents α → β}
- (hg : g₁ ∘ ((↑) : α → ConnectedComponents α) = g₂ ∘ (↑)) : g₁ = g₂ :=
- ConnectedComponents.surjective_coe.injective_comp_right hg
-#align connected_components_lift_unique' connectedComponents_lift_unique'
-
-theorem Continuous.connectedComponentsLift_unique (h : Continuous f) (g : ConnectedComponents α → β)
- (hg : g ∘ (↑) = f) : g = h.connectedComponentsLift :=
- connectedComponents_lift_unique' <| hg.trans h.connectedComponentsLift_comp_coe.symm
-#align continuous.connected_components_lift_unique Continuous.connectedComponentsLift_unique
-
/-- The preimage of a singleton in `connectedComponents` is the connected component
of an element in the equivalence class. -/
theorem connectedComponents_preimage_singleton {x : α} :
@@ -1693,37 +1307,9 @@ theorem connectedComponents_preimage_image (U : Set α) :
simp only [connectedComponents_preimage_singleton, preimage_iUnion₂, image_eq_iUnion]
#align connected_components_preimage_image connectedComponents_preimage_image
-instance ConnectedComponents.totallyDisconnectedSpace :
- TotallyDisconnectedSpace (ConnectedComponents α) := by
- rw [totallyDisconnectedSpace_iff_connectedComponent_singleton]
- refine' ConnectedComponents.surjective_coe.forall.2 fun x => _
- rw [← ConnectedComponents.quotientMap_coe.image_connectedComponent, ←
- connectedComponents_preimage_singleton, image_preimage_eq _ ConnectedComponents.surjective_coe]
- refine' ConnectedComponents.surjective_coe.forall.2 fun y => _
- rw [connectedComponents_preimage_singleton]
- exact isConnected_connectedComponent
-#align connected_components.totally_disconnected_space ConnectedComponents.totallyDisconnectedSpace
-
-/-- Functoriality of `connectedComponents` -/
-def Continuous.connectedComponentsMap {β : Type*} [TopologicalSpace β] {f : α → β}
- (h : Continuous f) : ConnectedComponents α → ConnectedComponents β :=
- Continuous.connectedComponentsLift (ConnectedComponents.continuous_coe.comp h)
-#align continuous.connected_components_map Continuous.connectedComponentsMap
-
-theorem Continuous.connectedComponentsMap_continuous {β : Type*} [TopologicalSpace β] {f : α → β}
- (h : Continuous f) : Continuous h.connectedComponentsMap :=
- Continuous.connectedComponentsLift_continuous (ConnectedComponents.continuous_coe.comp h)
-#align continuous.connected_components_map_continuous Continuous.connectedComponentsMap_continuous
-end connectedComponentSetoid
-/-- A preconnected set `s` has the property that every map to a
-discrete space that is continuous on `s` is constant on `s` -/
-theorem IsPreconnected.constant {Y : Type*} [TopologicalSpace Y] [DiscreteTopology Y] {s : Set α}
- (hs : IsPreconnected s) {f : α → Y} (hf : ContinuousOn f s) {x y : α} (hx : x ∈ s)
- (hy : y ∈ s) : f x = f y :=
- (hs.image f hf).subsingleton (mem_image_of_mem f hx) (mem_image_of_mem f hy)
-#align is_preconnected.constant IsPreconnected.constant
+end connectedComponentSetoid
/-- If every map to `Bool` (a discrete two-element space), that is
continuous on a set `s`, is constant on s, then s is preconnected -/
@@ -1743,34 +1329,9 @@ theorem isPreconnected_of_forall_constant {s : Set α}
hs _ this x x_in_s y y_in_s
#align is_preconnected_of_forall_constant isPreconnected_of_forall_constant
-/-- A `PreconnectedSpace` version of `isPreconnected.constant` -/
-theorem PreconnectedSpace.constant {Y : Type*} [TopologicalSpace Y] [DiscreteTopology Y]
- (hp : PreconnectedSpace α) {f : α → Y} (hf : Continuous f) {x y : α} : f x = f y :=
- IsPreconnected.constant hp.isPreconnected_univ (Continuous.continuousOn hf) trivial trivial
-#align preconnected_space.constant PreconnectedSpace.constant
-
/-- A `PreconnectedSpace` version of `isPreconnected_of_forall_constant` -/
theorem preconnectedSpace_of_forall_constant
(hs : ∀ f : α → Bool, Continuous f → ∀ x y, f x = f y) : PreconnectedSpace α :=
⟨isPreconnected_of_forall_constant fun f hf x _ y _ =>
hs f (continuous_iff_continuousOn_univ.mpr hf) x y⟩
#align preconnected_space_of_forall_constant preconnectedSpace_of_forall_constant
-
-/-- Refinement of `IsPreconnected.constant` only assuming the map factors through a
-discrete subset of the target. -/
-theorem IsPreconnected.constant_of_mapsTo [TopologicalSpace β] {S : Set α} (hS : IsPreconnected S)
- {T : Set β} [DiscreteTopology T] {f : α → β} (hc : ContinuousOn f S) (hTm : MapsTo f S T)
- {x y : α} (hx : x ∈ S) (hy : y ∈ S) : f x = f y := by
- let F : S → T := hTm.restrict f S T
- suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rwa [← Subtype.coe_inj] at this
- exact (isPreconnected_iff_preconnectedSpace.mp hS).constant (hc.restrict_mapsTo _)
-#align is_preconnected.constant_of_maps_to IsPreconnected.constant_of_mapsTo
-
-/-- A version of `IsPreconnected.constant_of_mapsTo` that assumes that the codomain is nonempty and
-proves that `f` is equal to `const α y` on `S` for some `y ∈ T`. -/
-theorem IsPreconnected.eqOn_const_of_mapsTo [TopologicalSpace β] {S : Set α} (hS : IsPreconnected S)
- {T : Set β} [DiscreteTopology T] {f : α → β} (hc : ContinuousOn f S) (hTm : MapsTo f S T)
- (hne : T.Nonempty) : ∃ y ∈ T, EqOn f (const α y) S := by
- rcases S.eq_empty_or_nonempty with (rfl | ⟨x, hx⟩)
- · exact hne.imp fun _ hy => ⟨hy, eqOn_empty _ _⟩
- · exact ⟨f x, hTm hx, fun x' hx' => hS.constant_of_mapsTo hc hTm hx' hx⟩
Split up the 2000-line Topology/SubsetProperties.lean
into several smaller files. Not only is it too huge, but the name is very unhelpful, since actually about 90% of the file is about compactness; I've moved this material into various files inside a new subdirectory Topology/Compactness/
.
@@ -5,7 +5,8 @@ Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
-/
import Mathlib.Data.Set.BoolIndicator
import Mathlib.Order.SuccPred.Relation
-import Mathlib.Topology.SubsetProperties
+import Mathlib.Topology.Clopen
+import Mathlib.Topology.Irreducible
#align_import topology.connected from "leanprover-community/mathlib"@"d101e93197bb5f6ea89bd7ba386b7f7dff1f3903"
@@ -1347,6 +1347,19 @@ theorem locallyConnectedSpace_of_connected_bases {ι : Type*} (b : α → ι →
⟨(hbasis x).index s hs.1, ⟨(hbasis x).property_index hs.1, (hbasis x).set_index_subset hs.1⟩⟩
#align locally_connected_space_of_connected_bases locallyConnectedSpace_of_connected_bases
+theorem OpenEmbedding.locallyConnectedSpace [LocallyConnectedSpace α] [TopologicalSpace β]
+ {f : β → α} (h : OpenEmbedding f) : LocallyConnectedSpace β := by
+ refine locallyConnectedSpace_of_connected_bases (fun _ s ↦ f ⁻¹' s)
+ (fun x s ↦ (IsOpen s ∧ f x ∈ s ∧ IsConnected s) ∧ s ⊆ range f) (fun x ↦ ?_)
+ (fun x s hxs ↦ hxs.1.2.2.isPreconnected.preimage_of_open_map h.inj h.isOpenMap hxs.2)
+ rw [h.nhds_eq_comap]
+ exact LocallyConnectedSpace.open_connected_basis (f x) |>.restrict_subset
+ (h.open_range.mem_nhds <| mem_range_self _) |>.comap _
+
+theorem IsOpen.locallyConnectedSpace [LocallyConnectedSpace α] {U : Set α} (hU : IsOpen U) :
+ LocallyConnectedSpace U :=
+ hU.openEmbedding_subtype_val.locallyConnectedSpace
+
end LocallyConnectedSpace
section TotallyDisconnected
Set
/Finset
lemmas match lattice lemma names (#7378)
Rename union_eq_left_iff_subset
to union_eq_left
to match sup_eq_left
. Similarly for the right
and inter
versions.
@@ -643,14 +643,14 @@ theorem IsPreconnected.subset_connectedComponentIn {x : α} {F : Set α} (hs : I
(hxs : x ∈ s) (hsF : s ⊆ F) : s ⊆ connectedComponentIn F x := by
have : IsPreconnected (((↑) : F → α) ⁻¹' s) := by
refine' inducing_subtype_val.isPreconnected_image.mp _
- rwa [Subtype.image_preimage_coe, inter_eq_left_iff_subset.mpr hsF]
+ rwa [Subtype.image_preimage_coe, inter_eq_left.mpr hsF]
have h2xs : (⟨x, hsF hxs⟩ : F) ∈ (↑) ⁻¹' s := by
rw [mem_preimage]
exact hxs
have := this.subset_connectedComponent h2xs
rw [connectedComponentIn_eq_image (hsF hxs)]
refine' Subset.trans _ (image_subset _ this)
- rw [Subtype.image_preimage_coe, inter_eq_left_iff_subset.mpr hsF]
+ rw [Subtype.image_preimage_coe, inter_eq_left.mpr hsF]
#align is_preconnected.subset_connected_component_in IsPreconnected.subset_connectedComponentIn
theorem IsConnected.subset_connectedComponent {x : α} {s : Set α} (H1 : IsConnected s)
@@ -771,7 +771,7 @@ theorem isConnected_range [TopologicalSpace β] [ConnectedSpace α] {f : α →
#align is_connected_range isConnected_range
theorem Function.Surjective.connectedSpace [ConnectedSpace α] [TopologicalSpace β]
- {f : α → β} (hf : Surjective f) (hf' : Continuous f) : ConnectedSpace β := by
+ {f : α → β} (hf : Surjective f) (hf' : Continuous f) : ConnectedSpace β := by
rw [connectedSpace_iff_univ, ← hf.range_eq]
exact isConnected_range hf'
The mathlib3 lemma is about quotient.mk, which takes an instance argument and is translated into mathlib4 as Quotient.mk'.
@@ -777,7 +777,7 @@ theorem Function.Surjective.connectedSpace [ConnectedSpace α] [TopologicalSpace
instance Quotient.instConnectedSpace {s : Setoid α} [ConnectedSpace α] :
ConnectedSpace (Quotient s) :=
- (surjective_quotient_mk _).connectedSpace continuous_coinduced_rng
+ (surjective_quotient_mk' _).connectedSpace continuous_coinduced_rng
theorem DenseRange.preconnectedSpace [TopologicalSpace β] [PreconnectedSpace α] {f : α → β}
(hf : DenseRange f) (hc : Continuous f) : PreconnectedSpace β :=
We define Alexandrov-discrete spaces as topological spaces where the intersection of a family of open sets is open.
This PR only gives a minimal API because the goal is to ensure that lemma names like isOpen_sInter
are free to use for AlexandrovDiscrete
. The existing lemmas are getting prefixed by Set.Finite
or suffixed by _of_finite
.
@@ -916,7 +916,7 @@ lemma subsingleton_of_disjoint_isClosed_iUnion_eq_univ [Finite ι]
Subsingleton ι := by
refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨_, h_closed i⟩)
rw [← isClosed_compl_iff, compl_eq_univ_diff, ← h_Union, iUnion_diff]
- refine' isClosed_iUnion (fun j ↦ _)
+ refine' isClosed_iUnion_of_finite (fun j ↦ _)
rcases eq_or_ne i j with rfl | h_ne
· simp
· simpa only [(h_disj h_ne.symm).sdiff_eq_left] using h_closed j
@@ -1522,7 +1522,7 @@ theorem isTotallyDisconnected_of_isTotallySeparated {s : Set α} (H : IsTotallyS
rw [huv.inter_eq, inter_empty]
#align is_totally_disconnected_of_is_totally_separated isTotallyDisconnected_of_isTotallySeparated
-alias isTotallyDisconnected_of_isTotallySeparated ← IsTotallySeparated.isTotallyDisconnected
+alias IsTotallySeparated.isTotallyDisconnected := isTotallyDisconnected_of_isTotallySeparated
#align is_totally_separated.is_totally_disconnected IsTotallySeparated.isTotallyDisconnected
/-- A space is totally separated if any two points can be separated by two disjoint open sets
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -46,7 +46,7 @@ open scoped Classical
universe u v
-variable {α : Type u} {β : Type v} {ι : Type _} {π : ι → Type _} [TopologicalSpace α]
+variable {α : Type u} {β : Type v} {ι : Type*} {π : ι → Type*} [TopologicalSpace α]
{s t u v : Set α}
section Preconnected
@@ -131,7 +131,7 @@ theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x
exact ⟨s, subset_sUnion_of_mem sc, H1 s sc, ys, H2 s sc⟩
#align is_preconnected_sUnion isPreconnected_sUnion
-theorem isPreconnected_iUnion {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
+theorem isPreconnected_iUnion {ι : Sort*} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
#align is_preconnected_Union isPreconnected_iUnion
@@ -169,7 +169,7 @@ theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (·
/-- The biUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
-theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
+theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type*} {t : Set ι} {s : ι → Set α}
(H : ∀ i ∈ t, IsPreconnected (s i))
(K : ∀ i, i ∈ t → ∀ j, j ∈ t → ReflTransGen (fun i j => (s i ∩ s j).Nonempty ∧ i ∈ t) i j) :
IsPreconnected (⋃ n ∈ t, s n) := by
@@ -200,7 +200,7 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
/-- The biUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
-theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
+theorem IsConnected.biUnion_of_reflTransGen {ι : Type*} {t : Set ι} {s : ι → Set α}
(ht : t.Nonempty) (H : ∀ i ∈ t, IsConnected (s i))
(K : ∀ i, i ∈ t → ∀ j, j ∈ t → ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty ∧ i ∈ t) i j) :
IsConnected (⋃ n ∈ t, s n) :=
@@ -211,7 +211,7 @@ theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι
/-- Preconnectedness of the iUnion of a family of preconnected sets
indexed by the vertices of a preconnected graph,
where two vertices are joined when the corresponding sets intersect. -/
-theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
+theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type*} {s : ι → Set α}
(H : ∀ i, IsPreconnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) :
IsPreconnected (⋃ n, s n) := by
@@ -220,7 +220,7 @@ theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
simpa [mem_univ] using K i j
#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGen
-theorem IsConnected.iUnion_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
+theorem IsConnected.iUnion_of_reflTransGen {ι : Type*} [Nonempty ι] {s : ι → Set α}
(H : ∀ i, IsConnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) : IsConnected (⋃ n, s n) :=
⟨nonempty_iUnion.2 <| Nonempty.elim ‹_› fun i : ι => ⟨i, (H _).nonempty⟩,
@@ -808,7 +808,7 @@ theorem preconnectedSpace_iff_connectedComponent :
#align preconnected_space_iff_connected_component preconnectedSpace_iff_connectedComponent
@[simp]
-theorem PreconnectedSpace.connectedComponent_eq_univ {X : Type _} [TopologicalSpace X]
+theorem PreconnectedSpace.connectedComponent_eq_univ {X : Type*} [TopologicalSpace X]
[h : PreconnectedSpace X] (x : X) : connectedComponent x = univ :=
preconnectedSpace_iff_connectedComponent.mp h x
#align preconnected_space.connected_component_eq_univ PreconnectedSpace.connectedComponent_eq_univ
@@ -1241,7 +1241,7 @@ section LocallyConnectedSpace
of connected *open* sets. Note that it is equivalent to each point having a basis of connected
(non necessarily open) sets but in a non-trivial way, so we choose this definition and prove the
equivalence later in `locallyConnectedSpace_iff_connected_basis`. -/
-class LocallyConnectedSpace (α : Type _) [TopologicalSpace α] : Prop where
+class LocallyConnectedSpace (α : Type*) [TopologicalSpace α] : Prop where
/-- Open connected neighborhoods form a basis of the neighborhoods filter. -/
open_connected_basis : ∀ x, (𝓝 x).HasBasis (fun s : Set α => IsOpen s ∧ x ∈ s ∧ IsConnected s) id
#align locally_connected_space LocallyConnectedSpace
@@ -1337,7 +1337,7 @@ theorem locallyConnectedSpace_iff_connected_basis :
exact forall_congr' <| fun x => Filter.hasBasis_self.symm
#align locally_connected_space_iff_connected_basis locallyConnectedSpace_iff_connected_basis
-theorem locallyConnectedSpace_of_connected_bases {ι : Type _} (b : α → ι → Set α) (p : α → ι → Prop)
+theorem locallyConnectedSpace_of_connected_bases {ι : Type*} (b : α → ι → Set α) (p : α → ι → Prop)
(hbasis : ∀ x, (𝓝 x).HasBasis (p x) (b x))
(hconnected : ∀ x i, p x i → IsPreconnected (b x i)) : LocallyConnectedSpace α := by
rw [locallyConnectedSpace_iff_connected_basis]
@@ -1376,7 +1376,7 @@ theorem IsPreconnected.subsingleton [TotallyDisconnectedSpace α] {s : Set α}
TotallyDisconnectedSpace.isTotallyDisconnected_univ s (subset_univ s) h
#align is_preconnected.subsingleton IsPreconnected.subsingleton
-instance Pi.totallyDisconnectedSpace {α : Type _} {β : α → Type _}
+instance Pi.totallyDisconnectedSpace {α : Type*} {β : α → Type*}
[∀ a, TopologicalSpace (β a)] [∀ a, TotallyDisconnectedSpace (β a)] :
TotallyDisconnectedSpace (∀ a : α, β a) :=
⟨fun t _ h2 =>
@@ -1413,7 +1413,7 @@ instance [∀ i, TopologicalSpace (π i)] [∀ i, TotallyDisconnectedSpace (π i
-- porting note: reformulated using `Pairwise`
/-- Let `X` be a topological space, and suppose that for all distinct `x,y ∈ X`, there
is some clopen set `U` such that `x ∈ U` and `y ∉ U`. Then `X` is totally disconnected. -/
-theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
+theorem isTotallyDisconnected_of_clopen_set {X : Type*} [TopologicalSpace X]
(hX : Pairwise fun x y => ∃ (U : Set X), IsClopen U ∧ x ∈ U ∧ y ∉ U) :
IsTotallyDisconnected (Set.univ : Set X) := by
rintro S - hS
@@ -1460,7 +1460,7 @@ theorem totallyDisconnectedSpace_iff_connectedComponent_singleton :
/-- The image of a connected component in a totally disconnected space is a singleton. -/
@[simp]
-theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [TopologicalSpace β]
+theorem Continuous.image_connectedComponent_eq_singleton {β : Type*} [TopologicalSpace β]
[TotallyDisconnectedSpace β] {f : α → β} (h : Continuous f) (a : α) :
f '' connectedComponent a = {f a} :=
(Set.subsingleton_iff_singleton <| mem_image_of_mem f mem_connectedComponent).mp
@@ -1485,7 +1485,7 @@ theorem Embedding.isTotallyDisconnected [TopologicalSpace β] {f : α → β} (h
isTotallyDisconnected_of_image hf.continuous.continuousOn hf.inj h
#align embedding.is_totally_disconnected Embedding.isTotallyDisconnected
-instance Subtype.totallyDisconnectedSpace {α : Type _} {p : α → Prop} [TopologicalSpace α]
+instance Subtype.totallyDisconnectedSpace {α : Type*} {p : α → Prop} [TopologicalSpace α]
[TotallyDisconnectedSpace α] : TotallyDisconnectedSpace (Subtype p) :=
⟨embedding_subtype_val.isTotallyDisconnected
(isTotallyDisconnected_of_totallyDisconnectedSpace _)⟩
@@ -1540,13 +1540,13 @@ instance (priority := 100) TotallySeparatedSpace.totallyDisconnectedSpace (α :
TotallySeparatedSpace.totallyDisconnectedSpace
-- see Note [lower instance priority]
-instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type _) [TopologicalSpace α]
+instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type*) [TopologicalSpace α]
[DiscreteTopology α] : TotallySeparatedSpace α :=
⟨fun _ _ b _ h => ⟨{b}ᶜ, {b}, isOpen_discrete _, isOpen_discrete _, h, rfl,
(compl_union_self _).symm.subset, disjoint_compl_left⟩⟩
#align totally_separated_space.of_discrete TotallySeparatedSpace.of_discrete
-theorem exists_clopen_of_totally_separated {α : Type _} [TopologicalSpace α]
+theorem exists_clopen_of_totally_separated {α : Type*} [TopologicalSpace α]
[TotallySeparatedSpace α] {x y : α} (hxy : x ≠ y) :
∃ U : Set α, IsClopen U ∧ x ∈ U ∧ y ∈ Uᶜ := by
obtain ⟨U, V, hU, hV, Ux, Vy, f, disj⟩ :=
@@ -1562,7 +1562,7 @@ end TotallySeparated
section connectedComponentSetoid
/-- The setoid of connected components of a topological space -/
-def connectedComponentSetoid (α : Type _) [TopologicalSpace α] : Setoid α :=
+def connectedComponentSetoid (α : Type*) [TopologicalSpace α] : Setoid α :=
⟨fun x y => connectedComponent x = connectedComponent y,
⟨fun x => by trivial, fun h1 => h1.symm, fun h1 h2 => h1.trans h2⟩⟩
#align connected_component_setoid connectedComponentSetoid
@@ -1654,7 +1654,7 @@ theorem Continuous.connectedComponentsLift_comp_coe (h : Continuous f) :
rfl
#align continuous.connected_components_lift_comp_coe Continuous.connectedComponentsLift_comp_coe
-theorem connectedComponents_lift_unique' {β : Sort _} {g₁ g₂ : ConnectedComponents α → β}
+theorem connectedComponents_lift_unique' {β : Sort*} {g₁ g₂ : ConnectedComponents α → β}
(hg : g₁ ∘ ((↑) : α → ConnectedComponents α) = g₂ ∘ (↑)) : g₁ = g₂ :=
ConnectedComponents.surjective_coe.injective_comp_right hg
#align connected_components_lift_unique' connectedComponents_lift_unique'
@@ -1691,12 +1691,12 @@ instance ConnectedComponents.totallyDisconnectedSpace :
#align connected_components.totally_disconnected_space ConnectedComponents.totallyDisconnectedSpace
/-- Functoriality of `connectedComponents` -/
-def Continuous.connectedComponentsMap {β : Type _} [TopologicalSpace β] {f : α → β}
+def Continuous.connectedComponentsMap {β : Type*} [TopologicalSpace β] {f : α → β}
(h : Continuous f) : ConnectedComponents α → ConnectedComponents β :=
Continuous.connectedComponentsLift (ConnectedComponents.continuous_coe.comp h)
#align continuous.connected_components_map Continuous.connectedComponentsMap
-theorem Continuous.connectedComponentsMap_continuous {β : Type _} [TopologicalSpace β] {f : α → β}
+theorem Continuous.connectedComponentsMap_continuous {β : Type*} [TopologicalSpace β] {f : α → β}
(h : Continuous f) : Continuous h.connectedComponentsMap :=
Continuous.connectedComponentsLift_continuous (ConnectedComponents.continuous_coe.comp h)
#align continuous.connected_components_map_continuous Continuous.connectedComponentsMap_continuous
@@ -1705,7 +1705,7 @@ end connectedComponentSetoid
/-- A preconnected set `s` has the property that every map to a
discrete space that is continuous on `s` is constant on `s` -/
-theorem IsPreconnected.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopology Y] {s : Set α}
+theorem IsPreconnected.constant {Y : Type*} [TopologicalSpace Y] [DiscreteTopology Y] {s : Set α}
(hs : IsPreconnected s) {f : α → Y} (hf : ContinuousOn f s) {x y : α} (hx : x ∈ s)
(hy : y ∈ s) : f x = f y :=
(hs.image f hf).subsingleton (mem_image_of_mem f hx) (mem_image_of_mem f hy)
@@ -1730,7 +1730,7 @@ theorem isPreconnected_of_forall_constant {s : Set α}
#align is_preconnected_of_forall_constant isPreconnected_of_forall_constant
/-- A `PreconnectedSpace` version of `isPreconnected.constant` -/
-theorem PreconnectedSpace.constant {Y : Type _} [TopologicalSpace Y] [DiscreteTopology Y]
+theorem PreconnectedSpace.constant {Y : Type*} [TopologicalSpace Y] [DiscreteTopology Y]
(hp : PreconnectedSpace α) {f : α → Y} (hf : Continuous f) {x y : α} : f x = f y :=
IsPreconnected.constant hp.isPreconnected_univ (Continuous.continuousOn hf) trivial trivial
#align preconnected_space.constant PreconnectedSpace.constant
@@ -953,6 +953,65 @@ theorem isConnected_iff_connectedSpace {s : Set α} : IsConnected s ↔ Connecte
⟨nonempty_subtype.mp h.2, isPreconnected_iff_preconnectedSpace.mpr h.1⟩⟩
#align is_connected_iff_connected_space isConnected_iff_connectedSpace
+/-- In a preconnected space, given a transitive relation `P`, if `P x y` and `P y x` are true
+for `y` close enough to `x`, then `P x y` holds for all `x, y`. This is a version of the fact
+that, if an equivalence relation has open classes, then it has a single equivalence class. -/
+lemma PreconnectedSpace.induction₂' [PreconnectedSpace α] (P : α → α → Prop)
+ (h : ∀ x, ∀ᶠ y in 𝓝 x, P x y ∧ P y x) (h' : Transitive P) (x y : α) :
+ P x y := by
+ let u := {z | P x z}
+ have A : IsOpen u := by
+ apply isOpen_iff_mem_nhds.2 (fun z hz ↦ ?_)
+ filter_upwards [h z] with t ht
+ exact h' hz ht.1
+ have B : IsClosed u := by
+ apply isClosed_iff_nhds.2 (fun z hz ↦ ?_)
+ rcases hz _ (h z) with ⟨t, ht, h't⟩
+ exact h' h't ht.2
+ have C : u.Nonempty := ⟨x, (mem_of_mem_nhds (h x)).1⟩
+ have D : u = Set.univ := IsClopen.eq_univ ⟨A, B⟩ C
+ show y ∈ u
+ simp [D]
+
+/-- In a preconnected space, if a symmetric transitive relation `P x y` is true for `y` close
+enough to `x`, then it holds for all `x, y`. This is a version of the fact that, if an equivalence
+relation has open classes, then it has a single equivalence class. -/
+lemma PreconnectedSpace.induction₂ [PreconnectedSpace α] (P : α → α → Prop)
+ (h : ∀ x, ∀ᶠ y in 𝓝 x, P x y) (h' : Transitive P) (h'' : Symmetric P) (x y : α) :
+ P x y := by
+ refine PreconnectedSpace.induction₂' P (fun z ↦ ?_) h' x y
+ filter_upwards [h z] with a ha
+ refine ⟨ha, h'' ha⟩
+
+/-- In a preconnected set, given a transitive relation `P`, if `P x y` and `P y x` are true
+for `y` close enough to `x`, then `P x y` holds for all `x, y`. This is a version of the fact
+that, if an equivalence relation has open classes, then it has a single equivalence class. -/
+lemma IsPreconnected.induction₂' {s : Set α} (hs : IsPreconnected s) (P : α → α → Prop)
+ (h : ∀ x ∈ s, ∀ᶠ y in 𝓝[s] x, P x y ∧ P y x)
+ (h' : ∀ x y z, x ∈ s → y ∈ s → z ∈ s → P x y → P y z → P x z)
+ {x y : α} (hx : x ∈ s) (hy : y ∈ s) : P x y := by
+ let Q : s → s → Prop := fun a b ↦ P a b
+ show Q ⟨x, hx⟩ ⟨y, hy⟩
+ have : PreconnectedSpace s := Subtype.preconnectedSpace hs
+ apply PreconnectedSpace.induction₂'
+ · rintro ⟨x, hx⟩
+ have Z := h x hx
+ rwa [nhdsWithin_eq_map_subtype_coe] at Z
+ · rintro ⟨a, ha⟩ ⟨b, hb⟩ ⟨c, hc⟩ hab hbc
+ exact h' a b c ha hb hc hab hbc
+
+/-- In a preconnected set, if a symmetric transitive relation `P x y` is true for `y` close
+enough to `x`, then it holds for all `x, y`. This is a version of the fact that, if an equivalence
+relation has open classes, then it has a single equivalence class. -/
+lemma IsPreconnected.induction₂ {s : Set α} (hs : IsPreconnected s) (P : α → α → Prop)
+ (h : ∀ x ∈ s, ∀ᶠ y in 𝓝[s] x, P x y)
+ (h' : ∀ x y z, x ∈ s → y ∈ s → z ∈ s → P x y → P y z → P x z)
+ (h'' : ∀ x y, x ∈ s → y ∈ s → P x y → P y x)
+ {x y : α} (hx : x ∈ s) (hy : y ∈ s) : P x y := by
+ apply hs.induction₂' P (fun z hz ↦ ?_) h' hx hy
+ filter_upwards [h z hz, self_mem_nhdsWithin] with a ha h'a
+ exact ⟨ha, h'' z a hz h'a ha⟩
+
/-- A set `s` is preconnected if and only if for every cover by two open sets that are disjoint on
`s`, it is contained in one of the two covering sets. -/
theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
@@ -753,6 +753,13 @@ theorem isConnected_univ [ConnectedSpace α] : IsConnected (univ : Set α) :=
⟨univ_nonempty, isPreconnected_univ⟩
#align is_connected_univ isConnected_univ
+lemma preconnectedSpace_iff_univ : PreconnectedSpace α ↔ IsPreconnected (univ : Set α) :=
+ ⟨fun h ↦ h.1, fun h ↦ ⟨h⟩⟩
+
+lemma connectedSpace_iff_univ : ConnectedSpace α ↔ IsConnected (univ : Set α) :=
+ ⟨fun h ↦ ⟨univ_nonempty, h.1.1⟩,
+ fun h ↦ ConnectedSpace.mk (toPreconnectedSpace := ⟨h.2⟩) ⟨h.1.some⟩⟩
+
theorem isPreconnected_range [TopologicalSpace β] [PreconnectedSpace α] {f : α → β}
(h : Continuous f) : IsPreconnected (range f) :=
@image_univ _ _ f ▸ isPreconnected_univ.image _ h.continuousOn
@@ -763,6 +770,15 @@ theorem isConnected_range [TopologicalSpace β] [ConnectedSpace α] {f : α →
⟨range_nonempty f, isPreconnected_range h⟩
#align is_connected_range isConnected_range
+theorem Function.Surjective.connectedSpace [ConnectedSpace α] [TopologicalSpace β]
+ {f : α → β} (hf : Surjective f) (hf' : Continuous f) : ConnectedSpace β := by
+ rw [connectedSpace_iff_univ, ← hf.range_eq]
+ exact isConnected_range hf'
+
+instance Quotient.instConnectedSpace {s : Setoid α} [ConnectedSpace α] :
+ ConnectedSpace (Quotient s) :=
+ (surjective_quotient_mk _).connectedSpace continuous_coinduced_rng
+
theorem DenseRange.preconnectedSpace [TopologicalSpace β] [PreconnectedSpace α] {f : α → β}
(hf : DenseRange f) (hc : Continuous f) : PreconnectedSpace β :=
⟨hf.closure_eq ▸ (isPreconnected_range hc).closure⟩
@@ -2,16 +2,13 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.connected
-! leanprover-community/mathlib commit d101e93197bb5f6ea89bd7ba386b7f7dff1f3903
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Set.BoolIndicator
import Mathlib.Order.SuccPred.Relation
import Mathlib.Topology.SubsetProperties
+#align_import topology.connected from "leanprover-community/mathlib"@"d101e93197bb5f6ea89bd7ba386b7f7dff1f3903"
+
/-!
# Connected subsets of topological spaces
@@ -863,6 +863,53 @@ theorem IsClopen.eq_univ [PreconnectedSpace α] {s : Set α} (h' : IsClopen s) (
(isClopen_iff.mp h').resolve_left h.ne_empty
#align is_clopen.eq_univ IsClopen.eq_univ
+section disjoint_subsets
+
+variable [PreconnectedSpace α]
+ {s : ι → Set α} (h_nonempty : ∀ i, (s i).Nonempty) (h_disj : Pairwise (Disjoint on s))
+
+/-- In a preconnected space, any disjoint family of non-empty clopen subsets has at most one
+element. -/
+lemma subsingleton_of_disjoint_isClopen
+ (h_clopen : ∀ i, IsClopen (s i)) :
+ Subsingleton ι := by
+ replace h_nonempty : ∀ i, s i ≠ ∅ := by intro i; rw [← nonempty_iff_ne_empty]; exact h_nonempty i
+ rw [← not_nontrivial_iff_subsingleton]
+ by_contra contra
+ obtain ⟨i, j, h_ne⟩ := contra
+ replace h_ne : s i ∩ s j = ∅ := by
+ simpa only [← bot_eq_empty, eq_bot_iff, ← inf_eq_inter, ← disjoint_iff_inf_le] using h_disj h_ne
+ cases' isClopen_iff.mp (h_clopen i) with hi hi
+ · exact h_nonempty i hi
+ · rw [hi, univ_inter] at h_ne
+ exact h_nonempty j h_ne
+
+/-- In a preconnected space, any disjoint cover by non-empty open subsets has at most one
+element. -/
+lemma subsingleton_of_disjoint_isOpen_iUnion_eq_univ
+ (h_open : ∀ i, IsOpen (s i)) (h_Union : ⋃ i, s i = univ) :
+ Subsingleton ι := by
+ refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨h_open i, _⟩)
+ rw [← isOpen_compl_iff, compl_eq_univ_diff, ← h_Union, iUnion_diff]
+ refine' isOpen_iUnion (fun j ↦ _)
+ rcases eq_or_ne i j with rfl | h_ne
+ · simp
+ · simpa only [(h_disj h_ne.symm).sdiff_eq_left] using h_open j
+
+/-- In a preconnected space, any finite disjoint cover by non-empty closed subsets has at most one
+element. -/
+lemma subsingleton_of_disjoint_isClosed_iUnion_eq_univ [Finite ι]
+ (h_closed : ∀ i, IsClosed (s i)) (h_Union : ⋃ i, s i = univ) :
+ Subsingleton ι := by
+ refine' subsingleton_of_disjoint_isClopen h_nonempty h_disj (fun i ↦ ⟨_, h_closed i⟩)
+ rw [← isClosed_compl_iff, compl_eq_univ_diff, ← h_Union, iUnion_diff]
+ refine' isClosed_iUnion (fun j ↦ _)
+ rcases eq_or_ne i j with rfl | h_ne
+ · simp
+ · simpa only [(h_disj h_ne.symm).sdiff_eq_left] using h_closed j
+
+end disjoint_subsets
+
theorem frontier_eq_empty_iff [PreconnectedSpace α] {s : Set α} :
frontier s = ∅ ↔ s = ∅ ∨ s = univ :=
isClopen_iff_frontier_eq_empty.symm.trans isClopen_iff
@@ -1146,8 +1146,7 @@ theorem locallyConnectedSpace_iff_open_connected_subsets :
· exact fun h => ⟨fun U => ⟨fun hU =>
let ⟨V, hVU, hV⟩ := h U hU
⟨V, hV, hVU⟩, fun ⟨V, ⟨hV, hxV, _⟩, hVU⟩ => mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩
-#align locally_connected_space_iff_open_connected_subsets
- locallyConnectedSpace_iff_open_connected_subsets
+#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsets
/-- A space with discrete topology is a locally connected space. -/
instance (priority := 100) DiscreteTopology.toLocallyConnectedSpace (α) [TopologicalSpace α]
@@ -1196,8 +1195,7 @@ theorem locallyConnectedSpace_iff_connectedComponentIn_open :
(connectedComponentIn_subset _ _).trans interior_subset, h _ isOpen_interior x _,
mem_connectedComponentIn _, isConnected_connectedComponentIn_iff.mpr _⟩ <;>
exact mem_interior_iff_mem_nhds.mpr hU
-#align locally_connected_space_iff_connected_component_in_open
- locallyConnectedSpace_iff_connectedComponentIn_open
+#align locally_connected_space_iff_connected_component_in_open locallyConnectedSpace_iff_connectedComponentIn_open
theorem locallyConnectedSpace_iff_connected_subsets :
LocallyConnectedSpace α ↔ ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ V ∈ 𝓝 x, IsPreconnected V ∧ V ⊆ U := by
@@ -1348,14 +1346,12 @@ theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [Topologi
f '' connectedComponent a = {f a} :=
(Set.subsingleton_iff_singleton <| mem_image_of_mem f mem_connectedComponent).mp
(isPreconnected_connectedComponent.image f h.continuousOn).subsingleton
-#align continuous.image_connected_component_eq_singleton
- Continuous.image_connectedComponent_eq_singleton
+#align continuous.image_connected_component_eq_singleton Continuous.image_connectedComponent_eq_singleton
theorem isTotallyDisconnected_of_totallyDisconnectedSpace [TotallyDisconnectedSpace α] (s : Set α) :
IsTotallyDisconnected s := fun t _ ht =>
TotallyDisconnectedSpace.isTotallyDisconnected_univ _ t.subset_univ ht
-#align is_totally_disconnected_of_totally_disconnected_space
- isTotallyDisconnected_of_totallyDisconnectedSpace
+#align is_totally_disconnected_of_totally_disconnected_space isTotallyDisconnected_of_totallyDisconnectedSpace
theorem isTotallyDisconnected_of_image [TopologicalSpace β] {f : α → β} (hf : ContinuousOn f s)
(hf' : Injective f) (h : IsTotallyDisconnected (f '' s)) : IsTotallyDisconnected s :=
@@ -1016,7 +1016,7 @@ theorem connectedComponent_subset_iInter_clopen {x : α} :
/-- A clopen set is the union of its connected components. -/
theorem IsClopen.biUnion_connectedComponent_eq {Z : Set α} (h : IsClopen Z) :
- (⋃ x ∈ Z, connectedComponent x) = Z :=
+ ⋃ x ∈ Z, connectedComponent x = Z :=
Subset.antisymm (iUnion₂_subset fun _ => h.connectedComponent_subset) fun _ h =>
mem_iUnion₂_of_mem h mem_connectedComponent
#align is_clopen.bUnion_connected_component_eq IsClopen.biUnion_connectedComponent_eq
Motivated by a theorem in the Brouwer Fixed Point project
@@ -827,6 +827,19 @@ instance (priority := 100) IrreducibleSpace.connectedSpace (α : Type u) [Topolo
[IrreducibleSpace α] : ConnectedSpace α where toNonempty := IrreducibleSpace.toNonempty
#align irreducible_space.connected_space IrreducibleSpace.connectedSpace
+/-- A continuous map from a connected space to a disjoint union `Σ i, π i` can be lifted to one of
+the components `π i`. See also `ContinuousMap.exists_lift_sigma` for a version with bundled
+`ContinuousMap`s. -/
+theorem Continuous.exists_lift_sigma [ConnectedSpace α] [∀ i, TopologicalSpace (π i)]
+ {f : α → Σ i, π i} (hf : Continuous f) :
+ ∃ (i : ι) (g : α → π i), Continuous g ∧ f = Sigma.mk i ∘ g := by
+ obtain ⟨i, hi⟩ : ∃ i, range f ⊆ range (.mk i)
+ · rcases Sigma.isConnected_iff.1 (isConnected_range hf) with ⟨i, s, -, hs⟩
+ exact ⟨i, hs.trans_subset (image_subset_range _ _)⟩
+ rcases range_subset_range_iff_exists_comp.1 hi with ⟨g, rfl⟩
+ refine ⟨i, g, ?_, rfl⟩
+ rwa [← embedding_sigmaMk.continuous_iff] at hf
+
theorem nonempty_inter [PreconnectedSpace α] {s t : Set α} :
IsOpen s → IsOpen t → s ∪ t = univ → s.Nonempty → t.Nonempty → (s ∩ t).Nonempty := by
simpa only [univ_inter, univ_subset_iff] using @PreconnectedSpace.isPreconnected_univ α _ _ s t
@@ -454,7 +454,7 @@ theorem IsPreconnected.subset_clopen {s t : Set α} (hs : IsPreconnected s) (ht
contained in `u`, then the whole set `s` is contained in `u`. -/
theorem IsPreconnected.subset_of_closure_inter_subset (hs : IsPreconnected s) (hu : IsOpen u)
(h'u : (s ∩ u).Nonempty) (h : closure u ∩ s ⊆ u) : s ⊆ u := by
- have A : s ⊆ u ∪ closure uᶜ := by
+ have A : s ⊆ u ∪ (closure u)ᶜ := by
intro x hx
by_cases xu : x ∈ u
· exact Or.inl xu
@@ -1292,7 +1292,7 @@ theorem isTotallyDisconnected_of_clopen_set {X : Type _} [TopologicalSpace X]
rcases h_contra with ⟨x, hx, y, hy, hxy⟩
obtain ⟨U, h_clopen, hxU, hyU⟩ := hX hxy
specialize
- hS U (Uᶜ) h_clopen.1 h_clopen.compl.1 (fun a _ => em (a ∈ U)) ⟨x, hx, hxU⟩ ⟨y, hy, hyU⟩
+ hS U Uᶜ h_clopen.1 h_clopen.compl.1 (fun a _ => em (a ∈ U)) ⟨x, hx, hxU⟩ ⟨y, hy, hyU⟩
rw [inter_compl_self, Set.inter_empty] at hS
exact Set.not_nonempty_empty hS
#align is_totally_disconnected_of_clopen_set isTotallyDisconnected_of_clopen_set
Currently, (for both Set
and Finset
) insert_subset
is an iff
lemma stating that insert a s ⊆ t
if and only if a ∈ t
and s ⊆ t
. For both types, this PR renames this lemma to insert_subset_iff
, and adds an insert_subset
lemma that gives the implication just in the reverse direction : namely theorem insert_subset (ha : a ∈ t) (hs : s ⊆ t) : insert a s ⊆ t
.
This both aligns the naming with union_subset
and union_subset_iff
, and removes the need for the awkward insert_subset.mpr ⟨_,_⟩
idiom. It touches a lot of files (too many to list), but in a trivial way.
@@ -186,7 +186,8 @@ theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s :
exact H i hi
case tail j k _ hjk ih =>
obtain ⟨p, hpt, hip, hjp, hp⟩ := ih hjk.2
- refine ⟨insert k p, insert_subset.mpr ⟨hj, hpt⟩, mem_insert_of_mem k hip, mem_insert k p, ?_⟩
+ refine ⟨insert k p, insert_subset_iff.mpr ⟨hj, hpt⟩, mem_insert_of_mem k hip,
+ mem_insert k p, ?_⟩
rw [biUnion_insert]
refine (H k hj).union' (hjk.1.mono ?_) hp
rw [inter_comm]
@@ -720,7 +721,8 @@ theorem Continuous.mapsTo_connectedComponent [TopologicalSpace β] {f : α →
theorem irreducibleComponent_subset_connectedComponent {x : α} :
irreducibleComponent x ⊆ connectedComponent x :=
isIrreducible_irreducibleComponent.isConnected.subset_connectedComponent mem_irreducibleComponent
-#align irreducible_component_subset_connected_component irreducibleComponent_subset_connectedComponent
+#align irreducible_component_subset_connected_component
+ irreducibleComponent_subset_connectedComponent
@[mono]
theorem connectedComponentIn_mono (x : α) {F G : Set α} (h : F ⊆ G) :
@@ -984,7 +986,8 @@ theorem isPreconnected_iff_subset_of_fully_disjoint_closed {s : Set α} (hs : Is
· rw [← inter_distrib_right]
exact subset_inter hss Subset.rfl
· rwa [disjoint_iff_inter_eq_empty, ← inter_inter_distrib_right, inter_comm]
-#align is_preconnected_iff_subset_of_fully_disjoint_closed isPreconnected_iff_subset_of_fully_disjoint_closed
+#align is_preconnected_iff_subset_of_fully_disjoint_closed
+ isPreconnected_iff_subset_of_fully_disjoint_closed
theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s) :
connectedComponent x ⊆ s :=
@@ -1115,7 +1118,8 @@ theorem locallyConnectedSpace_iff_open_connected_basis :
LocallyConnectedSpace α ↔
∀ x, (𝓝 x).HasBasis (fun s : Set α => IsOpen s ∧ x ∈ s ∧ IsConnected s) id :=
⟨@LocallyConnectedSpace.open_connected_basis _ _, LocallyConnectedSpace.mk⟩
-#align locally_connected_space_iff_open_connected_basis locallyConnectedSpace_iff_open_connected_basis
+#align locally_connected_space_iff_open_connected_basis
+ locallyConnectedSpace_iff_open_connected_basis
theorem locallyConnectedSpace_iff_open_connected_subsets :
LocallyConnectedSpace α ↔
@@ -1129,7 +1133,8 @@ theorem locallyConnectedSpace_iff_open_connected_subsets :
· exact fun h => ⟨fun U => ⟨fun hU =>
let ⟨V, hVU, hV⟩ := h U hU
⟨V, hV, hVU⟩, fun ⟨V, ⟨hV, hxV, _⟩, hVU⟩ => mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩
-#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsets
+#align locally_connected_space_iff_open_connected_subsets
+ locallyConnectedSpace_iff_open_connected_subsets
/-- A space with discrete topology is a locally connected space. -/
instance (priority := 100) DiscreteTopology.toLocallyConnectedSpace (α) [TopologicalSpace α]
@@ -1178,7 +1183,8 @@ theorem locallyConnectedSpace_iff_connectedComponentIn_open :
(connectedComponentIn_subset _ _).trans interior_subset, h _ isOpen_interior x _,
mem_connectedComponentIn _, isConnected_connectedComponentIn_iff.mpr _⟩ <;>
exact mem_interior_iff_mem_nhds.mpr hU
-#align locally_connected_space_iff_connected_component_in_open locallyConnectedSpace_iff_connectedComponentIn_open
+#align locally_connected_space_iff_connected_component_in_open
+ locallyConnectedSpace_iff_connectedComponentIn_open
theorem locallyConnectedSpace_iff_connected_subsets :
LocallyConnectedSpace α ↔ ∀ (x : α), ∀ U ∈ 𝓝 x, ∃ V ∈ 𝓝 x, IsPreconnected V ∧ V ⊆ U := by
@@ -1304,7 +1310,8 @@ theorem totallyDisconnectedSpace_iff_connectedComponent_subsingleton :
rcases eq_empty_or_nonempty s with (rfl | ⟨x, x_in⟩)
· exact subsingleton_empty
· exact (h x).anti (hs.subset_connectedComponent x_in)
-#align totally_disconnected_space_iff_connected_component_subsingleton totallyDisconnectedSpace_iff_connectedComponent_subsingleton
+#align totally_disconnected_space_iff_connected_component_subsingleton
+ totallyDisconnectedSpace_iff_connectedComponent_subsingleton
/-- A space is totally disconnected iff its connected components are singletons. -/
theorem totallyDisconnectedSpace_iff_connectedComponent_singleton :
@@ -1313,7 +1320,8 @@ theorem totallyDisconnectedSpace_iff_connectedComponent_singleton :
refine forall_congr' fun x => ?_
rw [subsingleton_iff_singleton]
exact mem_connectedComponent
-#align totally_disconnected_space_iff_connected_component_singleton totallyDisconnectedSpace_iff_connectedComponent_singleton
+#align totally_disconnected_space_iff_connected_component_singleton
+ totallyDisconnectedSpace_iff_connectedComponent_singleton
@[simp] theorem connectedComponent_eq_singleton [TotallyDisconnectedSpace α] (x : α) :
connectedComponent x = {x} :=
@@ -1327,12 +1335,14 @@ theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [Topologi
f '' connectedComponent a = {f a} :=
(Set.subsingleton_iff_singleton <| mem_image_of_mem f mem_connectedComponent).mp
(isPreconnected_connectedComponent.image f h.continuousOn).subsingleton
-#align continuous.image_connected_component_eq_singleton Continuous.image_connectedComponent_eq_singleton
+#align continuous.image_connected_component_eq_singleton
+ Continuous.image_connectedComponent_eq_singleton
theorem isTotallyDisconnected_of_totallyDisconnectedSpace [TotallyDisconnectedSpace α] (s : Set α) :
IsTotallyDisconnected s := fun t _ ht =>
TotallyDisconnectedSpace.isTotallyDisconnected_univ _ t.subset_univ ht
-#align is_totally_disconnected_of_totally_disconnected_space isTotallyDisconnected_of_totallyDisconnectedSpace
+#align is_totally_disconnected_of_totally_disconnected_space
+ isTotallyDisconnected_of_totallyDisconnectedSpace
theorem isTotallyDisconnected_of_image [TopologicalSpace β] {f : α → β} (hf : ContinuousOn f s)
(hf' : Injective f) (h : IsTotallyDisconnected (f '' s)) : IsTotallyDisconnected s :=
@@ -1398,7 +1408,8 @@ class TotallySeparatedSpace (α : Type u) [TopologicalSpace α] : Prop where
instance (priority := 100) TotallySeparatedSpace.totallyDisconnectedSpace (α : Type u)
[TopologicalSpace α] [TotallySeparatedSpace α] : TotallyDisconnectedSpace α :=
⟨TotallySeparatedSpace.isTotallySeparated_univ.isTotallyDisconnected⟩
-#align totally_separated_space.totally_disconnected_space TotallySeparatedSpace.totallyDisconnectedSpace
+#align totally_separated_space.totally_disconnected_space
+ TotallySeparatedSpace.totallyDisconnectedSpace
-- see Note [lower instance priority]
instance (priority := 100) TotallySeparatedSpace.of_discrete (α : Type _) [TopologicalSpace α]
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -681,7 +681,7 @@ theorem connectedComponent_eq_iff_mem {x y : α} :
theorem connectedComponentIn_eq {x y : α} {F : Set α} (h : y ∈ connectedComponentIn F x) :
connectedComponentIn F x = connectedComponentIn F y := by
have hx : x ∈ F := connectedComponentIn_nonempty_iff.mp ⟨y, h⟩
- simp_rw [connectedComponentIn_eq_image hx] at h⊢
+ simp_rw [connectedComponentIn_eq_image hx] at h ⊢
obtain ⟨⟨y, hy⟩, h2y, rfl⟩ := h
simp_rw [connectedComponentIn_eq_image hy, connectedComponent_eq h2y]
#align connected_component_in_eq connectedComponentIn_eq
@@ -1435,7 +1435,7 @@ def ConnectedComponents (α : Type u) [TopologicalSpace α] :=
namespace ConnectedComponents
-/-- Coersion from a topological space to the set of connected components of this space. -/
+/-- Coercion from a topological space to the set of connected components of this space. -/
def mk : α → ConnectedComponents α := Quotient.mk''
instance : CoeTC α (ConnectedComponents α) := ⟨mk⟩
@@ -120,7 +120,7 @@ theorem isPreconnected_of_forall {s : Set α} (x : α)
/-- If any two points of a set are contained in a preconnected subset,
then the original set is preconnected as well. -/
theorem isPreconnected_of_forall_pair {s : Set α}
- (H : ∀ x, x ∈ s → ∀ y, y ∈ s → ∃ t, t ⊆ s ∧ x ∈ t ∧ y ∈ t ∧ IsPreconnected t) :
+ (H : ∀ x ∈ s, ∀ y ∈ s, ∃ t, t ⊆ s ∧ x ∈ t ∧ y ∈ t ∧ IsPreconnected t) :
IsPreconnected s := by
rcases eq_empty_or_nonempty s with (rfl | ⟨x, hx⟩)
exacts [isPreconnected_empty, isPreconnected_of_forall x fun y => H x hx y]
@@ -283,8 +283,8 @@ theorem IsConnected.biUnion_of_chain {s : β → Set α} {t : Set β} (hnt : t.N
end SuccOrder
-/-- Theorem of bark and tree: if a set is within a (pre)connected set
-and its closure, then it is (pre)connected as well. -/
+/-- Theorem of bark and tree: if a set is within a preconnected set and its closure, then it is
+preconnected as well. See also `IsConnected.subset_closure`. -/
protected theorem IsPreconnected.subset_closure {s : Set α} {t : Set α} (H : IsPreconnected s)
(Kst : s ⊆ t) (Ktcs : t ⊆ closure s) : IsPreconnected t :=
fun u v hu hv htuv ⟨_y, hyt, hyu⟩ ⟨_z, hzt, hzv⟩ =>
@@ -294,22 +294,25 @@ protected theorem IsPreconnected.subset_closure {s : Set α} {t : Set α} (H : I
⟨r, Kst hrs, hruv⟩
#align is_preconnected.subset_closure IsPreconnected.subset_closure
+/-- Theorem of bark and tree: if a set is within a connected set and its closure, then it is
+connected as well. See also `IsPreconnected.subset_closure`. -/
protected theorem IsConnected.subset_closure {s : Set α} {t : Set α} (H : IsConnected s)
(Kst : s ⊆ t) (Ktcs : t ⊆ closure s) : IsConnected t :=
⟨Nonempty.mono Kst H.left, IsPreconnected.subset_closure H.right Kst Ktcs⟩
#align is_connected.subset_closure IsConnected.subset_closure
-/-- The closure of a (pre)connected set is (pre)connected as well. -/
+/-- The closure of a preconnected set is preconnected as well. -/
protected theorem IsPreconnected.closure {s : Set α} (H : IsPreconnected s) :
IsPreconnected (closure s) :=
IsPreconnected.subset_closure H subset_closure Subset.rfl
#align is_preconnected.closure IsPreconnected.closure
+/-- The closure of a connected set is connected as well. -/
protected theorem IsConnected.closure {s : Set α} (H : IsConnected s) : IsConnected (closure s) :=
IsConnected.subset_closure H subset_closure <| Subset.rfl
#align is_connected.closure IsConnected.closure
-/-- The image of a (pre)connected set is (pre)connected as well. -/
+/-- The image of a preconnected set is preconnected as well. -/
protected theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : IsPreconnected s)
(f : α → β) (hf : ContinuousOn f s) : IsPreconnected (f '' s) := by
-- Unfold/destruct definitions in hypotheses
@@ -331,6 +334,7 @@ protected theorem IsPreconnected.image [TopologicalSpace β] {s : Set α} (H : I
exact ⟨f z, ⟨z, hz.1.2, rfl⟩, hz.1.1, hz.2.1⟩
#align is_preconnected.image IsPreconnected.image
+/-- The image of a connected set is connected as well. -/
protected theorem IsConnected.image [TopologicalSpace β] {s : Set α} (H : IsConnected s) (f : α → β)
(hf : ContinuousOn f s) : IsConnected (f '' s) :=
⟨nonempty_image_iff.mpr H.nonempty, H.isPreconnected.image f hf⟩
The main breaking change is that tac <;> [t1, t2]
is now written tac <;> [t1; t2]
, to avoid clashing with tactics like cases
and use
that take comma-separated lists.
@@ -836,7 +836,7 @@ theorem isClopen_iff [PreconnectedSpace α] {s : Set α} : IsClopen s ↔ s =
nonempty_inter hs.1 hs.2.isOpen_compl (union_compl_self s) (nonempty_iff_ne_empty.2 h1.1)
(nonempty_iff_ne_empty.2 h1.2)
h3 h2,
- by rintro (rfl | rfl) <;> [exact isClopen_empty, exact isClopen_univ]⟩
+ by rintro (rfl | rfl) <;> [exact isClopen_empty; exact isClopen_univ]⟩
#align is_clopen_iff isClopen_iff
theorem IsClopen.eq_univ [PreconnectedSpace α] {s : Set α} (h' : IsClopen s) (h : s.Nonempty) :
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -127,21 +127,21 @@ theorem isPreconnected_of_forall_pair {s : Set α}
#align is_preconnected_of_forall_pair isPreconnected_of_forall_pair
/-- A union of a family of preconnected sets with a common point is preconnected as well. -/
-theorem isPreconnected_unionₛ (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x ∈ s)
+theorem isPreconnected_sUnion (x : α) (c : Set (Set α)) (H1 : ∀ s ∈ c, x ∈ s)
(H2 : ∀ s ∈ c, IsPreconnected s) : IsPreconnected (⋃₀ c) := by
apply isPreconnected_of_forall x
rintro y ⟨s, sc, ys⟩
- exact ⟨s, subset_unionₛ_of_mem sc, H1 s sc, ys, H2 s sc⟩
-#align is_preconnected_sUnion isPreconnected_unionₛ
+ exact ⟨s, subset_sUnion_of_mem sc, H1 s sc, ys, H2 s sc⟩
+#align is_preconnected_sUnion isPreconnected_sUnion
-theorem isPreconnected_unionᵢ {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
+theorem isPreconnected_iUnion {ι : Sort _} {s : ι → Set α} (h₁ : (⋂ i, s i).Nonempty)
(h₂ : ∀ i, IsPreconnected (s i)) : IsPreconnected (⋃ i, s i) :=
- Exists.elim h₁ fun f hf => isPreconnected_unionₛ f _ hf (forall_range_iff.2 h₂)
-#align is_preconnected_Union isPreconnected_unionᵢ
+ Exists.elim h₁ fun f hf => isPreconnected_sUnion f _ hf (forall_range_iff.2 h₂)
+#align is_preconnected_Union isPreconnected_iUnion
theorem IsPreconnected.union (x : α) {s t : Set α} (H1 : x ∈ s) (H2 : x ∈ t) (H3 : IsPreconnected s)
(H4 : IsPreconnected t) : IsPreconnected (s ∪ t) :=
- unionₛ_pair s t ▸ isPreconnected_unionₛ x {s, t} (by rintro r (rfl | rfl | h) <;> assumption)
+ sUnion_pair s t ▸ isPreconnected_sUnion x {s, t} (by rintro r (rfl | rfl | h) <;> assumption)
(by rintro r (rfl | rfl | h) <;> assumption)
#align is_preconnected.union IsPreconnected.union
@@ -159,20 +159,20 @@ theorem IsConnected.union {s t : Set α} (H : (s ∩ t).Nonempty) (Hs : IsConnec
Ht.isPreconnected
#align is_connected.union IsConnected.union
-/-- The directed unionₛ of a set S of preconnected subsets is preconnected. -/
-theorem IsPreconnected.unionₛ_directed {S : Set (Set α)} (K : DirectedOn (· ⊆ ·) S)
+/-- The directed sUnion of a set S of preconnected subsets is preconnected. -/
+theorem IsPreconnected.sUnion_directed {S : Set (Set α)} (K : DirectedOn (· ⊆ ·) S)
(H : ∀ s ∈ S, IsPreconnected s) : IsPreconnected (⋃₀ S) := by
rintro u v hu hv Huv ⟨a, ⟨s, hsS, has⟩, hau⟩ ⟨b, ⟨t, htS, hbt⟩, hbv⟩
obtain ⟨r, hrS, hsr, htr⟩ : ∃ r ∈ S, s ⊆ r ∧ t ⊆ r := K s hsS t htS
have Hnuv : (r ∩ (u ∩ v)).Nonempty :=
- H _ hrS u v hu hv ((subset_unionₛ_of_mem hrS).trans Huv) ⟨a, hsr has, hau⟩ ⟨b, htr hbt, hbv⟩
- have Kruv : r ∩ (u ∩ v) ⊆ ⋃₀ S ∩ (u ∩ v) := inter_subset_inter_left _ (subset_unionₛ_of_mem hrS)
+ H _ hrS u v hu hv ((subset_sUnion_of_mem hrS).trans Huv) ⟨a, hsr has, hau⟩ ⟨b, htr hbt, hbv⟩
+ have Kruv : r ∩ (u ∩ v) ⊆ ⋃₀ S ∩ (u ∩ v) := inter_subset_inter_left _ (subset_sUnion_of_mem hrS)
exact Hnuv.mono Kruv
-#align is_preconnected.sUnion_directed IsPreconnected.unionₛ_directed
+#align is_preconnected.sUnion_directed IsPreconnected.sUnion_directed
-/-- The bunionᵢ of a family of preconnected sets is preconnected if the graph determined by
+/-- The biUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
-theorem IsPreconnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
+theorem IsPreconnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
(H : ∀ i ∈ t, IsPreconnected (s i))
(K : ∀ i, i ∈ t → ∀ j, j ∈ t → ReflTransGen (fun i j => (s i ∩ s j).Nonempty ∧ i ∈ t) i j) :
IsPreconnected (⋃ n ∈ t, s n) := by
@@ -182,52 +182,52 @@ theorem IsPreconnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s :
induction h
case refl =>
refine ⟨{i}, singleton_subset_iff.mpr hi, mem_singleton i, mem_singleton i, ?_⟩
- rw [bunionᵢ_singleton]
+ rw [biUnion_singleton]
exact H i hi
case tail j k _ hjk ih =>
obtain ⟨p, hpt, hip, hjp, hp⟩ := ih hjk.2
refine ⟨insert k p, insert_subset.mpr ⟨hj, hpt⟩, mem_insert_of_mem k hip, mem_insert k p, ?_⟩
- rw [bunionᵢ_insert]
+ rw [biUnion_insert]
refine (H k hj).union' (hjk.1.mono ?_) hp
rw [inter_comm]
- exact inter_subset_inter_right _ (subset_bunionᵢ_of_mem hjp)
+ exact inter_subset_inter_right _ (subset_biUnion_of_mem hjp)
refine' isPreconnected_of_forall_pair _
intro x hx y hy
- obtain ⟨i : ι, hi : i ∈ t, hxi : x ∈ s i⟩ := mem_unionᵢ₂.1 hx
- obtain ⟨j : ι, hj : j ∈ t, hyj : y ∈ s j⟩ := mem_unionᵢ₂.1 hy
+ obtain ⟨i : ι, hi : i ∈ t, hxi : x ∈ s i⟩ := mem_iUnion₂.1 hx
+ obtain ⟨j : ι, hj : j ∈ t, hyj : y ∈ s j⟩ := mem_iUnion₂.1 hy
obtain ⟨p, hpt, hip, hjp, hp⟩ := P i hi j hj (K i hi j hj)
- exact ⟨⋃ j ∈ p, s j, bunionᵢ_subset_bunionᵢ_left hpt, mem_bunionᵢ hip hxi,
- mem_bunionᵢ hjp hyj, hp⟩
-#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.bunionᵢ_of_reflTransGen
+ exact ⟨⋃ j ∈ p, s j, biUnion_subset_biUnion_left hpt, mem_biUnion hip hxi,
+ mem_biUnion hjp hyj, hp⟩
+#align is_preconnected.bUnion_of_refl_trans_gen IsPreconnected.biUnion_of_reflTransGen
-/-- The bunionᵢ of a family of preconnected sets is preconnected if the graph determined by
+/-- The biUnion of a family of preconnected sets is preconnected if the graph determined by
whether two sets intersect is preconnected. -/
-theorem IsConnected.bunionᵢ_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
+theorem IsConnected.biUnion_of_reflTransGen {ι : Type _} {t : Set ι} {s : ι → Set α}
(ht : t.Nonempty) (H : ∀ i ∈ t, IsConnected (s i))
(K : ∀ i, i ∈ t → ∀ j, j ∈ t → ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty ∧ i ∈ t) i j) :
IsConnected (⋃ n ∈ t, s n) :=
- ⟨nonempty_bunionᵢ.2 <| ⟨ht.some, ht.some_mem, (H _ ht.some_mem).nonempty⟩,
- IsPreconnected.bunionᵢ_of_reflTransGen (fun i hi => (H i hi).isPreconnected) K⟩
-#align is_connected.bUnion_of_refl_trans_gen IsConnected.bunionᵢ_of_reflTransGen
+ ⟨nonempty_biUnion.2 <| ⟨ht.some, ht.some_mem, (H _ ht.some_mem).nonempty⟩,
+ IsPreconnected.biUnion_of_reflTransGen (fun i hi => (H i hi).isPreconnected) K⟩
+#align is_connected.bUnion_of_refl_trans_gen IsConnected.biUnion_of_reflTransGen
-/-- Preconnectedness of the unionᵢ of a family of preconnected sets
+/-- Preconnectedness of the iUnion of a family of preconnected sets
indexed by the vertices of a preconnected graph,
where two vertices are joined when the corresponding sets intersect. -/
-theorem IsPreconnected.unionᵢ_of_reflTransGen {ι : Type _} {s : ι → Set α}
+theorem IsPreconnected.iUnion_of_reflTransGen {ι : Type _} {s : ι → Set α}
(H : ∀ i, IsPreconnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) :
IsPreconnected (⋃ n, s n) := by
- rw [← bunionᵢ_univ]
- exact IsPreconnected.bunionᵢ_of_reflTransGen (fun i _ => H i) fun i _ j _ => by
+ rw [← biUnion_univ]
+ exact IsPreconnected.biUnion_of_reflTransGen (fun i _ => H i) fun i _ j _ => by
simpa [mem_univ] using K i j
-#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.unionᵢ_of_reflTransGen
+#align is_preconnected.Union_of_refl_trans_gen IsPreconnected.iUnion_of_reflTransGen
-theorem IsConnected.unionᵢ_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
+theorem IsConnected.iUnion_of_reflTransGen {ι : Type _} [Nonempty ι] {s : ι → Set α}
(H : ∀ i, IsConnected (s i))
(K : ∀ i j, ReflTransGen (fun i j : ι => (s i ∩ s j).Nonempty) i j) : IsConnected (⋃ n, s n) :=
- ⟨nonempty_unionᵢ.2 <| Nonempty.elim ‹_› fun i : ι => ⟨i, (H _).nonempty⟩,
- IsPreconnected.unionᵢ_of_reflTransGen (fun i => (H i).isPreconnected) K⟩
-#align is_connected.Union_of_refl_trans_gen IsConnected.unionᵢ_of_reflTransGen
+ ⟨nonempty_iUnion.2 <| Nonempty.elim ‹_› fun i : ι => ⟨i, (H _).nonempty⟩,
+ IsPreconnected.iUnion_of_reflTransGen (fun i => (H i).isPreconnected) K⟩
+#align is_connected.Union_of_refl_trans_gen IsConnected.iUnion_of_reflTransGen
section SuccOrder
@@ -235,29 +235,29 @@ open Order
variable [LinearOrder β] [SuccOrder β] [IsSuccArchimedean β]
-/-- The unionᵢ of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
+/-- The iUnion of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is preconnected. -/
-theorem IsPreconnected.unionᵢ_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
+theorem IsPreconnected.iUnion_of_chain {s : β → Set α} (H : ∀ n, IsPreconnected (s n))
(K : ∀ n, (s n ∩ s (succ n)).Nonempty) : IsPreconnected (⋃ n, s n) :=
- IsPreconnected.unionᵢ_of_reflTransGen H fun i j =>
+ IsPreconnected.iUnion_of_reflTransGen H fun i j =>
reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by
rw [inter_comm]
exact K i
-#align is_preconnected.Union_of_chain IsPreconnected.unionᵢ_of_chain
+#align is_preconnected.Union_of_chain IsPreconnected.iUnion_of_chain
-/-- The unionᵢ of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
+/-- The iUnion of connected sets indexed by a type with an archimedean successor (like `ℕ` or `ℤ`)
such that any two neighboring sets meet is connected. -/
-theorem IsConnected.unionᵢ_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
+theorem IsConnected.iUnion_of_chain [Nonempty β] {s : β → Set α} (H : ∀ n, IsConnected (s n))
(K : ∀ n, (s n ∩ s (succ n)).Nonempty) : IsConnected (⋃ n, s n) :=
- IsConnected.unionᵢ_of_reflTransGen H fun i j =>
+ IsConnected.iUnion_of_reflTransGen H fun i j =>
reflTransGen_of_succ _ (fun i _ => K i) fun i _ => by
rw [inter_comm]
exact K i
-#align is_connected.Union_of_chain IsConnected.unionᵢ_of_chain
+#align is_connected.Union_of_chain IsConnected.iUnion_of_chain
-/-- The unionᵢ of preconnected sets indexed by a subset of a type with an archimedean successor
+/-- The iUnion of preconnected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
-theorem IsPreconnected.bunionᵢ_of_chain {s : β → Set α} {t : Set β} (ht : OrdConnected t)
+theorem IsPreconnected.biUnion_of_chain {s : β → Set α} {t : Set β} (ht : OrdConnected t)
(H : ∀ n ∈ t, IsPreconnected (s n))
(K : ∀ n : β, n ∈ t → succ n ∈ t → (s n ∩ s (succ n)).Nonempty) :
IsPreconnected (⋃ n ∈ t, s n) := by
@@ -267,19 +267,19 @@ theorem IsPreconnected.bunionᵢ_of_chain {s : β → Set α} {t : Set β} (ht :
ht.out hi hj ⟨hk.1.trans <| le_succ _, succ_le_of_lt hk.2⟩
have h3 : ∀ {i j k : β}, i ∈ t → j ∈ t → k ∈ Ico i j → (s k ∩ s (succ k)).Nonempty :=
fun hi hj hk => K _ (h1 hi hj hk) (h2 hi hj hk)
- refine' IsPreconnected.bunionᵢ_of_reflTransGen H fun i hi j hj => _
+ refine' IsPreconnected.biUnion_of_reflTransGen H fun i hi j hj => _
exact reflTransGen_of_succ _ (fun k hk => ⟨h3 hi hj hk, h1 hi hj hk⟩) fun k hk =>
⟨by rw [inter_comm]; exact h3 hj hi hk, h2 hj hi hk⟩
-#align is_preconnected.bUnion_of_chain IsPreconnected.bunionᵢ_of_chain
+#align is_preconnected.bUnion_of_chain IsPreconnected.biUnion_of_chain
-/-- The unionᵢ of connected sets indexed by a subset of a type with an archimedean successor
+/-- The iUnion of connected sets indexed by a subset of a type with an archimedean successor
(like `ℕ` or `ℤ`) such that any two neighboring sets meet is preconnected. -/
-theorem IsConnected.bunionᵢ_of_chain {s : β → Set α} {t : Set β} (hnt : t.Nonempty)
+theorem IsConnected.biUnion_of_chain {s : β → Set α} {t : Set β} (hnt : t.Nonempty)
(ht : OrdConnected t) (H : ∀ n ∈ t, IsConnected (s n))
(K : ∀ n : β, n ∈ t → succ n ∈ t → (s n ∩ s (succ n)).Nonempty) : IsConnected (⋃ n ∈ t, s n) :=
- ⟨nonempty_bunionᵢ.2 <| ⟨hnt.some, hnt.some_mem, (H _ hnt.some_mem).nonempty⟩,
- IsPreconnected.bunionᵢ_of_chain ht (fun i hi => (H i hi).isPreconnected) K⟩
-#align is_connected.bUnion_of_chain IsConnected.bunionᵢ_of_chain
+ ⟨nonempty_biUnion.2 <| ⟨hnt.some, hnt.some_mem, (H _ hnt.some_mem).nonempty⟩,
+ IsPreconnected.biUnion_of_chain ht (fun i hi => (H i hi).isPreconnected) K⟩
+#align is_connected.bUnion_of_chain IsConnected.biUnion_of_chain
end SuccOrder
@@ -590,7 +590,7 @@ theorem connectedComponentIn_eq_empty {F : Set α} {x : α} (h : x ∉ F) :
#align connected_component_in_eq_empty connectedComponentIn_eq_empty
theorem mem_connectedComponent {x : α} : x ∈ connectedComponent x :=
- mem_unionₛ_of_mem (mem_singleton x) ⟨isPreconnected_singleton, mem_singleton x⟩
+ mem_sUnion_of_mem (mem_singleton x) ⟨isPreconnected_singleton, mem_singleton x⟩
#align mem_connected_component mem_connectedComponent
theorem mem_connectedComponentIn {x : α} {F : Set α} (hx : x ∈ F) : x ∈ connectedComponentIn F x :=
@@ -613,7 +613,7 @@ theorem connectedComponentIn_subset (F : Set α) (x : α) : connectedComponentIn
#align connected_component_in_subset connectedComponentIn_subset
theorem isPreconnected_connectedComponent {x : α} : IsPreconnected (connectedComponent x) :=
- isPreconnected_unionₛ x _ (fun _ => And.right) fun _ => And.left
+ isPreconnected_sUnion x _ (fun _ => And.right) fun _ => And.left
#align is_preconnected_connected_component isPreconnected_connectedComponent
theorem isPreconnected_connectedComponentIn {x : α} {F : Set α} :
@@ -634,7 +634,7 @@ theorem isConnected_connectedComponentIn_iff {x : α} {F : Set α} :
#align is_connected_connected_component_in_iff isConnected_connectedComponentIn_iff
theorem IsPreconnected.subset_connectedComponent {x : α} {s : Set α} (H1 : IsPreconnected s)
- (H2 : x ∈ s) : s ⊆ connectedComponent x := fun _z hz => mem_unionₛ_of_mem hz ⟨H1, H2⟩
+ (H2 : x ∈ s) : s ⊆ connectedComponent x := fun _z hz => mem_sUnion_of_mem hz ⟨H1, H2⟩
#align is_preconnected.subset_connected_component IsPreconnected.subset_connectedComponent
theorem IsPreconnected.subset_connectedComponentIn {x : α} {F : Set α} (hs : IsPreconnected s)
@@ -905,7 +905,7 @@ theorem isPreconnected_iff_subset_of_disjoint {s : Set α} :
/-- A set `s` is connected if and only if
for every cover by a finite collection of open sets that are pairwise disjoint on `s`,
it is contained in one of the members of the collection. -/
-theorem isConnected_iff_unionₛ_disjoint_open {s : Set α} :
+theorem isConnected_iff_sUnion_disjoint_open {s : Set α} :
IsConnected s ↔
∀ U : Finset (Set α), (∀ u v : Set α, u ∈ U → v ∈ U → (s ∩ (u ∩ v)).Nonempty → u = v) →
(∀ u ∈ U, IsOpen u) → (s ⊆ ⋃₀ ↑U) → ∃ u ∈ U, s ⊆ u := by
@@ -915,8 +915,8 @@ theorem isConnected_iff_unionₛ_disjoint_open {s : Set α} :
case empty => exact absurd (by simpa using hsU) hne.not_subset_empty
case insert u U uU IH =>
simp only [← ball_cond_comm, Finset.forall_mem_insert, Finset.exists_mem_insert,
- Finset.coe_insert, unionₛ_insert, implies_true, true_and] at *
- refine (h _ hUo.1 (⋃₀ ↑U) (isOpen_unionₛ hUo.2) hsU ?_).imp_right ?_
+ Finset.coe_insert, sUnion_insert, implies_true, true_and] at *
+ refine (h _ hUo.1 (⋃₀ ↑U) (isOpen_sUnion hUo.2) hsU ?_).imp_right ?_
· refine subset_empty_iff.1 fun x ⟨hxs, hxu, v, hvU, hxv⟩ => ?_
exact ne_of_mem_of_not_mem hvU uU (hU.1 v hvU ⟨x, hxs, hxu, hxv⟩).symm
· exact IH (fun u hu => (hU.2 u hu).2) hUo.2
@@ -924,7 +924,7 @@ theorem isConnected_iff_unionₛ_disjoint_open {s : Set α} :
· rw [← not_nonempty_iff_eq_empty] at hsuv
have := hsuv; rw [inter_comm u] at this
simpa [*, or_imp, forall_and] using h {u, v}
-#align is_connected_iff_sUnion_disjoint_open isConnected_iff_unionₛ_disjoint_open
+#align is_connected_iff_sUnion_disjoint_open isConnected_iff_sUnion_disjoint_open
-- porting note: `IsPreconnected.subset_clopen` moved up from here
@@ -989,17 +989,17 @@ theorem IsClopen.connectedComponent_subset {x} (hs : IsClopen s) (hx : x ∈ s)
/-- The connected component of a point is always a subset of the intersection of all its clopen
neighbourhoods. -/
-theorem connectedComponent_subset_interᵢ_clopen {x : α} :
+theorem connectedComponent_subset_iInter_clopen {x : α} :
connectedComponent x ⊆ ⋂ Z : { Z : Set α // IsClopen Z ∧ x ∈ Z }, Z :=
- subset_interᵢ fun Z => Z.2.1.connectedComponent_subset Z.2.2
-#align connected_component_subset_Inter_clopen connectedComponent_subset_interᵢ_clopen
+ subset_iInter fun Z => Z.2.1.connectedComponent_subset Z.2.2
+#align connected_component_subset_Inter_clopen connectedComponent_subset_iInter_clopen
/-- A clopen set is the union of its connected components. -/
-theorem IsClopen.bunionᵢ_connectedComponent_eq {Z : Set α} (h : IsClopen Z) :
+theorem IsClopen.biUnion_connectedComponent_eq {Z : Set α} (h : IsClopen Z) :
(⋃ x ∈ Z, connectedComponent x) = Z :=
- Subset.antisymm (unionᵢ₂_subset fun _ => h.connectedComponent_subset) fun _ h =>
- mem_unionᵢ₂_of_mem h mem_connectedComponent
-#align is_clopen.bUnion_connected_component_eq IsClopen.bunionᵢ_connectedComponent_eq
+ Subset.antisymm (iUnion₂_subset fun _ => h.connectedComponent_subset) fun _ h =>
+ mem_iUnion₂_of_mem h mem_connectedComponent
+#align is_clopen.bUnion_connected_component_eq IsClopen.biUnion_connectedComponent_eq
/-- The preimage of a connected component is preconnected if the function has connected fibers
and a subset is closed iff the preimage is. -/
@@ -1029,8 +1029,8 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
rw [uv_disj.inter_eq, inter_empty]
have T₁_u : f ⁻¹' T₁ = f ⁻¹' connectedComponent t ∩ u := by
apply eq_of_subset_of_subset
- · rw [← bunionᵢ_preimage_singleton]
- refine' unionᵢ₂_subset fun t' ht' => subset_inter _ ht'.2
+ · rw [← biUnion_preimage_singleton]
+ refine' iUnion₂_subset fun t' ht' => subset_inter _ ht'.2
rw [hf.preimage_subset_preimage_iff, singleton_subset_iff]
exact ht'.1
rintro a ⟨hat, hau⟩
@@ -1041,8 +1041,8 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
-- This proof is exactly the same as the above (modulo some symmetry)
have T₂_v : f ⁻¹' T₂ = f ⁻¹' connectedComponent t ∩ v := by
apply eq_of_subset_of_subset
- · rw [← bunionᵢ_preimage_singleton]
- refine' unionᵢ₂_subset fun t' ht' => subset_inter _ ht'.2
+ · rw [← biUnion_preimage_singleton]
+ refine' iUnion₂_subset fun t' ht' => subset_inter _ ht'.2
rw [hf.preimage_subset_preimage_iff, singleton_subset_iff]
exact ht'.1
rintro a ⟨hat, hav⟩
@@ -1533,7 +1533,7 @@ theorem connectedComponents_preimage_singleton {x : α} :
is the union of the connected components of the elements in it. -/
theorem connectedComponents_preimage_image (U : Set α) :
(↑) ⁻¹' ((↑) '' U : Set (ConnectedComponents α)) = ⋃ x ∈ U, connectedComponent x := by
- simp only [connectedComponents_preimage_singleton, preimage_unionᵢ₂, image_eq_unionᵢ]
+ simp only [connectedComponents_preimage_singleton, preimage_iUnion₂, image_eq_iUnion]
#align connected_components_preimage_image connectedComponents_preimage_image
instance ConnectedComponents.totallyDisconnectedSpace :
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -340,23 +340,23 @@ theorem isPreconnected_closed_iff {s : Set α} :
IsPreconnected s ↔ ∀ t t', IsClosed t → IsClosed t' →
s ⊆ t ∪ t' → (s ∩ t).Nonempty → (s ∩ t').Nonempty → (s ∩ (t ∩ t')).Nonempty :=
⟨by
- rintro h t t' ht ht' htt' ⟨x, xs, xt⟩ ⟨y, ys, yt'⟩
- rw [← not_disjoint_iff_nonempty_inter, ← subset_compl_iff_disjoint_right, compl_inter]
- intro h'
- have xt' : x ∉ t' := (h' xs).resolve_left (absurd xt)
- have yt : y ∉ t := (h' ys).resolve_right (absurd yt')
- have := h _ _ ht.isOpen_compl ht'.isOpen_compl h' ⟨y, ys, yt⟩ ⟨x, xs, xt'⟩
- rw [← compl_union] at this
- exact this.ne_empty htt'.disjoint_compl_right.inter_eq,
+ rintro h t t' ht ht' htt' ⟨x, xs, xt⟩ ⟨y, ys, yt'⟩
+ rw [← not_disjoint_iff_nonempty_inter, ← subset_compl_iff_disjoint_right, compl_inter]
+ intro h'
+ have xt' : x ∉ t' := (h' xs).resolve_left (absurd xt)
+ have yt : y ∉ t := (h' ys).resolve_right (absurd yt')
+ have := h _ _ ht.isOpen_compl ht'.isOpen_compl h' ⟨y, ys, yt⟩ ⟨x, xs, xt'⟩
+ rw [← compl_union] at this
+ exact this.ne_empty htt'.disjoint_compl_right.inter_eq,
by
- rintro h u v hu hv huv ⟨x, xs, xu⟩ ⟨y, ys, yv⟩
- rw [← not_disjoint_iff_nonempty_inter, ← subset_compl_iff_disjoint_right, compl_inter]
- intro h'
- have xv : x ∉ v := (h' xs).elim (absurd xu) id
- have yu : y ∉ u := (h' ys).elim id (absurd yv)
- have := h _ _ hu.isClosed_compl hv.isClosed_compl h' ⟨y, ys, yu⟩ ⟨x, xs, xv⟩
- rw [← compl_union] at this
- exact this.ne_empty huv.disjoint_compl_right.inter_eq⟩
+ rintro h u v hu hv huv ⟨x, xs, xu⟩ ⟨y, ys, yv⟩
+ rw [← not_disjoint_iff_nonempty_inter, ← subset_compl_iff_disjoint_right, compl_inter]
+ intro h'
+ have xv : x ∉ v := (h' xs).elim (absurd xu) id
+ have yu : y ∉ u := (h' ys).elim id (absurd yv)
+ have := h _ _ hu.isClosed_compl hv.isClosed_compl h' ⟨y, ys, yu⟩ ⟨x, xs, xv⟩
+ rw [← compl_union] at this
+ exact this.ne_empty huv.disjoint_compl_right.inter_eq⟩
#align is_preconnected_closed_iff isPreconnected_closed_iff
theorem Inducing.isPreconnected_image [TopologicalSpace β] {s : Set α} {f : α → β}
@@ -487,8 +487,7 @@ theorem isPreconnected_univ_pi [∀ i, TopologicalSpace (π i)] {s : ∀ i, Set
have := I.piecewise_mem_set_pi hfs hgs
refine' (hsuv this).elim ihI fun h => _
set S := update (I.piecewise f g) i '' s i
- have hsub : S ⊆ pi univ s :=
- by
+ have hsub : S ⊆ pi univ s := by
refine' image_subset_iff.2 fun z hz => _
rwa [update_preimage_univ_pi]
exact fun j _ => this j trivial
@@ -1040,8 +1039,7 @@ theorem preimage_connectedComponent_connected [TopologicalSpace β] {f : α →
refine (fiber_decomp (f a) (mem_preimage.1 hat)).resolve_right fun h => ?_
exact uv_disj.subset_compl_right hau (h rfl)
-- This proof is exactly the same as the above (modulo some symmetry)
- have T₂_v : f ⁻¹' T₂ = f ⁻¹' connectedComponent t ∩ v :=
- by
+ have T₂_v : f ⁻¹' T₂ = f ⁻¹' connectedComponent t ∩ v := by
apply eq_of_subset_of_subset
· rw [← bunionᵢ_preimage_singleton]
refine' unionᵢ₂_subset fun t' ht' => subset_inter _ ht'.2
closes #3680, see https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Stepping.20through.20simp_rw/near/326712986
@@ -680,7 +680,7 @@ theorem connectedComponentIn_eq {x y : α} {F : Set α} (h : y ∈ connectedComp
have hx : x ∈ F := connectedComponentIn_nonempty_iff.mp ⟨y, h⟩
simp_rw [connectedComponentIn_eq_image hx] at h⊢
obtain ⟨⟨y, hy⟩, h2y, rfl⟩ := h
- simp_rw [Subtype.coe_mk, connectedComponentIn_eq_image hy, connectedComponent_eq h2y]
+ simp_rw [connectedComponentIn_eq_image hy, connectedComponent_eq h2y]
#align connected_component_in_eq connectedComponentIn_eq
theorem connectedComponentIn_univ (x : α) : connectedComponentIn univ x = connectedComponent x :=
See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/mathport.20drops.20priorities.20in.20.60attribute.20.5Binstance.5D.60. mathport
has been dropping the priorities on instances when using the attribute
command.
This PR adds back all the priorities, except for local attribute
, and instances involving coercions, which I didn't want to mess with.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -744,7 +744,7 @@ class ConnectedSpace (α : Type u) [TopologicalSpace α] extends PreconnectedSpa
toNonempty : Nonempty α
#align connected_space ConnectedSpace
-attribute [instance] ConnectedSpace.toNonempty
+attribute [instance 50] ConnectedSpace.toNonempty -- see Note [lower instance priority]
-- see Note [lower instance priority]
theorem isConnected_univ [ConnectedSpace α] : IsConnected (univ : Set α) :=
vscode is already configured by .vscode/settings.json
to trim these on save. It's not clear how they've managed to stick around.
By doing this all in one PR now, it avoids getting random whitespace diffs in PRs later.
This was done with a regex search in vscode,
@@ -673,7 +673,7 @@ theorem connectedComponent_eq {x y : α} (h : y ∈ connectedComponent x) :
theorem connectedComponent_eq_iff_mem {x y : α} :
connectedComponent x = connectedComponent y ↔ x ∈ connectedComponent y :=
⟨fun h => h ▸ mem_connectedComponent, fun h => (connectedComponent_eq h).symm⟩
-#align connected_component_eq_iff_mem connectedComponent_eq_iff_mem
+#align connected_component_eq_iff_mem connectedComponent_eq_iff_mem
theorem connectedComponentIn_eq {x y : α} {F : Set α} (h : y ∈ connectedComponentIn F x) :
connectedComponentIn F x = connectedComponentIn F y := by
@@ -1610,3 +1610,12 @@ theorem IsPreconnected.constant_of_mapsTo [TopologicalSpace β] {S : Set α} (hS
suffices F ⟨x, hx⟩ = F ⟨y, hy⟩ by rwa [← Subtype.coe_inj] at this
exact (isPreconnected_iff_preconnectedSpace.mp hS).constant (hc.restrict_mapsTo _)
#align is_preconnected.constant_of_maps_to IsPreconnected.constant_of_mapsTo
+
+/-- A version of `IsPreconnected.constant_of_mapsTo` that assumes that the codomain is nonempty and
+proves that `f` is equal to `const α y` on `S` for some `y ∈ T`. -/
+theorem IsPreconnected.eqOn_const_of_mapsTo [TopologicalSpace β] {S : Set α} (hS : IsPreconnected S)
+ {T : Set β} [DiscreteTopology T] {f : α → β} (hc : ContinuousOn f S) (hTm : MapsTo f S T)
+ (hne : T.Nonempty) : ∃ y ∈ T, EqOn f (const α y) S := by
+ rcases S.eq_empty_or_nonempty with (rfl | ⟨x, hx⟩)
+ · exact hne.imp fun _ hy => ⟨hy, eqOn_empty _ _⟩
+ · exact ⟨f x, hTm hx, fun x' hx' => hS.constant_of_mapsTo hc hTm hx' hx⟩
@@ -719,7 +719,7 @@ theorem irreducibleComponent_subset_connectedComponent {x : α} :
isIrreducible_irreducibleComponent.isConnected.subset_connectedComponent mem_irreducibleComponent
#align irreducible_component_subset_connected_component irreducibleComponent_subset_connectedComponent
--- porting note: todo: restore @[mono]
+@[mono]
theorem connectedComponentIn_mono (x : α) {F G : Set α} (h : F ⊆ G) :
connectedComponentIn F x ⊆ connectedComponentIn G x := by
by_cases hx : x ∈ F
We implement the continuity tactic using aesop, this makes it more robust and reduces the code to trivial macros.
@@ -1467,7 +1467,7 @@ theorem quotientMap_coe : QuotientMap (mk : α → ConnectedComponents α) :=
quotientMap_quot_mk
#align connected_components.quotient_map_coe ConnectedComponents.quotientMap_coe
--- porting note: todo: restore @[continuity]
+@[continuity]
theorem continuous_coe : Continuous (mk : α → ConnectedComponents α) :=
quotientMap_coe.continuous
#align connected_components.continuous_coe ConnectedComponents.continuous_coe
@@ -1495,7 +1495,7 @@ def Continuous.connectedComponentsLift (h : Continuous f) : ConnectedComponents
Quotient.liftOn' x f h.image_eq_of_connectedComponent_eq
#align continuous.connected_components_lift Continuous.connectedComponentsLift
--- porting note: todo: restore @[continuity]
+@[continuity]
theorem Continuous.connectedComponentsLift_continuous (h : Continuous f) :
Continuous h.connectedComponentsLift :=
h.quotient_liftOn' <| by convert h.image_eq_of_connectedComponent_eq
Also sync SHA in Topology.Connected
. The changes in Mathlib 3 were backported from this branch, see
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
! This file was ported from Lean 3 source module topology.connected
-! leanprover-community/mathlib commit 92ca63f0fb391a9ca5f22d2409a6080e786d99f7
+! leanprover-community/mathlib commit d101e93197bb5f6ea89bd7ba386b7f7dff1f3903
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -670,6 +670,11 @@ theorem connectedComponent_eq {x y : α} (h : y ∈ connectedComponent x) :
(isConnected_connectedComponent.subset_connectedComponent h)))
#align connected_component_eq connectedComponent_eq
+theorem connectedComponent_eq_iff_mem {x y : α} :
+ connectedComponent x = connectedComponent y ↔ x ∈ connectedComponent y :=
+ ⟨fun h => h ▸ mem_connectedComponent, fun h => (connectedComponent_eq h).symm⟩
+#align connected_component_eq_iff_mem connectedComponent_eq_iff_mem
+
theorem connectedComponentIn_eq {x y : α} {F : Set α} (h : y ∈ connectedComponentIn F x) :
connectedComponentIn F x = connectedComponentIn F y := by
have hx : x ∈ F := connectedComponentIn_nonempty_iff.mp ⟨y, h⟩
@@ -1124,6 +1129,14 @@ theorem locallyConnectedSpace_iff_open_connected_subsets :
⟨V, hV, hVU⟩, fun ⟨V, ⟨hV, hxV, _⟩, hVU⟩ => mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩
#align locally_connected_space_iff_open_connected_subsets locallyConnectedSpace_iff_open_connected_subsets
+/-- A space with discrete topology is a locally connected space. -/
+instance (priority := 100) DiscreteTopology.toLocallyConnectedSpace (α) [TopologicalSpace α]
+ [DiscreteTopology α] : LocallyConnectedSpace α :=
+ locallyConnectedSpace_iff_open_connected_subsets.2 fun x _U hU =>
+ ⟨{x}, singleton_subset_iff.2 <| mem_of_mem_nhds hU, isOpen_discrete _, rfl,
+ isConnected_singleton⟩
+#align discrete_topology.to_locally_connected_space DiscreteTopology.toLocallyConnectedSpace
+
theorem connectedComponentIn_mem_nhds [LocallyConnectedSpace α] {F : Set α} {x : α} (h : F ∈ 𝓝 x) :
connectedComponentIn F x ∈ 𝓝 x := by
rw [(LocallyConnectedSpace.open_connected_basis x).mem_iff] at h
@@ -1300,6 +1313,11 @@ theorem totallyDisconnectedSpace_iff_connectedComponent_singleton :
exact mem_connectedComponent
#align totally_disconnected_space_iff_connected_component_singleton totallyDisconnectedSpace_iff_connectedComponent_singleton
+@[simp] theorem connectedComponent_eq_singleton [TotallyDisconnectedSpace α] (x : α) :
+ connectedComponent x = {x} :=
+ totallyDisconnectedSpace_iff_connectedComponent_singleton.1 ‹_› x
+#align connected_component_eq_singleton connectedComponent_eq_singleton
+
/-- The image of a connected component in a totally disconnected space is a singleton. -/
@[simp]
theorem Continuous.image_connectedComponent_eq_singleton {β : Type _} [TopologicalSpace β]
@@ -1432,7 +1450,7 @@ theorem coe_ne_coe {x y : α} :
#align connected_components.coe_ne_coe ConnectedComponents.coe_ne_coe
theorem coe_eq_coe' {x y : α} : (x : ConnectedComponents α) = y ↔ x ∈ connectedComponent y :=
- coe_eq_coe.trans ⟨fun h => h ▸ mem_connectedComponent, fun h => (connectedComponent_eq h).symm⟩
+ coe_eq_coe.trans connectedComponent_eq_iff_mem
#align connected_components.coe_eq_coe' ConnectedComponents.coe_eq_coe'
instance [Inhabited α] : Inhabited (ConnectedComponents α) :=
This PR resyncs the first 28 entries of https://leanprover-community.github.io/mathlib-port-status/out-of-sync.html after sorting by diff size.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro, Yury Kudryashov
! This file was ported from Lean 3 source module topology.connected
-! leanprover-community/mathlib commit 59694bd07f0a39c5beccba34bd9f413a160782bf
+! leanprover-community/mathlib commit 92ca63f0fb391a9ca5f22d2409a6080e786d99f7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
The unported dependencies are