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

tactic: have h₁' := Path.continuous_uncurry_extend_of_continuous_family γ₁ h₁
state_before: X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: have h₂' := Path.continuous_uncurry_extend_of_continuous_family γ₂ h₂
state_before: X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: refine' Continuous.if_le _ _ (continuous_subtype_val.comp continuous_snd) continuous_const _
state_before: X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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

tactic: change
  Continuous ((fun p : ι × ℝ => (γ₁ p.1).extend p.2) ∘ Prod.map id (fun x => 2 * x : I → ℝ))
state_before: case refine'_1
X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: exact h₁'.comp (continuous_id.prod_map <| continuous_const.mul continuous_subtype_val)
state_before: case refine'_1
X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: change
  Continuous ((fun p : ι × ℝ => (γ₂ p.1).extend p.2) ∘ Prod.map id (fun x => 2 * x - 1 : I → ℝ))
state_before: case refine'_2
X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: exact
  h₂'.comp
    (continuous_id.prod_map <|
      (continuous_const.mul continuous_subtype_val).sub continuous_const)
state_before: case refine'_2
X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: rintro st hst
state_before: case refine'_3
X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)

tactic: simp [hst, mul_inv_cancel (two_ne_zero' ℝ)]
state_before: case refine'_3
X✝ : Type ?u.329358
Y : Type ?u.329361
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
x y z : X✝
ι✝ : Type ?u.329376
γ : Path x y
X : Type u_1
ι : Type u_2
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)