[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ₁ γ₂ : Path x y
h : (fun γ => ↑γ.toContinuousMap) γ₁ = (fun γ => ↑γ.toContinuousMap) γ₂
⊢ γ₁ = γ₂
[PROOFSTEP]
simp only [FunLike.coe_fn_eq] at h
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ₁ γ₂ : Path x y
h : γ₁.toContinuousMap = γ₂.toContinuousMap
⊢ γ₁ = γ₂
[PROOFSTEP]
cases γ₁
[GOAL]
case mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ₂ : Path x y
toContinuousMap✝ : C(↑I, X)
source'✝ : ContinuousMap.toFun toContinuousMap✝ 0 = x
target'✝ : ContinuousMap.toFun toContinuousMap✝ 1 = y
h :
  { toContinuousMap := toContinuousMap✝, source' := source'✝, target' := target'✝ }.toContinuousMap = γ₂.toContinuousMap
⊢ { toContinuousMap := toContinuousMap✝, source' := source'✝, target' := target'✝ } = γ₂
[PROOFSTEP]
cases γ₂
[GOAL]
case mk.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
toContinuousMap✝¹ : C(↑I, X)
source'✝¹ : ContinuousMap.toFun toContinuousMap✝¹ 0 = x
target'✝¹ : ContinuousMap.toFun toContinuousMap✝¹ 1 = y
toContinuousMap✝ : C(↑I, X)
source'✝ : ContinuousMap.toFun toContinuousMap✝ 0 = x
target'✝ : ContinuousMap.toFun toContinuousMap✝ 1 = y
h :
  { toContinuousMap := toContinuousMap✝¹, source' := source'✝¹, target' := target'✝¹ }.toContinuousMap =
    { toContinuousMap := toContinuousMap✝, source' := source'✝, target' := target'✝ }.toContinuousMap
⊢ { toContinuousMap := toContinuousMap✝¹, source' := source'✝¹, target' := target'✝¹ } =
    { toContinuousMap := toContinuousMap✝, source' := source'✝, target' := target'✝ }
[PROOFSTEP]
congr
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
⊢ Continuous ↑γ
[PROOFSTEP]
continuity
  -- porting note: not necessary in light of the instance above
  /-
  instance : CoeFun (Path x y) fun _ => I → X :=
    ⟨fun p => p.toFun⟩
  -/
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
⊢ ∀ {γ₁ γ₂ : Path x y}, ↑γ₁ = ↑γ₂ → γ₁ = γ₂
[PROOFSTEP]
rintro ⟨⟨x, h11⟩, h12, h13⟩ ⟨⟨x, h21⟩, h22, h23⟩ rfl
[GOAL]
case mk.mk.mk.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
x : ↑I → X
h11 : Continuous x
h12 : ContinuousMap.toFun (ContinuousMap.mk x) 0 = x✝
h13 : ContinuousMap.toFun (ContinuousMap.mk x) 1 = y
h21 : Continuous ↑{ toContinuousMap := ContinuousMap.mk x, source' := h12, target' := h13 }
h22 :
  ContinuousMap.toFun (ContinuousMap.mk ↑{ toContinuousMap := ContinuousMap.mk x, source' := h12, target' := h13 }) 0 =
    x✝
h23 :
  ContinuousMap.toFun (ContinuousMap.mk ↑{ toContinuousMap := ContinuousMap.mk x, source' := h12, target' := h13 }) 1 =
    y
⊢ { toContinuousMap := ContinuousMap.mk x, source' := h12, target' := h13 } =
    { toContinuousMap := ContinuousMap.mk ↑{ toContinuousMap := ContinuousMap.mk x, source' := h12, target' := h13 },
      source' := h22, target' := h23 }
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a : X
⊢ range ↑(refl a) = {a}
[PROOFSTEP]
simp [Path.refl, CoeFun.coe]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
⊢ Continuous (↑γ ∘ σ)
[PROOFSTEP]
continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
⊢ ContinuousMap.toFun (ContinuousMap.mk (↑γ ∘ σ)) 0 = y
[PROOFSTEP]
simpa [-Path.target] using γ.target
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
⊢ ContinuousMap.toFun (ContinuousMap.mk (↑γ ∘ σ)) 1 = x
[PROOFSTEP]
simpa [-Path.source] using γ.source
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
⊢ symm (symm γ) = γ
[PROOFSTEP]
ext t
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
t : ↑I
⊢ ↑(symm (symm γ)) t = ↑γ t
[PROOFSTEP]
show γ (σ (σ t)) = γ t
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
t : ↑I
⊢ ↑γ (σ (σ t)) = ↑γ t
[PROOFSTEP]
rw [unitInterval.symm_symm]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a : X
⊢ symm (refl a) = refl a
[PROOFSTEP]
ext
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a : X
x✝ : ↑I
⊢ ↑(symm (refl a)) x✝ = ↑(refl a) x✝
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ : Path x y
a b : X
γ : Path a b
⊢ range ↑(symm γ) = range ↑γ
[PROOFSTEP]
ext x
[GOAL]
case h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
γ✝ : Path x✝ y
a b : X
γ : Path a b
x : X
⊢ x ∈ range ↑(symm γ) ↔ x ∈ range ↑γ
[PROOFSTEP]
simp only [mem_range, Path.symm, FunLike.coe, unitInterval.symm, SetCoe.exists, comp_apply, Subtype.coe_mk]
[GOAL]
case h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
γ✝ : Path x✝ y
a b : X
γ : Path a b
x : X
⊢ (∃ x_1 h,
      ContinuousMap.toFun γ.toContinuousMap
          { val := 1 - x_1, property := (_ : 1 - ↑{ val := x_1, property := (_ : x_1 ∈ I) } ∈ I) } =
        x) ↔
    ∃ x_1 h, ContinuousMap.toFun γ.toContinuousMap { val := x_1, property := h } = x
[PROOFSTEP]
constructor
[GOAL]
case h.mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
γ✝ : Path x✝ y
a b : X
γ : Path a b
x : X
⊢ (∃ x_1 h,
      ContinuousMap.toFun γ.toContinuousMap
          { val := 1 - x_1, property := (_ : 1 - ↑{ val := x_1, property := (_ : x_1 ∈ I) } ∈ I) } =
        x) →
    ∃ x_1 h, ContinuousMap.toFun γ.toContinuousMap { val := x_1, property := h } = x
[PROOFSTEP]
rintro ⟨y, hy, hxy⟩
[GOAL]
case h.mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
γ✝ : Path x✝ y
a b : X
γ : Path a b
x : X
⊢ (∃ x_1 h, ContinuousMap.toFun γ.toContinuousMap { val := x_1, property := h } = x) →
    ∃ x_1 h,
      ContinuousMap.toFun γ.toContinuousMap
          { val := 1 - x_1, property := (_ : 1 - ↑{ val := x_1, property := (_ : x_1 ∈ I) } ∈ I) } =
        x
[PROOFSTEP]
rintro ⟨y, hy, hxy⟩
[GOAL]
case h.mp.intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
γ✝ : Path x✝ y✝
a b : X
γ : Path a b
x : X
y : ℝ
hy : y ∈ I
hxy :
  ContinuousMap.toFun γ.toContinuousMap
      { val := 1 - y, property := (_ : 1 - ↑{ val := y, property := (_ : y ∈ I) } ∈ I) } =
    x
⊢ ∃ x_1 h, ContinuousMap.toFun γ.toContinuousMap { val := x_1, property := h } = x
[PROOFSTEP]
refine' ⟨1 - y, mem_iff_one_sub_mem.mp hy, _⟩
[GOAL]
case h.mpr.intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
γ✝ : Path x✝ y✝
a b : X
γ : Path a b
x : X
y : ℝ
hy : y ∈ I
hxy : ContinuousMap.toFun γ.toContinuousMap { val := y, property := hy } = x
⊢ ∃ x_1 h,
    ContinuousMap.toFun γ.toContinuousMap
        { val := 1 - x_1, property := (_ : 1 - ↑{ val := x_1, property := (_ : x_1 ∈ I) } ∈ I) } =
      x
[PROOFSTEP]
refine' ⟨1 - y, mem_iff_one_sub_mem.mp hy, _⟩
[GOAL]
case h.mp.intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
γ✝ : Path x✝ y✝
a b : X
γ : Path a b
x : X
y : ℝ
hy : y ∈ I
hxy :
  ContinuousMap.toFun γ.toContinuousMap
      { val := 1 - y, property := (_ : 1 - ↑{ val := y, property := (_ : y ∈ I) } ∈ I) } =
    x
⊢ ContinuousMap.toFun γ.toContinuousMap { val := 1 - y, property := (_ : 1 - y ∈ I) } = x
[PROOFSTEP]
convert hxy
[GOAL]
case h.mpr.intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
γ✝ : Path x✝ y✝
a b : X
γ : Path a b
x : X
y : ℝ
hy : y ∈ I
hxy : ContinuousMap.toFun γ.toContinuousMap { val := y, property := hy } = x
⊢ ContinuousMap.toFun γ.toContinuousMap
      { val := 1 - (1 - y), property := (_ : 1 - ↑{ val := 1 - y, property := (_ : 1 - y ∈ I) } ∈ I) } =
    x
[PROOFSTEP]
convert hxy
[GOAL]
case h.e'_2.h.e'_6.h.e'_3
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
γ✝ : Path x✝ y✝
a b : X
γ : Path a b
x : X
y : ℝ
hy : y ∈ I
hxy : ContinuousMap.toFun γ.toContinuousMap { val := y, property := hy } = x
⊢ 1 - (1 - y) = y
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
⊢ extend γ 0 = x
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
⊢ extend γ 1 = y
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ Continuous ((fun t => if t ≤ 1 / 2 then extend γ (2 * t) else extend γ' (2 * t - 1)) ∘ Subtype.val)
[PROOFSTEP]
refine' (Continuous.if_le _ _ continuous_id continuous_const (by norm_num)).comp continuous_subtype_val
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ ∀ (x_1 : ℝ), id x_1 = 1 / 2 → extend γ (2 * x_1) = extend γ' (2 * x_1 - 1)
[PROOFSTEP]
norm_num
[GOAL]
case refine'_1
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ Continuous fun t => extend γ (2 * t)
[PROOFSTEP]
continuity
[GOAL]
case refine'_2
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ Continuous fun t => extend γ' (2 * t - 1)
[PROOFSTEP]
continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ ContinuousMap.toFun
      (ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ (2 * t) else extend γ' (2 * t - 1)) ∘ Subtype.val)) 0 =
    x
[PROOFSTEP]
norm_num
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ ContinuousMap.toFun
      (ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ (2 * t) else extend γ' (2 * t - 1)) ∘ Subtype.val)) 1 =
    z
[PROOFSTEP]
norm_num
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
⊢ (if ↑t ≤ 1 / 2 then extend γ (2 * ↑t) else extend γ' (2 * ↑t - 1)) =
    if h : ↑t ≤ 1 / 2 then ↑γ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) }
    else ↑γ' { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) }
[PROOFSTEP]
split_ifs
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑t ≤ 1 / 2
⊢ extend γ (2 * ↑t) = ↑γ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) }
[PROOFSTEP]
rw [extend_extends]
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑t ≤ 1 / 2
⊢ extend γ' (2 * ↑t - 1) = ↑γ' { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) }
[PROOFSTEP]
rw [extend_extends]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
⊢ symm (trans γ γ') = trans (symm γ') (symm γ)
[PROOFSTEP]
ext t
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
⊢ ↑(symm (trans γ γ')) t = ↑(trans (symm γ') (symm γ)) t
[PROOFSTEP]
simp only [trans_apply, ← one_div, symm_apply, not_le, Function.comp_apply]
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
⊢ (if h : ↑(σ t) ≤ 1 / 2 then ↑γ { val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) }
    else ↑γ' { val := 2 * ↑(σ t) - 1, property := (_ : 2 * ↑(σ t) - 1 ∈ I) }) =
    if h : ↑t ≤ 1 / 2 then ↑γ' (σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
    else ↑γ (σ { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) })
[PROOFSTEP]
split_ifs with h h₁ h₂
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h : ↑(σ t) ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
⊢ ↑γ { val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) } = ↑γ' (σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
[PROOFSTEP]
rw [coe_symm_eq] at h
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h : ↑(σ t) ≤ 1 / 2
h₁ : ¬↑t ≤ 1 / 2
⊢ ↑γ { val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) } =
    ↑γ (σ { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) })
[PROOFSTEP]
rw [coe_symm_eq] at h
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h : ¬↑(σ t) ≤ 1 / 2
h₂ : ↑t ≤ 1 / 2
⊢ ↑γ' { val := 2 * ↑(σ t) - 1, property := (_ : 2 * ↑(σ t) - 1 ∈ I) } =
    ↑γ' (σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
[PROOFSTEP]
rw [coe_symm_eq] at h
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h : ¬↑(σ t) ≤ 1 / 2
h₂ : ¬↑t ≤ 1 / 2
⊢ ↑γ' { val := 2 * ↑(σ t) - 1, property := (_ : 2 * ↑(σ t) - 1 ∈ I) } =
    ↑γ (σ { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) })
[PROOFSTEP]
rw [coe_symm_eq] at h
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
⊢ ↑γ { val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) } = ↑γ' (σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
[PROOFSTEP]
have ht : (t : ℝ) = 1 / 2 := by
  refine le_antisymm h₁ ?_
  rw [sub_le_comm] at h
  norm_num at h
  exact h
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
⊢ ↑t = 1 / 2
[PROOFSTEP]
refine le_antisymm h₁ ?_
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
⊢ 1 / 2 ≤ ↑t
[PROOFSTEP]
rw [sub_le_comm] at h
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - 1 / 2 ≤ ↑t
h₁ : ↑t ≤ 1 / 2
⊢ 1 / 2 ≤ ↑t
[PROOFSTEP]
norm_num at h
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
h : 1 / 2 ≤ ↑t
⊢ 1 / 2 ≤ ↑t
[PROOFSTEP]
exact h
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
ht : ↑t = 1 / 2
⊢ ↑γ { val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) } = ↑γ' (σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
[PROOFSTEP]
simp_rw [unitInterval.symm, ht]
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
ht : ↑t = 1 / 2
⊢ ↑γ { val := 2 * (1 - 1 / 2), property := (_ : (fun x => x ∈ I) (2 * (1 - 1 / 2))) } =
    ↑γ' { val := 1 - 2 * (1 / 2), property := (_ : (fun x => x ∈ I) (1 - 2 * (1 / 2))) }
[PROOFSTEP]
norm_num
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ¬↑t ≤ 1 / 2
⊢ ↑γ { val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) } =
    ↑γ (σ { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) })
[PROOFSTEP]
refine' congr_arg _ (Subtype.ext _)
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ¬↑t ≤ 1 / 2
⊢ ↑{ val := 2 * ↑(σ t), property := (_ : 2 * ↑(σ t) ∈ I) } =
    ↑(σ { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) })
[PROOFSTEP]
norm_num [unitInterval.symm, sub_sub_eq_add_sub, mul_sub]
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ¬↑t ≤ 1 / 2
⊢ 2 * (1 - ↑t) = 1 - (2 * ↑t - 1)
[PROOFSTEP]
ring
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - ↑t ≤ 1 / 2
h₂ : ↑t ≤ 1 / 2
⊢ ↑γ' { val := 2 * ↑(σ t) - 1, property := (_ : 2 * ↑(σ t) - 1 ∈ I) } =
    ↑γ' (σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
[PROOFSTEP]
refine' congr_arg _ (Subtype.ext _)
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - ↑t ≤ 1 / 2
h₂ : ↑t ≤ 1 / 2
⊢ ↑{ val := 2 * ↑(σ t) - 1, property := (_ : 2 * ↑(σ t) - 1 ∈ I) } =
    ↑(σ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) })
[PROOFSTEP]
norm_num [mul_sub, h]
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - ↑t ≤ 1 / 2
h₂ : ↑t ≤ 1 / 2
⊢ 2 * (1 - ↑t) - 1 = 1 - 2 * ↑t
[PROOFSTEP]
ring
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - ↑t ≤ 1 / 2
h₂ : ¬↑t ≤ 1 / 2
⊢ ↑γ' { val := 2 * ↑(σ t) - 1, property := (_ : 2 * ↑(σ t) - 1 ∈ I) } =
    ↑γ (σ { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) })
[PROOFSTEP]
exfalso
[GOAL]
case neg.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - ↑t ≤ 1 / 2
h₂ : ¬↑t ≤ 1 / 2
⊢ False
[PROOFSTEP]
rw [sub_le_comm] at h
[GOAL]
case neg.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - 1 / 2 ≤ ↑t
h₂ : ¬↑t ≤ 1 / 2
⊢ False
[PROOFSTEP]
norm_num at h h₂
[GOAL]
case neg.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ↑t < 1 / 2
h₂ : 1 / 2 < ↑t
⊢ False
[PROOFSTEP]
exact (h.trans h₂).ne rfl
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a : X
⊢ trans (refl a) (refl a) = refl a
[PROOFSTEP]
ext
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a : X
x✝ : ↑I
⊢ ↑(trans (refl a) (refl a)) x✝ = ↑(refl a) x✝
[PROOFSTEP]
simp only [Path.trans, ite_self, one_div, Path.refl_extend]
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a : X
x✝ : ↑I
⊢ ↑{ toContinuousMap := ContinuousMap.mk ((fun t => a) ∘ Subtype.val),
          source' := (_ : ContinuousMap.toFun (ContinuousMap.mk ((fun t => a) ∘ Subtype.val)) 0 = a),
          target' := (_ : ContinuousMap.toFun (ContinuousMap.mk ((fun t => a) ∘ Subtype.val)) 1 = a) }
      x✝ =
    ↑(refl a) x✝
[PROOFSTEP]
rfl
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
⊢ range ↑(trans γ₁ γ₂) = range ↑γ₁ ∪ range ↑γ₂
[PROOFSTEP]
rw [Path.trans]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
⊢ range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) } =
    range ↑γ₁ ∪ range ↑γ₂
[PROOFSTEP]
apply eq_of_subset_of_subset
[GOAL]
case a
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
⊢ range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) } ⊆
    range ↑γ₁ ∪ range ↑γ₂
[PROOFSTEP]
rintro x ⟨⟨t, ht0, ht1⟩, hxt⟩
[GOAL]
case a.intro.mk.intro
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
⊢ x ∈ range ↑γ₁ ∪ range ↑γ₂
[PROOFSTEP]
by_cases h : t ≤ 1 / 2
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : t ≤ 1 / 2
⊢ x ∈ range ↑γ₁ ∪ range ↑γ₂
[PROOFSTEP]
left
[GOAL]
case pos.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : t ≤ 1 / 2
⊢ x ∈ range ↑γ₁
[PROOFSTEP]
use⟨2 * t, ⟨by linarith, by linarith⟩⟩
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : t ≤ 1 / 2
⊢ 0 ≤ 2 * t
[PROOFSTEP]
linarith
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : t ≤ 1 / 2
⊢ 2 * t ≤ 1
[PROOFSTEP]
linarith
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : t ≤ 1 / 2
⊢ ↑γ₁ { val := 2 * t, property := (_ : 0 ≤ 2 * t ∧ 2 * t ≤ 1) } = x
[PROOFSTEP]
rw [← γ₁.extend_extends]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : t ≤ 1 / 2
⊢ extend γ₁ (2 * t) = x
[PROOFSTEP]
rwa [coe_mk_mk, Function.comp_apply, if_pos h] at hxt
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : ¬t ≤ 1 / 2
⊢ x ∈ range ↑γ₁ ∪ range ↑γ₂
[PROOFSTEP]
right
[GOAL]
case neg.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : ¬t ≤ 1 / 2
⊢ x ∈ range ↑γ₂
[PROOFSTEP]
use⟨2 * t - 1, ⟨by linarith, by linarith⟩⟩
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : ¬t ≤ 1 / 2
⊢ 0 ≤ 2 * t - 1
[PROOFSTEP]
linarith
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : ¬t ≤ 1 / 2
⊢ 2 * t - 1 ≤ 1
[PROOFSTEP]
linarith
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : ¬t ≤ 1 / 2
⊢ ↑γ₂ { val := 2 * t - 1, property := (_ : 0 ≤ 2 * t - 1 ∧ 2 * t - 1 ≤ 1) } = x
[PROOFSTEP]
rw [← γ₂.extend_extends]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt :
  ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } =
    x
h : ¬t ≤ 1 / 2
⊢ extend γ₂ (2 * t - 1) = x
[PROOFSTEP]
rwa [coe_mk_mk, Function.comp_apply, if_neg h] at hxt
[GOAL]
case a
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
⊢ range ↑γ₁ ∪ range ↑γ₂ ⊆
    range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
[PROOFSTEP]
rintro x (⟨⟨t, ht0, ht1⟩, hxt⟩ | ⟨⟨t, ht0, ht1⟩, hxt⟩)
[GOAL]
case a.inl.intro.mk.intro
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
⊢ x ∈
    range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
[PROOFSTEP]
use⟨t / 2, ⟨by linarith, by linarith⟩⟩
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
⊢ 0 ≤ t / 2
[PROOFSTEP]
linarith
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
⊢ t / 2 ≤ 1
[PROOFSTEP]
linarith
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t / 2, property := (_ : 0 ≤ t / 2 ∧ t / 2 ≤ 1) } =
    x
[PROOFSTEP]
have : t / 2 ≤ 1 / 2 := (div_le_div_right (zero_lt_two : (0 : ℝ) < 2)).mpr ht1
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
this : t / 2 ≤ 1 / 2
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := t / 2, property := (_ : 0 ≤ t / 2 ∧ t / 2 ≤ 1) } =
    x
[PROOFSTEP]
rw [coe_mk_mk, Function.comp_apply, if_pos this, Subtype.coe_mk]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
this : t / 2 ≤ 1 / 2
⊢ extend γ₁ (2 * (t / 2)) = x
[PROOFSTEP]
ring_nf
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₁ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
this : t / 2 ≤ 1 / 2
⊢ extend γ₁ t = x
[PROOFSTEP]
rwa [γ₁.extend_extends]
[GOAL]
case a.inr.intro.mk.intro
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
⊢ x ∈
    range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
[PROOFSTEP]
by_cases h : t = 0
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t = 0
⊢ x ∈
    range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
[PROOFSTEP]
use⟨1 / 2, ⟨by linarith, by linarith⟩⟩
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t = 0
⊢ 0 ≤ 1 / 2
[PROOFSTEP]
linarith
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t = 0
⊢ 1 / 2 ≤ 1
[PROOFSTEP]
linarith
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t = 0
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := 1 / 2, property := (_ : 0 ≤ 1 / 2 ∧ 1 / 2 ≤ 1) } =
    x
[PROOFSTEP]
rw [coe_mk_mk, Function.comp_apply, if_pos le_rfl, Subtype.coe_mk, mul_one_div_cancel (two_ne_zero' ℝ)]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t = 0
⊢ extend γ₁ 1 = x
[PROOFSTEP]
rw [γ₁.extend_one]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t = 0
⊢ b = x
[PROOFSTEP]
rwa [← γ₂.extend_extends, h, γ₂.extend_zero] at hxt
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : ¬t = 0
⊢ x ∈
    range
      ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
[PROOFSTEP]
use⟨(t + 1) / 2, ⟨by linarith, by linarith⟩⟩
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : ¬t = 0
⊢ 0 ≤ (t + 1) / 2
[PROOFSTEP]
linarith
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : ¬t = 0
⊢ (t + 1) / 2 ≤ 1
[PROOFSTEP]
linarith
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : ¬t = 0
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := (t + 1) / 2, property := (_ : 0 ≤ (t + 1) / 2 ∧ (t + 1) / 2 ≤ 1) } =
    x
[PROOFSTEP]
replace h : t ≠ 0 := h
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0 : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := (t + 1) / 2, property := (_ : 0 ≤ (t + 1) / 2 ∧ (t + 1) / 2 ≤ 1) } =
    x
[PROOFSTEP]
have ht0 := lt_of_le_of_ne ht0 h.symm
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0✝ : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
ht0 : 0 < t
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := (t + 1) / 2, property := (_ : 0 ≤ (t + 1) / 2 ∧ (t + 1) / 2 ≤ 1) } =
    x
[PROOFSTEP]
have : ¬(t + 1) / 2 ≤ 1 / 2 := by
  rw [not_le]
  linarith
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0✝ : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
ht0 : 0 < t
⊢ ¬(t + 1) / 2 ≤ 1 / 2
[PROOFSTEP]
rw [not_le]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0✝ : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
ht0 : 0 < t
⊢ 1 / 2 < (t + 1) / 2
[PROOFSTEP]
linarith
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0✝ : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
ht0 : 0 < t
this : ¬(t + 1) / 2 ≤ 1 / 2
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend γ₂ (2 * t - 1)) ∘ Subtype.val),
          source' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 0 = a),
          target' :=
            (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend γ₂ (2 * x - 1)) ∘ Subtype.val) 1 = c) }
      { val := (t + 1) / 2, property := (_ : 0 ≤ (t + 1) / 2 ∧ (t + 1) / 2 ≤ 1) } =
    x
[PROOFSTEP]
rw [coe_mk_mk, Function.comp_apply, Subtype.coe_mk, if_neg this]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0✝ : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
ht0 : 0 < t
this : ¬(t + 1) / 2 ≤ 1 / 2
⊢ extend γ₂ (2 * ((t + 1) / 2) - 1) = x
[PROOFSTEP]
ring_nf
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b c : X
γ₁ : Path a b
γ₂ : Path b c
x : X
t : ℝ
ht0✝ : 0 ≤ t
ht1 : t ≤ 1
hxt : ↑γ₂ { val := t, property := (_ : 0 ≤ t ∧ t ≤ 1) } = x
h : t ≠ 0
ht0 : 0 < t
this : ¬(t + 1) / 2 ≤ 1 / 2
⊢ extend γ₂ t = x
[PROOFSTEP]
rwa [γ₂.extend_extends]
[GOAL]
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : ContinuousOn f (range ↑γ)
⊢ ContinuousMap.toFun (ContinuousMap.mk (f ∘ ↑γ)) 0 = f x
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : ContinuousOn f (range ↑γ)
⊢ ContinuousMap.toFun (ContinuousMap.mk (f ∘ ↑γ)) 1 = f y
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
⊢ ↑(map γ h) = f ∘ ↑γ
[PROOFSTEP]
ext t
[GOAL]
case h
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
t : ↑I
⊢ ↑(map γ h) t = (f ∘ ↑γ) t
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
⊢ map (trans γ γ') h = trans (map γ h) (map γ' h)
[PROOFSTEP]
ext t
[GOAL]
case a.h
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
t : ↑I
⊢ ↑(map (trans γ γ') h) t = ↑(trans (map γ h) (map γ' h)) t
[PROOFSTEP]
rw [trans_apply, map_coe, Function.comp_apply, trans_apply]
[GOAL]
case a.h
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
t : ↑I
⊢ f
      (if h : ↑t ≤ 1 / 2 then ↑γ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) }
      else ↑γ' { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) }) =
    if h_1 : ↑t ≤ 1 / 2 then ↑(map γ h) { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) }
    else ↑(map γ' h) { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) }
[PROOFSTEP]
split_ifs
[GOAL]
case pos
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
t : ↑I
h✝ : ↑t ≤ 1 / 2
⊢ f (↑γ { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) }) = ↑(map γ h) { val := 2 * ↑t, property := (_ : 2 * ↑t ∈ I) }
[PROOFSTEP]
rfl
[GOAL]
case neg
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
γ' : Path y z
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
h : Continuous f
t : ↑I
h✝ : ¬↑t ≤ 1 / 2
⊢ f (↑γ' { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) }) =
    ↑(map γ' h) { val := 2 * ↑t - 1, property := (_ : 2 * ↑t - 1 ∈ I) }
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
⊢ map γ (_ : Continuous id) = γ
[PROOFSTEP]
ext
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
x✝ : ↑I
⊢ ↑(map γ (_ : Continuous id)) x✝ = ↑γ x✝
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y✝ : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
Y : Type u_4
inst✝¹ : TopologicalSpace Y
Z : Type u_5
inst✝ : TopologicalSpace Z
f : X → Y
hf : Continuous f
g : Y → Z
hg : Continuous g
⊢ map (map γ hf) hg = map γ (_ : Continuous (g ∘ f))
[PROOFSTEP]
ext
[GOAL]
case a.h
X : Type u_1
Y✝ : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y✝
x y z : X
ι : Type u_3
γ✝ γ : Path x y
Y : Type u_4
inst✝¹ : TopologicalSpace Y
Z : Type u_5
inst✝ : TopologicalSpace Z
f : X → Y
hf : Continuous f
g : Y → Z
hg : Continuous g
x✝ : ↑I
⊢ ↑(map (map γ hf) hg) x✝ = ↑(map γ (_ : Continuous (g ∘ f))) x✝
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
x' y' : X
hx : x' = x
hy : y' = y
⊢ ContinuousMap.toFun (ContinuousMap.mk ↑γ) 0 = x'
[PROOFSTEP]
simp [hx]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
x' y' : X
hx : x' = x
hy : y' = y
⊢ ContinuousMap.toFun (ContinuousMap.mk ↑γ) 1 = y'
[PROOFSTEP]
simp [hy]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ✝ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b : ι → X
γ : (t : ι) → Path (a t) (b t)
h : Continuous ↿γ
⊢ Continuous ↿fun t => extend (γ t)
[PROOFSTEP]
refine' h.comp (continuous_id.prod_map continuous_projIcc)
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ✝ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b : ι → X
γ : (t : ι) → Path (a t) (b t)
h : Continuous ↿γ
⊢ 0 ≤ 1
[PROOFSTEP]
exact zero_le_one
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
⊢ Continuous ↿fun t => trans (γ₁ t) (γ₂ t)
[PROOFSTEP]
have h₁' := Path.continuous_uncurry_extend_of_continuous_family γ₁ h₁
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
⊢ Continuous ↿fun t => trans (γ₁ t) (γ₂ t)
[PROOFSTEP]
have h₂' := Path.continuous_uncurry_extend_of_continuous_family γ₂ h₂
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ Continuous ↿fun t => trans (γ₁ t) (γ₂ t)
[PROOFSTEP]
simp only [HasUncurry.uncurry, CoeFun.coe, Path.trans, (· ∘ ·)]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ Continuous fun p =>
    ↑{
          toContinuousMap :=
            ContinuousMap.mk fun x => if ↑x ≤ 1 / 2 then extend (γ₁ p.fst) (2 * ↑x) else extend (γ₂ p.fst) (2 * ↑x - 1),
          source' :=
            (_ :
              ContinuousMap.toFun
                  (ContinuousMap.mk fun x =>
                    if ↑x ≤ 1 / 2 then extend (γ₁ p.fst) (2 * ↑x) else extend (γ₂ p.fst) (2 * ↑x - 1))
                  0 =
                a p.fst),
          target' :=
            (_ :
              ContinuousMap.toFun
                  (ContinuousMap.mk fun x =>
                    if ↑x ≤ 1 / 2 then extend (γ₁ p.fst) (2 * ↑x) else extend (γ₂ p.fst) (2 * ↑x - 1))
                  1 =
                c p.fst) }
      p.snd
[PROOFSTEP]
refine' Continuous.if_le _ _ (continuous_subtype_val.comp continuous_snd) continuous_const _
[GOAL]
case refine'_1
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ Continuous fun p => extend (γ₁ p.fst) (2 * ↑p.snd)
[PROOFSTEP]
change Continuous ((fun p : ι × ℝ => (γ₁ p.1).extend p.2) ∘ Prod.map id (fun x => 2 * x : I → ℝ))
[GOAL]
case refine'_1
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ Continuous ((fun p => extend (γ₁ p.fst) p.snd) ∘ Prod.map id fun x => 2 * ↑x)
[PROOFSTEP]
exact h₁'.comp (continuous_id.prod_map <| continuous_const.mul continuous_subtype_val)
[GOAL]
case refine'_2
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ Continuous fun p => extend (γ₂ p.fst) (2 * ↑p.snd - 1)
[PROOFSTEP]
change Continuous ((fun p : ι × ℝ => (γ₂ p.1).extend p.2) ∘ Prod.map id (fun x => 2 * x - 1 : I → ℝ))
[GOAL]
case refine'_2
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ Continuous ((fun p => extend (γ₂ p.fst) p.snd) ∘ Prod.map id fun x => 2 * ↑x - 1)
[PROOFSTEP]
exact h₂'.comp (continuous_id.prod_map <| (continuous_const.mul continuous_subtype_val).sub continuous_const)
[GOAL]
case refine'_3
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
⊢ ∀ (x : ι × ↑I), ↑x.snd = 1 / 2 → extend (γ₁ x.fst) (2 * ↑x.snd) = extend (γ₂ x.fst) (2 * ↑x.snd - 1)
[PROOFSTEP]
rintro st hst
[GOAL]
case refine'_3
X✝ : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type u_3
γ : Path x y
X : Type u_4
ι : Type u_5
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
h₁' : Continuous ↿fun t => extend (γ₁ t)
h₂' : Continuous ↿fun t => extend (γ₂ t)
st : ι × ↑I
hst : ↑st.snd = 1 / 2
⊢ extend (γ₁ st.fst) (2 * ↑st.snd) = extend (γ₂ st.fst) (2 * ↑st.snd - 1)
[PROOFSTEP]
simp [hst, mul_inv_cancel (two_ne_zero' ℝ)]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
f : Y → Path x y
g : Y → Path y z
⊢ Continuous f → Continuous g → Continuous fun t => trans (f t) (g t)
[PROOFSTEP]
intro hf hg
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
f : Y → Path x y
g : Y → Path y z
hf : Continuous f
hg : Continuous g
⊢ Continuous fun t => trans (f t) (g t)
[PROOFSTEP]
apply continuous_uncurry_iff.mp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
f : Y → Path x y
g : Y → Path y z
hf : Continuous f
hg : Continuous g
⊢ Continuous ↿fun t => trans (f t) (g t)
[PROOFSTEP]
exact trans_continuous_family _ (continuous_uncurry_iff.mpr hf) _ (continuous_uncurry_iff.mpr hg)
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
γ₂ : Path b₁ b₂
⊢ ContinuousMap.toFun (prodMk γ₁.toContinuousMap γ₂.toContinuousMap) 0 = (a₁, b₁)
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
γ₂ : Path b₁ b₂
⊢ ContinuousMap.toFun (prodMk γ₁.toContinuousMap γ₂.toContinuousMap) 1 = (a₂, b₂)
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
⊢ trans (Path.prod γ₁ γ₂) (Path.prod δ₁ δ₂) = Path.prod (trans γ₁ δ₁) (trans γ₂ δ₂)
[PROOFSTEP]
ext t
[GOAL]
case a.h.h₁
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
⊢ (↑(trans (Path.prod γ₁ γ₂) (Path.prod δ₁ δ₂)) t).fst = (↑(Path.prod (trans γ₁ δ₁) (trans γ₂ δ₂)) t).fst
[PROOFSTEP]
unfold Path.trans
[GOAL]
case a.h.h₂
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
⊢ (↑(trans (Path.prod γ₁ γ₂) (Path.prod δ₁ δ₂)) t).snd = (↑(Path.prod (trans γ₁ δ₁) (trans γ₂ δ₂)) t).snd
[PROOFSTEP]
unfold Path.trans
[GOAL]
case a.h.h₁
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
⊢ (↑{
            toContinuousMap :=
              ContinuousMap.mk
                ((fun t =>
                    if t ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * t) else extend (Path.prod δ₁ δ₂) (2 * t - 1)) ∘
                  Subtype.val),
            source' :=
              (_ :
                ((fun x =>
                        if x ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * x) else extend (Path.prod δ₁ δ₂) (2 * x - 1)) ∘
                      Subtype.val)
                    0 =
                  (a₁, b₁)),
            target' :=
              (_ :
                ((fun x =>
                        if x ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * x) else extend (Path.prod δ₁ δ₂) (2 * x - 1)) ∘
                      Subtype.val)
                    1 =
                  (a₃, b₃)) }
        t).fst =
    (↑(Path.prod
            {
              toContinuousMap :=
                ContinuousMap.mk
                  ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend δ₁ (2 * t - 1)) ∘ Subtype.val),
              source' :=
                (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend δ₁ (2 * x - 1)) ∘ Subtype.val) 0 = a₁),
              target' :=
                (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend δ₁ (2 * x - 1)) ∘ Subtype.val) 1 = a₃) }
            {
              toContinuousMap :=
                ContinuousMap.mk
                  ((fun t => if t ≤ 1 / 2 then extend γ₂ (2 * t) else extend δ₂ (2 * t - 1)) ∘ Subtype.val),
              source' :=
                (_ : ((fun x => if x ≤ 1 / 2 then extend γ₂ (2 * x) else extend δ₂ (2 * x - 1)) ∘ Subtype.val) 0 = b₁),
              target' :=
                (_ :
                  ((fun x => if x ≤ 1 / 2 then extend γ₂ (2 * x) else extend δ₂ (2 * x - 1)) ∘ Subtype.val) 1 = b₃) })
        t).fst
[PROOFSTEP]
simp only [Path.coe_mk_mk, Path.prod_coe, Function.comp_apply]
[GOAL]
case a.h.h₂
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
⊢ (↑{
            toContinuousMap :=
              ContinuousMap.mk
                ((fun t =>
                    if t ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * t) else extend (Path.prod δ₁ δ₂) (2 * t - 1)) ∘
                  Subtype.val),
            source' :=
              (_ :
                ((fun x =>
                        if x ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * x) else extend (Path.prod δ₁ δ₂) (2 * x - 1)) ∘
                      Subtype.val)
                    0 =
                  (a₁, b₁)),
            target' :=
              (_ :
                ((fun x =>
                        if x ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * x) else extend (Path.prod δ₁ δ₂) (2 * x - 1)) ∘
                      Subtype.val)
                    1 =
                  (a₃, b₃)) }
        t).snd =
    (↑(Path.prod
            {
              toContinuousMap :=
                ContinuousMap.mk
                  ((fun t => if t ≤ 1 / 2 then extend γ₁ (2 * t) else extend δ₁ (2 * t - 1)) ∘ Subtype.val),
              source' :=
                (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend δ₁ (2 * x - 1)) ∘ Subtype.val) 0 = a₁),
              target' :=
                (_ : ((fun x => if x ≤ 1 / 2 then extend γ₁ (2 * x) else extend δ₁ (2 * x - 1)) ∘ Subtype.val) 1 = a₃) }
            {
              toContinuousMap :=
                ContinuousMap.mk
                  ((fun t => if t ≤ 1 / 2 then extend γ₂ (2 * t) else extend δ₂ (2 * t - 1)) ∘ Subtype.val),
              source' :=
                (_ : ((fun x => if x ≤ 1 / 2 then extend γ₂ (2 * x) else extend δ₂ (2 * x - 1)) ∘ Subtype.val) 0 = b₁),
              target' :=
                (_ :
                  ((fun x => if x ≤ 1 / 2 then extend γ₂ (2 * x) else extend δ₂ (2 * x - 1)) ∘ Subtype.val) 1 = b₃) })
        t).snd
[PROOFSTEP]
simp only [Path.coe_mk_mk, Path.prod_coe, Function.comp_apply]
[GOAL]
case a.h.h₁
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
⊢ (if ↑t ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * ↑t) else extend (Path.prod δ₁ δ₂) (2 * ↑t - 1)).fst =
    if ↑t ≤ 1 / 2 then extend γ₁ (2 * ↑t) else extend δ₁ (2 * ↑t - 1)
[PROOFSTEP]
split_ifs
[GOAL]
case a.h.h₂
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
⊢ (if ↑t ≤ 1 / 2 then extend (Path.prod γ₁ γ₂) (2 * ↑t) else extend (Path.prod δ₁ δ₂) (2 * ↑t - 1)).snd =
    if ↑t ≤ 1 / 2 then extend γ₂ (2 * ↑t) else extend δ₂ (2 * ↑t - 1)
[PROOFSTEP]
split_ifs
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
h✝ : ↑t ≤ 1 / 2
⊢ (extend (Path.prod γ₁ γ₂) (2 * ↑t)).fst = extend γ₁ (2 * ↑t)
[PROOFSTEP]
rfl
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
h✝ : ¬↑t ≤ 1 / 2
⊢ (extend (Path.prod δ₁ δ₂) (2 * ↑t - 1)).fst = extend δ₁ (2 * ↑t - 1)
[PROOFSTEP]
rfl
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
h✝ : ↑t ≤ 1 / 2
⊢ (extend (Path.prod γ₁ γ₂) (2 * ↑t)).snd = extend γ₂ (2 * ↑t)
[PROOFSTEP]
rfl
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
a₁ a₂ a₃ : X
b₁ b₂ b₃ : Y
γ₁ : Path a₁ a₂
δ₁ : Path a₂ a₃
γ₂ : Path b₁ b₂
δ₂ : Path b₂ b₃
t : ↑I
h✝ : ¬↑t ≤ 1 / 2
⊢ (extend (Path.prod δ₁ δ₂) (2 * ↑t - 1)).snd = extend δ₂ (2 * ↑t - 1)
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ : (i : ι) → Path (as i) (bs i)
⊢ ContinuousMap.toFun (ContinuousMap.pi fun i => (γ i).toContinuousMap) 0 = as
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ : (i : ι) → Path (as i) (bs i)
⊢ ContinuousMap.toFun (ContinuousMap.pi fun i => (γ i).toContinuousMap) 1 = bs
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ₀ : (i : ι) → Path (as i) (bs i)
γ₁ : (i : ι) → Path (bs i) (cs i)
⊢ trans (Path.pi γ₀) (Path.pi γ₁) = Path.pi fun i => trans (γ₀ i) (γ₁ i)
[PROOFSTEP]
ext t i
[GOAL]
case a.h.h
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ₀ : (i : ι) → Path (as i) (bs i)
γ₁ : (i : ι) → Path (bs i) (cs i)
t : ↑I
i : ι
⊢ ↑(trans (Path.pi γ₀) (Path.pi γ₁)) t i = ↑(Path.pi fun i => trans (γ₀ i) (γ₁ i)) t i
[PROOFSTEP]
unfold Path.trans
[GOAL]
case a.h.h
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ₀ : (i : ι) → Path (as i) (bs i)
γ₁ : (i : ι) → Path (bs i) (cs i)
t : ↑I
i : ι
⊢ ↑{
          toContinuousMap :=
            ContinuousMap.mk
              ((fun t => if t ≤ 1 / 2 then extend (Path.pi γ₀) (2 * t) else extend (Path.pi γ₁) (2 * t - 1)) ∘
                Subtype.val),
          source' :=
            (_ :
              ((fun x => if x ≤ 1 / 2 then extend (Path.pi γ₀) (2 * x) else extend (Path.pi γ₁) (2 * x - 1)) ∘
                    Subtype.val)
                  0 =
                fun i => as i),
          target' :=
            (_ :
              ((fun x => if x ≤ 1 / 2 then extend (Path.pi γ₀) (2 * x) else extend (Path.pi γ₁) (2 * x - 1)) ∘
                    Subtype.val)
                  1 =
                fun i => cs i) }
      t i =
    ↑(Path.pi fun i =>
          {
            toContinuousMap :=
              ContinuousMap.mk
                ((fun t => if t ≤ 1 / 2 then extend (γ₀ i) (2 * t) else extend (γ₁ i) (2 * t - 1)) ∘ Subtype.val),
            source' :=
              (_ :
                ((fun x => if x ≤ 1 / 2 then extend (γ₀ i) (2 * x) else extend (γ₁ i) (2 * x - 1)) ∘ Subtype.val) 0 =
                  as i),
            target' :=
              (_ :
                ((fun x => if x ≤ 1 / 2 then extend (γ₀ i) (2 * x) else extend (γ₁ i) (2 * x - 1)) ∘ Subtype.val) 1 =
                  cs i) })
      t i
[PROOFSTEP]
simp only [Path.coe_mk_mk, Function.comp_apply, pi_coe]
[GOAL]
case a.h.h
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ₀ : (i : ι) → Path (as i) (bs i)
γ₁ : (i : ι) → Path (bs i) (cs i)
t : ↑I
i : ι
⊢ ite (↑t ≤ 1 / 2) (extend (Path.pi γ₀) (2 * ↑t)) (extend (Path.pi γ₁) (2 * ↑t - 1)) i =
    if ↑t ≤ 1 / 2 then extend (γ₀ i) (2 * ↑t) else extend (γ₁ i) (2 * ↑t - 1)
[PROOFSTEP]
split_ifs
[GOAL]
case pos
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ₀ : (i : ι) → Path (as i) (bs i)
γ₁ : (i : ι) → Path (bs i) (cs i)
t : ↑I
i : ι
h✝ : ↑t ≤ 1 / 2
⊢ extend (Path.pi γ₀) (2 * ↑t) i = extend (γ₀ i) (2 * ↑t)
[PROOFSTEP]
rfl
[GOAL]
case neg
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
χ : ι → Type u_4
inst✝ : (i : ι) → TopologicalSpace (χ i)
as bs cs : (i : ι) → χ i
γ₀ : (i : ι) → Path (as i) (bs i)
γ₁ : (i : ι) → Path (bs i) (cs i)
t : ↑I
i : ι
h✝ : ¬↑t ≤ 1 / 2
⊢ extend (Path.pi γ₁) (2 * ↑t - 1) i = extend (γ₁ i) (2 * ↑t - 1)
[PROOFSTEP]
rfl
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ ContinuousMap.toFun (ContinuousMap.mk fun s => extend γ (min (max (↑s) t₀) t₁)) 0 = extend γ (min t₀ t₁)
[PROOFSTEP]
simp only [min_def, max_def']
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ extend γ (if (if t₀ ≤ ↑0 then ↑0 else t₀) ≤ t₁ then if t₀ ≤ ↑0 then ↑0 else t₀ else t₁) =
    extend γ (if t₀ ≤ t₁ then t₀ else t₁)
[PROOFSTEP]
norm_cast
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ extend γ (if (if t₀ ≤ 0 then 0 else t₀) ≤ t₁ then if t₀ ≤ 0 then 0 else t₀ else t₁) =
    extend γ (if t₀ ≤ t₁ then t₀ else t₁)
[PROOFSTEP]
split_ifs with h₁ h₂ h₃ h₄
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : 0 ≤ t₁
h₃ : t₀ ≤ t₁
⊢ extend γ 0 = extend γ t₀
[PROOFSTEP]
simp [γ.extend_of_le_zero h₁]
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : 0 ≤ t₁
h₃ : ¬t₀ ≤ t₁
⊢ extend γ 0 = extend γ t₁
[PROOFSTEP]
congr
[GOAL]
case neg.e_a
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : 0 ≤ t₁
h₃ : ¬t₀ ≤ t₁
⊢ 0 = t₁
[PROOFSTEP]
linarith
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : ¬0 ≤ t₁
h₄ : t₀ ≤ t₁
⊢ extend γ t₁ = extend γ t₀
[PROOFSTEP]
have h₄ : t₁ ≤ 0 := le_of_lt (by simpa using h₂)
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : ¬0 ≤ t₁
h₄ : t₀ ≤ t₁
⊢ t₁ < 0
[PROOFSTEP]
simpa using h₂
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : ¬0 ≤ t₁
h₄✝ : t₀ ≤ t₁
h₄ : t₁ ≤ 0
⊢ extend γ t₁ = extend γ t₀
[PROOFSTEP]
simp [γ.extend_of_le_zero h₄, γ.extend_of_le_zero h₁]
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : ¬0 ≤ t₁
h₄ : ¬t₀ ≤ t₁
⊢ extend γ t₁ = extend γ t₁
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 0
h✝ : t₀ ≤ t₁
⊢ extend γ t₀ = extend γ t₀
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 0
h✝ : ¬t₀ ≤ t₁
⊢ extend γ t₁ = extend γ t₁
[PROOFSTEP]
all_goals rfl
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 0
h₂ : ¬0 ≤ t₁
h₄ : ¬t₀ ≤ t₁
⊢ extend γ t₁ = extend γ t₁
[PROOFSTEP]
rfl
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 0
h✝ : t₀ ≤ t₁
⊢ extend γ t₀ = extend γ t₀
[PROOFSTEP]
rfl
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 0
h✝ : ¬t₀ ≤ t₁
⊢ extend γ t₁ = extend γ t₁
[PROOFSTEP]
rfl
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ ContinuousMap.toFun (ContinuousMap.mk fun s => extend γ (min (max (↑s) t₀) t₁)) 1 = extend γ t₁
[PROOFSTEP]
simp only [min_def, max_def']
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ extend γ (if (if t₀ ≤ ↑1 then ↑1 else t₀) ≤ t₁ then if t₀ ≤ ↑1 then ↑1 else t₀ else t₁) = extend γ t₁
[PROOFSTEP]
norm_cast
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ extend γ (if (if t₀ ≤ 1 then 1 else t₀) ≤ t₁ then if t₀ ≤ 1 then 1 else t₀ else t₁) = extend γ t₁
[PROOFSTEP]
split_ifs with h₁ h₂ h₃
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 1
h₂ : 1 ≤ t₁
⊢ extend γ 1 = extend γ t₁
[PROOFSTEP]
simp [γ.extend_of_one_le h₂]
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : t₀ ≤ 1
h₂ : ¬1 ≤ t₁
⊢ extend γ t₁ = extend γ t₁
[PROOFSTEP]
rfl
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 1
h₃ : t₀ ≤ t₁
⊢ extend γ t₀ = extend γ t₁
[PROOFSTEP]
have h₄ : 1 ≤ t₀ := le_of_lt (by simpa using h₁)
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 1
h₃ : t₀ ≤ t₁
⊢ 1 < t₀
[PROOFSTEP]
simpa using h₁
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 1
h₃ : t₀ ≤ t₁
h₄ : 1 ≤ t₀
⊢ extend γ t₀ = extend γ t₁
[PROOFSTEP]
simp [γ.extend_of_one_le h₄, γ.extend_of_one_le (h₄.trans h₃)]
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h₁ : ¬t₀ ≤ 1
h₃ : ¬t₀ ≤ t₁
⊢ extend γ t₁ = extend γ t₁
[PROOFSTEP]
rfl
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
h : t₀ ≤ t₁
⊢ extend γ t₀ = extend γ (min t₀ t₁)
[PROOFSTEP]
rw [min_eq_left h]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ range ↑(truncate γ t₀ t₁) ⊆ range ↑γ
[PROOFSTEP]
rw [← γ.extend_range]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ range ↑(truncate γ t₀ t₁) ⊆ range (extend γ)
[PROOFSTEP]
simp only [range_subset_iff, SetCoe.exists, SetCoe.forall]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ : ℝ
⊢ ∀ (x : ℝ) (h : x ∈ I), ↑(truncate γ t₀ t₁) { val := x, property := h } ∈ range (extend γ)
[PROOFSTEP]
intro x _hx
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t₀ t₁ x : ℝ
_hx : x ∈ I
⊢ ↑(truncate γ t₀ t₁) { val := x, property := _hx } ∈ range (extend γ)
[PROOFSTEP]
simp only [FunLike.coe, Path.truncate, mem_range_self]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
⊢ Continuous ↿(truncate γ t)
[PROOFSTEP]
have key : Continuous (fun x => (t, x) : ℝ × I → ℝ × ℝ × I) := by continuity
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
⊢ Continuous fun x => (t, x)
[PROOFSTEP]
continuity
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
key : Continuous fun x => (t, x)
⊢ Continuous ↿(truncate γ t)
[PROOFSTEP]
exact γ.truncate_continuous_family.comp key
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
⊢ extend γ (min t t) = extend γ t
[PROOFSTEP]
rw [min_self]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
⊢ truncate γ t t = cast (refl (extend γ t)) (_ : extend γ (min t t) = extend γ t) (_ : extend γ t = extend γ t)
[PROOFSTEP]
ext x
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
x : ↑I
⊢ ↑(truncate γ t t) x =
    ↑(cast (refl (extend γ t)) (_ : extend γ (min t t) = extend γ t) (_ : extend γ t = extend γ t)) x
[PROOFSTEP]
rw [cast_coe]
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
x : ↑I
⊢ ↑(truncate γ t t) x = ↑(refl (extend γ t)) x
[PROOFSTEP]
simp only [truncate, FunLike.coe, refl, min_def, max_def]
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
x : ↑I
⊢ extend γ (if (if ↑x ≤ t then t else ↑x) ≤ t then if ↑x ≤ t then t else ↑x else t) = extend γ t
[PROOFSTEP]
split_ifs with h₁ h₂
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
x : ↑I
h₁ : ↑x ≤ t
h₂ : t ≤ t
⊢ extend γ t = extend γ t
[PROOFSTEP]
congr
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
x : ↑I
h₁ : ↑x ≤ t
h₂ : ¬t ≤ t
⊢ extend γ t = extend γ t
[PROOFSTEP]
congr
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
t : ℝ
x : ↑I
h₁ : ¬↑x ≤ t
⊢ extend γ t = extend γ t
[PROOFSTEP]
congr
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ extend γ (min 0 0) = a
[PROOFSTEP]
rw [min_self, γ.extend_zero]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ truncate γ 0 0 = cast (refl a) (_ : extend γ (min 0 0) = a) (_ : extend γ 0 = a)
[PROOFSTEP]
convert γ.truncate_self 0
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ extend γ (min 1 1) = b
[PROOFSTEP]
rw [min_self, γ.extend_one]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ truncate γ 1 1 = cast (refl b) (_ : extend γ (min 1 1) = b) (_ : extend γ 1 = b)
[PROOFSTEP]
convert γ.truncate_self 1
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ extend γ (min 0 1) = a
[PROOFSTEP]
simp [zero_le_one, extend_zero]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ extend γ 1 = b
[PROOFSTEP]
simp
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
γ✝ : Path x y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
⊢ truncate γ 0 1 = cast γ (_ : extend γ (min 0 1) = a) (_ : extend γ 1 = b)
[PROOFSTEP]
ext x
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
x : ↑I
⊢ ↑(truncate γ 0 1) x = ↑(cast γ (_ : extend γ (min 0 1) = a) (_ : extend γ 1 = b)) x
[PROOFSTEP]
rw [cast_coe]
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
x : ↑I
⊢ ↑(truncate γ 0 1) x = ↑γ x
[PROOFSTEP]
have : ↑x ∈ (Icc 0 1 : Set ℝ) := x.2
[GOAL]
case a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x✝ y z : X✝
ι : Type u_3
γ✝ : Path x✝ y
X : Type u_4
inst✝ : TopologicalSpace X
a b : X
γ : Path a b
x : ↑I
this : ↑x ∈ Icc 0 1
⊢ ↑(truncate γ 0 1) x = ↑γ x
[PROOFSTEP]
rw [truncate, coe_mk_mk, max_eq_left this.1, min_eq_left this.2, extend_extends']
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ Continuous (↑γ ∘ f)
[PROOFSTEP]
continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ ContinuousMap.toFun (ContinuousMap.mk (↑γ ∘ f)) 0 = x
[PROOFSTEP]
simp [hf₀]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ ContinuousMap.toFun (ContinuousMap.mk (↑γ ∘ f)) 1 = y
[PROOFSTEP]
simp [hf₁]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
⊢ reparam γ id (_ : Continuous id) (_ : id 0 = id 0) (_ : id 1 = id 1) = γ
[PROOFSTEP]
ext
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
x✝ : ↑I
⊢ ↑(reparam γ id (_ : Continuous id) (_ : id 0 = id 0) (_ : id 1 = id 1)) x✝ = ↑γ x✝
[PROOFSTEP]
rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ range ↑(reparam γ f hfcont hf₀ hf₁) = range ↑γ
[PROOFSTEP]
change range (γ ∘ f) = range γ
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ range (↑γ ∘ f) = range ↑γ
[PROOFSTEP]
have : range f = univ := by
  rw [range_iff_surjective]
  intro t
  have h₁ : Continuous (Set.IccExtend (zero_le_one' ℝ) f) := by continuity
  have := intermediate_value_Icc (zero_le_one' ℝ) h₁.continuousOn
  · rw [IccExtend_left, IccExtend_right, Icc.mk_zero, Icc.mk_one, hf₀, hf₁] at this
    rcases this t.2 with ⟨w, hw₁, hw₂⟩
    rw [IccExtend_of_mem _ _ hw₁] at hw₂
    exact ⟨_, hw₂⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ range f = univ
[PROOFSTEP]
rw [range_iff_surjective]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ Surjective f
[PROOFSTEP]
intro t
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
⊢ ∃ a, f a = t
[PROOFSTEP]
have h₁ : Continuous (Set.IccExtend (zero_le_one' ℝ) f) := by continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
t : ↑I
⊢ Continuous (IccExtend (_ : 0 ≤ 1) f)
[PROOFSTEP]
continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : 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
[PROOFSTEP]
have := intermediate_value_Icc (zero_le_one' ℝ) h₁.continuousOn
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : 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
[PROOFSTEP]
rw [IccExtend_left, IccExtend_right, Icc.mk_zero, Icc.mk_one, hf₀, hf₁] at this
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : 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
[PROOFSTEP]
rcases this t.2 with ⟨w, hw₁, hw₂⟩
[GOAL]
case intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : 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
[PROOFSTEP]
rw [IccExtend_of_mem _ _ hw₁] at hw₂
[GOAL]
case intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : 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
[PROOFSTEP]
exact ⟨_, hw₂⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ✝ γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
this : range f = univ
⊢ range (↑γ ∘ f) = range ↑γ
[PROOFSTEP]
rw [range_comp, this, image_univ]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
⊢ reparam (refl x) f hfcont hf₀ hf₁ = refl x
[PROOFSTEP]
ext
[GOAL]
case a.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
γ : Path x y
f : ↑I → ↑I
hfcont : Continuous f
hf₀ : f 0 = 0
hf₁ : f 1 = 1
x✝ : ↑I
⊢ ↑(reparam (refl x) f hfcont hf₀ hf₁) x✝ = ↑(refl x) x✝
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : JoinedIn F x y
⊢ x ∈ F ∧ y ∈ F
[PROOFSTEP]
rcases h with ⟨γ, γ_in⟩
[GOAL]
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
γ : Path x y
γ_in : ∀ (t : ↑I), ↑γ t ∈ F
⊢ x ∈ F ∧ y ∈ F
[PROOFSTEP]
have : γ 0 ∈ F ∧ γ 1 ∈ F := by constructor <;> apply γ_in
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
γ : Path x y
γ_in : ∀ (t : ↑I), ↑γ t ∈ F
⊢ ↑γ 0 ∈ F ∧ ↑γ 1 ∈ F
[PROOFSTEP]
constructor
[GOAL]
case left
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
γ : Path x y
γ_in : ∀ (t : ↑I), ↑γ t ∈ F
⊢ ↑γ 0 ∈ F
[PROOFSTEP]
apply γ_in
[GOAL]
case right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
γ : Path x y
γ_in : ∀ (t : ↑I), ↑γ t ∈ F
⊢ ↑γ 1 ∈ F
[PROOFSTEP]
apply γ_in
[GOAL]
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
γ : Path x y
γ_in : ∀ (t : ↑I), ↑γ t ∈ F
this : ↑γ 0 ∈ F ∧ ↑γ 1 ∈ F
⊢ x ∈ F ∧ y ∈ F
[PROOFSTEP]
simpa using this
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : JoinedIn F x y
⊢ Continuous fun t => { val := ↑(somePath h) t, property := (_ : ↑(somePath h) t ∈ F) }
[PROOFSTEP]
continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : JoinedIn F x y
⊢ ContinuousMap.toFun (ContinuousMap.mk fun t => { val := ↑(somePath h) t, property := (_ : ↑(somePath h) t ∈ F) }) 0 =
    { val := x, property := (_ : x ∈ F) }
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : JoinedIn F x y
⊢ ContinuousMap.toFun (ContinuousMap.mk fun t => { val := ↑(somePath h) t, property := (_ : ↑(somePath h) t ∈ F) }) 1 =
    { val := y, property := (_ : y ∈ F) }
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
x_in : x ∈ F
y_in : y ∈ F
h : Joined { val := x, property := x_in } { val := y, property := y_in }
⊢ ∀ (t : ↑I), ↑(Path.map (Joined.somePath h) (_ : Continuous Subtype.val)) t ∈ F
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ JoinedIn univ x y ↔ Joined x y
[PROOFSTEP]
simp [JoinedIn, Joined, exists_true_iff_nonempty]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : JoinedIn F x y
⊢ JoinedIn F y x
[PROOFSTEP]
cases' h.mem with hx hy
[GOAL]
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
h : JoinedIn F x y
hx : x ∈ F
hy : y ∈ F
⊢ JoinedIn F y x
[PROOFSTEP]
simp_all [joinedIn_iff_joined]
[GOAL]
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
hx✝ : x ∈ F
hy✝ : y ∈ F
h : Joined { val := x, property := (_ : x ∈ F) } { val := y, property := (_ : y ∈ F) }
hx : x ∈ F
hy : y ∈ F
⊢ Joined { val := y, property := (_ : y ∈ F) } { val := x, property := (_ : x ∈ F) }
[PROOFSTEP]
exact h.symm
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
hxy : JoinedIn F x y
hyz : JoinedIn F y z
⊢ JoinedIn F x z
[PROOFSTEP]
cases' hxy.mem with hx hy
[GOAL]
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
hxy : JoinedIn F x y
hyz : JoinedIn F y z
hx : x ∈ F
hy : y ∈ F
⊢ JoinedIn F x z
[PROOFSTEP]
cases' hyz.mem with hx hy
[GOAL]
case intro.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
hxy : JoinedIn F x y
hyz : JoinedIn F y z
hx✝ : x ∈ F
hy✝ hx : y ∈ F
hy : z ∈ F
⊢ JoinedIn F x z
[PROOFSTEP]
simp_all [joinedIn_iff_joined]
[GOAL]
case intro.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
hx✝¹ : x ∈ F
hy✝¹ : y ∈ F
hy✝ : z ∈ F
hxy : Joined { val := x, property := (_ : x ∈ F) } { val := y, property := (_ : y ∈ F) }
hyz : Joined { val := y, property := (_ : y ∈ F) } { val := z, property := (_ : z ∈ F) }
hx✝ : x ∈ F
hx : y ∈ F
hy : z ∈ F
⊢ Joined { val := x, property := (_ : x ∈ F) } { val := z, property := (_ : z ∈ F) }
[PROOFSTEP]
exact hxy.trans hyz
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
⊢ pathComponent x = pathComponent y
[PROOFSTEP]
ext z
[GOAL]
case h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
⊢ z ∈ pathComponent x ↔ z ∈ pathComponent y
[PROOFSTEP]
constructor
[GOAL]
case h.mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
⊢ z ∈ pathComponent x → z ∈ pathComponent y
[PROOFSTEP]
intro h'
[GOAL]
case h.mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
h' : z ∈ pathComponent x
⊢ z ∈ pathComponent y
[PROOFSTEP]
rw [pathComponent_symm]
[GOAL]
case h.mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
h' : z ∈ pathComponent x
⊢ y ∈ pathComponent z
[PROOFSTEP]
exact (h.trans h').symm
[GOAL]
case h.mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
⊢ z ∈ pathComponent y → z ∈ pathComponent x
[PROOFSTEP]
intro h'
[GOAL]
case h.mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
h' : z ∈ pathComponent y
⊢ z ∈ pathComponent x
[PROOFSTEP]
rw [pathComponent_symm] at h' ⊢
[GOAL]
case h.mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z✝ : X
ι : Type u_3
F : Set X
h : x ∈ pathComponent y
z : X
h' : y ∈ pathComponent z
⊢ x ∈ pathComponent z
[PROOFSTEP]
exact h'.trans h
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x y : X
h : y ∈ pathComponent x
⊢ ↑(Joined.somePath h) 0 = x
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x y : X
h : y ∈ pathComponent x
⊢ ↑(Joined.somePath h) 1 = y
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
x : X
⊢ pathComponentIn x univ = pathComponent x
[PROOFSTEP]
simp [pathComponentIn, pathComponent, JoinedIn, Joined, exists_true_iff_nonempty]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ IsPathConnected F ↔ ∃ x, x ∈ F ∧ pathComponentIn x F = F
[PROOFSTEP]
constructor
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ IsPathConnected F → ∃ x, x ∈ F ∧ pathComponentIn x F = F
[PROOFSTEP]
rintro ⟨x, x_in, h⟩
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ (∃ x, x ∈ F ∧ pathComponentIn x F = F) → IsPathConnected F
[PROOFSTEP]
rintro ⟨x, x_in, h⟩
[GOAL]
case mp.intro.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
x : X
x_in : x ∈ F
h : ∀ {y : X}, y ∈ F → JoinedIn F x y
⊢ ∃ x, x ∈ F ∧ pathComponentIn x F = F
[PROOFSTEP]
use x, x_in
[GOAL]
case mpr.intro.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
x : X
x_in : x ∈ F
h : pathComponentIn x F = F
⊢ IsPathConnected F
[PROOFSTEP]
use x, x_in
[GOAL]
case right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
x : X
x_in : x ∈ F
h : ∀ {y : X}, y ∈ F → JoinedIn F x y
⊢ pathComponentIn x F = F
[PROOFSTEP]
ext y
[GOAL]
case right.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x : X
x_in : x ∈ F
h : ∀ {y : X}, y ∈ F → JoinedIn F x y
y : X
⊢ y ∈ pathComponentIn x F ↔ y ∈ F
[PROOFSTEP]
exact ⟨fun hy => hy.mem.2, h⟩
[GOAL]
case right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
x : X
x_in : x ∈ F
h : pathComponentIn x F = F
⊢ ∀ {y : X}, y ∈ F → JoinedIn F x y
[PROOFSTEP]
intro y y_in
[GOAL]
case right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x : X
x_in : x ∈ F
h : pathComponentIn x F = F
y : X
y_in : y ∈ F
⊢ JoinedIn F x y
[PROOFSTEP]
rwa [← h] at y_in
[GOAL]
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x y z : X
ι : Type u_3
F : Set X
Y : Type u_4
inst✝ : TopologicalSpace Y
hF : IsPathConnected F
f : X → Y
hf : ContinuousOn f F
⊢ IsPathConnected (f '' F)
[PROOFSTEP]
rcases hF with ⟨x, x_in, hx⟩
[GOAL]
case intro.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
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
hf : ContinuousOn f F
x : X
x_in : x ∈ F
hx : ∀ {y : X}, y ∈ F → JoinedIn F x y
⊢ IsPathConnected (f '' F)
[PROOFSTEP]
use f x, mem_image_of_mem f x_in
[GOAL]
case right
X : Type u_1
Y✝ : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y✝
x✝ y z : X
ι : Type u_3
F : Set X
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
hf : ContinuousOn f F
x : X
x_in : x ∈ F
hx : ∀ {y : X}, y ∈ F → JoinedIn F x y
⊢ ∀ {y : Y}, y ∈ f '' F → JoinedIn (f '' F) (f x) y
[PROOFSTEP]
rintro _ ⟨y, y_in, rfl⟩
[GOAL]
case right.intro.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
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
hf : ContinuousOn f F
x : X
x_in : x ∈ F
hx : ∀ {y : X}, y ∈ F → JoinedIn F x y
y : X
y_in : y ∈ F
⊢ JoinedIn (f '' F) (f x) (f y)
[PROOFSTEP]
refine ⟨(hx y_in).somePath.map' ?_, fun t ↦ ⟨_, (hx y_in).somePath_mem t, rfl⟩⟩
[GOAL]
case right.intro.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
Y : Type u_4
inst✝ : TopologicalSpace Y
f : X → Y
hf : ContinuousOn f F
x : X
x_in : x ∈ F
hx : ∀ {y : X}, y ∈ F → JoinedIn F x y
y : X
y_in : y ∈ F
⊢ ContinuousOn f (range ↑(JoinedIn.somePath (_ : JoinedIn F x y)))
[PROOFSTEP]
exact hf.mono (range_subset_iff.2 (hx y_in).somePath_mem)
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
x : X
⊢ IsPathConnected {x}
[PROOFSTEP]
refine ⟨x, rfl, ?_⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
x : X
⊢ ∀ {y : X}, y ∈ {x} → JoinedIn {x} x y
[PROOFSTEP]
rintro y rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y✝ z : X
ι : Type u_3
F : Set X
y : X
⊢ JoinedIn {y} y y
[PROOFSTEP]
exact JoinedIn.refl rfl
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F U V : Set X
hU : IsPathConnected U
hV : IsPathConnected V
hUV : Set.Nonempty (U ∩ V)
⊢ IsPathConnected (U ∪ V)
[PROOFSTEP]
rcases hUV with ⟨x, xU, xV⟩
[GOAL]
case intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F U V : Set X
hU : IsPathConnected U
hV : IsPathConnected V
x : X
xU : x ∈ U
xV : x ∈ V
⊢ IsPathConnected (U ∪ V)
[PROOFSTEP]
use x, Or.inl xU
[GOAL]
case right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F U V : Set X
hU : IsPathConnected U
hV : IsPathConnected V
x : X
xU : x ∈ U
xV : x ∈ V
⊢ ∀ {y : X}, y ∈ U ∪ V → JoinedIn (U ∪ V) x y
[PROOFSTEP]
rintro y (yU | yV)
[GOAL]
case right.inl
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F U V : Set X
hU : IsPathConnected U
hV : IsPathConnected V
x : X
xU : x ∈ U
xV : x ∈ V
y : X
yU : y ∈ U
⊢ JoinedIn (U ∪ V) x y
[PROOFSTEP]
exact (hU.joinedIn x xU y yU).mono (subset_union_left U V)
[GOAL]
case right.inr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F U V : Set X
hU : IsPathConnected U
hV : IsPathConnected V
x : X
xU : x ∈ U
xV : x ∈ V
y : X
yV : y ∈ V
⊢ JoinedIn (U ∪ V) x y
[PROOFSTEP]
exact (hV.joinedIn x xV y yV).mono (subset_union_right U V)
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F U W : Set X
hW : IsPathConnected W
hWU : W ⊆ U
⊢ IsPathConnected (Subtype.val ⁻¹' W)
[PROOFSTEP]
rcases hW with ⟨x, x_in, hx⟩
[GOAL]
case intro.intro
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F U W : Set X
hWU : W ⊆ U
x : X
x_in : x ∈ W
hx : ∀ {y : X}, y ∈ W → JoinedIn W x y
⊢ IsPathConnected (Subtype.val ⁻¹' W)
[PROOFSTEP]
use⟨x, hWU x_in⟩, by simp [x_in]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F U W : Set X
hWU : W ⊆ U
x : X
x_in : x ∈ W
hx : ∀ {y : X}, y ∈ W → JoinedIn W x y
⊢ { val := x, property := (_ : x ∈ U) } ∈ Subtype.val ⁻¹' W
[PROOFSTEP]
simp [x_in]
[GOAL]
case right
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F U W : Set X
hWU : W ⊆ U
x : X
x_in : x ∈ W
hx : ∀ {y : X}, y ∈ W → JoinedIn W x y
⊢ ∀ {y : { x // x ∈ U }}, y ∈ Subtype.val ⁻¹' W → JoinedIn (Subtype.val ⁻¹' W) { val := x, property := (_ : x ∈ U) } y
[PROOFSTEP]
rintro ⟨y, hyU⟩ hyW
[GOAL]
case right.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F U W : Set X
hWU : W ⊆ U
x : X
x_in : x ∈ W
hx : ∀ {y : X}, y ∈ W → JoinedIn W x y
y : X
hyU : y ∈ U
hyW : { val := y, property := hyU } ∈ Subtype.val ⁻¹' W
⊢ JoinedIn (Subtype.val ⁻¹' W) { val := x, property := (_ : x ∈ U) } { val := y, property := hyU }
[PROOFSTEP]
exact ⟨(hx hyW).joined_subtype.somePath.map (continuous_inclusion hWU), by simp⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F U W : Set X
hWU : W ⊆ U
x : X
x_in : x ∈ W
hx : ∀ {y : X}, y ∈ W → JoinedIn W x y
y : X
hyU : y ∈ U
hyW : { val := y, property := hyU } ∈ Subtype.val ⁻¹' W
⊢ ∀ (t : ↑I),
    ↑(Path.map
            (Joined.somePath
              (_ :
                Joined { val := x, property := (_ : x ∈ W) }
                  { val := ↑{ val := y, property := hyU }, property := (_ : ↑{ val := y, property := hyU } ∈ W) }))
            (_ : Continuous (inclusion hWU)))
        t ∈
      Subtype.val ⁻¹' W
[PROOFSTEP]
simp
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
⊢ ∃ γ, range ↑γ ⊆ s ∧ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
let p' : ℕ → X := fun k => if h : k < n + 1 then p ⟨k, h⟩ else p ⟨0, n.zero_lt_succ⟩
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
⊢ ∃ γ, range ↑γ ⊆ s ∧ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
obtain ⟨γ, hγ⟩ : ∃ γ : Path (p' 0) (p' n), (∀ i ≤ n, p' i ∈ range γ) ∧ range γ ⊆ s :=
  by
  have hp' : ∀ i ≤ n, p' i ∈ s := by
    intro i hi
    simp [Nat.lt_succ_of_le hi, hp]
  clear_value p'
  clear hp p
  induction' n with n hn
  · use Path.refl (p' 0)
    · constructor
      · rintro i hi
        rw [le_zero_iff.mp hi]
        exact ⟨0, rfl⟩
      · rw [range_subset_iff]
        rintro _x
        exact hp' 0 le_rfl
  · rcases hn fun i hi => hp' i <| Nat.le_succ_of_le hi with ⟨γ₀, hγ₀⟩
    rcases h.joinedIn (p' n) (hp' n n.le_succ) (p' <| n + 1) (hp' (n + 1) <| le_rfl) with ⟨γ₁, hγ₁⟩
    let γ : Path (p' 0) (p' <| n + 1) := γ₀.trans γ₁
    use γ
    have range_eq : range γ = range γ₀ ∪ range γ₁ := γ₀.trans_range γ₁
    constructor
    · rintro i hi
      by_cases hi' : i ≤ n
      · rw [range_eq]
        left
        exact hγ₀.1 i hi'
      · rw [not_le, ← Nat.succ_le_iff] at hi'
        have : i = n.succ := le_antisymm hi hi'
        rw [this]
        use 1
        exact γ.target
    · rw [range_eq]
      apply union_subset hγ₀.2
      rw [range_subset_iff]
      exact hγ₁
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
⊢ ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
have hp' : ∀ i ≤ n, p' i ∈ s := by
  intro i hi
  simp [Nat.lt_succ_of_le hi, hp]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
⊢ ∀ (i : ℕ), i ≤ n → p' i ∈ s
[PROOFSTEP]
intro i hi
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
i : ℕ
hi : i ≤ n
⊢ p' i ∈ s
[PROOFSTEP]
simp [Nat.lt_succ_of_le hi, hp]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
hp' : ∀ (i : ℕ), i ≤ n → p' i ∈ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
clear_value p'
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X
hp' : ∀ (i : ℕ), i ≤ n → p' i ∈ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
clear hp p
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp' : ∀ (i : ℕ), i ≤ n → p' i ∈ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
induction' n with n hn
[GOAL]
case zero
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
use Path.refl (p' 0)
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
⊢ (∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ range ↑(Path.refl (p' 0))) ∧ range ↑(Path.refl (p' 0)) ⊆ s
[PROOFSTEP]
constructor
[GOAL]
case h.left
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
⊢ ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ range ↑(Path.refl (p' 0))
[PROOFSTEP]
rintro i hi
[GOAL]
case h.left
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
i : ℕ
hi : i ≤ Nat.zero
⊢ p' i ∈ range ↑(Path.refl (p' 0))
[PROOFSTEP]
rw [le_zero_iff.mp hi]
[GOAL]
case h.left
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
i : ℕ
hi : i ≤ Nat.zero
⊢ p' 0 ∈ range ↑(Path.refl (p' 0))
[PROOFSTEP]
exact ⟨0, rfl⟩
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
⊢ range ↑(Path.refl (p' 0)) ⊆ s
[PROOFSTEP]
rw [range_subset_iff]
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
⊢ ∀ (y : ↑I), ↑(Path.refl (p' 0)) y ∈ s
[PROOFSTEP]
rintro _x
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n → p' i ∈ s
hp' : ∀ (i : ℕ), i ≤ Nat.zero → p' i ∈ s
_x : ↑I
⊢ ↑(Path.refl (p' 0)) _x ∈ s
[PROOFSTEP]
exact hp' 0 le_rfl
[GOAL]
case succ
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
rcases hn fun i hi => hp' i <| Nat.le_succ_of_le hi with ⟨γ₀, hγ₀⟩
[GOAL]
case succ.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
rcases h.joinedIn (p' n) (hp' n n.le_succ) (p' <| n + 1) (hp' (n + 1) <| le_rfl) with ⟨γ₁, hγ₁⟩
[GOAL]
case succ.intro.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
⊢ ∃ γ, (∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
let γ : Path (p' 0) (p' <| n + 1) := γ₀.trans γ₁
[GOAL]
case succ.intro.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
⊢ ∃ γ, (∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
use γ
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
⊢ (∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
have range_eq : range γ = range γ₀ ∪ range γ₁ := γ₀.trans_range γ₁
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
⊢ (∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
[PROOFSTEP]
constructor
[GOAL]
case h.left
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
⊢ ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ range ↑γ
[PROOFSTEP]
rintro i hi
[GOAL]
case h.left
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
⊢ p' i ∈ range ↑γ
[PROOFSTEP]
by_cases hi' : i ≤ n
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : i ≤ n
⊢ p' i ∈ range ↑γ
[PROOFSTEP]
rw [range_eq]
[GOAL]
case pos
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : i ≤ n
⊢ p' i ∈ range ↑γ₀ ∪ range ↑γ₁
[PROOFSTEP]
left
[GOAL]
case pos.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : i ≤ n
⊢ p' i ∈ range ↑γ₀
[PROOFSTEP]
exact hγ₀.1 i hi'
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : ¬i ≤ n
⊢ p' i ∈ range ↑γ
[PROOFSTEP]
rw [not_le, ← Nat.succ_le_iff] at hi'
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : Nat.succ n ≤ i
⊢ p' i ∈ range ↑γ
[PROOFSTEP]
have : i = n.succ := le_antisymm hi hi'
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : Nat.succ n ≤ i
this : i = Nat.succ n
⊢ p' i ∈ range ↑γ
[PROOFSTEP]
rw [this]
[GOAL]
case neg
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : Nat.succ n ≤ i
this : i = Nat.succ n
⊢ p' (Nat.succ n) ∈ range ↑γ
[PROOFSTEP]
use 1
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
i : ℕ
hi : i ≤ Nat.succ n
hi' : Nat.succ n ≤ i
this : i = Nat.succ n
⊢ ↑γ 1 = p' (Nat.succ n)
[PROOFSTEP]
exact γ.target
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
⊢ range ↑γ ⊆ s
[PROOFSTEP]
rw [range_eq]
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
⊢ range ↑γ₀ ∪ range ↑γ₁ ⊆ s
[PROOFSTEP]
apply union_subset hγ₀.2
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
⊢ range ↑γ₁ ⊆ s
[PROOFSTEP]
rw [range_subset_iff]
[GOAL]
case h.right
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n✝ : ℕ
s : Set X
h : IsPathConnected s
p' : ℕ → X
hp'✝ : ∀ (i : ℕ), i ≤ n✝ → p' i ∈ s
n : ℕ
hn : (∀ (i : ℕ), i ≤ n → p' i ∈ s) → ∃ γ, (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hp' : ∀ (i : ℕ), i ≤ Nat.succ n → p' i ∈ s
γ₀ : Path (p' 0) (p' n)
hγ₀ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ₀) ∧ range ↑γ₀ ⊆ s
γ₁ : Path (p' n) (p' (n + 1))
hγ₁ : ∀ (t : ↑I), ↑γ₁ t ∈ s
γ : Path (p' 0) (p' (n + 1)) := Path.trans γ₀ γ₁
range_eq : range ↑γ = range ↑γ₀ ∪ range ↑γ₁
⊢ ∀ (y : ↑I), ↑γ₁ y ∈ s
[PROOFSTEP]
exact hγ₁
[GOAL]
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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
⊢ ∃ γ, range ↑γ ⊆ s ∧ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
have hpp' : ∀ k < n + 1, p k = p' k := by
  intro k hk
  simp only [hk, dif_pos]
  congr
  ext
  rw [Fin.val_cast_of_lt hk]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
⊢ ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
[PROOFSTEP]
intro k hk
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
k : ℕ
hk : k < n + 1
⊢ p ↑k = p' k
[PROOFSTEP]
simp only [hk, dif_pos]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
k : ℕ
hk : k < n + 1
⊢ p ↑k = p { val := k, isLt := (_ : k < n + 1) }
[PROOFSTEP]
congr
[GOAL]
case e_a
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
k : ℕ
hk : k < n + 1
⊢ ↑k = { val := k, isLt := (_ : k < n + 1) }
[PROOFSTEP]
ext
[GOAL]
case e_a.h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
k : ℕ
hk : k < n + 1
⊢ ↑↑k = ↑{ val := k, isLt := (_ : k < n + 1) }
[PROOFSTEP]
rw [Fin.val_cast_of_lt hk]
[GOAL]
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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
⊢ ∃ γ, range ↑γ ⊆ s ∧ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
use γ.cast (hpp' 0 n.zero_lt_succ) (hpp' n n.lt_succ_self)
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
⊢ range ↑(Path.cast γ (_ : p ↑0 = p' 0) (_ : p ↑n = p' n)) ⊆ s ∧
    ∀ (i : Fin (n + 1)), p i ∈ range ↑(Path.cast γ (_ : p ↑0 = p' 0) (_ : p ↑n = p' n))
[PROOFSTEP]
simp only [γ.cast_coe]
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
⊢ range ↑γ ⊆ s ∧ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
refine' And.intro hγ.2 _
[GOAL]
case h
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
⊢ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
rintro ⟨i, hi⟩
[GOAL]
case h.mk
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
i : ℕ
hi : i < n + 1
⊢ p { val := i, isLt := hi } ∈ range ↑γ
[PROOFSTEP]
suffices p ⟨i, hi⟩ = p' i by convert hγ.1 i (Nat.le_of_lt_succ hi)
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
i : ℕ
hi : i < n + 1
this : p { val := i, isLt := hi } = p' i
⊢ p { val := i, isLt := hi } ∈ range ↑γ
[PROOFSTEP]
convert hγ.1 i (Nat.le_of_lt_succ hi)
[GOAL]
case h.mk
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
i : ℕ
hi : i < n + 1
⊢ p { val := i, isLt := hi } = p' i
[PROOFSTEP]
rw [← hpp' i hi]
[GOAL]
case h.mk
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
i : ℕ
hi : i < n + 1
⊢ p { val := i, isLt := hi } = p ↑i
[PROOFSTEP]
suffices i = i % n.succ by congr
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
i : ℕ
hi : i < n + 1
this : i = i % Nat.succ n
⊢ p { val := i, isLt := hi } = p ↑i
[PROOFSTEP]
congr
[GOAL]
case h.mk
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
p' : ℕ → X := fun k => if h : k < n + 1 then p { val := k, isLt := h } else p { val := 0, isLt := (_ : 0 < Nat.succ n) }
γ : Path (p' 0) (p' n)
hγ : (∀ (i : ℕ), i ≤ n → p' i ∈ range ↑γ) ∧ range ↑γ ⊆ s
hpp' : ∀ (k : ℕ), k < n + 1 → p ↑k = p' k
i : ℕ
hi : i < n + 1
⊢ i = i % Nat.succ n
[PROOFSTEP]
rw [Nat.mod_eq_of_lt hi]
[GOAL]
X✝ : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X✝
inst✝¹ : TopologicalSpace Y
x y z : X✝
ι : Type u_3
F : Set X✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
⊢ ∃ γ t, (∀ (t : ↑I), ↑γ t ∈ s) ∧ ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
rcases h.exists_path_through_family p hp with ⟨γ, hγ⟩
[GOAL]
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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
γ : Path (p 0) (p ↑n)
hγ : range ↑γ ⊆ s ∧ ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
⊢ ∃ γ t, (∀ (t : ↑I), ↑γ t ∈ s) ∧ ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
rcases hγ with ⟨h₁, h₂⟩
[GOAL]
case intro.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
γ : Path (p 0) (p ↑n)
h₁ : range ↑γ ⊆ s
h₂ : ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
⊢ ∃ γ t, (∀ (t : ↑I), ↑γ t ∈ s) ∧ ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
simp only [range, mem_setOf_eq] at h₂
[GOAL]
case intro.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
γ : Path (p 0) (p ↑n)
h₁ : range ↑γ ⊆ s
h₂ : ∀ (i : Fin (n + 1)), ∃ y, ↑γ y = p i
⊢ ∃ γ t, (∀ (t : ↑I), ↑γ t ∈ s) ∧ ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
rw [range_subset_iff] at h₁
[GOAL]
case intro.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
γ : Path (p 0) (p ↑n)
h₁ : ∀ (y : ↑I), ↑γ y ∈ s
h₂ : ∀ (i : Fin (n + 1)), ∃ y, ↑γ y = p i
⊢ ∃ γ t, (∀ (t : ↑I), ↑γ t ∈ s) ∧ ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
choose! t ht using h₂
[GOAL]
case intro.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✝
X : Type u_4
inst✝ : TopologicalSpace X
n : ℕ
s : Set X
h : IsPathConnected s
p : Fin (n + 1) → X
hp : ∀ (i : Fin (n + 1)), p i ∈ s
γ : Path (p 0) (p ↑n)
h₁ : ∀ (y : ↑I), ↑γ y ∈ s
t : Fin (n + 1) → ↑I
ht : ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
⊢ ∃ γ t, (∀ (t : ↑I), ↑γ t ∈ s) ∧ ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
exact ⟨γ, t, h₁, ht⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ PathConnectedSpace X ↔ Nonempty (ZerothHomotopy X) ∧ Subsingleton (ZerothHomotopy X)
[PROOFSTEP]
letI := pathSetoid X
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
⊢ PathConnectedSpace X ↔ Nonempty (ZerothHomotopy X) ∧ Subsingleton (ZerothHomotopy X)
[PROOFSTEP]
constructor
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
⊢ PathConnectedSpace X → Nonempty (ZerothHomotopy X) ∧ Subsingleton (ZerothHomotopy X)
[PROOFSTEP]
intro h
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
h : PathConnectedSpace X
⊢ Nonempty (ZerothHomotopy X) ∧ Subsingleton (ZerothHomotopy X)
[PROOFSTEP]
refine' ⟨(nonempty_quotient_iff _).mpr h.1, ⟨_⟩⟩
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
h : PathConnectedSpace X
⊢ ∀ (a b : ZerothHomotopy X), a = b
[PROOFSTEP]
rintro ⟨x⟩ ⟨y⟩
[GOAL]
case mp.mk.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
h : PathConnectedSpace X
a✝ : ZerothHomotopy X
x : X
b✝ : ZerothHomotopy X
y : X
⊢ Quot.mk Setoid.r x = Quot.mk Setoid.r y
[PROOFSTEP]
exact Quotient.sound (PathConnectedSpace.Joined x y)
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
⊢ Nonempty (ZerothHomotopy X) ∧ Subsingleton (ZerothHomotopy X) → PathConnectedSpace X
[PROOFSTEP]
unfold ZerothHomotopy
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
this : Setoid X := pathSetoid X
⊢ Nonempty (Quotient (pathSetoid X)) ∧ Subsingleton (Quotient (pathSetoid X)) → PathConnectedSpace X
[PROOFSTEP]
rintro ⟨h, h'⟩
[GOAL]
case mpr.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
this : Setoid X := pathSetoid X
h : Nonempty (Quotient (pathSetoid X))
h' : Subsingleton (Quotient (pathSetoid X))
⊢ PathConnectedSpace X
[PROOFSTEP]
skip
[GOAL]
case mpr.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
this : Setoid X := pathSetoid X
h : Nonempty (Quotient (pathSetoid X))
h' : Subsingleton (Quotient (pathSetoid X))
⊢ PathConnectedSpace X
[PROOFSTEP]
exact ⟨(nonempty_quotient_iff _).mp h, fun x y => Quotient.exact <| Subsingleton.elim ⟦x⟧ ⟦y⟧⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ IsPathConnected F ↔ PathConnectedSpace ↑F
[PROOFSTEP]
rw [isPathConnected_iff]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ (Set.Nonempty F ∧ ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y) ↔ PathConnectedSpace ↑F
[PROOFSTEP]
constructor
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ (Set.Nonempty F ∧ ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y) → PathConnectedSpace ↑F
[PROOFSTEP]
rintro ⟨⟨x, x_in⟩, h⟩
[GOAL]
case mp.intro.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
h : ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y
x : X
x_in : x ∈ F
⊢ PathConnectedSpace ↑F
[PROOFSTEP]
refine' ⟨⟨⟨x, x_in⟩⟩, _⟩
[GOAL]
case mp.intro.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
h : ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y
x : X
x_in : x ∈ F
⊢ ∀ (x y : ↑F), Joined x y
[PROOFSTEP]
rintro ⟨y, y_in⟩ ⟨z, z_in⟩
[GOAL]
case mp.intro.intro.mk.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z✝ : X
ι : Type u_3
F : Set X
h : ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y
x : X
x_in : x ∈ F
y : X
y_in : y ∈ F
z : X
z_in : z ∈ F
⊢ Joined { val := y, property := y_in } { val := z, property := z_in }
[PROOFSTEP]
have H := h y y_in z z_in
[GOAL]
case mp.intro.intro.mk.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z✝ : X
ι : Type u_3
F : Set X
h : ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y
x : X
x_in : x ∈ F
y : X
y_in : y ∈ F
z : X
z_in : z ∈ F
H : JoinedIn F y z
⊢ Joined { val := y, property := y_in } { val := z, property := z_in }
[PROOFSTEP]
rwa [joinedIn_iff_joined y_in z_in] at H
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ PathConnectedSpace ↑F → Set.Nonempty F ∧ ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y
[PROOFSTEP]
rintro ⟨⟨x, x_in⟩, H⟩
[GOAL]
case mpr.mk.intro.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
H : ∀ (x y : ↑F), Joined x y
x : X
x_in : x ∈ F
⊢ Set.Nonempty F ∧ ∀ (x : X), x ∈ F → ∀ (y : X), y ∈ F → JoinedIn F x y
[PROOFSTEP]
refine' ⟨⟨x, x_in⟩, fun y y_in z z_in => _⟩
[GOAL]
case mpr.mk.intro.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z✝ : X
ι : Type u_3
F : Set X
H : ∀ (x y : ↑F), Joined x y
x : X
x_in : x ∈ F
y : X
y_in : y ∈ F
z : X
z_in : z ∈ F
⊢ JoinedIn F y z
[PROOFSTEP]
rw [joinedIn_iff_joined y_in z_in]
[GOAL]
case mpr.mk.intro.mk
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z✝ : X
ι : Type u_3
F : Set X
H : ∀ (x y : ↑F), Joined x y
x : X
x_in : x ∈ F
y : X
y_in : y ∈ F
z : X
z_in : z ∈ F
⊢ Joined { val := y, property := y_in } { val := z, property := z_in }
[PROOFSTEP]
apply H
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ PathConnectedSpace X ↔ IsPathConnected univ
[PROOFSTEP]
constructor
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ PathConnectedSpace X → IsPathConnected univ
[PROOFSTEP]
intro h
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : PathConnectedSpace X
⊢ IsPathConnected univ
[PROOFSTEP]
haveI := @PathConnectedSpace.Nonempty X _ _
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : PathConnectedSpace X
this : Nonempty X
⊢ IsPathConnected univ
[PROOFSTEP]
inhabit X
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : PathConnectedSpace X
this : Nonempty X
inhabited_h : Inhabited X
⊢ IsPathConnected univ
[PROOFSTEP]
refine' ⟨default, mem_univ _, _⟩
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : PathConnectedSpace X
this : Nonempty X
inhabited_h : Inhabited X
⊢ ∀ {y : X}, y ∈ univ → JoinedIn univ default y
[PROOFSTEP]
intros y _hy
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y✝ z : X
ι : Type u_3
F : Set X
h : PathConnectedSpace X
this : Nonempty X
inhabited_h : Inhabited X
y : X
_hy : y ∈ univ
⊢ JoinedIn univ default y
[PROOFSTEP]
simpa using PathConnectedSpace.Joined default y
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ IsPathConnected univ → PathConnectedSpace X
[PROOFSTEP]
intro h
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : IsPathConnected univ
⊢ PathConnectedSpace X
[PROOFSTEP]
have h' := h.joinedIn
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
h : IsPathConnected univ
h' : ∀ (x : X), x ∈ univ → ∀ (y : X), y ∈ univ → JoinedIn univ x y
⊢ PathConnectedSpace X
[PROOFSTEP]
cases' h with x h
[GOAL]
case mpr.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
h' : ∀ (x : X), x ∈ univ → ∀ (y : X), y ∈ univ → JoinedIn univ x y
x : X
h : x ∈ univ ∧ ∀ {y : X}, y ∈ univ → JoinedIn univ x y
⊢ PathConnectedSpace X
[PROOFSTEP]
exact ⟨⟨x⟩, by simpa using h'⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
h' : ∀ (x : X), x ∈ univ → ∀ (y : X), y ∈ univ → JoinedIn univ x y
x : X
h : x ∈ univ ∧ ∀ {y : X}, y ∈ univ → JoinedIn univ x y
⊢ ∀ (x y : X), Joined x y
[PROOFSTEP]
simpa using h'
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Continuous f
⊢ IsPathConnected (range f)
[PROOFSTEP]
rw [← image_univ]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Continuous f
⊢ IsPathConnected (f '' univ)
[PROOFSTEP]
exact isPathConnected_univ.image hf
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ PathConnectedSpace Y
[PROOFSTEP]
rw [pathConnectedSpace_iff_univ, ← hf.range_eq]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ IsPathConnected (range f)
[PROOFSTEP]
exact isPathConnected_range hf'
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x y : ℝ
⊢ Continuous fun t => (1 - ↑t) * x + ↑t * y
[PROOFSTEP]
continuity
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x y : ℝ
⊢ ContinuousMap.toFun (ContinuousMap.mk fun t => (1 - ↑t) * x + ↑t * y) 0 = x
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y✝ z : X
ι : Type u_3
F : Set X
x y : ℝ
⊢ ContinuousMap.toFun (ContinuousMap.mk fun t => (1 - ↑t) * x + ↑t * y) 1 = y
[PROOFSTEP]
simp
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ PathConnectedSpace X ↔ ∃ x, pathComponent x = univ
[PROOFSTEP]
simp [pathConnectedSpace_iff_univ, isPathConnected_iff_eq]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
⊢ ConnectedSpace X
[PROOFSTEP]
rw [connectedSpace_iff_connectedComponent]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
⊢ ∃ x, connectedComponent x = univ
[PROOFSTEP]
rcases isPathConnected_iff_eq.mp (pathConnectedSpace_iff_univ.mp ‹_›) with ⟨x, _x_in, hx⟩
[GOAL]
case intro.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
inst✝ : PathConnectedSpace X
x : X
_x_in : x ∈ univ
hx : pathComponentIn x univ = univ
⊢ ∃ x, connectedComponent x = univ
[PROOFSTEP]
use x
[GOAL]
case h
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
x : X
_x_in : x ∈ univ
hx : pathComponentIn x univ = univ
⊢ connectedComponent x = univ
[PROOFSTEP]
rw [← univ_subset_iff]
[GOAL]
case h
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
x : X
_x_in : x ∈ univ
hx : pathComponentIn x univ = univ
⊢ univ ⊆ connectedComponent x
[PROOFSTEP]
exact (by simpa using hx : pathComponent x = univ) ▸ pathComponent_subset_component x
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
x : X
_x_in : x ∈ univ
hx : pathComponentIn x univ = univ
⊢ pathComponent x = univ
[PROOFSTEP]
simpa using hx
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
hF : IsPathConnected F
⊢ IsConnected F
[PROOFSTEP]
rw [isConnected_iff_connectedSpace]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
hF : IsPathConnected F
⊢ ConnectedSpace ↑F
[PROOFSTEP]
rw [isPathConnected_iff_pathConnectedSpace] at hF
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
hF : PathConnectedSpace ↑F
⊢ ConnectedSpace ↑F
[PROOFSTEP]
exact @PathConnectedSpace.connectedSpace _ _ hF
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
⊢ ∃ γ, ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
have : IsPathConnected (univ : Set X) := pathConnectedSpace_iff_univ.mp (by infer_instance)
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
⊢ PathConnectedSpace X
[PROOFSTEP]
infer_instance
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
this : IsPathConnected univ
⊢ ∃ γ, ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
rcases this.exists_path_through_family p fun _i => True.intro with ⟨γ, -, h⟩
[GOAL]
case intro.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
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
this : IsPathConnected univ
γ : Path (p 0) (p ↑n)
h : ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
⊢ ∃ γ, ∀ (i : Fin (n + 1)), p i ∈ range ↑γ
[PROOFSTEP]
exact ⟨γ, h⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
⊢ ∃ γ t, ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
have : IsPathConnected (univ : Set X) := pathConnectedSpace_iff_univ.mp (by infer_instance)
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
⊢ PathConnectedSpace X
[PROOFSTEP]
infer_instance
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
this : IsPathConnected univ
⊢ ∃ γ t, ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
rcases this.exists_path_through_family' p fun _i => True.intro with ⟨γ, t, -, h⟩
[GOAL]
case intro.intro.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
inst✝ : PathConnectedSpace X
n : ℕ
p : Fin (n + 1) → X
this : IsPathConnected univ
γ : Path (p 0) (p ↑n)
t : Fin (n + 1) → ↑I
h : ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
⊢ ∃ γ t, ∀ (i : Fin (n + 1)), ↑γ (t i) = p i
[PROOFSTEP]
exact ⟨γ, t, h⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
⊢ LocPathConnectedSpace X
[PROOFSTEP]
constructor
[GOAL]
case path_connected_basis
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
⊢ ∀ (x : X), HasBasis (𝓝 x) (fun s => s ∈ 𝓝 x ∧ IsPathConnected s) id
[PROOFSTEP]
intro x
[GOAL]
case path_connected_basis
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
⊢ HasBasis (𝓝 x) (fun s => s ∈ 𝓝 x ∧ IsPathConnected s) id
[PROOFSTEP]
apply (h x).to_hasBasis
[GOAL]
case path_connected_basis.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
⊢ ∀ (i : ι), p i → ∃ i', (i' ∈ 𝓝 x ∧ IsPathConnected i') ∧ id i' ⊆ s x i
[PROOFSTEP]
intro i pi
[GOAL]
case path_connected_basis.h
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
i : ι
pi : p i
⊢ ∃ i', (i' ∈ 𝓝 x ∧ IsPathConnected i') ∧ id i' ⊆ s x i
[PROOFSTEP]
exact ⟨s x i, ⟨(h x).mem_of_mem pi, h' x i pi⟩, by rfl⟩
[GOAL]
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
i : ι
pi : p i
⊢ id (s x i) ⊆ s x i
[PROOFSTEP]
rfl
[GOAL]
case path_connected_basis.h'
X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
⊢ ∀ (i' : Set X), i' ∈ 𝓝 x ∧ IsPathConnected i' → ∃ i, p i ∧ s x i ⊆ id i'
[PROOFSTEP]
rintro U ⟨U_in, _hU⟩
[GOAL]
case path_connected_basis.h'.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
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
U : Set X
U_in : U ∈ 𝓝 x
_hU : IsPathConnected U
⊢ ∃ i, p i ∧ s x i ⊆ id U
[PROOFSTEP]
rcases(h x).mem_iff.mp U_in with ⟨i, pi, hi⟩
[GOAL]
case path_connected_basis.h'.intro.intro.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
p : ι → Prop
s : X → ι → Set X
h : ∀ (x : X), HasBasis (𝓝 x) p (s x)
h' : ∀ (x : X) (i : ι), p i → IsPathConnected (s x i)
x : X
U : Set X
U_in : U ∈ 𝓝 x
_hU : IsPathConnected U
i : ι
pi : p i
hi : s x i ⊆ U
⊢ ∃ i, p i ∧ s x i ⊆ id U
[PROOFSTEP]
tauto
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
⊢ PathConnectedSpace X ↔ ConnectedSpace X
[PROOFSTEP]
constructor
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
⊢ PathConnectedSpace X → ConnectedSpace X
[PROOFSTEP]
intro h
[GOAL]
case mp
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
h : PathConnectedSpace X
⊢ ConnectedSpace X
[PROOFSTEP]
infer_instance
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
⊢ ConnectedSpace X → PathConnectedSpace X
[PROOFSTEP]
intro hX
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ PathConnectedSpace X
[PROOFSTEP]
rw [pathConnectedSpace_iff_eq]
[GOAL]
case mpr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ ∃ x, pathComponent x = univ
[PROOFSTEP]
use Classical.arbitrary X
[GOAL]
case h
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ pathComponent (Classical.arbitrary X) = univ
[PROOFSTEP]
refine' IsClopen.eq_univ ⟨_, _⟩ (by simp)
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ Set.Nonempty (pathComponent (Classical.arbitrary X))
[PROOFSTEP]
simp
[GOAL]
case h.refine'_1
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ IsOpen (pathComponent (Classical.arbitrary X))
[PROOFSTEP]
rw [isOpen_iff_mem_nhds]
[GOAL]
case h.refine'_1
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ ∀ (a : X), a ∈ pathComponent (Classical.arbitrary X) → pathComponent (Classical.arbitrary X) ∈ 𝓝 a
[PROOFSTEP]
intro y y_in
[GOAL]
case h.refine'_1
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y✝ z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
y_in : y ∈ pathComponent (Classical.arbitrary X)
⊢ pathComponent (Classical.arbitrary X) ∈ 𝓝 y
[PROOFSTEP]
rcases(path_connected_basis y).ex_mem with ⟨U, ⟨U_in, hU⟩⟩
[GOAL]
case h.refine'_1.intro.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
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
y_in : y ∈ pathComponent (Classical.arbitrary X)
U : Set X
U_in : U ∈ 𝓝 y
hU : IsPathConnected U
⊢ pathComponent (Classical.arbitrary X) ∈ 𝓝 y
[PROOFSTEP]
apply mem_of_superset U_in
[GOAL]
case h.refine'_1.intro.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
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
y_in : y ∈ pathComponent (Classical.arbitrary X)
U : Set X
U_in : U ∈ 𝓝 y
hU : IsPathConnected U
⊢ U ⊆ pathComponent (Classical.arbitrary X)
[PROOFSTEP]
rw [← pathComponent_congr y_in]
[GOAL]
case h.refine'_1.intro.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
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
y_in : y ∈ pathComponent (Classical.arbitrary X)
U : Set X
U_in : U ∈ 𝓝 y
hU : IsPathConnected U
⊢ U ⊆ pathComponent y
[PROOFSTEP]
exact hU.subset_pathComponent (mem_of_mem_nhds U_in)
[GOAL]
case h.refine'_2
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ IsClosed (pathComponent (Classical.arbitrary X))
[PROOFSTEP]
rw [isClosed_iff_nhds]
[GOAL]
case h.refine'_2
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
⊢ ∀ (x : X),
    (∀ (U : Set X), U ∈ 𝓝 x → Set.Nonempty (U ∩ pathComponent (Classical.arbitrary X))) →
      x ∈ pathComponent (Classical.arbitrary X)
[PROOFSTEP]
intro y H
[GOAL]
case h.refine'_2
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y✝ z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
H : ∀ (U : Set X), U ∈ 𝓝 y → Set.Nonempty (U ∩ pathComponent (Classical.arbitrary X))
⊢ y ∈ pathComponent (Classical.arbitrary X)
[PROOFSTEP]
rcases(path_connected_basis y).ex_mem with ⟨U, ⟨U_in, hU⟩⟩
[GOAL]
case h.refine'_2.intro.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
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
H : ∀ (U : Set X), U ∈ 𝓝 y → Set.Nonempty (U ∩ pathComponent (Classical.arbitrary X))
U : Set X
U_in : U ∈ 𝓝 y
hU : IsPathConnected U
⊢ y ∈ pathComponent (Classical.arbitrary X)
[PROOFSTEP]
rcases H U U_in with ⟨z, hz, hz'⟩
[GOAL]
case h.refine'_2.intro.intro.intro.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
inst✝ : LocPathConnectedSpace X
hX : ConnectedSpace X
y : X
H : ∀ (U : Set X), U ∈ 𝓝 y → Set.Nonempty (U ∩ pathComponent (Classical.arbitrary X))
U : Set X
U_in : U ∈ 𝓝 y
hU : IsPathConnected U
z : X
hz : z ∈ U
hz' : z ∈ pathComponent (Classical.arbitrary X)
⊢ y ∈ pathComponent (Classical.arbitrary X)
[PROOFSTEP]
exact (hU.joinedIn z hz y <| mem_of_mem_nhds U_in).joined.mem_pathComponent hz'
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
⊢ ∀ (x : ↑U), HasBasis (𝓝 x) (fun s => s ∈ 𝓝 x ∧ IsPathConnected s) id
[PROOFSTEP]
rintro ⟨x, x_in⟩
[GOAL]
case mk
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
⊢ HasBasis (𝓝 { val := x, property := x_in }) (fun s => s ∈ 𝓝 { val := x, property := x_in } ∧ IsPathConnected s) id
[PROOFSTEP]
rw [nhds_subtype_eq_comap]
[GOAL]
case mk
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
⊢ HasBasis (comap Subtype.val (𝓝 x)) (fun s => s ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected s) id
[PROOFSTEP]
constructor
[GOAL]
case mk.mem_iff'
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
⊢ ∀ (t : Set ↑U), t ∈ comap Subtype.val (𝓝 x) ↔ ∃ i, (i ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected i) ∧ id i ⊆ t
[PROOFSTEP]
intro V
[GOAL]
case mk.mem_iff'
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V : Set ↑U
⊢ V ∈ comap Subtype.val (𝓝 x) ↔ ∃ i, (i ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected i) ∧ id i ⊆ V
[PROOFSTEP]
rw [(HasBasis.comap ((↑) : U → X) (pathConnected_subset_basis h x_in)).mem_iff]
[GOAL]
case mk.mem_iff'
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V : Set ↑U
⊢ (∃ i, (i ∈ 𝓝 x ∧ IsPathConnected i ∧ i ⊆ U) ∧ Subtype.val ⁻¹' id i ⊆ V) ↔
    ∃ i, (i ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected i) ∧ id i ⊆ V
[PROOFSTEP]
constructor
[GOAL]
case mk.mem_iff'.mp
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V : Set ↑U
⊢ (∃ i, (i ∈ 𝓝 x ∧ IsPathConnected i ∧ i ⊆ U) ∧ Subtype.val ⁻¹' id i ⊆ V) →
    ∃ i, (i ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected i) ∧ id i ⊆ V
[PROOFSTEP]
rintro ⟨W, ⟨W_in, hW, hWU⟩, hWV⟩
[GOAL]
case mk.mem_iff'.mp.intro.intro.intro.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
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V : Set ↑U
W : Set X
hWV : Subtype.val ⁻¹' id W ⊆ V
W_in : W ∈ 𝓝 x
hW : IsPathConnected W
hWU : W ⊆ U
⊢ ∃ i, (i ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected i) ∧ id i ⊆ V
[PROOFSTEP]
exact ⟨Subtype.val ⁻¹' W, ⟨⟨preimage_mem_comap W_in, hW.preimage_coe hWU⟩, hWV⟩⟩
[GOAL]
case mk.mem_iff'.mpr
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x✝ y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V : Set ↑U
⊢ (∃ i, (i ∈ comap Subtype.val (𝓝 x) ∧ IsPathConnected i) ∧ id i ⊆ V) →
    ∃ i, (i ∈ 𝓝 x ∧ IsPathConnected i ∧ i ⊆ U) ∧ Subtype.val ⁻¹' id i ⊆ V
[PROOFSTEP]
rintro ⟨W, ⟨W_in, hW⟩, hWV⟩
[GOAL]
case mk.mem_iff'.mpr.intro.intro.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
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V W : Set ↑U
hWV : id W ⊆ V
W_in : W ∈ comap Subtype.val (𝓝 x)
hW : IsPathConnected W
⊢ ∃ i, (i ∈ 𝓝 x ∧ IsPathConnected i ∧ i ⊆ U) ∧ Subtype.val ⁻¹' id i ⊆ V
[PROOFSTEP]
refine'
  ⟨(↑) '' W,
    ⟨Filter.image_coe_mem_of_mem_comap (IsOpen.mem_nhds h x_in) W_in, hW.image continuous_subtype_val,
      Subtype.coe_image_subset U W⟩,
    _⟩
[GOAL]
case mk.mem_iff'.mpr.intro.intro.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
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x : X
x_in : x ∈ U
V W : Set ↑U
hWV : id W ⊆ V
W_in : W ∈ comap Subtype.val (𝓝 x)
hW : IsPathConnected W
⊢ Subtype.val ⁻¹' id (Subtype.val '' W) ⊆ V
[PROOFSTEP]
rintro x ⟨y, ⟨y_in, hy⟩⟩
[GOAL]
case mk.mem_iff'.mpr.intro.intro.intro.intro.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
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x✝ : X
x_in : x✝ ∈ U
V W : Set ↑U
hWV : id W ⊆ V
W_in : W ∈ comap Subtype.val (𝓝 x✝)
hW : IsPathConnected W
x : { x // x ∈ U }
y : ↑U
y_in : y ∈ W
hy : ↑y = ↑x
⊢ x ∈ V
[PROOFSTEP]
rw [← Subtype.coe_injective hy]
[GOAL]
case mk.mem_iff'.mpr.intro.intro.intro.intro.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
inst✝ : LocPathConnectedSpace X
U : Set X
h : IsOpen U
x✝ : X
x_in : x✝ ∈ U
V W : Set ↑U
hWV : id W ⊆ V
W_in : W ∈ comap Subtype.val (𝓝 x✝)
hW : IsPathConnected W
x : { x // x ∈ U }
y : ↑U
y_in : y ∈ W
hy : ↑y = ↑x
⊢ y ∈ V
[PROOFSTEP]
tauto
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
⊢ IsPathConnected U ↔ IsConnected U
[PROOFSTEP]
rw [isConnected_iff_connectedSpace, isPathConnected_iff_pathConnectedSpace]
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
⊢ PathConnectedSpace ↑U ↔ ConnectedSpace ↑U
[PROOFSTEP]
haveI := locPathConnected_of_isOpen U_op
[GOAL]
X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
this : LocPathConnectedSpace ↑U
⊢ PathConnectedSpace ↑U ↔ ConnectedSpace ↑U
[PROOFSTEP]
exact pathConnectedSpace_iff_connectedSpace