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

tactic: ext t
state_before: X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
⊢ symm (trans γ γ') = trans (symm γ') (symm γ)

tactic: simp only [trans_apply, ← one_div, symm_apply, not_le, Function.comp_apply]
state_before: case a.h
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
⊢ ↑(symm (trans γ γ')) t = ↑(trans (symm γ') (symm γ)) t

tactic: split_ifs with h h₁ h₂ <;> rw [coe_symm_eq] at h
state_before: case a.h
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: have ht : (t : ℝ) = 1 / 2 := by
  refine le_antisymm h₁ ?_
  rw [sub_le_comm] at h
  norm_num at h
  exact h
state_before: case a.h.inl.inl
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: simp_rw [unitInterval.symm, ht]
state_before: case a.h.inl.inl
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: norm_num
state_before: case a.h.inl.inl
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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))) }

tactic: refine le_antisymm h₁ ?_
state_before: X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
⊢ ↑t = 1 / 2

tactic: rw [sub_le_comm] at h
state_before: X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - ↑t ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
⊢ 1 / 2 ≤ ↑t

tactic: norm_num at h
state_before: X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h : 1 - 1 / 2 ≤ ↑t
h₁ : ↑t ≤ 1 / 2
⊢ 1 / 2 ≤ ↑t

tactic: exact h
state_before: X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ↑(σ t) ≤ 1 / 2
h₁ : ↑t ≤ 1 / 2
h : 1 / 2 ≤ ↑t
⊢ 1 / 2 ≤ ↑t

tactic: refine' congr_arg _ (Subtype.ext _)
state_before: case a.h.inl.inr
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: norm_num [unitInterval.symm, sub_sub_eq_add_sub, mul_sub]
state_before: case a.h.inl.inr
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: ring
state_before: case a.h.inl.inr
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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)

tactic: refine' congr_arg _ (Subtype.ext _)
state_before: case a.h.inr.inl
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: norm_num [mul_sub, h]
state_before: case a.h.inr.inl
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: ring
state_before: case a.h.inr.inl
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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

tactic: exfalso
state_before: case a.h.inr.inr
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : 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) })

tactic: rw [sub_le_comm] at h
state_before: case a.h.inr.inr.h
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - ↑t ≤ 1 / 2
h₂ : ¬↑t ≤ 1 / 2
⊢ False

tactic: norm_num at h h₂
state_before: case a.h.inr.inr.h
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ¬1 - 1 / 2 ≤ ↑t
h₂ : ¬↑t ≤ 1 / 2
⊢ False

tactic: exact (h.trans h₂).ne rfl
state_before: case a.h.inr.inr.h
X : Type u_1
Y : Type ?u.237548
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type ?u.237563
γ✝ γ : Path x y
γ' : Path y z
t : ↑I
h✝ : ¬↑(σ t) ≤ 1 / 2
h : ↑t < 1 / 2
h₂ : 1 / 2 < ↑t
⊢ False