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

tactic: have h₁' := Path.continuous_uncurry_extend_of_continuous_family γ₁ h₁
state_before: 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✝ : TopologicalSpace ι
a b c : ι → X
γ₁ : (t : ι) → Path (a t) (b t)
h₁ : Continuous ↿γ₁
γ₂ : (t : ι) → Path (b t) (c t)
h₂ : Continuous ↿γ₂
⊢ Continuous ↿fun t => (γ₁ t).trans (γ₂ t)
state_after: 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✝ : 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 => (γ₁ t).extend
⊢ Continuous ↿fun t => (γ₁ t).trans (γ₂ t)

tactic: have h₂' := Path.continuous_uncurry_extend_of_continuous_family γ₂ h₂
state_before: 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✝ : 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 => (γ₁ t).extend
⊢ Continuous ↿fun t => (γ₁ t).trans (γ₂ t)
state_after: 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✝ : 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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous ↿fun t => (γ₁ t).trans (γ₂ t)

tactic: refine Continuous.if_le ?_ ?_ (continuous_subtype_val.comp continuous_snd) continuous_const ?_
state_before: 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✝ : 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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous fun p =>
    { toFun := fun x => if ↑x ≤ 1 / 2 then (γ₁ p.1).extend (2 * ↑x) else (γ₂ p.1).extend (2 * ↑x - 1),
        continuous_toFun := ⋯, source' := ⋯, target' := ⋯ }
      p.2
state_after: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous fun p => (γ₁ p.1).extend (2 * ↑p.2)

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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous fun p => (γ₂ p.1).extend (2 * ↑p.2 - 1)

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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ ∀ (x : ι × ↑I), ↑x.2 = 1 / 2 → (γ₁ x.1).extend (2 * ↑x.2) = (γ₂ x.1).extend (2 * ↑x.2 - 1)

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_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✝ : 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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous fun p => (γ₁ p.1).extend (2 * ↑p.2)
state_after: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous ((fun p => (γ₁ p.1).extend p.2) ∘ Prod.map id fun x => 2 * ↑x)

tactic: exact h₁'.comp (continuous_id.prod_map <| continuous_const.mul continuous_subtype_val)
state_before: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous ((fun p => (γ₁ p.1).extend p.2) ∘ Prod.map id fun x => 2 * ↑x)
state_after: no goals

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_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✝ : 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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous fun p => (γ₂ p.1).extend (2 * ↑p.2 - 1)
state_after: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous ((fun p => (γ₂ p.1).extend p.2) ∘ Prod.map id fun x => 2 * ↑x - 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_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✝ : 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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ Continuous ((fun p => (γ₂ p.1).extend p.2) ∘ Prod.map id fun x => 2 * ↑x - 1)
state_after: no goals

tactic: rintro st hst
state_before: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
⊢ ∀ (x : ι × ↑I), ↑x.2 = 1 / 2 → (γ₁ x.1).extend (2 * ↑x.2) = (γ₂ x.1).extend (2 * ↑x.2 - 1)
state_after: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
st : ι × ↑I
hst : ↑st.2 = 1 / 2
⊢ (γ₁ st.1).extend (2 * ↑st.2) = (γ₂ st.1).extend (2 * ↑st.2 - 1)

tactic: simp [hst, mul_inv_cancel (two_ne_zero' ℝ)]
state_before: 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
ι : Type u_4
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 => (γ₁ t).extend
h₂' : Continuous ↿fun t => (γ₂ t).extend
st : ι × ↑I
hst : ↑st.2 = 1 / 2
⊢ (γ₁ st.1).extend (2 * ↑st.2) = (γ₂ st.1).extend (2 * ↑st.2 - 1)
state_after: no goals