Theorem: Path.range_reparam
File: Mathlib/Topology/PathConnected.lean

tactic: change range (γ ∘ f) = range γ
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ range ↑(reparam γ f hfcont hf₀ hf₁) = range ↑γ

tactic: rw [range_comp, this, image_univ]
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
this : range f = univ
⊢ range (↑γ ∘ f) = range ↑γ

tactic: rw [range_iff_surjective]
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ range f = univ

tactic: intro t
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ Surjective f

tactic: have h₁ : Continuous (Set.IccExtend (zero_le_one' ℝ) f) := by continuity
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
⊢ ∃ a, f a = t

tactic: have := intermediate_value_Icc (zero_le_one' ℝ) h₁.continuousOn
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
h₁ : Continuous (IccExtend (_ : 0 ≤ 1) f)
⊢ ∃ a, f a = t

tactic: continuity
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
⊢ Continuous (IccExtend (_ : 0 ≤ 1) f)

tactic: rw [IccExtend_left, IccExtend_right, Icc.mk_zero, Icc.mk_one, hf₀, hf₁] at this
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
h₁ : Continuous (IccExtend (_ : 0 ≤ 1) f)
this : Icc (IccExtend (_ : 0 ≤ 1) f 0) (IccExtend (_ : 0 ≤ 1) f 1) ⊆ IccExtend (_ : 0 ≤ 1) f '' Icc 0 1
⊢ ∃ a, f a = t

tactic: rcases this t.2 with ⟨w, hw₁, hw₂⟩
state_before: X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
h₁ : Continuous (IccExtend (_ : 0 ≤ 1) f)
this : Icc 0 1 ⊆ IccExtend (_ : 0 ≤ 1) f '' Icc 0 1
⊢ ∃ a, f a = t

tactic: rw [IccExtend_of_mem _ _ hw₁] at hw₂
state_before: case intro.intro
X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
h₁ : Continuous (IccExtend (_ : 0 ≤ 1) f)
this : Icc 0 1 ⊆ IccExtend (_ : 0 ≤ 1) f '' Icc 0 1
w : ℝ
hw₁ : w ∈ Icc 0 1
hw₂ : IccExtend (_ : 0 ≤ 1) f w = t
⊢ ∃ a, f a = t

tactic: exact ⟨_, hw₂⟩
state_before: case intro.intro
X : Type u_1
Y : Type ?u.527823
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.527838
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
h₁ : Continuous (IccExtend (_ : 0 ≤ 1) f)
this : Icc 0 1 ⊆ IccExtend (_ : 0 ≤ 1) f '' Icc 0 1
w : ℝ
hw₁ : w ∈ Icc 0 1
hw₂ : f { val := w, property := hw₁ } = t
⊢ ∃ a, f a = t