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

tactic: simp_rw [mongePlane_def]
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.mongePlane i₁ i₂ = 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)
⊢ mk' (centroid ℝ {i₁, i₂}ᶜ s.points) (Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂})ᗮ ⊓
      affineSpan ℝ (Set.range s.points) =
    mk' (centroid ℝ {i₂, i₁}ᶜ s.points) (Submodule.span ℝ {s.points i₂ -ᵥ s.points i₁})ᗮ ⊓
      affineSpan ℝ (Set.range s.points)

tactic: congr 3
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)
⊢ mk' (centroid ℝ {i₁, i₂}ᶜ s.points) (Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂})ᗮ ⊓
      affineSpan ℝ (Set.range s.points) =
    mk' (centroid ℝ {i₂, i₁}ᶜ s.points) (Submodule.span ℝ {s.points i₂ -ᵥ s.points i₁})ᗮ ⊓
      affineSpan ℝ (Set.range s.points)
state_after: case e_a.e_p.e_s
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)
⊢ {i₁, i₂}ᶜ = {i₂, i₁}ᶜ

case e_a.e_direction.e_K
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)
⊢ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂} = Submodule.span ℝ {s.points i₂ -ᵥ s.points i₁}

tactic: congr 1
state_before: case e_a.e_p.e_s
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)
⊢ {i₁, i₂}ᶜ = {i₂, i₁}ᶜ
state_after: case e_a.e_p.e_s.e_a
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)
⊢ {i₁, i₂} = {i₂, i₁}

tactic: exact pair_comm _ _
state_before: case e_a.e_p.e_s.e_a
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)
⊢ {i₁, i₂} = {i₂, i₁}
state_after: no goals

tactic: ext
state_before: case e_a.e_direction.e_K
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)
⊢ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂} = Submodule.span ℝ {s.points i₂ -ᵥ s.points i₁}
state_after: case e_a.e_direction.e_K.h
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)
x✝ : V
⊢ x✝ ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂} ↔ x✝ ∈ Submodule.span ℝ {s.points i₂ -ᵥ s.points i₁}

tactic: simp_rw [Submodule.mem_span_singleton]
state_before: case e_a.e_direction.e_K.h
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)
x✝ : V
⊢ x✝ ∈ Submodule.span ℝ {s.points i₁ -ᵥ s.points i₂} ↔ x✝ ∈ Submodule.span ℝ {s.points i₂ -ᵥ s.points i₁}
state_after: case e_a.e_direction.e_K.h
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)
x✝ : V
⊢ (∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝) ↔ ∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝

tactic: constructor
state_before: case e_a.e_direction.e_K.h
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)
x✝ : V
⊢ (∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝) ↔ ∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝
state_after: case e_a.e_direction.e_K.h.mp
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)
x✝ : V
⊢ (∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝) → ∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝

case e_a.e_direction.e_K.h.mpr
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)
x✝ : V
⊢ (∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝) → ∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝

tactic: all_goals rintro ⟨r, rfl⟩; use -r; rw [neg_smul, ← smul_neg, neg_vsub_eq_vsub_rev]
state_before: case e_a.e_direction.e_K.h.mp
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)
x✝ : V
⊢ (∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝) → ∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝

case e_a.e_direction.e_K.h.mpr
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)
x✝ : V
⊢ (∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝) → ∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝
state_after: no goals

tactic: rintro ⟨r, rfl⟩
state_before: case e_a.e_direction.e_K.h.mpr
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)
x✝ : V
⊢ (∃ a, a • (s.points i₂ -ᵥ s.points i₁) = x✝) → ∃ a, a • (s.points i₁ -ᵥ s.points i₂) = x✝
state_after: case e_a.e_direction.e_K.h.mpr.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 : ℝ
⊢ ∃ a, a • (s.points i₁ -ᵥ s.points i₂) = r • (s.points i₂ -ᵥ s.points i₁)

tactic: use -r
state_before: case e_a.e_direction.e_K.h.mpr.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 : ℝ
⊢ ∃ a, a • (s.points i₁ -ᵥ s.points i₂) = r • (s.points i₂ -ᵥ s.points i₁)
state_after: case h
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 : ℝ
⊢ -r • (s.points i₁ -ᵥ s.points i₂) = r • (s.points i₂ -ᵥ s.points i₁)

tactic: rw [neg_smul, ← smul_neg, neg_vsub_eq_vsub_rev]
state_before: case h
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 : ℝ
⊢ -r • (s.points i₁ -ᵥ s.points i₂) = r • (s.points i₂ -ᵥ s.points i₁)
state_after: no goals