[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
⊢ ‖x - y‖ * ‖x - y‖ = ‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - 2 * ‖x‖ * ‖y‖ * Real.cos (angle x y)
[PROOFSTEP]
rw [show 2 * ‖x‖ * ‖y‖ * Real.cos (angle x y) = 2 * (Real.cos (angle x y) * (‖x‖ * ‖y‖)) by ring,
  cos_angle_mul_norm_mul_norm, ← real_inner_self_eq_norm_mul_norm, ← real_inner_self_eq_norm_mul_norm, ←
  real_inner_self_eq_norm_mul_norm, real_inner_sub_sub_self, sub_add_eq_add_sub]
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
⊢ 2 * ‖x‖ * ‖y‖ * Real.cos (angle x y) = 2 * (Real.cos (angle x y) * (‖x‖ * ‖y‖))
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ‖x‖ = ‖y‖
⊢ angle x (x - y) = angle y (y - x)
[PROOFSTEP]
refine' Real.injOn_cos ⟨angle_nonneg _ _, angle_le_pi _ _⟩ ⟨angle_nonneg _ _, angle_le_pi _ _⟩ _
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ‖x‖ = ‖y‖
⊢ Real.cos (angle x (x - y)) = Real.cos (angle y (y - x))
[PROOFSTEP]
rw [cos_angle, cos_angle, h, ← neg_sub, norm_neg, neg_sub, inner_sub_right, inner_sub_right,
  real_inner_self_eq_norm_mul_norm, real_inner_self_eq_norm_mul_norm, h, real_inner_comm x y]
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : angle x (x - y) = angle y (y - x)
hpi : angle x y ≠ π
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
replace h :=
  Real.arccos_injOn (abs_le.mp (abs_real_inner_div_norm_mul_norm_le_one x (x - y)))
    (abs_le.mp (abs_real_inner_div_norm_mul_norm_le_one y (y - x))) h
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
h : inner x (x - y) / (‖x‖ * ‖x - y‖) = inner y (y - x) / (‖y‖ * ‖y - x‖)
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
by_cases hxy : x = y
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
h : inner x (x - y) / (‖x‖ * ‖x - y‖) = inner y (y - x) / (‖y‖ * ‖y - x‖)
hxy : x = y
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [hxy]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
h : inner x (x - y) / (‖x‖ * ‖x - y‖) = inner y (y - x) / (‖y‖ * ‖y - x‖)
hxy : ¬x = y
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [← norm_neg (y - x), neg_sub, mul_comm, mul_comm ‖y‖, div_eq_mul_inv, div_eq_mul_inv, mul_inv_rev, mul_inv_rev, ←
  mul_assoc, ← mul_assoc] at h 
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
h : inner x (x - y) * ‖x‖⁻¹ * ‖x - y‖⁻¹ = inner y (y - x) * ‖y‖⁻¹ * ‖x - y‖⁻¹
hxy : ¬x = y
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
replace h := mul_right_cancel₀ (inv_ne_zero fun hz => hxy (eq_of_sub_eq_zero (norm_eq_zero.1 hz))) h
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : inner x (x - y) * ‖x‖⁻¹ = inner y (y - x) * ‖y‖⁻¹
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [inner_sub_right, inner_sub_right, real_inner_comm x y, real_inner_self_eq_norm_mul_norm,
  real_inner_self_eq_norm_mul_norm, mul_sub_right_distrib, mul_sub_right_distrib, mul_self_mul_inv, mul_self_mul_inv,
  sub_eq_sub_iff_sub_eq_sub, ← mul_sub_left_distrib] at h 
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖x‖ - ‖y‖ = inner x y * (‖x‖⁻¹ - ‖y‖⁻¹)
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
by_cases hx0 : x = 0
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖x‖ - ‖y‖ = inner x y * (‖x‖⁻¹ - ‖y‖⁻¹)
hx0 : x = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [hx0, norm_zero, inner_zero_left, zero_mul, zero_sub, neg_eq_zero] at h 
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖y‖ = 0
hx0 : x = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [hx0, norm_zero, h]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖x‖ - ‖y‖ = inner x y * (‖x‖⁻¹ - ‖y‖⁻¹)
hx0 : ¬x = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
by_cases hy0 : y = 0
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖x‖ - ‖y‖ = inner x y * (‖x‖⁻¹ - ‖y‖⁻¹)
hx0 : ¬x = 0
hy0 : y = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [hy0, norm_zero, inner_zero_right, zero_mul, sub_zero] at h 
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖x‖ = 0
hx0 : ¬x = 0
hy0 : y = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [hy0, norm_zero, h]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : ‖x‖ - ‖y‖ = inner x y * (‖x‖⁻¹ - ‖y‖⁻¹)
hx0 : ¬x = 0
hy0 : ¬y = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
rw [inv_sub_inv (fun hz => hx0 (norm_eq_zero.1 hz)) fun hz => hy0 (norm_eq_zero.1 hz), ← neg_sub, ← mul_div_assoc,
  mul_comm, mul_div_assoc, ← mul_neg_one] at h 
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : (‖y‖ - ‖x‖) * -1 = (‖y‖ - ‖x‖) * (inner x y / (‖x‖ * ‖y‖))
hx0 : ¬x = 0
hy0 : ¬y = 0
⊢ ‖x‖ = ‖y‖
[PROOFSTEP]
symm
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : (‖y‖ - ‖x‖) * -1 = (‖y‖ - ‖x‖) * (inner x y / (‖x‖ * ‖y‖))
hx0 : ¬x = 0
hy0 : ¬y = 0
⊢ ‖y‖ = ‖x‖
[PROOFSTEP]
by_contra hyx
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
h : (‖y‖ - ‖x‖) * -1 = (‖y‖ - ‖x‖) * (inner x y / (‖x‖ * ‖y‖))
hx0 : ¬x = 0
hy0 : ¬y = 0
hyx : ¬‖y‖ = ‖x‖
⊢ False
[PROOFSTEP]
replace h := (mul_left_cancel₀ (sub_ne_zero_of_ne hyx) h).symm
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
hx0 : ¬x = 0
hy0 : ¬y = 0
hyx : ¬‖y‖ = ‖x‖
h : inner x y / (‖x‖ * ‖y‖) = -1
⊢ False
[PROOFSTEP]
rw [real_inner_div_norm_mul_norm_eq_neg_one_iff, ← angle_eq_pi_iff] at h 
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hpi : angle x y ≠ π
hxy : ¬x = y
hx0 : ¬x = 0
hy0 : ¬y = 0
hyx : ¬‖y‖ = ‖x‖
h : angle x y = π
⊢ False
[PROOFSTEP]
exact hpi h
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ Real.cos (angle x (x - y) + angle y (y - x)) = -Real.cos (angle x y)
[PROOFSTEP]
by_cases hxy : x = y
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : x = y
⊢ Real.cos (angle x (x - y) + angle y (y - x)) = -Real.cos (angle x y)
[PROOFSTEP]
rw [hxy, angle_self hy]
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : x = y
⊢ Real.cos (angle y (y - y) + angle y (y - y)) = -Real.cos 0
[PROOFSTEP]
simp
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
⊢ Real.cos (angle x (x - y) + angle y (y - x)) = -Real.cos (angle x y)
[PROOFSTEP]
rw [Real.cos_add, cos_angle, cos_angle, cos_angle]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
⊢ inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
      Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) =
    -(inner x y / (‖x‖ * ‖y‖))
[PROOFSTEP]
have hxn : ‖x‖ ≠ 0 := fun h => hx (norm_eq_zero.1 h)
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
⊢ inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
      Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) =
    -(inner x y / (‖x‖ * ‖y‖))
[PROOFSTEP]
have hyn : ‖y‖ ≠ 0 := fun h => hy (norm_eq_zero.1 h)
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
⊢ inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
      Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) =
    -(inner x y / (‖x‖ * ‖y‖))
[PROOFSTEP]
have hxyn : ‖x - y‖ ≠ 0 := fun h => hxy (eq_of_sub_eq_zero (norm_eq_zero.1 h))
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
      Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) =
    -(inner x y / (‖x‖ * ‖y‖))
[PROOFSTEP]
apply mul_right_cancel₀ hxn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
        Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
      ‖x‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖
[PROOFSTEP]
apply mul_right_cancel₀ hyn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
          Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
        ‖x‖ *
      ‖y‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖
[PROOFSTEP]
apply mul_right_cancel₀ hxyn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
            Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
          ‖x‖ *
        ‖y‖ *
      ‖x - y‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖
[PROOFSTEP]
apply mul_right_cancel₀ hxyn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
              Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖)) :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
              Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H2 :
  ⟪x, x⟫ * (⟪x, x⟫ - ⟪x, y⟫ - (⟪x, y⟫ - ⟪y, y⟫)) - (⟪x, x⟫ - ⟪x, y⟫) * (⟪x, x⟫ - ⟪x, y⟫) =
    ⟪x, x⟫ * ⟪y, y⟫ - ⟪x, y⟫ * ⟪x, y⟫ :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
⊢ inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
H2 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
              Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H3 :
  ⟪y, y⟫ * (⟪y, y⟫ - ⟪x, y⟫ - (⟪x, y⟫ - ⟪x, x⟫)) - (⟪y, y⟫ - ⟪x, y⟫) * (⟪y, y⟫ - ⟪x, y⟫) =
    ⟪x, x⟫ * ⟪y, y⟫ - ⟪x, y⟫ * ⟪x, y⟫ :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
H2 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
H2 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
H3 :
  inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ (inner x (x - y) / (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) -
              Real.sin (angle x (x - y)) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    -(inner x y / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
rw [mul_sub_right_distrib, mul_sub_right_distrib, mul_sub_right_distrib, mul_sub_right_distrib, H1,
  sin_angle_mul_norm_mul_norm, norm_sub_rev x y, sin_angle_mul_norm_mul_norm, norm_sub_rev y x, inner_sub_left,
  inner_sub_left, inner_sub_right, inner_sub_right, inner_sub_right, inner_sub_right, real_inner_comm x y, H2, H3,
  Real.mul_self_sqrt (sub_nonneg_of_le (real_inner_mul_inner_self_le x y)), real_inner_self_eq_norm_mul_norm,
  real_inner_self_eq_norm_mul_norm, real_inner_eq_norm_mul_self_add_norm_mul_self_sub_norm_sub_mul_self_div_two]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
H2 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
H3 :
  inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ (‖x‖ * ‖x‖ - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2) / (‖x‖ * ‖x - y‖) *
                ((‖y‖ * ‖y‖ - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2) / (‖y‖ * ‖x - y‖)) *
              ‖x‖ *
            ‖y‖ *
          ‖x - y‖ *
        ‖x - y‖ -
      (‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) -
        (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2 * ((‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2)) =
    -((‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2 / (‖x‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
field_simp [hxn, hyn, hxyn]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖x - y‖))
H2 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
H3 :
  inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ ((‖x‖ * ‖x‖ * 2 - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) *
                    (‖y‖ * ‖y‖ * 2 - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) *
                  ‖x‖ *
                ‖y‖ *
              ‖x - y‖ *
            ‖x - y‖ *
          (2 * 2) -
        2 * (‖x‖ * ‖x - y‖) * (2 * (‖y‖ * ‖x - y‖)) *
          (‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) * (2 * 2) -
            (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖))) *
      (2 * (‖x‖ * ‖y‖)) =
    (‖x - y‖ * ‖x - y‖ - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖ *
      (2 * (‖x‖ * ‖x - y‖) * (2 * (‖y‖ * ‖x - y‖)) * (2 * 2))
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ Real.sin (angle x (x - y) + angle y (y - x)) = Real.sin (angle x y)
[PROOFSTEP]
by_cases hxy : x = y
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : x = y
⊢ Real.sin (angle x (x - y) + angle y (y - x)) = Real.sin (angle x y)
[PROOFSTEP]
rw [hxy, angle_self hy]
[GOAL]
case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : x = y
⊢ Real.sin (angle y (y - y) + angle y (y - y)) = Real.sin 0
[PROOFSTEP]
simp
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
⊢ Real.sin (angle x (x - y) + angle y (y - x)) = Real.sin (angle x y)
[PROOFSTEP]
rw [Real.sin_add, cos_angle, cos_angle]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
⊢ Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
      inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x)) =
    Real.sin (angle x y)
[PROOFSTEP]
have hxn : ‖x‖ ≠ 0 := fun h => hx (norm_eq_zero.1 h)
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
⊢ Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
      inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x)) =
    Real.sin (angle x y)
[PROOFSTEP]
have hyn : ‖y‖ ≠ 0 := fun h => hy (norm_eq_zero.1 h)
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
⊢ Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
      inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x)) =
    Real.sin (angle x y)
[PROOFSTEP]
have hxyn : ‖x - y‖ ≠ 0 := fun h => hxy (eq_of_sub_eq_zero (norm_eq_zero.1 h))
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
      inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x)) =
    Real.sin (angle x y)
[PROOFSTEP]
apply mul_right_cancel₀ hxn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
        inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
      ‖x‖ =
    Real.sin (angle x y) * ‖x‖
[PROOFSTEP]
apply mul_right_cancel₀ hyn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
          inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
        ‖x‖ *
      ‖y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖
[PROOFSTEP]
apply mul_right_cancel₀ hxyn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
            inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
          ‖x‖ *
        ‖y‖ *
      ‖x - y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖ * ‖x - y‖
[PROOFSTEP]
apply mul_right_cancel₀ hxyn
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
              inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H1 :
  Real.sin (angle x (x - y)) * (⟪y, y - x⟫ / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (⟪y, y - x⟫ / (‖y‖ * ‖y - x‖)) * ‖y‖ :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
⊢ Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
              inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H2 :
  ⟪x, x - y⟫ / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    ⟪x, x - y⟫ / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖ :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
⊢ inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
              inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H3 :
  ⟪x, x⟫ * (⟪x, x⟫ - ⟪x, y⟫ - (⟪x, y⟫ - ⟪y, y⟫)) - (⟪x, x⟫ - ⟪x, y⟫) * (⟪x, x⟫ - ⟪x, y⟫) =
    ⟪x, x⟫ * ⟪y, y⟫ - ⟪x, y⟫ * ⟪x, y⟫ :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
⊢ inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
H3 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
              inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
have H4 :
  ⟪y, y⟫ * (⟪y, y⟫ - ⟪x, y⟫ - (⟪x, y⟫ - ⟪x, x⟫)) - (⟪y, y⟫ - ⟪x, y⟫) * (⟪y, y⟫ - ⟪x, y⟫) =
    ⟪x, x⟫ * ⟪y, y⟫ - ⟪x, y⟫ * ⟪x, y⟫ :=
  by ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
H3 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
[PROOFSTEP]
ring
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
H3 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
H4 :
  inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ (Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) +
              inner x (x - y) / (‖x‖ * ‖x - y‖) * Real.sin (angle y (y - x))) *
            ‖x‖ *
          ‖y‖ *
        ‖x - y‖ *
      ‖x - y‖ =
    Real.sin (angle x y) * ‖x‖ * ‖y‖ * ‖x - y‖ * ‖x - y‖
[PROOFSTEP]
rw [right_distrib, right_distrib, right_distrib, right_distrib, H1, sin_angle_mul_norm_mul_norm, norm_sub_rev x y, H2,
  sin_angle_mul_norm_mul_norm, norm_sub_rev y x, mul_assoc (Real.sin (angle x y)), sin_angle_mul_norm_mul_norm,
  inner_sub_left, inner_sub_left, inner_sub_right, inner_sub_right, inner_sub_right, inner_sub_right,
  real_inner_comm x y, H3, H4, real_inner_self_eq_norm_mul_norm, real_inner_self_eq_norm_mul_norm,
  real_inner_eq_norm_mul_self_add_norm_mul_self_sub_norm_sub_mul_self_div_two]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
H3 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
H4 :
  inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ Real.sqrt
              (‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) -
                (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2 * ((‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2)) *
            ((‖y‖ * ‖y‖ - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2) / (‖y‖ * ‖x - y‖)) *
          ‖y‖ *
        ‖x - y‖ +
      (‖x‖ * ‖x‖ - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2) / (‖x‖ * ‖x - y‖) *
            Real.sqrt
              (‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) -
                (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2 * ((‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2)) *
          ‖x‖ *
        ‖x - y‖ =
    Real.sqrt
          (‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) -
            (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2 * ((‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) / 2)) *
        ‖x - y‖ *
      ‖x - y‖
[PROOFSTEP]
field_simp [hxn, hyn, hxyn]
[GOAL]
case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hxy : ¬x = y
hxn : ‖x‖ ≠ 0
hyn : ‖y‖ ≠ 0
hxyn : ‖x - y‖ ≠ 0
H1 :
  Real.sin (angle x (x - y)) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖x‖ * ‖y‖ * ‖x - y‖ =
    Real.sin (angle x (x - y)) * (‖x‖ * ‖x - y‖) * (inner y (y - x) / (‖y‖ * ‖y - x‖)) * ‖y‖
H2 :
  inner x (x - y) / (‖x‖ * ‖y - x‖) * Real.sin (angle y (y - x)) * ‖x‖ * ‖y‖ * ‖y - x‖ =
    inner x (x - y) / (‖x‖ * ‖y - x‖) * (Real.sin (angle y (y - x)) * (‖y‖ * ‖y - x‖)) * ‖x‖
H3 :
  inner x x * (inner x x - inner x y - (inner x y - inner y y)) - (inner x x - inner x y) * (inner x x - inner x y) =
    inner x x * inner y y - inner x y * inner x y
H4 :
  inner y y * (inner y y - inner x y - (inner x y - inner x x)) - (inner y y - inner x y) * (inner y y - inner x y) =
    inner x x * inner y y - inner x y * inner x y
⊢ Real.sqrt
                ((‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) * (2 * 2) -
                    (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) /
                  (2 * 2)) *
              (‖y‖ * ‖y‖ * 2 - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) *
            ‖y‖ *
          ‖x - y‖ *
        (2 * (‖x‖ * ‖x - y‖)) +
      (‖x‖ * ‖x‖ * 2 - (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) *
              Real.sqrt
                ((‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) * (2 * 2) -
                    (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) /
                  (2 * 2)) *
            ‖x‖ *
          ‖x - y‖ *
        (2 * (‖y‖ * ‖x - y‖)) =
    Real.sqrt
            ((‖x‖ * ‖x‖ * (‖y‖ * ‖y‖) * (2 * 2) -
                (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖) * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ - ‖x - y‖ * ‖x - y‖)) /
              (2 * 2)) *
          ‖x - y‖ *
        ‖x - y‖ *
      (2 * (‖y‖ * ‖x - y‖) * (2 * (‖x‖ * ‖x - y‖)))
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
[PROOFSTEP]
rw [add_assoc, Real.cos_add, cos_angle_sub_add_angle_sub_rev_eq_neg_cos_angle hx hy,
  sin_angle_sub_add_angle_sub_rev_eq_sin_angle hx hy, mul_neg, ← neg_add', add_comm, ← sq, ← sq, Real.sin_sq_add_cos_sq]
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ Real.sin (angle x y + angle x (x - y) + angle y (y - x)) = 0
[PROOFSTEP]
rw [add_assoc, Real.sin_add, cos_angle_sub_add_angle_sub_rev_eq_neg_cos_angle hx hy,
  sin_angle_sub_add_angle_sub_rev_eq_sin_angle hx hy]
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ Real.sin (angle x y) * -Real.cos (angle x y) + Real.cos (angle x y) * Real.sin (angle x y) = 0
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
have hcos := cos_angle_add_angle_sub_add_angle_sub_eq_neg_one hx hy
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
have hsin := sin_angle_add_angle_sub_add_angle_sub_eq_zero hx hy
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
hsin : Real.sin (angle x y + angle x (x - y) + angle y (y - x)) = 0
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
rw [Real.sin_eq_zero_iff] at hsin 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
hsin : ∃ n, ↑n * π = angle x y + angle x (x - y) + angle y (y - x)
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
cases' hsin with n hn
[GOAL]
case intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : ↑n * π = angle x y + angle x (x - y) + angle y (y - x)
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
symm at hn 
[GOAL]
case intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
have h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x) :=
  add_nonneg (add_nonneg (angle_nonneg _ _) (angle_nonneg _ _)) (angle_nonneg _ _)
[GOAL]
case intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
have h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π :=
  by
  by_contra hnlt
  have hxy : angle x y = π := by
    by_contra hxy
    exact
      hnlt
        (add_lt_add_of_lt_of_le (add_lt_add_of_lt_of_le (lt_of_le_of_ne (angle_le_pi _ _) hxy) (angle_le_pi _ _))
          (angle_le_pi _ _))
  rw [hxy] at hnlt 
  rw [angle_eq_pi_iff] at hxy 
  rcases hxy with ⟨hx, ⟨r, ⟨hr, hxr⟩⟩⟩
  rw [hxr, ← one_smul ℝ x, ← mul_smul, mul_one, ← sub_smul, one_smul, sub_eq_add_neg,
    angle_smul_right_of_pos _ _ (add_pos zero_lt_one (neg_pos_of_neg hr)), angle_self hx, add_zero] at hnlt 
  apply hnlt
  rw [add_assoc]
  exact add_lt_add_left (lt_of_le_of_lt (angle_le_pi _ _) (lt_add_of_pos_right π Real.pi_pos)) _
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
⊢ angle x y + angle x (x - y) + angle y (y - x) < π + π + π
[PROOFSTEP]
by_contra hnlt
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬angle x y + angle x (x - y) + angle y (y - x) < π + π + π
⊢ False
[PROOFSTEP]
have hxy : angle x y = π := by
  by_contra hxy
  exact
    hnlt
      (add_lt_add_of_lt_of_le (add_lt_add_of_lt_of_le (lt_of_le_of_ne (angle_le_pi _ _) hxy) (angle_le_pi _ _))
        (angle_le_pi _ _))
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬angle x y + angle x (x - y) + angle y (y - x) < π + π + π
⊢ angle x y = π
[PROOFSTEP]
by_contra hxy
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hxy : ¬angle x y = π
⊢ False
[PROOFSTEP]
exact
  hnlt
    (add_lt_add_of_lt_of_le (add_lt_add_of_lt_of_le (lt_of_le_of_ne (angle_le_pi _ _) hxy) (angle_le_pi _ _))
      (angle_le_pi _ _))
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hxy : angle x y = π
⊢ False
[PROOFSTEP]
rw [hxy] at hnlt 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬π + angle x (x - y) + angle y (y - x) < π + π + π
hxy : angle x y = π
⊢ False
[PROOFSTEP]
rw [angle_eq_pi_iff] at hxy 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬π + angle x (x - y) + angle y (y - x) < π + π + π
hxy : x ≠ 0 ∧ ∃ r, r < 0 ∧ y = r • x
⊢ False
[PROOFSTEP]
rcases hxy with ⟨hx, ⟨r, ⟨hr, hxr⟩⟩⟩
[GOAL]
case intro.intro.intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx✝ : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hnlt : ¬π + angle x (x - y) + angle y (y - x) < π + π + π
hx : x ≠ 0
r : ℝ
hr : r < 0
hxr : y = r • x
⊢ False
[PROOFSTEP]
rw [hxr, ← one_smul ℝ x, ← mul_smul, mul_one, ← sub_smul, one_smul, sub_eq_add_neg,
  angle_smul_right_of_pos _ _ (add_pos zero_lt_one (neg_pos_of_neg hr)), angle_self hx, add_zero] at hnlt 
[GOAL]
case intro.intro.intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx✝ : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hx : x ≠ 0
r : ℝ
hnlt : ¬π + angle (r • x) (r • x - x) < π + π + π
hr : r < 0
hxr : y = r • x
⊢ False
[PROOFSTEP]
apply hnlt
[GOAL]
case intro.intro.intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx✝ : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hx : x ≠ 0
r : ℝ
hnlt : ¬π + angle (r • x) (r • x - x) < π + π + π
hr : r < 0
hxr : y = r • x
⊢ π + angle (r • x) (r • x - x) < π + π + π
[PROOFSTEP]
rw [add_assoc]
[GOAL]
case intro.intro.intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx✝ : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hx : x ≠ 0
r : ℝ
hnlt : ¬π + angle (r • x) (r • x - x) < π + π + π
hr : r < 0
hxr : y = r • x
⊢ π + angle (r • x) (r • x - x) < π + (π + π)
[PROOFSTEP]
exact add_lt_add_left (lt_of_le_of_lt (angle_le_pi _ _) (lt_add_of_pos_right π Real.pi_pos)) _
[GOAL]
case intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
have hn0 : 0 ≤ n := by
  rw [hn, mul_nonneg_iff_left_nonneg_of_pos Real.pi_pos] at h0 
  norm_cast at h0 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
⊢ 0 ≤ n
[PROOFSTEP]
rw [hn, mul_nonneg_iff_left_nonneg_of_pos Real.pi_pos] at h0 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ ↑n
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
⊢ 0 ≤ n
[PROOFSTEP]
norm_cast at h0 
[GOAL]
case intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn0 : 0 ≤ n
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
have hn3 : n < 3 := by
  rw [hn, show π + π + π = 3 * π by ring] at h3lt 
  replace h3lt := lt_of_mul_lt_mul_right h3lt (le_of_lt Real.pi_pos)
  norm_cast at h3lt 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn0 : 0 ≤ n
⊢ n < 3
[PROOFSTEP]
rw [hn, show π + π + π = 3 * π by ring] at h3lt 
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : ↑n * π < π + π + π
hn0 : 0 ≤ n
⊢ π + π + π = 3 * π
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : ↑n * π < 3 * π
hn0 : 0 ≤ n
⊢ n < 3
[PROOFSTEP]
replace h3lt := lt_of_mul_lt_mul_right h3lt (le_of_lt Real.pi_pos)
[GOAL]
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
hn0 : 0 ≤ n
h3lt : ↑n < 3
⊢ n < 3
[PROOFSTEP]
norm_cast at h3lt 
[GOAL]
case intro
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑n * π
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn0 : 0 ≤ n
hn3 : n < 3
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
interval_cases n
[GOAL]
case intro.«0»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑0 * π
hn0 : 0 ≤ 0
hn3 : 0 < 3
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
rw [hn] at hcos 
[GOAL]
case intro.«0»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (↑0 * π) = -1
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑0 * π
hn0 : 0 ≤ 0
hn3 : 0 < 3
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
simp at hcos 
[GOAL]
case intro.«0»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑0 * π
hn0 : 0 ≤ 0
hn3 : 0 < 3
hcos : 1 = -1
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
norm_num at hcos 
[GOAL]
case intro.«1»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑1 * π
hn0 : 0 ≤ 1
hn3 : 1 < 3
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
rw [hn]
[GOAL]
case intro.«1»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑1 * π
hn0 : 0 ≤ 1
hn3 : 1 < 3
⊢ ↑1 * π = π
[PROOFSTEP]
norm_num
[GOAL]
case intro.«2»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (angle x y + angle x (x - y) + angle y (y - x)) = -1
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑2 * π
hn0 : 0 ≤ 2
hn3 : 2 < 3
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
rw [hn] at hcos 
[GOAL]
case intro.«2»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
hcos : Real.cos (↑2 * π) = -1
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑2 * π
hn0 : 0 ≤ 2
hn3 : 2 < 3
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
simp at hcos 
[GOAL]
case intro.«2»
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
hx : x ≠ 0
hy : y ≠ 0
n : ℤ
h0 : 0 ≤ angle x y + angle x (x - y) + angle y (y - x)
h3lt : angle x y + angle x (x - y) + angle y (y - x) < π + π + π
hn : angle x y + angle x (x - y) + angle y (y - x) = ↑2 * π
hn0 : 0 ≤ 2
hn3 : 2 < 3
hcos : 1 = -1
⊢ angle x y + angle x (x - y) + angle y (y - x) = π
[PROOFSTEP]
norm_num at hcos 
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ dist p1 p3 * dist p1 p3 =
    dist p1 p2 * dist p1 p2 + dist p3 p2 * dist p3 p2 - 2 * dist p1 p2 * dist p3 p2 * Real.cos (∠ p1 p2 p3)
[PROOFSTEP]
rw [dist_eq_norm_vsub V p1 p3, dist_eq_norm_vsub V p1 p2, dist_eq_norm_vsub V p3 p2]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ ‖p1 -ᵥ p3‖ * ‖p1 -ᵥ p3‖ =
    ‖p1 -ᵥ p2‖ * ‖p1 -ᵥ p2‖ + ‖p3 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ - 2 * ‖p1 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ * Real.cos (∠ p1 p2 p3)
[PROOFSTEP]
unfold angle
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ ‖p1 -ᵥ p3‖ * ‖p1 -ᵥ p3‖ =
    ‖p1 -ᵥ p2‖ * ‖p1 -ᵥ p2‖ + ‖p3 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ -
      2 * ‖p1 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ * Real.cos (InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2))
[PROOFSTEP]
convert norm_sub_sq_eq_norm_sq_add_norm_sq_sub_two_mul_norm_mul_norm_mul_cos_angle (p1 -ᵥ p2 : V) (p3 -ᵥ p2 : V)
[GOAL]
case h.e'_2.h.e'_5.h.e'_3
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ p1 -ᵥ p3 = p1 -ᵥ p2 - (p3 -ᵥ p2)
[PROOFSTEP]
exact (vsub_sub_vsub_cancel_right p1 p3 p2).symm
[GOAL]
case h.e'_2.h.e'_6.h.e'_3
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ p1 -ᵥ p3 = p1 -ᵥ p2 - (p3 -ᵥ p2)
[PROOFSTEP]
exact (vsub_sub_vsub_cancel_right p1 p3 p2).symm
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : dist p1 p2 = dist p1 p3
⊢ ∠ p1 p2 p3 = ∠ p1 p3 p2
[PROOFSTEP]
rw [dist_eq_norm_vsub V p1 p2, dist_eq_norm_vsub V p1 p3] at h 
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
⊢ ∠ p1 p2 p3 = ∠ p1 p3 p2
[PROOFSTEP]
unfold angle
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
⊢ InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) = InnerProductGeometry.angle (p1 -ᵥ p3) (p2 -ᵥ p3)
[PROOFSTEP]
convert angle_sub_eq_angle_sub_rev_of_norm_eq h
[GOAL]
case h.e'_2.h.e'_5
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
⊢ p3 -ᵥ p2 = p1 -ᵥ p2 - (p1 -ᵥ p3)
[PROOFSTEP]
exact (vsub_sub_vsub_cancel_left p3 p2 p1).symm
[GOAL]
case h.e'_3.h.e'_5
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
⊢ p2 -ᵥ p3 = p1 -ᵥ p3 - (p1 -ᵥ p2)
[PROOFSTEP]
exact (vsub_sub_vsub_cancel_left p2 p3 p1).symm
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : ∠ p1 p2 p3 = ∠ p1 p3 p2
hpi : ∠ p2 p1 p3 ≠ π
⊢ dist p1 p2 = dist p1 p3
[PROOFSTEP]
unfold angle at h hpi 
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) = InnerProductGeometry.angle (p1 -ᵥ p3) (p2 -ᵥ p3)
hpi : InnerProductGeometry.angle (p2 -ᵥ p1) (p3 -ᵥ p1) ≠ π
⊢ dist p1 p2 = dist p1 p3
[PROOFSTEP]
rw [dist_eq_norm_vsub V p1 p2, dist_eq_norm_vsub V p1 p3]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) = InnerProductGeometry.angle (p1 -ᵥ p3) (p2 -ᵥ p3)
hpi : InnerProductGeometry.angle (p2 -ᵥ p1) (p3 -ᵥ p1) ≠ π
⊢ ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
[PROOFSTEP]
rw [← angle_neg_neg, neg_vsub_eq_vsub_rev, neg_vsub_eq_vsub_rev] at hpi 
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h : InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) = InnerProductGeometry.angle (p1 -ᵥ p3) (p2 -ᵥ p3)
hpi : InnerProductGeometry.angle (p1 -ᵥ p2) (p1 -ᵥ p3) ≠ π
⊢ ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
[PROOFSTEP]
rw [← vsub_sub_vsub_cancel_left p3 p2 p1, ← vsub_sub_vsub_cancel_left p2 p3 p1] at h 
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h :
  InnerProductGeometry.angle (p1 -ᵥ p2) (p1 -ᵥ p2 - (p1 -ᵥ p3)) =
    InnerProductGeometry.angle (p1 -ᵥ p3) (p1 -ᵥ p3 - (p1 -ᵥ p2))
hpi : InnerProductGeometry.angle (p1 -ᵥ p2) (p1 -ᵥ p3) ≠ π
⊢ ‖p1 -ᵥ p2‖ = ‖p1 -ᵥ p3‖
[PROOFSTEP]
exact norm_eq_of_angle_sub_eq_angle_sub_rev_of_angle_ne_pi h hpi
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h2 : p2 ≠ p1
h3 : p3 ≠ p1
⊢ ∠ p1 p2 p3 + ∠ p2 p3 p1 + ∠ p3 p1 p2 = π
[PROOFSTEP]
rw [add_assoc, add_comm, add_comm (∠ p2 p3 p1), angle_comm p2 p3 p1]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h2 : p2 ≠ p1
h3 : p3 ≠ p1
⊢ ∠ p3 p1 p2 + ∠ p1 p3 p2 + ∠ p1 p2 p3 = π
[PROOFSTEP]
unfold angle
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h2 : p2 ≠ p1
h3 : p3 ≠ p1
⊢ InnerProductGeometry.angle (p3 -ᵥ p1) (p2 -ᵥ p1) + InnerProductGeometry.angle (p1 -ᵥ p3) (p2 -ᵥ p3) +
      InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) =
    π
[PROOFSTEP]
rw [← angle_neg_neg (p1 -ᵥ p3), ← angle_neg_neg (p1 -ᵥ p2), neg_vsub_eq_vsub_rev, neg_vsub_eq_vsub_rev,
  neg_vsub_eq_vsub_rev, neg_vsub_eq_vsub_rev, ← vsub_sub_vsub_cancel_right p3 p2 p1, ←
  vsub_sub_vsub_cancel_right p2 p3 p1]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
h2 : p2 ≠ p1
h3 : p3 ≠ p1
⊢ InnerProductGeometry.angle (p3 -ᵥ p1) (p2 -ᵥ p1) + InnerProductGeometry.angle (p3 -ᵥ p1) (p3 -ᵥ p1 - (p2 -ᵥ p1)) +
      InnerProductGeometry.angle (p2 -ᵥ p1) (p2 -ᵥ p1 - (p3 -ᵥ p1)) =
    π
[PROOFSTEP]
exact
  angle_add_angle_sub_add_angle_sub_eq_pi (fun he => h3 (vsub_eq_zero_iff_eq.1 he)) fun he =>
    h2 (vsub_eq_zero_iff_eq.1 he)
[GOAL]
V : Type u_1
P : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : InnerProductSpace ℝ V
inst✝³ : MetricSpace P
inst✝² : NormedAddTorsor V P
inst✝¹ : Module.Oriented ℝ V (Fin 2)
inst✝ : Fact (FiniteDimensional.finrank ℝ V = 2)
p1 p2 p3 : P
h21 : p2 ≠ p1
h32 : p3 ≠ p2
h13 : p1 ≠ p3
⊢ ∡ p1 p2 p3 + ∡ p2 p3 p1 + ∡ p3 p1 p2 = ↑π
[PROOFSTEP]
simpa only [neg_vsub_eq_vsub_rev] using
  positiveOrientation.oangle_add_cyc3_neg_left (vsub_ne_zero.mpr h21) (vsub_ne_zero.mpr h32) (vsub_ne_zero.mpr h13)
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c p : P
h : ∠ b p c = π
⊢ dist a b ^ 2 * dist c p + dist a c ^ 2 * dist b p = dist b c * (dist a p ^ 2 + dist b p * dist c p)
[PROOFSTEP]
rw [pow_two, pow_two, law_cos a p b, law_cos a p c, eq_sub_of_add_eq (angle_add_angle_eq_pi_of_angle_eq_pi a h),
  Real.cos_pi_sub, dist_eq_add_dist_of_angle_eq_pi h]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c p : P
h : ∠ b p c = π
⊢ (dist a p * dist a p + dist b p * dist b p - 2 * dist a p * dist b p * -Real.cos (∠ a p c)) * dist c p +
      (dist a p * dist a p + dist c p * dist c p - 2 * dist a p * dist c p * Real.cos (∠ a p c)) * dist b p =
    (dist b p + dist c p) * (dist a p ^ 2 + dist b p * dist c p)
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
by_cases hbc : b = c
[GOAL]
case pos
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : b = c
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
simp [hbc, midpoint_self, dist_self, two_mul]
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
let m := midpoint ℝ b c
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
have : dist b c ≠ 0 := (dist_pos.mpr hbc).ne'
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
have hm := dist_sq_mul_dist_add_dist_sq_mul_dist a b c m (angle_midpoint_eq_pi b c hbc)
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm : dist a b ^ 2 * dist c m + dist a c ^ 2 * dist b m = dist b c * (dist a m ^ 2 + dist b m * dist c m)
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
simp only [dist_left_midpoint, dist_right_midpoint, Real.norm_two] at hm 
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm :
  dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c) =
    dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
calc
  dist a b ^ 2 + dist a c ^ 2 =
      2 / dist b c * (dist a b ^ 2 * ((2 : ℝ)⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c)) :=
    by field_simp; ring
  _ = 2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2) := by rw [hm]; field_simp; ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm :
  dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c) =
    dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))
⊢ dist a b ^ 2 + dist a c ^ 2 = ↑2 / dist b c * (dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c))
[PROOFSTEP]
field_simp
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm :
  dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c) =
    dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))
⊢ (dist a b ^ 2 + dist a c ^ 2) * (dist b c * 2) = 2 * (dist a b ^ 2 * dist b c + dist a c ^ 2 * dist b c)
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm :
  dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c) =
    dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))
⊢ ↑2 / dist b c * (dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c)) =
    ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
rw [hm]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm :
  dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c) =
    dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))
⊢ ↑2 / dist b c * (dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))) =
    ↑2 * (dist a (midpoint ℝ b c) ^ 2 + (dist b c / 2) ^ 2)
[PROOFSTEP]
field_simp
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c : P
hbc : ¬b = c
m : P := midpoint ℝ b c
this : dist b c ≠ 0
hm :
  dist a b ^ 2 * (2⁻¹ * dist b c) + dist a c ^ 2 * (2⁻¹ * dist b c) =
    dist b c * (dist a (midpoint ℝ b c) ^ 2 + 2⁻¹ * dist b c * (2⁻¹ * dist b c))
⊢ 2 * (dist b c * (dist a (midpoint ℝ b c) ^ 2 * (2 * 2) + dist b c * dist b c)) * 2 ^ 2 =
    2 * (dist a (midpoint ℝ b c) ^ 2 * 2 ^ 2 + dist b c ^ 2) * (dist b c * (2 * 2))
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
have h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
[GOAL]
case h'
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ dist a' c' ^ 2 = (r * dist a c) ^ 2
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
calc
  dist a' c' ^ 2 = dist a' b' ^ 2 + dist c' b' ^ 2 - 2 * dist a' b' * dist c' b' * Real.cos (∠ a' b' c') := by
    simp [pow_two, law_cos a' b' c']
  _ = r ^ 2 * (dist a b ^ 2 + dist c b ^ 2 - 2 * dist a b * dist c b * Real.cos (∠ a b c)) := by rw [h, hab, hcb]; ring
  _ = (r * dist a c) ^ 2 := by simp [pow_two, ← law_cos a b c, mul_pow]; ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ dist a' c' ^ 2 = dist a' b' ^ 2 + dist c' b' ^ 2 - 2 * dist a' b' * dist c' b' * Real.cos (∠ a' b' c')
[PROOFSTEP]
simp [pow_two, law_cos a' b' c']
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ dist a' b' ^ 2 + dist c' b' ^ 2 - 2 * dist a' b' * dist c' b' * Real.cos (∠ a' b' c') =
    r ^ 2 * (dist a b ^ 2 + dist c b ^ 2 - 2 * dist a b * dist c b * Real.cos (∠ a b c))
[PROOFSTEP]
rw [h, hab, hcb]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ (r * dist a b) ^ 2 + (r * dist c b) ^ 2 - 2 * (r * dist a b) * (r * dist c b) * Real.cos (∠ a b c) =
    r ^ 2 * (dist a b ^ 2 + dist c b ^ 2 - 2 * dist a b * dist c b * Real.cos (∠ a b c))
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ r ^ 2 * (dist a b ^ 2 + dist c b ^ 2 - 2 * dist a b * dist c b * Real.cos (∠ a b c)) = (r * dist a c) ^ 2
[PROOFSTEP]
simp [pow_two, ← law_cos a b c, mul_pow]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
⊢ r * r * (dist a c * dist a c) = r * dist a c * (r * dist a c)
[PROOFSTEP]
ring
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
by_cases hab₁ : a = b
[GOAL]
case pos
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : a = b
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
have hab'₁ : a' = b' := by rw [← dist_eq_zero, hab, dist_eq_zero.mpr hab₁, mul_zero r]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : a = b
⊢ a' = b'
[PROOFSTEP]
rw [← dist_eq_zero, hab, dist_eq_zero.mpr hab₁, mul_zero r]
[GOAL]
case pos
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : a = b
hab'₁ : a' = b'
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
rw [hab₁, hab'₁, dist_comm b' c', dist_comm b c, hcb]
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : ¬a = b
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
have h1 : 0 ≤ r * dist a b := by rw [← hab]; exact dist_nonneg
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : ¬a = b
⊢ 0 ≤ r * dist a b
[PROOFSTEP]
rw [← hab]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : ¬a = b
⊢ 0 ≤ dist a' b'
[PROOFSTEP]
exact dist_nonneg
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : ¬a = b
h1 : 0 ≤ r * dist a b
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
have h2 : 0 ≤ r := nonneg_of_mul_nonneg_left h1 (dist_pos.mpr hab₁)
[GOAL]
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
a b c a' b' c' : P
r : ℝ
h : ∠ a' b' c' = ∠ a b c
hab : dist a' b' = r * dist a b
hcb : dist c' b' = r * dist c b
h' : dist a' c' ^ 2 = (r * dist a c) ^ 2
hab₁ : ¬a = b
h1 : 0 ≤ r * dist a b
h2 : 0 ≤ r
⊢ dist a' c' = r * dist a c
[PROOFSTEP]
exact (sq_eq_sq dist_nonneg (mul_nonneg h2 dist_nonneg)).mp h'
