/-- The Monge point of an (n+2)-simplex, minus the centroid of an
n-dimensional face, is orthogonal to the difference of the two
vertices not in that face. -/
theorem inner_mongePoint_vsub_face_centroid_vsub {n : ℕ} (s : Simplex ℝ P (n + 2))
    {i₁ i₂ : Fin (n + 3)} :
    ⟪s.mongePoint -ᵥ ({i₁, i₂}ᶜ : Finset (Fin (n + 3))).centroid ℝ s.points,
        s.points i₁ -ᵥ s.points i₂⟫ =
      0 := by
  by_cases h : i₁ = i₂
  · simp [h]
  simp_rw [mongePoint_vsub_face_centroid_eq_weightedVSub_of_pointsWithCircumcenter s h,
    point_eq_affineCombination_of_pointsWithCircumcenter, affineCombination_vsub]
  have hs : ∑ i, (pointWeightsWithCircumcenter i₁ - pointWeightsWithCircumcenter i₂) i = 0 := by
    simp
  rw [inner_weightedVSub _ (sum_mongePointVSubFaceCentroidWeightsWithCircumcenter h) _ hs,
    sum_pointsWithCircumcenter, pointsWithCircumcenter_eq_circumcenter]
  simp only [mongePointVSubFaceCentroidWeightsWithCircumcenter, pointsWithCircumcenter_point]
  let fs : Finset (Fin (n + 3)) := {i₁, i₂}
  have hfs : ∀ i : Fin (n + 3), i ∉ fs → i ≠ i₁ ∧ i ≠ i₂ := by
    intro i hi
    constructor <;> · intro hj; simp [← hj] at hi
  rw [← sum_subset fs.subset_univ _]
  · simp_rw [sum_pointsWithCircumcenter, pointsWithCircumcenter_eq_circumcenter,
      pointsWithCircumcenter_point, Pi.sub_apply, pointWeightsWithCircumcenter]
    rw [← sum_subset fs.subset_univ _]
    · simp_rw [sum_insert (not_mem_singleton.2 h), sum_singleton]
      repeat rw [← sum_subset fs.subset_univ _]
      · simp_rw [sum_insert (not_mem_singleton.2 h), sum_singleton]
        

Proof state:
case neg
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
n : ℕ
s : Simplex ℝ P (n + 2)
i₁ i₂ : Fin (n + 3)
h : ¬i₁ = i₂
hs :
  ∑ i : PointsWithCircumcenterIndex (n + 2), (pointWeightsWithCircumcenter i₁ - pointWeightsWithCircumcenter i₂) i = 0
fs : Finset (Fin (n + 3)) := {i₁, i₂}
hfs : ∀ i ∉ fs, i ≠ i₁ ∧ i ≠ i₂
⊢ -((if True ∨ i₁ = i₂ then (↑(n + 1))⁻¹ else 0) * ((if True then 1 else 0) - if i₁ = i₂ then 1 else 0) *
                  (dist (points s i₁) (points s i₁) * dist (points s i₁) (points s i₁)) +
                (if True ∨ i₁ = i₂ then (↑(n + 1))⁻¹ else 0) * ((if i₂ = i₁ then 1 else 0) - if True then 1 else 0) *
                  (dist (points s i₁) (points s i₂) * dist (points s i₁) (points s i₂)) +
              (if True ∨ i₁ = i₂ then (↑(n + 1))⁻¹ else 0) * (0 - 0) *
                (dist (points s i₁) (circumcenter s) * dist (points s i₁) (circumcenter s)) +
            ((if i₂ = i₁ ∨ True then (↑(n + 1))⁻¹ else 0) * ((if True then 1 else 0) - if i₁ = i₂ then 1 else 0) *
                  (dist (points s i₂) (points s i₁) * dist (points s i₂) (points s i₁)) +
                (if i₂ = i₁ ∨ True then (↑(n + 1))⁻¹ else 0) * ((if i₂ = i₁ then 1 else 0) - if True then 1 else 0) *
                  (dist (points s i₂) (points s i₂) * dist (points s i₂) (points s i₂)) +
              (if i₂ = i₁ ∨ True then (↑(n + 1))⁻¹ else 0) * (0 - 0) *
                (dist (points s i₂) (circumcenter s) * dist (points s i₂) (circumcenter s))) +
          (-2 / ↑(n + 1) * ((if True then 1 else 0) - if i₁ = i₂ then 1 else 0) *
                (dist (circumcenter s) (points s i₁) * dist (circumcenter s) (points s i₁)) +
              -2 / ↑(n + 1) * ((if i₂ = i₁ then 1 else 0) - if True then 1 else 0) *
                (dist (circumcenter s) (points s i₂) * dist (circumcenter s) (points s i₂)) +
            -2 / ↑(n + 1) * (0 - 0) *
              (dist (circumcenter s) (circumcenter s) * dist (circumcenter s) (circumcenter s)))) /
      2 =
    0

Next tactic:
simp [h, Ne.symm h, dist_comm (s.points i₁)]