Theorem: Affine.Simplex.mongePoint_mem_mongePlane
File: Mathlib/Geometry/Euclidean/MongePoint.lean

Proof steps:
state_before: 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)
⊢ s.mongePoint ∈ s.mongePlane i₁ i₂
state_after: 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)
⊢ (∀ u ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}, ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, u⟫_ℝ = 0) ∧
    s.mongePoint ∈ affineSpan ℝ (Set.range s.points)
tactic: rw [mongePlane_def, mem_inf_iff, ← vsub_right_mem_direction_iff_mem (self_mem_mk' _ _),
    direction_mk', Submodule.mem_orthogonal']
state_before: 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)
⊢ (∀ u ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}, ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, u⟫_ℝ = 0) ∧
    s.mongePoint ∈ affineSpan ℝ (Set.range s.points)
state_after: 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)
⊢ ∀ u ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}, ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, u⟫_ℝ = 0
tactic: refine ⟨?_, s.mongePoint_mem_affineSpan⟩
state_before: 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)
⊢ ∀ u ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}, ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, u⟫_ℝ = 0
state_after: 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)
v : V
hv : v ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}
⊢ ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, v⟫_ℝ = 0
tactic: intro v hv
state_before: 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)
v : V
hv : v ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}
⊢ ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, v⟫_ℝ = 0
state_after: case intro
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)
r : ℝ
hv : r • (s.points i₁ -ᵥ s.points i₂) ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}
⊢ ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, r • (s.points i₁ -ᵥ s.points i₂)⟫_ℝ = 0
tactic: rcases Submodule.mem_span_singleton.mp hv with ⟨r, rfl⟩
state_before: case intro
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)
r : ℝ
hv : r • (s.points i₁ -ᵥ s.points i₂) ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂}
⊢ ⟪s.mongePoint -ᵥ centroid ℝ {i₁, i₂}ᶜ s.points, r • (s.points i₁ -ᵥ s.points i₂)⟫_ℝ = 0
state_after: no goals
tactic: rw [inner_smul_right, s.inner_mongePoint_vsub_face_centroid_vsub, mul_zero]