Theorem: Inducing.isPathConnected_iff
File: Mathlib/Topology/Connected/PathConnected.lean

tactic: refine ⟨fun hF ↦ hF.image hf.continuous, fun hF ↦ ?_⟩
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
⊢ IsPathConnected F ↔ IsPathConnected (f '' F)
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : IsPathConnected (f '' F)
⊢ IsPathConnected F

tactic: simp? [isPathConnected_iff] at hF ⊢ says
  simp only [isPathConnected_iff, image_nonempty, mem_image, forall_exists_index,
    and_imp, forall_apply_eq_imp_iff₂] at hF ⊢
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : IsPathConnected (f '' F)
⊢ IsPathConnected F
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
⊢ F.Nonempty ∧ ∀ x ∈ F, ∀ y ∈ F, JoinedIn F x y

tactic: refine ⟨hF.1, fun x hx y hy ↦ ?_⟩
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
⊢ F.Nonempty ∧ ∀ x ∈ F, ∀ y ∈ F, JoinedIn F x y
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
⊢ JoinedIn F x y

tactic: rcases hF.2 x hx y hy with ⟨γ, hγ⟩
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
⊢ JoinedIn F x y
state_after: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
hγ : ∀ (t : ↑I), γ t ∈ f '' F
⊢ JoinedIn F x y

tactic: choose γ' hγ' hγγ' using hγ
state_before: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
hγ : ∀ (t : ↑I), γ t ∈ f '' F
⊢ JoinedIn F x y
state_after: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
⊢ JoinedIn F x y

tactic: have key₁ : Inseparable x (γ' 0) := by rw [← hf.inseparable_iff, hγγ' 0, γ.source]
state_before: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
⊢ JoinedIn F x y
state_after: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
⊢ JoinedIn F x y

tactic: have key₂ : Inseparable (γ' 1) y := by rw [← hf.inseparable_iff, hγγ' 1, γ.target]
state_before: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
⊢ JoinedIn F x y
state_after: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
key₂ : Inseparable (γ' 1) y
⊢ JoinedIn F x y

tactic: refine key₁.joinedIn hx (hγ' 0) |>.trans ⟨⟨⟨γ', ?_⟩, rfl, rfl⟩, hγ'⟩ |>.trans
  (key₂.joinedIn (hγ' 1) hy)
state_before: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
key₂ : Inseparable (γ' 1) y
⊢ JoinedIn F x y
state_after: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
key₂ : Inseparable (γ' 1) y
⊢ Continuous γ'

tactic: simpa [hf.continuous_iff] using γ.continuous.congr fun t ↦ (hγγ' t).symm
state_before: case intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
key₂ : Inseparable (γ' 1) y
⊢ Continuous γ'
state_after: no goals

tactic: simp only [isPathConnected_iff, image_nonempty, mem_image, forall_exists_index,
  and_imp, forall_apply_eq_imp_iff₂] at hF ⊢
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : IsPathConnected (f '' F)
⊢ IsPathConnected F
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
⊢ F.Nonempty ∧ ∀ x ∈ F, ∀ y ∈ F, JoinedIn F x y

tactic: rw [← hf.inseparable_iff, hγγ' 0, γ.source]
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
⊢ Inseparable x (γ' 0)
state_after: no goals

tactic: rw [← hf.inseparable_iff, hγγ' 1, γ.target]
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
f : X → Y
hf : Inducing f
hF : F.Nonempty ∧ ∀ a ∈ F, ∀ a_2 ∈ F, JoinedIn (f '' F) (f a) (f a_2)
x : X
hx : x ∈ F
y : X
hy : y ∈ F
γ : Path (f x) (f y)
γ' : ↑I → X
hγ' : ∀ (t : ↑I), γ' t ∈ F
hγγ' : ∀ (t : ↑I), f (γ' t) = γ t
key₁ : Inseparable x (γ' 0)
⊢ Inseparable (γ' 1) y
state_after: no goals