/-
Copyright 2025 The Formal Conjectures Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-/
module
public import Mathlib.LinearAlgebra.Orientation
public import Mathlib.Analysis.InnerProductSpace.PiL2
public import Mathlib.Geometry.Euclidean.Angle.Oriented.Affine
public import Mathlib.Geometry.Euclidean.Triangle
public import Mathlib.Data.Set.Card
public import Mathlib.Geometry.Euclidean.Sphere.Basic
public import FormalConjecturesForMathlib.Geometry.Metric
public import FormalConjecturesForMathlib.Logic.Equiv.Fin.Rotate
public import FormalConjecturesForMathlib.Data.Set.Triplewise@[expose] public sectionscoped[EuclideanGeometry] notation "ℝ²" => EuclideanSpace ℝ (Fin 2)open scoped EuclideanGeometry FinsetOriented angles make sense in 2d.
Note: this can't blindly be added to mathlib as it creates an "instance diamond"
with an instance for modules satisfying is_empty.
noncomputable instance Module.orientedEuclideanSpaceFinTwo : Module.Oriented ℝ ℝ² (Fin 2) :=
⟨Basis.orientation <| PiLp.basisFun 2 _ _⟩Two dimensional euclidean space is two-dimensional.
instance fact_finrank_euclideanSpace_fin_two : Fact (Module.finrank ℝ ℝ² = 2) :=
⟨finrank_euclideanSpace_fin⟩open scoped EuclideanGeometryopen scoped Realnamespace EuclideanGeometryvariable {V P : Type*} {n : ℕ}variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]variable [Module.Oriented ℝ V (Fin 2)] [Fact (Module.finrank ℝ V = 2)] {p : Fin n → P}
We say a subset A of points in the plane is non-trilinear
if it contains no three points that lie on the same line.
def NonTrilinear (A : Set P) : Prop :=
A.Triplewise (fun x y z ↦ ¬ Collinear ℝ {x, y, z})
We say a subset S of points is non-collinear for $n$ points
if it contains no $n$ points that lie on the same line.
def NonCollinearFor (n : ℕ) (S : Set P) : Prop :=
∀ (A : Set P), A ⊆ S → A.Finite → A.ncard = n → ¬ Collinear ℝ Aomit [Module.Oriented ℝ V (Fin 2)] [Fact (Module.finrank ℝ V = 2)] in
lemma NonCollinearFor.subset {n : ℕ} {S T : Set P} (h : S ⊆ T) (hS : NonCollinearFor n T) :
NonCollinearFor n S := V:Type u_1P:Type u_2inst✝³:NormedAddCommGroup Vinst✝²:InnerProductSpace ℝ Vinst✝¹:MetricSpace Pinst✝:NormedAddTorsor V Pn:ℕS:Set PT:Set Ph:S ⊆ ThS:NonCollinearFor n T⊢ NonCollinearFor n S
V:Type u_1P:Type u_2inst✝³:NormedAddCommGroup Vinst✝²:InnerProductSpace ℝ Vinst✝¹:MetricSpace Pinst✝:NormedAddTorsor V Pn:ℕS:Set PT:Set Ph:S ⊆ ThS:NonCollinearFor n TA:Set PhA:A ⊆ ShFin:A.FinitehCard:A.ncard = n⊢ ¬Collinear ℝ A
All goals completed! 🐙
ConvexIndep S means that S consists of extremal points of its convex hull,
i.e., the point set encloses a convex shape.
Also known as a "convex-independent set".
def ConvexIndep (S : Set ℝ²) : Prop :=
∀ a ∈ S, a ∉ convexHull ℝ (S \ {a})
The set P contains a convex n-gon.
See also IsConvexPolygon.
def HasConvexNGon (n : ℕ) (P : Set ℝ²) : Prop :=
∃ S : Finset ℝ², S.card = n ∧ ↑S ⊆ P ∧ ConvexIndep SThe statement that a sequence of points form a counter-clockwise convex polygon.
def IsCcwConvexPolygon (p : Fin n → P) : Prop :=
∀ ⦃i j k⦄, i < j → j < k → (∡ (p i) (p j) (p k)).sign = 1theorem IsCcwConvexPolygon.sign_oangle (hp : IsCcwConvexPolygon p) {i j k : Fin n}
(hij : i < j) (hjk : j < k) : (∡ (p i) (p j) (p k)).sign = 1 := hp hij hjkV:Type u_1P:Type u_2n:ℕinst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin n → Php:IsCcwConvexPolygon pi:Fin nj:Fin nk:Fin nhij:i < jhjk:j < k⊢ (∡ (p i) (p j) (p k)).sign = 1
exact hp hij hjk All goals completed! 🐙
set_option linter.docPrime false in
theorem IsCcwConvexPolygon.sign_oangle'' (hp : IsCcwConvexPolygon p) {i j k : Fin n}
(hij : i < j) (hjk : j < k) : (∡ (p k) (p i) (p j)).sign = 1 := by V:Type u_1P:Type u_2n:ℕinst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin n → Php:IsCcwConvexPolygon pi:Fin nj:Fin nk:Fin nhij:i < jhjk:j < k⊢ (∡ (p k) (p i) (p j)).sign = 1
rw [← EuclideanGeometry.oangle_rotate_sign V:Type u_1P:Type u_2n:ℕinst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin n → Php:IsCcwConvexPolygon pi:Fin nj:Fin nk:Fin nhij:i < jhjk:j < k⊢ (∡ (p i) (p j) (p k)).sign = 1 V:Type u_1P:Type u_2n:ℕinst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin n → Php:IsCcwConvexPolygon pi:Fin nj:Fin nk:Fin nhij:i < jhjk:j < k⊢ (∡ (p i) (p j) (p k)).sign = 1] V:Type u_1P:Type u_2n:ℕinst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin n → Php:IsCcwConvexPolygon pi:Fin nj:Fin nk:Fin nhij:i < jhjk:j < k⊢ (∡ (p i) (p j) (p k)).sign = 1
exact hp hij hjk All goals completed! 🐙
theorem IsCcwConvexPolygon.sign_oangle_finRotate (hp : IsCcwConvexPolygon p)
(hn : 3 ≤ n) (i : Fin n) :
(∡ (p i) (p <| finRotate _ i) (p <| finRotate _ (finRotate _ i))).sign = 1 := by V:Type u_1P:Type u_2n:ℕinst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin n → Php:IsCcwConvexPolygon phn:3 ≤ ni:Fin n⊢ (∡ (p i) (p ((finRotate n) i)) (p ((finRotate n) ((finRotate n) i)))).sign = 1
obtain ⟨n, rfl⟩ := le_iff_exists_add'.mp hn V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1
by_cases hi : i = Fin.last (n + 2) pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1neg V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1
· pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1 rw [hi, pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p ((finRotate (n + 3)) (Fin.last (n + 2))))
(p ((finRotate (n + 3)) ((finRotate (n + 3)) (Fin.last (n + 2)))))).sign =
1 pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p 0) (p 1)).sign = 1 finRotate_last, pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p 0) (p ((finRotate (n + 3)) 0))).sign = 1 pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p 0) (p 1)).sign = 1 finRotate_apply_zero pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p 0) (p 1)).sign = 1pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p 0) (p 1)).sign = 1]pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:i = Fin.last (n + 2)⊢ (∡ (p (Fin.last (n + 2))) (p 0) (p 1)).sign = 1
exact hp.sign_oangle'' Fin.zero_lt_one Fin.one_lt_last All goals completed! 🐙
by_cases hi' : finRotate _ i = Fin.last (n + 2) pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1neg V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1
· pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p ((finRotate (n + 3)) i)) (p ((finRotate (n + 3)) ((finRotate (n + 3)) i)))).sign = 1 rw [hi', pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p (Fin.last (n + 2))) (p ((finRotate (n + 3)) (Fin.last (n + 2))))).sign = 1 pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p (Fin.last (n + 2))) (p 0)).sign = 1 finRotate_last pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p (Fin.last (n + 2))) (p 0)).sign = 1pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p (Fin.last (n + 2))) (p 0)).sign = 1]pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (∡ (p i) (p (Fin.last (n + 2))) (p 0)).sign = 1
refine hp.sign_oangle' ?_ ((Fin.le_last _).lt_of_ne hi) pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ 0 < i
rw [Fin.pos_iff_ne_zero pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ i ≠ 0 pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ i ≠ 0]pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':(finRotate (n + 3)) i = Fin.last (n + 2)⊢ i ≠ 0
rintro rfl pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3hi:¬0 = Fin.last (n + 2)hi':(finRotate (n + 3)) 0 = Fin.last (n + 2)⊢ False
rw [finRotate_apply_zero pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3hi:¬0 = Fin.last (n + 2)hi':1 = Fin.last (n + 2)⊢ False pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3hi:¬0 = Fin.last (n + 2)hi':1 = Fin.last (n + 2)⊢ False] at hi'pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3hi:¬0 = Fin.last (n + 2)hi':1 = Fin.last (n + 2)⊢ False
exact Fin.one_lt_last.ne hi' All goals completed! 🐙
apply hp.sign_oangle neg.hij V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ i < (finRotate (n + 3)) ineg.hjk V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (finRotate (n + 3)) i < (finRotate (n + 3)) ((finRotate (n + 3)) i) <;> neg.hij V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ i < (finRotate (n + 3)) ineg.hjk V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (finRotate (n + 3)) i < (finRotate (n + 3)) ((finRotate (n + 3)) i) apply lt_finRotate_of_ne_last neg.hjk V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (finRotate (n + 3)) i ≠ Fin.last (n + 2) <;> neg.hij V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ i ≠ Fin.last (n + 2)neg.hjk V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)n:ℕp:Fin (n + 3) → Php:IsCcwConvexPolygon phn:3 ≤ n + 3i:Fin (n + 3)hi:¬i = Fin.last (n + 2)hi':¬(finRotate (n + 3)) i = Fin.last (n + 2)⊢ (finRotate (n + 3)) i ≠ Fin.last (n + 2) assumption All goals completed! 🐙@[simp] theorem isCcwConvexPolygon_zero (p : Fin 0 → P) : IsCcwConvexPolygon p := finZeroElim@[simp] theorem isCcwConvexPolygon_one (p : Fin 1 → P) : IsCcwConvexPolygon p := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 1 → P⊢ IsCcwConvexPolygon p intro V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 1 → Pi✝:Fin 1⊢ ∀ ⦃j k : Fin 1⦄, i✝ < j → j < k → (∡ (p i✝) (p j) (p k)).sign = 1; omega All goals completed! 🐙@[simp] theorem isCcwConvexPolygon_two (p : Fin 2 → P) : IsCcwConvexPolygon p := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 2 → P⊢ IsCcwConvexPolygon p intro V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 2 → Pi✝:Fin 2⊢ ∀ ⦃j k : Fin 2⦄, i✝ < j → j < k → (∡ (p i✝) (p j) (p k)).sign = 1; omega All goals completed! 🐙
set_option linter.docPrime false in
theorem isCcwConvexPolygon_four' {p : Fin 4 → P} :
IsCcwConvexPolygon p ↔ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧ (∡ (p 1) (p 2) (p 3)).sign = 1 ∧
(∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1 := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → P⊢ IsCcwConvexPolygon p ↔
(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1
refine ⟨fun h ↦ ?_, fun ⟨h1, h2, h3, h4⟩ ↦ ?_⟩ refine_1 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon p⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1refine_2 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1⊢ IsCcwConvexPolygon p
· refine_1 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon p⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1 obtain ⟨h01, h12, h23⟩ : (0 : Fin 4) < 1 ∧ (1 : Fin 4) < 2 ∧ (2 : Fin 4) < 3 := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon p⊢ 0 < 1 ∧ 1 < 2 ∧ 2 < 3 refine_1 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1 simp refine_1 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1refine_1 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1
· refine_1 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1 repeat' constructor refine_1.right.right.right V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 3) (p 0) (p 1)).sign = 1
· refine_1.left V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 0) (p 1) (p 2)).sign = 1 exact h.sign_oangle h01 h12 All goals completed! 🐙
· refine_1.right.left V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 1) (p 2) (p 3)).sign = 1 exact h.sign_oangle h12 h23 All goals completed! 🐙
· refine_1.right.right.left V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 2) (p 3) (p 0)).sign = 1 exact h.sign_oangle' (h01.trans h12) h23 All goals completed! 🐙
· refine_1.right.right.right V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Ph:IsCcwConvexPolygon ph01:0 < 1h12:1 < 2h23:2 < 3⊢ (∡ (p 3) (p 0) (p 1)).sign = 1 exact h.sign_oangle'' h01 (h12.trans h23) All goals completed! 🐙
· refine_2 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1⊢ IsCcwConvexPolygon p intro i j k hij hjk refine_2 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1i:Fin 4j:Fin 4k:Fin 4hij:i < jhjk:j < k⊢ (∡ (p i) (p j) (p k)).sign = 1
fin_cases i refine_2.«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨0, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p j) (p k)).sign = 1refine_2.«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨1, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p j) (p k)).sign = 1refine_2.«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨2, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p j) (p k)).sign = 1refine_2.«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨3, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p j) (p k)).sign = 1 <;> refine_2.«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨0, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p j) (p k)).sign = 1refine_2.«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨1, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p j) (p k)).sign = 1refine_2.«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨2, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p j) (p k)).sign = 1refine_2.«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1j:Fin 4k:Fin 4hjk:j < khij:(fun i ↦ i) ⟨3, ⋯⟩ < j⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p j) (p k)).sign = 1 fin_cases j refine_2.«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p k)).sign = 1refine_2.«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p k)).sign = 1refine_2.«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p k)).sign = 1refine_2.«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨3, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p k)).sign = 1 <;> refine_2.«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p k)).sign = 1refine_2.«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p k)).sign = 1refine_2.«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p k)).sign = 1refine_2.«0».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨3, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p k)).sign = 1refine_2.«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p k)).sign = 1refine_2.«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p k)).sign = 1refine_2.«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p k)).sign = 1refine_2.«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨3, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p k)).sign = 1refine_2.«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p k)).sign = 1refine_2.«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p k)).sign = 1refine_2.«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p k)).sign = 1refine_2.«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨3, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p k)).sign = 1refine_2.«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p k)).sign = 1refine_2.«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p k)).sign = 1refine_2.«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p k)).sign = 1refine_2.«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1k:Fin 4hjk:(fun i ↦ i) ⟨3, ⋯⟩ < khij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p k)).sign = 1 fin_cases k refine_2.«3».«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«3».«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«3».«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«3».«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1 <;> refine_2.«0».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«0».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«0».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«0».«0».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«0».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«0».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«0».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«0».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«0».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«0».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«0».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«0».«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«0».«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«0».«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«0».«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«1».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«1».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«1».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«1».«0».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«1».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«1».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«1».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«1».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«1».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«1».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«1».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«1».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«1».«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«1».«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«1».«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«1».«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«2».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«2».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«2».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«2».«0».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«2».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«2».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«2».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«2».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«2».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«2».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«2».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«2».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«2».«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«2».«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«2».«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«2».«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«3».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«3».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«3».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«3».«0».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«3».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«3».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«3».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«3».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«3».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«3».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«3».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«3».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1refine_2.«3».«3».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1refine_2.«3».«3».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1refine_2.«3».«3».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1refine_2.«3».«3».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩hjk:(fun i ↦ i) ⟨3, ⋯⟩ < (fun i ↦ i) ⟨3, ⋯⟩⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1 simp at hij hjk All goals completed! 🐙
· refine_2.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1 exact h1 All goals completed! 🐙
· refine_2.«0».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1 rw [EuclideanGeometry.oangle_rotate_sign refine_2.«0».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1 refine_2.«0».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1]refine_2.«0».«1».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1
exact h4 All goals completed! 🐙
· refine_2.«0».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨0, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1 rw [← EuclideanGeometry.oangle_rotate_sign refine_2.«0».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1 refine_2.«0».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1]refine_2.«0».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩)) (p ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1
exact h3 All goals completed! 🐙
· refine_2.«1».«2».«3» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)p:Fin 4 → Px✝:(∡ (p 0) (p 1) (p 2)).sign = 1 ∧
(∡ (p 1) (p 2) (p 3)).sign = 1 ∧ (∡ (p 2) (p 3) (p 0)).sign = 1 ∧ (∡ (p 3) (p 0) (p 1)).sign = 1h1:(∡ (p 0) (p 1) (p 2)).sign = 1h2:(∡ (p 1) (p 2) (p 3)).sign = 1h3:(∡ (p 2) (p 3) (p 0)).sign = 1h4:(∡ (p 3) (p 0) (p 1)).sign = 1hij:Truehjk:True⊢ (∡ (p ((fun i ↦ i) ⟨1, ⋯⟩)) (p ((fun i ↦ i) ⟨2, ⋯⟩)) (p ((fun i ↦ i) ⟨3, ⋯⟩))).sign = 1 exact h2 All goals completed! 🐙@[simp]
theorem isCcwConvexPolygon_four (A B C D : P) :
IsCcwConvexPolygon ![A, B, C, D] ↔
(∡ A B C).sign = 1 ∧ (∡ B C D).sign = 1 ∧ (∡ C D A).sign = 1 ∧ (∡ D A B).sign = 1 :=
isCcwConvexPolygon_four'The statement that a sequence of points form a convex polygon.
def IsConvexPolygon {n : ℕ} (p : Fin n → P) : Prop :=
IsCcwConvexPolygon p ∨ IsCcwConvexPolygon fun i => p (-i)Three affine independent points always form a convex polygon.
theorem isConvexPolygon_three_of_affineIndependent {A B C : P}
(hABC : AffineIndependent ℝ ![A, B, C]) : IsConvexPolygon ![A, B, C] := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:AffineIndependent ℝ ![A, B, C]⊢ IsConvexPolygon ![A, B, C]
rw [← oangle_ne_zero_and_ne_pi_iff_affineIndependent, V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:∡ A B C ≠ 0 ∧ ∡ A B C ≠ ↑π⊢ IsConvexPolygon ![A, B, C] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0⊢ IsConvexPolygon ![A, B, C] ← Real.Angle.sign_ne_zero_iff V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0⊢ IsConvexPolygon ![A, B, C] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0⊢ IsConvexPolygon ![A, B, C]] at hABC V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0⊢ IsConvexPolygon ![A, B, C]
cases hsABC : (∡ A B C).sign zero V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.zero⊢ IsConvexPolygon ![A, B, C]neg V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neg⊢ IsConvexPolygon ![A, B, C]pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.pos⊢ IsConvexPolygon ![A, B, C]
· zero V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.zero⊢ IsConvexPolygon ![A, B, C] exact (hABC hsABC).elim All goals completed! 🐙
· neg V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neg⊢ IsConvexPolygon ![A, B, C] right neg V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neg⊢ IsCcwConvexPolygon fun i ↦ ![A, B, C] (-i)
intro i j k hij hjk neg V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negi:Fin (Nat.succ 0).succ.succj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhij:i < jhjk:j < k⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) i) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign = 1
fin_cases i neg.«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨0, ⋯⟩ < j⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨1, ⋯⟩ < j⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨2, ⋯⟩ < j⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign =
1 <;> neg.«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨0, ⋯⟩ < j⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨1, ⋯⟩ < j⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨2, ⋯⟩ < j⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) j) ((fun i ↦ ![A, B, C] (-i)) k)).sign =
1 fin_cases j neg.«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1 <;> neg.«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1neg.«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.negk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) k)).sign =
1 fin_cases k neg.«2».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«2».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«2».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1 <;> neg.«0».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«0».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«0».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«0».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«0».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«0».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«0».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«0».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«1».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«1».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«1».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«1».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«1».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«1».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«1».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«1».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«1».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«2».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«2».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«2».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«2».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«2».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«2».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1neg.«2».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«2».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))).sign =
1neg.«2».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩))).sign =
1 simp at hij hjk All goals completed! 🐙
rw [EuclideanGeometry.oangle_rev, neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ (-∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1 neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
-1 Real.Angle.sign_neg, neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ -(∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
1neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
-1 neg_eq_iff_eq_neg neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
-1neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
-1]neg.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.neghij:Truehjk:True⊢ (∡ ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨2, ⋯⟩)) ((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨1, ⋯⟩))
((fun i ↦ ![A, B, C] (-i)) ((fun i ↦ i) ⟨0, ⋯⟩))).sign =
-1
exact (oangle_rotate_sign A B C).trans hsABC All goals completed! 🐙
· pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.pos⊢ IsConvexPolygon ![A, B, C] left pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.pos⊢ IsCcwConvexPolygon ![A, B, C]
intro i j k hij hjk pos V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posi:Fin (Nat.succ 0).succ.succj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhij:i < jhjk:j < k⊢ (∡ (![A, B, C] i) (![A, B, C] j) (![A, B, C] k)).sign = 1
fin_cases i pos.«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨0, ⋯⟩ < j⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] j) (![A, B, C] k)).sign = 1pos.«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨1, ⋯⟩ < j⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] j) (![A, B, C] k)).sign = 1pos.«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨2, ⋯⟩ < j⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] j) (![A, B, C] k)).sign = 1 <;> pos.«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨0, ⋯⟩ < j⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] j) (![A, B, C] k)).sign = 1pos.«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨1, ⋯⟩ < j⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] j) (![A, B, C] k)).sign = 1pos.«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posj:Fin (Nat.succ 0).succ.succk:Fin (Nat.succ 0).succ.succhjk:j < khij:(fun i ↦ i) ⟨2, ⋯⟩ < j⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] j) (![A, B, C] k)).sign = 1 fin_cases j pos.«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] k)).sign = 1 <;> pos.«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨0, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨1, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] k)).sign = 1pos.«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.posk:Fin (Nat.succ 0).succ.succhjk:(fun i ↦ i) ⟨2, ⋯⟩ < khij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] k)).sign = 1 fin_cases k pos.«2».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«2».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«2».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1 <;> pos.«0».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«0».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«0».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«0».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«0».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«0».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«0».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«0».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«0».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«1».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«1».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«1».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«1».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«1».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«1».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«1».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«1».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«1».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«2».«0».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«2».«0».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«2».«0».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩hjk:(fun i ↦ i) ⟨0, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«2».«1».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«2».«1».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«2».«1».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩hjk:(fun i ↦ i) ⟨1, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1pos.«2».«2».«0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨0, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨0, ⋯⟩))).sign = 1pos.«2».«2».«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨1, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨1, ⋯⟩))).sign = 1pos.«2».«2».«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:PhABC:(∡ A B C).sign ≠ 0hsABC:(∡ A B C).sign = SignType.poshij:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩hjk:(fun i ↦ i) ⟨2, ⋯⟩ < (fun i ↦ i) ⟨2, ⋯⟩⊢ (∡ (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩)) (![A, B, C] ((fun i ↦ i) ⟨2, ⋯⟩))).sign = 1 simp at hij hjk All goals completed! 🐙
exact hsABC All goals completed! 🐙
theorem isConvexPolygon_three_iff_affineIndependent {A B C : P} :
IsConvexPolygon ![A, B, C] ↔ AffineIndependent ℝ ![A, B, C] := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:P⊢ IsConvexPolygon ![A, B, C] ↔ AffineIndependent ℝ ![A, B, C]
refine ⟨fun h => ?_, isConvexPolygon_three_of_affineIndependent⟩ V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]⊢ AffineIndependent ℝ ![A, B, C]
rw [← oangle_ne_zero_and_ne_pi_iff_affineIndependent, V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]⊢ ∡ A B C ≠ 0 ∧ ∡ A B C ≠ ↑π V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]⊢ (∡ A B C).sign ≠ 0 ← Real.Angle.sign_ne_zero_iff V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]⊢ (∡ A B C).sign ≠ 0 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]⊢ (∡ A B C).sign ≠ 0] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]⊢ (∡ A B C).sign ≠ 0
let p := ![A, B, C] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Ph:IsConvexPolygon ![A, B, C]p:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]⊢ (∡ A B C).sign ≠ 0
change IsConvexPolygon p at h V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsConvexPolygon p⊢ (∡ A B C).sign ≠ 0
change Real.Angle.sign (∡ (p 0) (p 1) (p 2)) ≠ 0 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsConvexPolygon p⊢ (∡ (p 0) (p 1) (p 2)).sign ≠ 0
cases h with
| inl h => inl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ (∡ (p 0) (p 1) (p 2)).sign ≠ 0
rw [h.sign_oangle (by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 0 < 1 inl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 1 ≠ 0 simp All goals completed! 🐙inl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 1 ≠ 0) (by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 1 < 2inl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 1 ≠ 0 simp All goals completed! 🐙inl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 1 ≠ 0)]inl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon p⊢ 1 ≠ 0
rintro ⟨⟩ All goals completed! 🐙
| inr h => inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 1) (p 2)).sign ≠ 0
suffices Real.Angle.sign (∡ (p 0) (p 2) (p 1)) = 1 by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)this:(∡ (p 0) (p 2) (p 1)).sign = 1⊢ (∡ (p 0) (p 1) (p 2)).sign ≠ 0 inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 2) (p 1)).sign = 1 rw [← oangle_swap₂₃_sign, V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)this:(∡ (p 0) (p 2) (p 1)).sign = 1⊢ -(∡ (p 0) (p 2) (p 1)).sign ≠ 0 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)this:(∡ (p 0) (p 2) (p 1)).sign = 1⊢ -1 ≠ 0inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 2) (p 1)).sign = 1 this V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)this:(∡ (p 0) (p 2) (p 1)).sign = 1⊢ -1 ≠ 0 V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)this:(∡ (p 0) (p 2) (p 1)).sign = 1⊢ -1 ≠ 0inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 2) (p 1)).sign = 1] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)this:(∡ (p 0) (p 2) (p 1)).sign = 1⊢ -1 ≠ 0inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 2) (p 1)).sign = 1; rintro ⟨⟩inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 2) (p 1)).sign = 1inr V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ (∡ (p 0) (p 2) (p 1)).sign = 1
exact h.sign_oangle (i := 0) (j := 1) (k := 2) (by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ 0 < 1 simp All goals completed! 🐙) (by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)A:PB:PC:Pp:Fin (Nat.succ 0).succ.succ → P := ![A, B, C]h:IsCcwConvexPolygon fun i ↦ p (-i)⊢ 1 < 2 simp All goals completed! 🐙)
theorem isConvexPolygon_triangle (t : Affine.Triangle ℝ P) : IsConvexPolygon t.points := by V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ IsConvexPolygon t.points
have : t.points = ![t.points 0, t.points 1, t.points 2] := by ext i V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pi:Fin (2 + 1)⊢ t.points i = ![t.points 0, t.points 1, t.points 2] i V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ IsConvexPolygon t.points; fin_cases i «0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ t.points ((fun i ↦ i) ⟨0, ⋯⟩) = ![t.points 0, t.points 1, t.points 2] ((fun i ↦ i) ⟨0, ⋯⟩)«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ t.points ((fun i ↦ i) ⟨1, ⋯⟩) = ![t.points 0, t.points 1, t.points 2] ((fun i ↦ i) ⟨1, ⋯⟩)«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ t.points ((fun i ↦ i) ⟨2, ⋯⟩) = ![t.points 0, t.points 1, t.points 2] ((fun i ↦ i) ⟨2, ⋯⟩) V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ IsConvexPolygon t.points <;> «0» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ t.points ((fun i ↦ i) ⟨0, ⋯⟩) = ![t.points 0, t.points 1, t.points 2] ((fun i ↦ i) ⟨0, ⋯⟩)«1» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ t.points ((fun i ↦ i) ⟨1, ⋯⟩) = ![t.points 0, t.points 1, t.points 2] ((fun i ↦ i) ⟨1, ⋯⟩)«2» V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ P⊢ t.points ((fun i ↦ i) ⟨2, ⋯⟩) = ![t.points 0, t.points 1, t.points 2] ((fun i ↦ i) ⟨2, ⋯⟩) V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ IsConvexPolygon t.points rfl V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ IsConvexPolygon t.points V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ IsConvexPolygon t.points
rw [this, V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ IsConvexPolygon ![t.points 0, t.points 1, t.points 2] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ AffineIndependent ℝ t.points isConvexPolygon_three_iff_affineIndependent, V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ AffineIndependent ℝ ![t.points 0, t.points 1, t.points 2] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ AffineIndependent ℝ t.points ← this V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ AffineIndependent ℝ t.points V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ AffineIndependent ℝ t.points] V:Type u_1P:Type u_2inst✝⁵:NormedAddCommGroup Vinst✝⁴:InnerProductSpace ℝ Vinst✝³:MetricSpace Pinst✝²:NormedAddTorsor V Pinst✝¹:Module.Oriented ℝ V (Fin 2)inst✝:Fact (Module.finrank ℝ V = 2)t:Affine.Triangle ℝ Pthis:t.points = ![t.points 0, t.points 1, t.points 2]⊢ AffineIndependent ℝ t.points
exact t.independent All goals completed! 🐙noncomputable def triangle_area (a b c : P) : ℝ :=
positiveOrientation.areaForm (a -ᵥ c) (b -ᵥ c) / 2
lemma triangle_area_eq_det (a b c : ℝ²) :
triangle_area a b c =
Matrix.det !![a 0, b 0, c 0;
a 1, b 1, c 1;
1, 1, 1] / 2 := by a:ℝ²b:ℝ²c:ℝ²⊢ triangle_area a b c = !![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2
rw [triangle_area, a:ℝ²b:ℝ²c:ℝ²⊢ (positiveOrientation.areaForm (a -ᵥ c)) (b -ᵥ c) / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 a:ℝ²b:ℝ²c:ℝ²⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 Orientation.areaForm_to_volumeForm, a:ℝ²b:ℝ²c:ℝ²⊢ positiveOrientation.volumeForm ![a -ᵥ c, b -ᵥ c] / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 a:ℝ²b:ℝ²c:ℝ²⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2
positiveOrientation.volumeForm_robust (EuclideanSpace.basisFun (Fin 2) ℝ) rfl, a:ℝ²b:ℝ²c:ℝ²⊢ (EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.det ![a -ᵥ c, b -ᵥ c] / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 a:ℝ²b:ℝ²c:ℝ²⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 Module.Basis.det_apply a:ℝ²b:ℝ²c:ℝ²⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 a:ℝ²b:ℝ²c:ℝ²⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2] a:ℝ²b:ℝ²c:ℝ²⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2
suffices (a 0 - c 0) * (b 1 - c 1) - (b 0 - c 0) * (a 1 - c 1) =
a 0 * b 1 - a 0 * c 1 - b 0 * a 1 + b 0 * c 1 + c 0 * a 1 - c 0 * b 1 by a:ℝ²b:ℝ²c:ℝ²this:(a.ofLp 0 - c.ofLp 0) * (b.ofLp 1 - c.ofLp 1) - (b.ofLp 0 - c.ofLp 0) * (a.ofLp 1 - c.ofLp 1) =
a.ofLp 0 * b.ofLp 1 - a.ofLp 0 * c.ofLp 1 - b.ofLp 0 * a.ofLp 1 + b.ofLp 0 * c.ofLp 1 + c.ofLp 0 * a.ofLp 1 -
c.ofLp 0 * b.ofLp 1⊢ ((EuclideanSpace.basisFun (Fin 2) ℝ).toBasis.toMatrix ![a -ᵥ c, b -ᵥ c]).det / 2 =
!![a.ofLp 0, b.ofLp 0, c.ofLp 0; a.ofLp 1, b.ofLp 1, c.ofLp 1; 1, 1, 1].det / 2 a:ℝ²b:ℝ²c:ℝ²⊢ (a.ofLp 0 - c.ofLp 0) * (b.ofLp 1 - c.ofLp 1) - (b.ofLp 0 - c.ofLp 0) * (a.ofLp 1 - c.ofLp 1) =
a.ofLp 0 * b.ofLp 1 - a.ofLp 0 * c.ofLp 1 - b.ofLp 0 * a.ofLp 1 + b.ofLp 0 * c.ofLp 1 + c.ofLp 0 * a.ofLp 1 -
c.ofLp 0 * b.ofLp 1
simp [Matrix.det_fin_two, Matrix.det_fin_three, Module.Basis.toMatrix, this] a:ℝ²b:ℝ²c:ℝ²⊢ (a.ofLp 0 - c.ofLp 0) * (b.ofLp 1 - c.ofLp 1) - (b.ofLp 0 - c.ofLp 0) * (a.ofLp 1 - c.ofLp 1) =
a.ofLp 0 * b.ofLp 1 - a.ofLp 0 * c.ofLp 1 - b.ofLp 0 * a.ofLp 1 + b.ofLp 0 * c.ofLp 1 + c.ofLp 0 * a.ofLp 1 -
c.ofLp 0 * b.ofLp 1 a:ℝ²b:ℝ²c:ℝ²⊢ (a.ofLp 0 - c.ofLp 0) * (b.ofLp 1 - c.ofLp 1) - (b.ofLp 0 - c.ofLp 0) * (a.ofLp 1 - c.ofLp 1) =
a.ofLp 0 * b.ofLp 1 - a.ofLp 0 * c.ofLp 1 - b.ofLp 0 * a.ofLp 1 + b.ofLp 0 * c.ofLp 1 + c.ofLp 0 * a.ofLp 1 -
c.ofLp 0 * b.ofLp 1
ring All goals completed! 🐙The minimum number of distinct distances guaranteed for any set of $n$ points.
noncomputable def minimalDistinctDistances (n : ℕ) : ℕ :=
sInf {(distinctDistances points : ℝ) | (points : Finset ℝ²) (_ : points.card = n)}Let $x_1,\ldots,x_n\in \mathbb{R}^2$ and let $R(x_i)=#{ \lvert x_j-x_i\rvert : j\neq i}$, where the points are ordered such that $$R(x_1)\leq \cdots \leq R(x_n).$$ Let $g(n)$ be the maximum number of distinct values the $R(x_i)$ can take.
noncomputable def maximalDistinctDistancesFrom (n : ℕ) : ℕ :=
sSup {#(X.image (distinctDistancesFrom X)) | (X : Finset ℝ²) (_ : #X = n)}A collection $x_1, \dots, x_n\in\mathbb{R}^2$ is in general position if no three are collinear and no four lie on a circle.
Stated for Set ℝ² so that infinite collections are covered; a Finset argument coerces.
def InGeneralPosition (X : Set ℝ²) : Prop :=
NonTrilinear X ∧ ∀ T ⊆ X, T.ncard = 4 → ¬Cospherical T
a b c are the vertices of a right-angled triangle: the (unoriented) angle at one of the
three vertices equals π / 2.
def IsRightAngled (a b c : P) : Prop :=
∠ b a c = π / 2 ∨ ∠ a b c = π / 2 ∨ ∠ b c a = π / 2
a b c d are the vertices, in counter-clockwise order, of an isosceles trapezoid: they are in
strictly convex position, the side ab is parallel to the side cd (the two bases), and the
diagonals ac and bd have equal length. One pair of parallel sides together with equal
diagonals is the classical characterization of an isosceles trapezoid; in particular it rules
out non-rectangular parallelograms.
def IsIsoscelesTrapezoid (a b c d : ℝ²) : Prop :=
IsCcwConvexPolygon ![a, b, c, d] ∧
(affineSpan ℝ {a, b}).Parallel (affineSpan ℝ {c, d}) ∧
dist a c = dist b dend EuclideanGeometrydef IsIsosceles {α : Type*} [Dist α] (p q r : α) : Prop :=
dist p q = dist q r ∨ dist q r = dist r p ∨ dist r p = dist p qnonrec def Set.IsIsosceles {α : Type} [Dist α] (A : Set α) :=
Nonempty A ∧ A.Triplewise (IsIsosceles · · ·)