Theorem: IsometryEquiv.map_midpoint
File: Mathlib/Analysis/NormedSpace/MazurUlam.lean

tactic: set e : PE ≃ᵢ PE :=
  ((f.trans <| (pointReflection ℝ <| midpoint ℝ (f x) (f y)).toIsometryEquiv).trans f.symm).trans
    (pointReflection ℝ <| midpoint ℝ x y).toIsometryEquiv
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
⊢ ↑f (midpoint ℝ x y) = midpoint ℝ (↑f x) (↑f y)

tactic: have hx : e x = x := by simp
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
⊢ ↑f (midpoint ℝ x y) = midpoint ℝ (↑f x) (↑f y)

tactic: have hy : e y = y := by simp
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
hx : ↑e x = x
⊢ ↑f (midpoint ℝ x y) = midpoint ℝ (↑f x) (↑f y)

tactic: have hm := e.midpoint_fixed hx hy
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
hx : ↑e x = x
hy : ↑e y = y
⊢ ↑f (midpoint ℝ x y) = midpoint ℝ (↑f x) (↑f y)

tactic: simp only [trans_apply] at hm
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
hx : ↑e x = x
hy : ↑e y = y
hm : ↑e (midpoint ℝ x y) = midpoint ℝ x y
⊢ ↑f (midpoint ℝ x y) = midpoint ℝ (↑f x) (↑f y)

tactic: rwa [← eq_symm_apply, toIsometryEquiv_symm, pointReflection_symm, coe_toIsometryEquiv,
  coe_toIsometryEquiv, pointReflection_self, symm_apply_eq, @pointReflection_fixed_iff] at hm
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
hx : ↑e x = x
hy : ↑e y = y
hm :
  ↑(toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
      (↑(IsometryEquiv.symm f)
        (↑(toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))) (↑f (midpoint ℝ x y)))) =
    midpoint ℝ x y
⊢ ↑f (midpoint ℝ x y) = midpoint ℝ (↑f x) (↑f y)

tactic: simp
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
⊢ ↑e x = x

tactic: simp
state_before: E : Type u_3
PE : Type u_1
F : Type u_4
PF : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : MetricSpace PE
inst✝⁴ : NormedAddTorsor E PE
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : MetricSpace PF
inst✝ : NormedAddTorsor F PF
f : PE ≃ᵢ PF
x y : PE
e : PE ≃ᵢ PE :=
  IsometryEquiv.trans
    (IsometryEquiv.trans (IsometryEquiv.trans f (toIsometryEquiv (pointReflection ℝ (midpoint ℝ (↑f x) (↑f y)))))
      (IsometryEquiv.symm f))
    (toIsometryEquiv (pointReflection ℝ (midpoint ℝ x y)))
hx : ↑e x = x
⊢ ↑e y = y