Theorem: Continuous.exists_lift_sigma
File: Mathlib/Topology/Connected/Basic.lean

tactic: obtain ⟨i, hi⟩ : ∃ i, range f ⊆ range (.mk i) := by
  rcases Sigma.isConnected_iff.1 (isConnected_range hf) with ⟨i, s, -, hs⟩
  exact ⟨i, hs.trans_subset (image_subset_range _ _)⟩
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
f : α → (i : ι) × π i
hf : Continuous f
⊢ ∃ i g, Continuous g ∧ f = Sigma.mk i ∘ g
state_after: case intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
f : α → (i : ι) × π i
hf : Continuous f
i : ι
hi : range f ⊆ range (Sigma.mk i)
⊢ ∃ i g, Continuous g ∧ f = Sigma.mk i ∘ g

tactic: rcases range_subset_range_iff_exists_comp.1 hi with ⟨g, rfl⟩
state_before: case intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
f : α → (i : ι) × π i
hf : Continuous f
i : ι
hi : range f ⊆ range (Sigma.mk i)
⊢ ∃ i g, Continuous g ∧ f = Sigma.mk i ∘ g
state_after: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
i : ι
g : α → π i
hf : Continuous (Sigma.mk i ∘ g)
hi : range (Sigma.mk i ∘ g) ⊆ range (Sigma.mk i)
⊢ ∃ i_1 g_1, Continuous g_1 ∧ Sigma.mk i ∘ g = Sigma.mk i_1 ∘ g_1

tactic: refine ⟨i, g, ?_, rfl⟩
state_before: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
i : ι
g : α → π i
hf : Continuous (Sigma.mk i ∘ g)
hi : range (Sigma.mk i ∘ g) ⊆ range (Sigma.mk i)
⊢ ∃ i_1 g_1, Continuous g_1 ∧ Sigma.mk i ∘ g = Sigma.mk i_1 ∘ g_1
state_after: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
i : ι
g : α → π i
hf : Continuous (Sigma.mk i ∘ g)
hi : range (Sigma.mk i ∘ g) ⊆ range (Sigma.mk i)
⊢ Continuous g

tactic: rwa [← embedding_sigmaMk.continuous_iff] at hf
state_before: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
i : ι
g : α → π i
hf : Continuous (Sigma.mk i ∘ g)
hi : range (Sigma.mk i ∘ g) ⊆ range (Sigma.mk i)
⊢ Continuous g
state_after: no goals

tactic: rcases Sigma.isConnected_iff.1 (isConnected_range hf) with ⟨i, s, -, hs⟩
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
f : α → (i : ι) × π i
hf : Continuous f
⊢ ∃ i, range f ⊆ range (Sigma.mk i)
state_after: case intro.intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s✝ t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
f : α → (i : ι) × π i
hf : Continuous f
i : ι
s : Set (π i)
hs : range f = Sigma.mk i '' s
⊢ ∃ i, range f ⊆ range (Sigma.mk i)

tactic: exact ⟨i, hs.trans_subset (image_subset_range _ _)⟩
state_before: case intro.intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝² : TopologicalSpace α
s✝ t u v : Set α
inst✝¹ : ConnectedSpace α
inst✝ : (i : ι) → TopologicalSpace (π i)
f : α → (i : ι) × π i
hf : Continuous f
i : ι
s : Set (π i)
hs : range f = Sigma.mk i '' s
⊢ ∃ i, range f ⊆ range (Sigma.mk i)
state_after: no goals