geometry.euclidean.angle.oriented.basicMathlib.Geometry.Euclidean.Angle.Oriented.Basic

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -903,7 +903,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
     rcases h' with ⟨hwx, hyz⟩
     have hpi : π / 2 ≠ π := by
       intro hpi
-      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel] at hpi
+      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel_right] at hpi
       · exact real.pi_pos.ne.symm hpi
       · exact two_ne_zero
     have h0wx : w = 0 ∨ x = 0 :=
@@ -1334,10 +1334,10 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
       Real.Angle.sign_neg, sign_mul, mul_neg, mul_neg, neg_mul, mul_assoc]
   ·
     rw [← o.oangle_sign_smul_add_right (r₁ • x + r₂ • y) (r₃ • x + r₄ • y) (-r₃ / r₁), smul_add,
-      smul_smul, smul_smul, div_mul_cancel _ hr₁, neg_smul, ← add_assoc, add_comm (-(r₃ • x)), ←
+      smul_smul, smul_smul, div_mul_cancel₀ _ hr₁, neg_smul, ← add_assoc, add_comm (-(r₃ • x)), ←
       sub_eq_add_neg, sub_add_cancel, ← add_smul, oangle_sign_smul_right,
       oangle_sign_smul_add_smul_left, ← mul_assoc, ← sign_mul, add_mul, mul_assoc, mul_comm r₂ r₁, ←
-      mul_assoc, div_mul_cancel _ hr₁, add_comm, neg_mul, ← sub_eq_add_neg, mul_comm r₄,
+      mul_assoc, div_mul_cancel₀ _ hr₁, add_comm, neg_mul, ← sub_eq_add_neg, mul_comm r₄,
       mul_comm r₃]
 #align orientation.oangle_sign_smul_add_smul_smul_add_smul Orientation.oangle_sign_smul_add_smul_smul_add_smul
 -/
Diff
@@ -499,7 +499,7 @@ equal. -/
 theorem two_zsmul_oangle_left_of_span_eq {x y : V} (z : V) (h : (ℝ ∙ x) = ℝ ∙ y) :
     (2 : ℤ) • o.oangle x z = (2 : ℤ) • o.oangle y z :=
   by
-  rw [Submodule.span_singleton_eq_span_singleton] at h 
+  rw [Submodule.span_singleton_eq_span_singleton] at h
   rcases h with ⟨r, rfl⟩
   exact (o.two_zsmul_oangle_smul_left_of_ne_zero _ _ (Units.ne_zero _)).symm
 #align orientation.two_zsmul_oangle_left_of_span_eq Orientation.two_zsmul_oangle_left_of_span_eq
@@ -511,7 +511,7 @@ equal. -/
 theorem two_zsmul_oangle_right_of_span_eq (x : V) {y z : V} (h : (ℝ ∙ y) = ℝ ∙ z) :
     (2 : ℤ) • o.oangle x y = (2 : ℤ) • o.oangle x z :=
   by
-  rw [Submodule.span_singleton_eq_span_singleton] at h 
+  rw [Submodule.span_singleton_eq_span_singleton] at h
   rcases h with ⟨r, rfl⟩
   exact (o.two_zsmul_oangle_smul_right_of_ne_zero _ _ (Units.ne_zero _)).symm
 #align orientation.two_zsmul_oangle_right_of_span_eq Orientation.two_zsmul_oangle_right_of_span_eq
@@ -566,7 +566,7 @@ theorem oangle_eq_pi_iff_sameRay_neg {x y : V} :
     refine' ⟨hx, hy, _⟩
     rw [o.oangle_neg_right hx hy, h, Real.Angle.coe_pi_add_coe_pi]
   · rintro ⟨hx, hy, h⟩
-    rwa [o.oangle_neg_right hx hy, ← Real.Angle.sub_coe_pi_eq_add_coe_pi, sub_eq_zero] at h 
+    rwa [o.oangle_neg_right hx hy, ← Real.Angle.sub_coe_pi_eq_add_coe_pi, sub_eq_zero] at h
 #align orientation.oangle_eq_pi_iff_same_ray_neg Orientation.oangle_eq_pi_iff_sameRay_neg
 -/
 
@@ -754,7 +754,7 @@ theorem oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq {x y : V} (hn : x ≠ y
   rw [eq_sub_iff_add_eq, ← oangle_neg_neg, ← add_assoc]
   have hy : y ≠ 0 := by
     rintro rfl
-    rw [norm_zero, norm_eq_zero] at h 
+    rw [norm_zero, norm_eq_zero] at h
     exact hn h
   have hx : x ≠ 0 := norm_ne_zero_iff.1 (h.symm ▸ norm_ne_zero_iff.2 hy)
   convert o.oangle_add_cyc3_neg_right (neg_ne_zero.2 hy) hx (sub_ne_zero_of_ne hn.symm) <;> simp
@@ -872,7 +872,7 @@ theorem eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero {x y : V}
   by_cases hx : x = 0; · simp [hx]
   by_cases hy : y = 0; · simp [hy]
   rw [o.angle_eq_abs_oangle_to_real hx hy]
-  rw [Real.Angle.sign_eq_zero_iff] at h 
+  rw [Real.Angle.sign_eq_zero_iff] at h
   rcases h with (h | h) <;> simp [h, real.pi_pos.le]
 #align orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero Orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero
 -/
@@ -903,7 +903,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
     rcases h' with ⟨hwx, hyz⟩
     have hpi : π / 2 ≠ π := by
       intro hpi
-      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel] at hpi 
+      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel] at hpi
       · exact real.pi_pos.ne.symm hpi
       · exact two_ne_zero
     have h0wx : w = 0 ∨ x = 0 :=
@@ -915,10 +915,10 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
       have h0' := o.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero hsyz
       simpa [hyz, real.pi_pos.ne.symm, hpi] using h0'
     rcases h0wx with (h0wx | h0wx) <;> rcases h0yz with (h0yz | h0yz) <;> simp [h0wx, h0yz]
-  · push_neg at h0 
+  · push_neg at h0
     rw [Real.Angle.eq_iff_abs_toReal_eq_of_sign_eq hs]
     rwa [o.angle_eq_abs_oangle_to_real h0.1.1 h0.1.2,
-      o.angle_eq_abs_oangle_to_real h0.2.1 h0.2.2] at h 
+      o.angle_eq_abs_oangle_to_real h0.2.1 h0.2.2] at h
 #align orientation.oangle_eq_of_angle_eq_of_sign_eq Orientation.oangle_eq_of_angle_eq_of_sign_eq
 -/
 
@@ -943,7 +943,7 @@ theorem oangle_eq_angle_of_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) :
   by_cases hy : y = 0; · exfalso; simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_right _
   intro hxy
-  rw [hxy, Real.Angle.sign_neg, neg_eq_iff_eq_neg, ← SignType.neg_iff, ← not_le] at h 
+  rw [hxy, Real.Angle.sign_neg, neg_eq_iff_eq_neg, ← SignType.neg_iff, ← not_le] at h
   exact
     h
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
@@ -961,7 +961,7 @@ theorem oangle_eq_neg_angle_of_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sig
   by_cases hy : y = 0; · exfalso; simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_left _
   intro hxy
-  rw [hxy, ← SignType.neg_iff, ← not_le] at h 
+  rw [hxy, ← SignType.neg_iff, ← not_le] at h
   exact
     h
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
@@ -978,7 +978,7 @@ theorem oangle_eq_zero_iff_angle_eq_zero {x y : V} (hx : x ≠ 0) (hy : y ≠ 0)
   refine' ⟨fun h => _, fun h => _⟩
   · simpa [o.angle_eq_abs_oangle_to_real hx hy]
   · have ha := o.oangle_eq_angle_or_eq_neg_angle hx hy
-    rw [h] at ha 
+    rw [h] at ha
     simpa using ha
 #align orientation.oangle_eq_zero_iff_angle_eq_zero Orientation.oangle_eq_zero_iff_angle_eq_zero
 -/
@@ -1000,7 +1000,7 @@ theorem oangle_eq_pi_iff_angle_eq_pi {x y : V} :
   · rw [o.angle_eq_abs_oangle_to_real hx hy, h]
     simp [real.pi_pos.le]
   · have ha := o.oangle_eq_angle_or_eq_neg_angle hx hy
-    rw [h] at ha 
+    rw [h] at ha
     simpa using ha
 #align orientation.oangle_eq_pi_iff_angle_eq_pi Orientation.oangle_eq_pi_iff_angle_eq_pi
 -/
@@ -1107,24 +1107,24 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     Fin.sum_univ_two, Fin.exists_fin_two]
   refine' ⟨fun h => _, fun h => _⟩
   · rcases h with ⟨m, h, hm⟩
-    change m 0 • x + m 1 • (r • x + y) = 0 at h 
+    change m 0 • x + m 1 • (r • x + y) = 0 at h
     refine' ⟨![m 0 + m 1 * r, m 1], _⟩
     change (m 0 + m 1 * r) • x + m 1 • y = 0 ∧ (m 0 + m 1 * r ≠ 0 ∨ m 1 ≠ 0)
-    rw [smul_add, smul_smul, ← add_assoc, ← add_smul] at h 
+    rw [smul_add, smul_smul, ← add_assoc, ← add_smul] at h
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
-    rw [h1] at h0 hm 
-    rw [MulZeroClass.zero_mul, add_zero] at h0 
+    rw [h1] at h0 hm
+    rw [MulZeroClass.zero_mul, add_zero] at h0
     simpa [h0] using hm
   · rcases h with ⟨m, h, hm⟩
-    change m 0 • x + m 1 • y = 0 at h 
+    change m 0 • x + m 1 • y = 0 at h
     refine' ⟨![m 0 - m 1 * r, m 1], _⟩
     change (m 0 - m 1 * r) • x + m 1 • (r • x + y) = 0 ∧ (m 0 - m 1 * r ≠ 0 ∨ m 1 ≠ 0)
     rw [sub_smul, smul_add, smul_smul, ← add_assoc, sub_add_cancel]
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
-    rw [h1] at h0 hm 
-    rw [MulZeroClass.zero_mul, sub_zero] at h0 
+    rw [h1] at h0 hm
+    rw [MulZeroClass.zero_mul, sub_zero] at h0
     simpa [h0] using hm
 #align orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff
 -/
@@ -1143,7 +1143,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
   have h' : ∀ r' : ℝ, o.oangle x (r' • x + y) ≠ 0 ∧ o.oangle x (r' • x + y) ≠ π :=
     by
     intro r'
-    rwa [← o.oangle_smul_add_right_eq_zero_or_eq_pi_iff r', not_or] at h 
+    rwa [← o.oangle_smul_add_right_eq_zero_or_eq_pi_iff r', not_or] at h
   let s : Set (V × V) := (fun r' : ℝ => (x, r' • x + y)) '' Set.univ
   have hc : IsConnected s :=
     is_connected_univ.image _
@@ -1153,7 +1153,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
     by
     refine' ContinuousAt.continuousOn fun z hz => o.continuous_at_oangle _ _
     all_goals
-      simp_rw [s, Set.mem_image] at hz 
+      simp_rw [s, Set.mem_image] at hz
       obtain ⟨r', -, rfl⟩ := hz
       simp only [Prod.fst, Prod.snd]
       intro hz
@@ -1162,7 +1162,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
   have hs : ∀ z : V × V, z ∈ s → o.oangle z.1 z.2 ≠ 0 ∧ o.oangle z.1 z.2 ≠ π :=
     by
     intro z hz
-    simp_rw [s, Set.mem_image] at hz 
+    simp_rw [s, Set.mem_image] at hz
     obtain ⟨r', -, rfl⟩ := hz
     exact h' r'
   have hx : (x, y) ∈ s :=
@@ -1352,18 +1352,18 @@ theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y
     by
     conv_rhs => rw [oangle_sign_sub_left_swap]
     rw [o.oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq hn h, Real.Angle.sign_pi_sub]
-  rw [Real.Angle.sign_two_zsmul_eq_sign_iff] at hs 
+  rw [Real.Angle.sign_two_zsmul_eq_sign_iff] at hs
   rcases hs with (hs | hs)
-  · rw [oangle_eq_pi_iff_oangle_rev_eq_pi, oangle_eq_pi_iff_same_ray_neg, neg_sub] at hs 
+  · rw [oangle_eq_pi_iff_oangle_rev_eq_pi, oangle_eq_pi_iff_same_ray_neg, neg_sub] at hs
     rcases hs with ⟨hy, -, hr⟩
-    rw [← exists_nonneg_left_iff_sameRay hy] at hr 
+    rw [← exists_nonneg_left_iff_sameRay hy] at hr
     rcases hr with ⟨r, hr0, hr⟩
-    rw [eq_sub_iff_add_eq] at hr 
-    nth_rw 2 [← one_smul ℝ y] at hr 
-    rw [← add_smul] at hr 
+    rw [eq_sub_iff_add_eq] at hr
+    nth_rw 2 [← one_smul ℝ y] at hr
+    rw [← add_smul] at hr
     rw [← hr, norm_smul, Real.norm_eq_abs, abs_of_pos (Left.add_pos_of_nonneg_of_pos hr0 one_pos),
-      mul_left_eq_self₀, or_iff_left (norm_ne_zero_iff.2 hy), add_left_eq_self] at h 
-    rw [h, zero_add, one_smul] at hr 
+      mul_left_eq_self₀, or_iff_left (norm_ne_zero_iff.2 hy), add_left_eq_self] at h
+    rw [h, zero_add, one_smul] at hr
     exact False.elim (hn hr.symm)
   · exact hs
 #align orientation.abs_oangle_sub_left_to_real_lt_pi_div_two Orientation.abs_oangle_sub_left_toReal_lt_pi_div_two
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2022 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
 -/
-import Mathbin.Analysis.InnerProductSpace.TwoDim
-import Mathbin.Geometry.Euclidean.Angle.Unoriented.Basic
+import Analysis.InnerProductSpace.TwoDim
+import Geometry.Euclidean.Angle.Unoriented.Basic
 
 #align_import geometry.euclidean.angle.oriented.basic from "leanprover-community/mathlib"@"d07a9c875ed7139abfde6a333b2be205c5bd404e"
 
@@ -742,7 +742,7 @@ theorem oangle_sub_eq_oangle_sub_rev_of_norm_eq {x y : V} (h : ‖x‖ = ‖y‖
 #align orientation.oangle_sub_eq_oangle_sub_rev_of_norm_eq Orientation.oangle_sub_eq_oangle_sub_rev_of_norm_eq
 -/
 
-/- ./././Mathport/Syntax/Translate/Tactic/Lean3.lean:132:4: warning: unsupported: rw with cfg: { occs := occurrences.pos[occurrences.pos] «expr[ ,]»([1]) } -/
+/- ./././Mathport/Syntax/Translate/Tactic/Lean3.lean:133:4: warning: unsupported: rw with cfg: { occs := occurrences.pos[occurrences.pos] «expr[ ,]»([1]) } -/
 #print Orientation.oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq /-
 /-- The angle at the apex of an isosceles triangle is `π` minus twice a base angle, oriented
 vector angle form. -/
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
-
-! This file was ported from Lean 3 source module geometry.euclidean.angle.oriented.basic
-! leanprover-community/mathlib commit d07a9c875ed7139abfde6a333b2be205c5bd404e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.InnerProductSpace.TwoDim
 import Mathbin.Geometry.Euclidean.Angle.Unoriented.Basic
 
+#align_import geometry.euclidean.angle.oriented.basic from "leanprover-community/mathlib"@"d07a9c875ed7139abfde6a333b2be205c5bd404e"
+
 /-!
 # Oriented angles.
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
 
 ! This file was ported from Lean 3 source module geometry.euclidean.angle.oriented.basic
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
+! leanprover-community/mathlib commit d07a9c875ed7139abfde6a333b2be205c5bd404e
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.Geometry.Euclidean.Angle.Unoriented.Basic
 /-!
 # Oriented angles.
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file defines oriented angles in real inner product spaces.
 
 ## Main definitions
Diff
@@ -54,7 +54,6 @@ variable [InnerProductSpace ℝ V] [InnerProductSpace ℝ V']
 
 variable [Fact (finrank ℝ V = 2)] [Fact (finrank ℝ V' = 2)] (o : Orientation ℝ V (Fin 2))
 
--- mathport name: exprω
 local notation "ω" => o.areaForm
 
 #print Orientation.oangle /-
@@ -65,6 +64,7 @@ def oangle (x y : V) : Real.Angle :=
 #align orientation.oangle Orientation.oangle
 -/
 
+#print Orientation.continuousAt_oangle /-
 /-- Oriented angles are continuous when the vectors involved are nonzero. -/
 theorem continuousAt_oangle {x : V × V} (hx1 : x.1 ≠ 0) (hx2 : x.2 ≠ 0) :
     ContinuousAt (fun y : V × V => o.oangle y.1 y.2) x :=
@@ -75,17 +75,23 @@ theorem continuousAt_oangle {x : V × V} (hx1 : x.1 ≠ 0) (hx2 : x.2 ≠ 0) :
     ((continuous_of_real.comp continuous_inner).add
         ((continuous_of_real.comp o.area_form'.continuous₂).mul continuous_const)).ContinuousAt
 #align orientation.continuous_at_oangle Orientation.continuousAt_oangle
+-/
 
+#print Orientation.oangle_zero_left /-
 /-- If the first vector passed to `oangle` is 0, the result is 0. -/
 @[simp]
 theorem oangle_zero_left (x : V) : o.oangle 0 x = 0 := by simp [oangle]
 #align orientation.oangle_zero_left Orientation.oangle_zero_left
+-/
 
+#print Orientation.oangle_zero_right /-
 /-- If the second vector passed to `oangle` is 0, the result is 0. -/
 @[simp]
 theorem oangle_zero_right (x : V) : o.oangle x 0 = 0 := by simp [oangle]
 #align orientation.oangle_zero_right Orientation.oangle_zero_right
+-/
 
+#print Orientation.oangle_self /-
 /-- If the two vectors passed to `oangle` are the same, the result is 0. -/
 @[simp]
 theorem oangle_self (x : V) : o.oangle x x = 0 :=
@@ -95,78 +101,107 @@ theorem oangle_self (x : V) : o.oangle x x = 0 :=
   apply arg_of_real_of_nonneg
   positivity
 #align orientation.oangle_self Orientation.oangle_self
+-/
 
+#print Orientation.left_ne_zero_of_oangle_ne_zero /-
 /-- If the angle between two vectors is nonzero, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : x ≠ 0 := by rintro rfl;
   simpa using h
 #align orientation.left_ne_zero_of_oangle_ne_zero Orientation.left_ne_zero_of_oangle_ne_zero
+-/
 
+#print Orientation.right_ne_zero_of_oangle_ne_zero /-
 /-- If the angle between two vectors is nonzero, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : y ≠ 0 := by rintro rfl;
   simpa using h
 #align orientation.right_ne_zero_of_oangle_ne_zero Orientation.right_ne_zero_of_oangle_ne_zero
+-/
 
+#print Orientation.ne_of_oangle_ne_zero /-
 /-- If the angle between two vectors is nonzero, the vectors are not equal. -/
 theorem ne_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : x ≠ y := by rintro rfl;
   simpa using h
 #align orientation.ne_of_oangle_ne_zero Orientation.ne_of_oangle_ne_zero
+-/
 
+#print Orientation.left_ne_zero_of_oangle_eq_pi /-
 /-- If the angle between two vectors is `π`, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_eq_pi {x y : V} (h : o.oangle x y = π) : x ≠ 0 :=
   o.left_ne_zero_of_oangle_ne_zero (h.symm ▸ Real.Angle.pi_ne_zero : o.oangle x y ≠ 0)
 #align orientation.left_ne_zero_of_oangle_eq_pi Orientation.left_ne_zero_of_oangle_eq_pi
+-/
 
+#print Orientation.right_ne_zero_of_oangle_eq_pi /-
 /-- If the angle between two vectors is `π`, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_eq_pi {x y : V} (h : o.oangle x y = π) : y ≠ 0 :=
   o.right_ne_zero_of_oangle_ne_zero (h.symm ▸ Real.Angle.pi_ne_zero : o.oangle x y ≠ 0)
 #align orientation.right_ne_zero_of_oangle_eq_pi Orientation.right_ne_zero_of_oangle_eq_pi
+-/
 
+#print Orientation.ne_of_oangle_eq_pi /-
 /-- If the angle between two vectors is `π`, the vectors are not equal. -/
 theorem ne_of_oangle_eq_pi {x y : V} (h : o.oangle x y = π) : x ≠ y :=
   o.ne_of_oangle_ne_zero (h.symm ▸ Real.Angle.pi_ne_zero : o.oangle x y ≠ 0)
 #align orientation.ne_of_oangle_eq_pi Orientation.ne_of_oangle_eq_pi
+-/
 
+#print Orientation.left_ne_zero_of_oangle_eq_pi_div_two /-
 /-- If the angle between two vectors is `π / 2`, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_eq_pi_div_two {x y : V} (h : o.oangle x y = (π / 2 : ℝ)) : x ≠ 0 :=
   o.left_ne_zero_of_oangle_ne_zero (h.symm ▸ Real.Angle.pi_div_two_ne_zero : o.oangle x y ≠ 0)
 #align orientation.left_ne_zero_of_oangle_eq_pi_div_two Orientation.left_ne_zero_of_oangle_eq_pi_div_two
+-/
 
+#print Orientation.right_ne_zero_of_oangle_eq_pi_div_two /-
 /-- If the angle between two vectors is `π / 2`, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_eq_pi_div_two {x y : V} (h : o.oangle x y = (π / 2 : ℝ)) : y ≠ 0 :=
   o.right_ne_zero_of_oangle_ne_zero (h.symm ▸ Real.Angle.pi_div_two_ne_zero : o.oangle x y ≠ 0)
 #align orientation.right_ne_zero_of_oangle_eq_pi_div_two Orientation.right_ne_zero_of_oangle_eq_pi_div_two
+-/
 
+#print Orientation.ne_of_oangle_eq_pi_div_two /-
 /-- If the angle between two vectors is `π / 2`, the vectors are not equal. -/
 theorem ne_of_oangle_eq_pi_div_two {x y : V} (h : o.oangle x y = (π / 2 : ℝ)) : x ≠ y :=
   o.ne_of_oangle_ne_zero (h.symm ▸ Real.Angle.pi_div_two_ne_zero : o.oangle x y ≠ 0)
 #align orientation.ne_of_oangle_eq_pi_div_two Orientation.ne_of_oangle_eq_pi_div_two
+-/
 
+#print Orientation.left_ne_zero_of_oangle_eq_neg_pi_div_two /-
 /-- If the angle between two vectors is `-π / 2`, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_eq_neg_pi_div_two {x y : V} (h : o.oangle x y = (-π / 2 : ℝ)) :
     x ≠ 0 :=
   o.left_ne_zero_of_oangle_ne_zero (h.symm ▸ Real.Angle.neg_pi_div_two_ne_zero : o.oangle x y ≠ 0)
 #align orientation.left_ne_zero_of_oangle_eq_neg_pi_div_two Orientation.left_ne_zero_of_oangle_eq_neg_pi_div_two
+-/
 
+#print Orientation.right_ne_zero_of_oangle_eq_neg_pi_div_two /-
 /-- If the angle between two vectors is `-π / 2`, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_eq_neg_pi_div_two {x y : V} (h : o.oangle x y = (-π / 2 : ℝ)) :
     y ≠ 0 :=
   o.right_ne_zero_of_oangle_ne_zero (h.symm ▸ Real.Angle.neg_pi_div_two_ne_zero : o.oangle x y ≠ 0)
 #align orientation.right_ne_zero_of_oangle_eq_neg_pi_div_two Orientation.right_ne_zero_of_oangle_eq_neg_pi_div_two
+-/
 
+#print Orientation.ne_of_oangle_eq_neg_pi_div_two /-
 /-- If the angle between two vectors is `-π / 2`, the vectors are not equal. -/
 theorem ne_of_oangle_eq_neg_pi_div_two {x y : V} (h : o.oangle x y = (-π / 2 : ℝ)) : x ≠ y :=
   o.ne_of_oangle_ne_zero (h.symm ▸ Real.Angle.neg_pi_div_two_ne_zero : o.oangle x y ≠ 0)
 #align orientation.ne_of_oangle_eq_neg_pi_div_two Orientation.ne_of_oangle_eq_neg_pi_div_two
+-/
 
+#print Orientation.left_ne_zero_of_oangle_sign_ne_zero /-
 /-- If the sign of the angle between two vectors is nonzero, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_sign_ne_zero {x y : V} (h : (o.oangle x y).sign ≠ 0) : x ≠ 0 :=
   o.left_ne_zero_of_oangle_ne_zero (Real.Angle.sign_ne_zero_iff.1 h).1
 #align orientation.left_ne_zero_of_oangle_sign_ne_zero Orientation.left_ne_zero_of_oangle_sign_ne_zero
+-/
 
+#print Orientation.right_ne_zero_of_oangle_sign_ne_zero /-
 /-- If the sign of the angle between two vectors is nonzero, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_sign_ne_zero {x y : V} (h : (o.oangle x y).sign ≠ 0) : y ≠ 0 :=
   o.right_ne_zero_of_oangle_ne_zero (Real.Angle.sign_ne_zero_iff.1 h).1
 #align orientation.right_ne_zero_of_oangle_sign_ne_zero Orientation.right_ne_zero_of_oangle_sign_ne_zero
+-/
 
 #print Orientation.ne_of_oangle_sign_ne_zero /-
 /-- If the sign of the angle between two vectors is nonzero, the vectors are not equal. -/
@@ -175,15 +210,19 @@ theorem ne_of_oangle_sign_ne_zero {x y : V} (h : (o.oangle x y).sign ≠ 0) : x
 #align orientation.ne_of_oangle_sign_ne_zero Orientation.ne_of_oangle_sign_ne_zero
 -/
 
+#print Orientation.left_ne_zero_of_oangle_sign_eq_one /-
 /-- If the sign of the angle between two vectors is positive, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) : x ≠ 0 :=
   o.left_ne_zero_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.left_ne_zero_of_oangle_sign_eq_one Orientation.left_ne_zero_of_oangle_sign_eq_one
+-/
 
+#print Orientation.right_ne_zero_of_oangle_sign_eq_one /-
 /-- If the sign of the angle between two vectors is positive, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) : y ≠ 0 :=
   o.right_ne_zero_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.right_ne_zero_of_oangle_sign_eq_one Orientation.right_ne_zero_of_oangle_sign_eq_one
+-/
 
 #print Orientation.ne_of_oangle_sign_eq_one /-
 /-- If the sign of the angle between two vectors is positive, the vectors are not equal. -/
@@ -192,15 +231,19 @@ theorem ne_of_oangle_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) : x ≠
 #align orientation.ne_of_oangle_sign_eq_one Orientation.ne_of_oangle_sign_eq_one
 -/
 
+#print Orientation.left_ne_zero_of_oangle_sign_eq_neg_one /-
 /-- If the sign of the angle between two vectors is negative, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) : x ≠ 0 :=
   o.left_ne_zero_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.left_ne_zero_of_oangle_sign_eq_neg_one Orientation.left_ne_zero_of_oangle_sign_eq_neg_one
+-/
 
+#print Orientation.right_ne_zero_of_oangle_sign_eq_neg_one /-
 /-- If the sign of the angle between two vectors is negative, the second vector is nonzero. -/
 theorem right_ne_zero_of_oangle_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) : y ≠ 0 :=
   o.right_ne_zero_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.right_ne_zero_of_oangle_sign_eq_neg_one Orientation.right_ne_zero_of_oangle_sign_eq_neg_one
+-/
 
 #print Orientation.ne_of_oangle_sign_eq_neg_one /-
 /-- If the sign of the angle between two vectors is negative, the vectors are not equal. -/
@@ -209,17 +252,22 @@ theorem ne_of_oangle_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) :
 #align orientation.ne_of_oangle_sign_eq_neg_one Orientation.ne_of_oangle_sign_eq_neg_one
 -/
 
+#print Orientation.oangle_rev /-
 /-- Swapping the two vectors passed to `oangle` negates the angle. -/
 theorem oangle_rev (x y : V) : o.oangle y x = -o.oangle x y := by
   simp only [oangle, o.kahler_swap y x, Complex.arg_conj_coe_angle]
 #align orientation.oangle_rev Orientation.oangle_rev
+-/
 
+#print Orientation.oangle_add_oangle_rev /-
 /-- Adding the angles between two vectors in each order results in 0. -/
 @[simp]
 theorem oangle_add_oangle_rev (x y : V) : o.oangle x y + o.oangle y x = 0 := by
   simp [o.oangle_rev y x]
 #align orientation.oangle_add_oangle_rev Orientation.oangle_add_oangle_rev
+-/
 
+#print Orientation.oangle_neg_left /-
 /-- Negating the first vector passed to `oangle` adds `π` to the angle. -/
 theorem oangle_neg_left {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) : o.oangle (-x) y = o.oangle x y + π :=
   by
@@ -227,7 +275,9 @@ theorem oangle_neg_left {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) : o.oangle (-x)
   convert Complex.arg_neg_coe_angle _
   exact o.kahler_ne_zero hx hy
 #align orientation.oangle_neg_left Orientation.oangle_neg_left
+-/
 
+#print Orientation.oangle_neg_right /-
 /-- Negating the second vector passed to `oangle` adds `π` to the angle. -/
 theorem oangle_neg_right {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) : o.oangle x (-y) = o.oangle x y + π :=
   by
@@ -235,7 +285,9 @@ theorem oangle_neg_right {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) : o.oangle x (-
   convert Complex.arg_neg_coe_angle _
   exact o.kahler_ne_zero hx hy
 #align orientation.oangle_neg_right Orientation.oangle_neg_right
+-/
 
+#print Orientation.two_zsmul_oangle_neg_left /-
 /-- Negating the first vector passed to `oangle` does not change twice the angle. -/
 @[simp]
 theorem two_zsmul_oangle_neg_left (x y : V) : (2 : ℤ) • o.oangle (-x) y = (2 : ℤ) • o.oangle x y :=
@@ -246,7 +298,9 @@ theorem two_zsmul_oangle_neg_left (x y : V) : (2 : ℤ) • o.oangle (-x) y = (2
     · simp [hy]
     · simp [o.oangle_neg_left hx hy]
 #align orientation.two_zsmul_oangle_neg_left Orientation.two_zsmul_oangle_neg_left
+-/
 
+#print Orientation.two_zsmul_oangle_neg_right /-
 /-- Negating the second vector passed to `oangle` does not change twice the angle. -/
 @[simp]
 theorem two_zsmul_oangle_neg_right (x y : V) : (2 : ℤ) • o.oangle x (-y) = (2 : ℤ) • o.oangle x y :=
@@ -257,69 +311,91 @@ theorem two_zsmul_oangle_neg_right (x y : V) : (2 : ℤ) • o.oangle x (-y) = (
     · simp [hy]
     · simp [o.oangle_neg_right hx hy]
 #align orientation.two_zsmul_oangle_neg_right Orientation.two_zsmul_oangle_neg_right
+-/
 
+#print Orientation.oangle_neg_neg /-
 /-- Negating both vectors passed to `oangle` does not change the angle. -/
 @[simp]
 theorem oangle_neg_neg (x y : V) : o.oangle (-x) (-y) = o.oangle x y := by simp [oangle]
 #align orientation.oangle_neg_neg Orientation.oangle_neg_neg
+-/
 
+#print Orientation.oangle_neg_left_eq_neg_right /-
 /-- Negating the first vector produces the same angle as negating the second vector. -/
 theorem oangle_neg_left_eq_neg_right (x y : V) : o.oangle (-x) y = o.oangle x (-y) := by
   rw [← neg_neg y, oangle_neg_neg, neg_neg]
 #align orientation.oangle_neg_left_eq_neg_right Orientation.oangle_neg_left_eq_neg_right
+-/
 
+#print Orientation.oangle_neg_self_left /-
 /-- The angle between the negation of a nonzero vector and that vector is `π`. -/
 @[simp]
 theorem oangle_neg_self_left {x : V} (hx : x ≠ 0) : o.oangle (-x) x = π := by
   simp [oangle_neg_left, hx]
 #align orientation.oangle_neg_self_left Orientation.oangle_neg_self_left
+-/
 
+#print Orientation.oangle_neg_self_right /-
 /-- The angle between a nonzero vector and its negation is `π`. -/
 @[simp]
 theorem oangle_neg_self_right {x : V} (hx : x ≠ 0) : o.oangle x (-x) = π := by
   simp [oangle_neg_right, hx]
 #align orientation.oangle_neg_self_right Orientation.oangle_neg_self_right
+-/
 
+#print Orientation.two_zsmul_oangle_neg_self_left /-
 /-- Twice the angle between the negation of a vector and that vector is 0. -/
 @[simp]
 theorem two_zsmul_oangle_neg_self_left (x : V) : (2 : ℤ) • o.oangle (-x) x = 0 := by
   by_cases hx : x = 0 <;> simp [hx]
 #align orientation.two_zsmul_oangle_neg_self_left Orientation.two_zsmul_oangle_neg_self_left
+-/
 
+#print Orientation.two_zsmul_oangle_neg_self_right /-
 /-- Twice the angle between a vector and its negation is 0. -/
 @[simp]
 theorem two_zsmul_oangle_neg_self_right (x : V) : (2 : ℤ) • o.oangle x (-x) = 0 := by
   by_cases hx : x = 0 <;> simp [hx]
 #align orientation.two_zsmul_oangle_neg_self_right Orientation.two_zsmul_oangle_neg_self_right
+-/
 
+#print Orientation.oangle_add_oangle_rev_neg_left /-
 /-- Adding the angles between two vectors in each order, with the first vector in each angle
 negated, results in 0. -/
 @[simp]
 theorem oangle_add_oangle_rev_neg_left (x y : V) : o.oangle (-x) y + o.oangle (-y) x = 0 := by
   rw [oangle_neg_left_eq_neg_right, oangle_rev, add_left_neg]
 #align orientation.oangle_add_oangle_rev_neg_left Orientation.oangle_add_oangle_rev_neg_left
+-/
 
+#print Orientation.oangle_add_oangle_rev_neg_right /-
 /-- Adding the angles between two vectors in each order, with the second vector in each angle
 negated, results in 0. -/
 @[simp]
 theorem oangle_add_oangle_rev_neg_right (x y : V) : o.oangle x (-y) + o.oangle y (-x) = 0 := by
   rw [o.oangle_rev (-x), oangle_neg_left_eq_neg_right, add_neg_self]
 #align orientation.oangle_add_oangle_rev_neg_right Orientation.oangle_add_oangle_rev_neg_right
+-/
 
+#print Orientation.oangle_smul_left_of_pos /-
 /-- Multiplying the first vector passed to `oangle` by a positive real does not change the
 angle. -/
 @[simp]
 theorem oangle_smul_left_of_pos (x y : V) {r : ℝ} (hr : 0 < r) :
     o.oangle (r • x) y = o.oangle x y := by simp [oangle, Complex.arg_real_mul _ hr]
 #align orientation.oangle_smul_left_of_pos Orientation.oangle_smul_left_of_pos
+-/
 
+#print Orientation.oangle_smul_right_of_pos /-
 /-- Multiplying the second vector passed to `oangle` by a positive real does not change the
 angle. -/
 @[simp]
 theorem oangle_smul_right_of_pos (x y : V) {r : ℝ} (hr : 0 < r) :
     o.oangle x (r • y) = o.oangle x y := by simp [oangle, Complex.arg_real_mul _ hr]
 #align orientation.oangle_smul_right_of_pos Orientation.oangle_smul_right_of_pos
+-/
 
+#print Orientation.oangle_smul_left_of_neg /-
 /-- Multiplying the first vector passed to `oangle` by a negative real produces the same angle
 as negating that vector. -/
 @[simp]
@@ -327,7 +403,9 @@ theorem oangle_smul_left_of_neg (x y : V) {r : ℝ} (hr : r < 0) :
     o.oangle (r • x) y = o.oangle (-x) y := by
   rw [← neg_neg r, neg_smul, ← smul_neg, o.oangle_smul_left_of_pos _ _ (neg_pos_of_neg hr)]
 #align orientation.oangle_smul_left_of_neg Orientation.oangle_smul_left_of_neg
+-/
 
+#print Orientation.oangle_smul_right_of_neg /-
 /-- Multiplying the second vector passed to `oangle` by a negative real produces the same angle
 as negating that vector. -/
 @[simp]
@@ -335,7 +413,9 @@ theorem oangle_smul_right_of_neg (x y : V) {r : ℝ} (hr : r < 0) :
     o.oangle x (r • y) = o.oangle x (-y) := by
   rw [← neg_neg r, neg_smul, ← smul_neg, o.oangle_smul_right_of_pos _ _ (neg_pos_of_neg hr)]
 #align orientation.oangle_smul_right_of_neg Orientation.oangle_smul_right_of_neg
+-/
 
+#print Orientation.oangle_smul_left_self_of_nonneg /-
 /-- The angle between a nonnegative multiple of a vector and that vector is 0. -/
 @[simp]
 theorem oangle_smul_left_self_of_nonneg (x : V) {r : ℝ} (hr : 0 ≤ r) : o.oangle (r • x) x = 0 :=
@@ -344,7 +424,9 @@ theorem oangle_smul_left_self_of_nonneg (x : V) {r : ℝ} (hr : 0 ≤ r) : o.oan
   · simp [h]
   · simp [h.symm]
 #align orientation.oangle_smul_left_self_of_nonneg Orientation.oangle_smul_left_self_of_nonneg
+-/
 
+#print Orientation.oangle_smul_right_self_of_nonneg /-
 /-- The angle between a vector and a nonnegative multiple of that vector is 0. -/
 @[simp]
 theorem oangle_smul_right_self_of_nonneg (x : V) {r : ℝ} (hr : 0 ≤ r) : o.oangle x (r • x) = 0 :=
@@ -353,7 +435,9 @@ theorem oangle_smul_right_self_of_nonneg (x : V) {r : ℝ} (hr : 0 ≤ r) : o.oa
   · simp [h]
   · simp [h.symm]
 #align orientation.oangle_smul_right_self_of_nonneg Orientation.oangle_smul_right_self_of_nonneg
+-/
 
+#print Orientation.oangle_smul_smul_self_of_nonneg /-
 /-- The angle between two nonnegative multiples of the same vector is 0. -/
 @[simp]
 theorem oangle_smul_smul_self_of_nonneg (x : V) {r₁ r₂ : ℝ} (hr₁ : 0 ≤ r₁) (hr₂ : 0 ≤ r₂) :
@@ -363,7 +447,9 @@ theorem oangle_smul_smul_self_of_nonneg (x : V) {r₁ r₂ : ℝ} (hr₁ : 0 ≤
   · simp [h, hr₂]
   · simp [h.symm]
 #align orientation.oangle_smul_smul_self_of_nonneg Orientation.oangle_smul_smul_self_of_nonneg
+-/
 
+#print Orientation.two_zsmul_oangle_smul_left_of_ne_zero /-
 /-- Multiplying the first vector passed to `oangle` by a nonzero real does not change twice the
 angle. -/
 @[simp]
@@ -371,7 +457,9 @@ theorem two_zsmul_oangle_smul_left_of_ne_zero (x y : V) {r : ℝ} (hr : r ≠ 0)
     (2 : ℤ) • o.oangle (r • x) y = (2 : ℤ) • o.oangle x y := by
   rcases hr.lt_or_lt with (h | h) <;> simp [h]
 #align orientation.two_zsmul_oangle_smul_left_of_ne_zero Orientation.two_zsmul_oangle_smul_left_of_ne_zero
+-/
 
+#print Orientation.two_zsmul_oangle_smul_right_of_ne_zero /-
 /-- Multiplying the second vector passed to `oangle` by a nonzero real does not change twice the
 angle. -/
 @[simp]
@@ -379,25 +467,33 @@ theorem two_zsmul_oangle_smul_right_of_ne_zero (x y : V) {r : ℝ} (hr : r ≠ 0
     (2 : ℤ) • o.oangle x (r • y) = (2 : ℤ) • o.oangle x y := by
   rcases hr.lt_or_lt with (h | h) <;> simp [h]
 #align orientation.two_zsmul_oangle_smul_right_of_ne_zero Orientation.two_zsmul_oangle_smul_right_of_ne_zero
+-/
 
+#print Orientation.two_zsmul_oangle_smul_left_self /-
 /-- Twice the angle between a multiple of a vector and that vector is 0. -/
 @[simp]
 theorem two_zsmul_oangle_smul_left_self (x : V) {r : ℝ} : (2 : ℤ) • o.oangle (r • x) x = 0 := by
   rcases lt_or_le r 0 with (h | h) <;> simp [h]
 #align orientation.two_zsmul_oangle_smul_left_self Orientation.two_zsmul_oangle_smul_left_self
+-/
 
+#print Orientation.two_zsmul_oangle_smul_right_self /-
 /-- Twice the angle between a vector and a multiple of that vector is 0. -/
 @[simp]
 theorem two_zsmul_oangle_smul_right_self (x : V) {r : ℝ} : (2 : ℤ) • o.oangle x (r • x) = 0 := by
   rcases lt_or_le r 0 with (h | h) <;> simp [h]
 #align orientation.two_zsmul_oangle_smul_right_self Orientation.two_zsmul_oangle_smul_right_self
+-/
 
+#print Orientation.two_zsmul_oangle_smul_smul_self /-
 /-- Twice the angle between two multiples of a vector is 0. -/
 @[simp]
 theorem two_zsmul_oangle_smul_smul_self (x : V) {r₁ r₂ : ℝ} :
     (2 : ℤ) • o.oangle (r₁ • x) (r₂ • x) = 0 := by by_cases h : r₁ = 0 <;> simp [h]
 #align orientation.two_zsmul_oangle_smul_smul_self Orientation.two_zsmul_oangle_smul_smul_self
+-/
 
+#print Orientation.two_zsmul_oangle_left_of_span_eq /-
 /-- If the spans of two vectors are equal, twice angles with those vectors on the left are
 equal. -/
 theorem two_zsmul_oangle_left_of_span_eq {x y : V} (z : V) (h : (ℝ ∙ x) = ℝ ∙ y) :
@@ -407,7 +503,9 @@ theorem two_zsmul_oangle_left_of_span_eq {x y : V} (z : V) (h : (ℝ ∙ x) = 
   rcases h with ⟨r, rfl⟩
   exact (o.two_zsmul_oangle_smul_left_of_ne_zero _ _ (Units.ne_zero _)).symm
 #align orientation.two_zsmul_oangle_left_of_span_eq Orientation.two_zsmul_oangle_left_of_span_eq
+-/
 
+#print Orientation.two_zsmul_oangle_right_of_span_eq /-
 /-- If the spans of two vectors are equal, twice angles with those vectors on the right are
 equal. -/
 theorem two_zsmul_oangle_right_of_span_eq (x : V) {y z : V} (h : (ℝ ∙ y) = ℝ ∙ z) :
@@ -417,20 +515,26 @@ theorem two_zsmul_oangle_right_of_span_eq (x : V) {y z : V} (h : (ℝ ∙ y) = 
   rcases h with ⟨r, rfl⟩
   exact (o.two_zsmul_oangle_smul_right_of_ne_zero _ _ (Units.ne_zero _)).symm
 #align orientation.two_zsmul_oangle_right_of_span_eq Orientation.two_zsmul_oangle_right_of_span_eq
+-/
 
+#print Orientation.two_zsmul_oangle_of_span_eq_of_span_eq /-
 /-- If the spans of two pairs of vectors are equal, twice angles between those vectors are
 equal. -/
 theorem two_zsmul_oangle_of_span_eq_of_span_eq {w x y z : V} (hwx : (ℝ ∙ w) = ℝ ∙ x)
     (hyz : (ℝ ∙ y) = ℝ ∙ z) : (2 : ℤ) • o.oangle w y = (2 : ℤ) • o.oangle x z := by
   rw [o.two_zsmul_oangle_left_of_span_eq y hwx, o.two_zsmul_oangle_right_of_span_eq x hyz]
 #align orientation.two_zsmul_oangle_of_span_eq_of_span_eq Orientation.two_zsmul_oangle_of_span_eq_of_span_eq
+-/
 
+#print Orientation.oangle_eq_zero_iff_oangle_rev_eq_zero /-
 /-- The oriented angle between two vectors is zero if and only if the angle with the vectors
 swapped is zero. -/
 theorem oangle_eq_zero_iff_oangle_rev_eq_zero {x y : V} : o.oangle x y = 0 ↔ o.oangle y x = 0 := by
   rw [oangle_rev, neg_eq_zero]
 #align orientation.oangle_eq_zero_iff_oangle_rev_eq_zero Orientation.oangle_eq_zero_iff_oangle_rev_eq_zero
+-/
 
+#print Orientation.oangle_eq_zero_iff_sameRay /-
 /-- The oriented angle between two vectors is zero if and only if they are on the same ray. -/
 theorem oangle_eq_zero_iff_sameRay {x y : V} : o.oangle x y = 0 ↔ SameRay ℝ x y :=
   by
@@ -438,13 +542,17 @@ theorem oangle_eq_zero_iff_sameRay {x y : V} : o.oangle x y = 0 ↔ SameRay ℝ
     Complex.arg_eq_zero_iff]
   simpa using o.nonneg_inner_and_area_form_eq_zero_iff_same_ray x y
 #align orientation.oangle_eq_zero_iff_same_ray Orientation.oangle_eq_zero_iff_sameRay
+-/
 
+#print Orientation.oangle_eq_pi_iff_oangle_rev_eq_pi /-
 /-- The oriented angle between two vectors is `π` if and only if the angle with the vectors
 swapped is `π`. -/
 theorem oangle_eq_pi_iff_oangle_rev_eq_pi {x y : V} : o.oangle x y = π ↔ o.oangle y x = π := by
   rw [oangle_rev, neg_eq_iff_eq_neg, Real.Angle.neg_coe_pi]
 #align orientation.oangle_eq_pi_iff_oangle_rev_eq_pi Orientation.oangle_eq_pi_iff_oangle_rev_eq_pi
+-/
 
+#print Orientation.oangle_eq_pi_iff_sameRay_neg /-
 /-- The oriented angle between two vectors is `π` if and only they are nonzero and the first is
 on the same ray as the negation of the second. -/
 theorem oangle_eq_pi_iff_sameRay_neg {x y : V} :
@@ -460,7 +568,9 @@ theorem oangle_eq_pi_iff_sameRay_neg {x y : V} :
   · rintro ⟨hx, hy, h⟩
     rwa [o.oangle_neg_right hx hy, ← Real.Angle.sub_coe_pi_eq_add_coe_pi, sub_eq_zero] at h 
 #align orientation.oangle_eq_pi_iff_same_ray_neg Orientation.oangle_eq_pi_iff_sameRay_neg
+-/
 
+#print Orientation.oangle_eq_zero_or_eq_pi_iff_not_linearIndependent /-
 /-- The oriented angle between two vectors is zero or `π` if and only if those two vectors are
 not linearly independent. -/
 theorem oangle_eq_zero_or_eq_pi_iff_not_linearIndependent {x y : V} :
@@ -468,7 +578,9 @@ theorem oangle_eq_zero_or_eq_pi_iff_not_linearIndependent {x y : V} :
   rw [oangle_eq_zero_iff_same_ray, oangle_eq_pi_iff_same_ray_neg,
     sameRay_or_ne_zero_and_sameRay_neg_iff_not_linearIndependent]
 #align orientation.oangle_eq_zero_or_eq_pi_iff_not_linear_independent Orientation.oangle_eq_zero_or_eq_pi_iff_not_linearIndependent
+-/
 
+#print Orientation.oangle_eq_zero_or_eq_pi_iff_right_eq_smul /-
 /-- The oriented angle between two vectors is zero or `π` if and only if the first vector is zero
 or the second is a multiple of the first. -/
 theorem oangle_eq_zero_or_eq_pi_iff_right_eq_smul {x y : V} :
@@ -493,7 +605,9 @@ theorem oangle_eq_zero_or_eq_pi_iff_right_eq_smul {x y : V} :
     · simp [hr]
     · exact Or.inl (SameRay.sameRay_pos_smul_right x hr)
 #align orientation.oangle_eq_zero_or_eq_pi_iff_right_eq_smul Orientation.oangle_eq_zero_or_eq_pi_iff_right_eq_smul
+-/
 
+#print Orientation.oangle_ne_zero_and_ne_pi_iff_linearIndependent /-
 /-- The oriented angle between two vectors is not zero or `π` if and only if those two vectors
 are linearly independent. -/
 theorem oangle_ne_zero_and_ne_pi_iff_linearIndependent {x y : V} :
@@ -501,7 +615,9 @@ theorem oangle_ne_zero_and_ne_pi_iff_linearIndependent {x y : V} :
   rw [← not_or, ← not_iff_not, Classical.not_not,
     oangle_eq_zero_or_eq_pi_iff_not_linear_independent]
 #align orientation.oangle_ne_zero_and_ne_pi_iff_linear_independent Orientation.oangle_ne_zero_and_ne_pi_iff_linearIndependent
+-/
 
+#print Orientation.eq_iff_norm_eq_and_oangle_eq_zero /-
 /-- Two vectors are equal if and only if they have equal norms and zero angle between them. -/
 theorem eq_iff_norm_eq_and_oangle_eq_zero (x y : V) : x = y ↔ ‖x‖ = ‖y‖ ∧ o.oangle x y = 0 :=
   by
@@ -519,19 +635,25 @@ theorem eq_iff_norm_eq_and_oangle_eq_zero (x y : V) : x = y ↔ ‖x‖ = ‖y
       simpa [norm_smul, _root_.abs_of_nonneg hr] using h₁
     simp
 #align orientation.eq_iff_norm_eq_and_oangle_eq_zero Orientation.eq_iff_norm_eq_and_oangle_eq_zero
+-/
 
+#print Orientation.eq_iff_oangle_eq_zero_of_norm_eq /-
 /-- Two vectors with equal norms are equal if and only if they have zero angle between them. -/
 theorem eq_iff_oangle_eq_zero_of_norm_eq {x y : V} (h : ‖x‖ = ‖y‖) : x = y ↔ o.oangle x y = 0 :=
   ⟨fun he => ((o.eq_iff_norm_eq_and_oangle_eq_zero x y).1 he).2, fun ha =>
     (o.eq_iff_norm_eq_and_oangle_eq_zero x y).2 ⟨h, ha⟩⟩
 #align orientation.eq_iff_oangle_eq_zero_of_norm_eq Orientation.eq_iff_oangle_eq_zero_of_norm_eq
+-/
 
+#print Orientation.eq_iff_norm_eq_of_oangle_eq_zero /-
 /-- Two vectors with zero angle between them are equal if and only if they have equal norms. -/
 theorem eq_iff_norm_eq_of_oangle_eq_zero {x y : V} (h : o.oangle x y = 0) : x = y ↔ ‖x‖ = ‖y‖ :=
   ⟨fun he => ((o.eq_iff_norm_eq_and_oangle_eq_zero x y).1 he).1, fun hn =>
     (o.eq_iff_norm_eq_and_oangle_eq_zero x y).2 ⟨hn, h⟩⟩
 #align orientation.eq_iff_norm_eq_of_oangle_eq_zero Orientation.eq_iff_norm_eq_of_oangle_eq_zero
+-/
 
+#print Orientation.oangle_add /-
 /-- Given three nonzero vectors, the angle between the first and the second plus the angle
 between the second and the third equals the angle between the first and the third. -/
 @[simp]
@@ -548,14 +670,18 @@ theorem oangle_add {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0) :
   · exact o.kahler_ne_zero hx hy
   · exact o.kahler_ne_zero hy hz
 #align orientation.oangle_add Orientation.oangle_add
+-/
 
+#print Orientation.oangle_add_swap /-
 /-- Given three nonzero vectors, the angle between the second and the third plus the angle
 between the first and the second equals the angle between the first and the third. -/
 @[simp]
 theorem oangle_add_swap {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0) :
     o.oangle y z + o.oangle x y = o.oangle x z := by rw [add_comm, o.oangle_add hx hy hz]
 #align orientation.oangle_add_swap Orientation.oangle_add_swap
+-/
 
+#print Orientation.oangle_sub_left /-
 /-- Given three nonzero vectors, the angle between the first and the third minus the angle
 between the first and the second equals the angle between the second and the third. -/
 @[simp]
@@ -563,20 +689,26 @@ theorem oangle_sub_left {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0)
     o.oangle x z - o.oangle x y = o.oangle y z := by
   rw [sub_eq_iff_eq_add, o.oangle_add_swap hx hy hz]
 #align orientation.oangle_sub_left Orientation.oangle_sub_left
+-/
 
+#print Orientation.oangle_sub_right /-
 /-- Given three nonzero vectors, the angle between the first and the third minus the angle
 between the second and the third equals the angle between the first and the second. -/
 @[simp]
 theorem oangle_sub_right {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0) :
     o.oangle x z - o.oangle y z = o.oangle x y := by rw [sub_eq_iff_eq_add, o.oangle_add hx hy hz]
 #align orientation.oangle_sub_right Orientation.oangle_sub_right
+-/
 
+#print Orientation.oangle_add_cyc3 /-
 /-- Given three nonzero vectors, adding the angles between them in cyclic order results in 0. -/
 @[simp]
 theorem oangle_add_cyc3 {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0) :
     o.oangle x y + o.oangle y z + o.oangle z x = 0 := by simp [hx, hy, hz]
 #align orientation.oangle_add_cyc3 Orientation.oangle_add_cyc3
+-/
 
+#print Orientation.oangle_add_cyc3_neg_left /-
 /-- Given three nonzero vectors, adding the angles between them in cyclic order, with the first
 vector in each angle negated, results in π. If the vectors add to 0, this is a version of the
 sum of the angles of a triangle. -/
@@ -590,7 +722,9 @@ theorem oangle_add_cyc3_neg_left {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz :
       by abel,
     o.oangle_add_cyc3 hx hy hz, Real.Angle.coe_pi_add_coe_pi, zero_add, zero_add]
 #align orientation.oangle_add_cyc3_neg_left Orientation.oangle_add_cyc3_neg_left
+-/
 
+#print Orientation.oangle_add_cyc3_neg_right /-
 /-- Given three nonzero vectors, adding the angles between them in cyclic order, with the second
 vector in each angle negated, results in π. If the vectors add to 0, this is a version of the
 sum of the angles of a triangle. -/
@@ -599,13 +733,17 @@ theorem oangle_add_cyc3_neg_right {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz
     o.oangle x (-y) + o.oangle y (-z) + o.oangle z (-x) = π := by
   simp_rw [← oangle_neg_left_eq_neg_right, o.oangle_add_cyc3_neg_left hx hy hz]
 #align orientation.oangle_add_cyc3_neg_right Orientation.oangle_add_cyc3_neg_right
+-/
 
+#print Orientation.oangle_sub_eq_oangle_sub_rev_of_norm_eq /-
 /-- Pons asinorum, oriented vector angle form. -/
 theorem oangle_sub_eq_oangle_sub_rev_of_norm_eq {x y : V} (h : ‖x‖ = ‖y‖) :
     o.oangle x (x - y) = o.oangle (y - x) y := by simp [oangle, h]
 #align orientation.oangle_sub_eq_oangle_sub_rev_of_norm_eq Orientation.oangle_sub_eq_oangle_sub_rev_of_norm_eq
+-/
 
 /- ./././Mathport/Syntax/Translate/Tactic/Lean3.lean:132:4: warning: unsupported: rw with cfg: { occs := occurrences.pos[occurrences.pos] «expr[ ,]»([1]) } -/
+#print Orientation.oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq /-
 /-- The angle at the apex of an isosceles triangle is `π` minus twice a base angle, oriented
 vector angle form. -/
 theorem oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq {x y : V} (hn : x ≠ y) (h : ‖x‖ = ‖y‖) :
@@ -621,7 +759,9 @@ theorem oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq {x y : V} (hn : x ≠ y
   have hx : x ≠ 0 := norm_ne_zero_iff.1 (h.symm ▸ norm_ne_zero_iff.2 hy)
   convert o.oangle_add_cyc3_neg_right (neg_ne_zero.2 hy) hx (sub_ne_zero_of_ne hn.symm) <;> simp
 #align orientation.oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq Orientation.oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq
+-/
 
+#print Orientation.oangle_map /-
 /-- The angle between two vectors, with respect to an orientation given by `orientation.map`
 with a linear isometric equivalence, equals the angle between those two vectors, transformed by
 the inverse of that equivalence, with respect to the original orientation. -/
@@ -630,12 +770,16 @@ theorem oangle_map (x y : V') (f : V ≃ₗᵢ[ℝ] V') :
     (Orientation.map (Fin 2) f.toLinearEquiv o).oangle x y = o.oangle (f.symm x) (f.symm y) := by
   simp [oangle, o.kahler_map]
 #align orientation.oangle_map Orientation.oangle_map
+-/
 
+#print Complex.oangle /-
 @[simp]
 protected theorem Complex.oangle (w z : ℂ) :
     Complex.orientation.oangle w z = Complex.arg (conj w * z) := by simp [oangle]
 #align complex.oangle Complex.oangle
+-/
 
+#print Orientation.oangle_map_complex /-
 /-- The oriented angle on an oriented real inner product space of dimension 2 can be evaluated in
 terms of a complex-number representation of the space. -/
 theorem oangle_map_complex (f : V ≃ₗᵢ[ℝ] ℂ)
@@ -645,12 +789,16 @@ theorem oangle_map_complex (f : V ≃ₗᵢ[ℝ] ℂ)
   rw [← Complex.oangle, ← hf, o.oangle_map]
   simp
 #align orientation.oangle_map_complex Orientation.oangle_map_complex
+-/
 
+#print Orientation.oangle_neg_orientation_eq_neg /-
 /-- Negating the orientation negates the value of `oangle`. -/
 theorem oangle_neg_orientation_eq_neg (x y : V) : (-o).oangle x y = -o.oangle x y := by
   simp [oangle]
 #align orientation.oangle_neg_orientation_eq_neg Orientation.oangle_neg_orientation_eq_neg
+-/
 
+#print Orientation.inner_eq_norm_mul_norm_mul_cos_oangle /-
 /-- The inner product of two vectors is the product of the norms and the cosine of the oriented
 angle between the vectors. -/
 theorem inner_eq_norm_mul_norm_mul_cos_oangle (x y : V) :
@@ -666,7 +814,9 @@ theorem inner_eq_norm_mul_norm_mul_cos_oangle (x y : V) :
     ring
   · exact o.kahler_ne_zero hx hy
 #align orientation.inner_eq_norm_mul_norm_mul_cos_oangle Orientation.inner_eq_norm_mul_norm_mul_cos_oangle
+-/
 
+#print Orientation.cos_oangle_eq_inner_div_norm_mul_norm /-
 /-- The cosine of the oriented angle between two nonzero vectors is the inner product divided by
 the product of the norms. -/
 theorem cos_oangle_eq_inner_div_norm_mul_norm {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
@@ -676,21 +826,27 @@ theorem cos_oangle_eq_inner_div_norm_mul_norm {x y : V} (hx : x ≠ 0) (hy : y 
   field_simp [norm_ne_zero_iff.2 hx, norm_ne_zero_iff.2 hy]
   ring
 #align orientation.cos_oangle_eq_inner_div_norm_mul_norm Orientation.cos_oangle_eq_inner_div_norm_mul_norm
+-/
 
+#print Orientation.cos_oangle_eq_cos_angle /-
 /-- The cosine of the oriented angle between two nonzero vectors equals that of the unoriented
 angle. -/
 theorem cos_oangle_eq_cos_angle {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
     Real.Angle.cos (o.oangle x y) = Real.cos (InnerProductGeometry.angle x y) := by
   rw [o.cos_oangle_eq_inner_div_norm_mul_norm hx hy, InnerProductGeometry.cos_angle]
 #align orientation.cos_oangle_eq_cos_angle Orientation.cos_oangle_eq_cos_angle
+-/
 
+#print Orientation.oangle_eq_angle_or_eq_neg_angle /-
 /-- The oriented angle between two nonzero vectors is plus or minus the unoriented angle. -/
 theorem oangle_eq_angle_or_eq_neg_angle {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
     o.oangle x y = InnerProductGeometry.angle x y ∨
       o.oangle x y = -InnerProductGeometry.angle x y :=
   Real.Angle.cos_eq_real_cos_iff_eq_or_eq_neg.1 <| o.cos_oangle_eq_cos_angle hx hy
 #align orientation.oangle_eq_angle_or_eq_neg_angle Orientation.oangle_eq_angle_or_eq_neg_angle
+-/
 
+#print Orientation.angle_eq_abs_oangle_toReal /-
 /-- The unoriented angle between two nonzero vectors is the absolute value of the oriented angle,
 converted to a real. -/
 theorem angle_eq_abs_oangle_toReal {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
@@ -704,7 +860,9 @@ theorem angle_eq_abs_oangle_toReal {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
   · rw [h, eq_comm, Real.Angle.abs_toReal_neg_coe_eq_self_iff]
     exact ⟨h0, hpi⟩
 #align orientation.angle_eq_abs_oangle_to_real Orientation.angle_eq_abs_oangle_toReal
+-/
 
+#print Orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero /-
 /-- If the sign of the oriented angle between two vectors is zero, either one of the vectors is
 zero or the unoriented angle is 0 or π. -/
 theorem eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero {x y : V}
@@ -717,6 +875,7 @@ theorem eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero {x y : V}
   rw [Real.Angle.sign_eq_zero_iff] at h 
   rcases h with (h | h) <;> simp [h, real.pi_pos.le]
 #align orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero Orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero
+-/
 
 #print Orientation.oangle_eq_of_angle_eq_of_sign_eq /-
 /-- If two unoriented angles are equal, and the signs of the corresponding oriented angles are
@@ -763,6 +922,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
 #align orientation.oangle_eq_of_angle_eq_of_sign_eq Orientation.oangle_eq_of_angle_eq_of_sign_eq
 -/
 
+#print Orientation.angle_eq_iff_oangle_eq_of_sign_eq /-
 /-- If the signs of two oriented angles between nonzero vectors are equal, the oriented angles are
 equal if and only if the unoriented angles are equal. -/
 theorem angle_eq_iff_oangle_eq_of_sign_eq {w x y z : V} (hw : w ≠ 0) (hx : x ≠ 0) (hy : y ≠ 0)
@@ -772,7 +932,9 @@ theorem angle_eq_iff_oangle_eq_of_sign_eq {w x y z : V} (hw : w ≠ 0) (hx : x 
   refine' ⟨fun h => o.oangle_eq_of_angle_eq_of_sign_eq h hs, fun h => _⟩
   rw [o.angle_eq_abs_oangle_to_real hw hx, o.angle_eq_abs_oangle_to_real hy hz, h]
 #align orientation.angle_eq_iff_oangle_eq_of_sign_eq Orientation.angle_eq_iff_oangle_eq_of_sign_eq
+-/
 
+#print Orientation.oangle_eq_angle_of_sign_eq_one /-
 /-- The oriented angle between two vectors equals the unoriented angle if the sign is positive. -/
 theorem oangle_eq_angle_of_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) :
     o.oangle x y = InnerProductGeometry.angle x y :=
@@ -787,7 +949,9 @@ theorem oangle_eq_angle_of_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) :
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
         (InnerProductGeometry.angle_le_pi _ _))
 #align orientation.oangle_eq_angle_of_sign_eq_one Orientation.oangle_eq_angle_of_sign_eq_one
+-/
 
+#print Orientation.oangle_eq_neg_angle_of_sign_eq_neg_one /-
 /-- The oriented angle between two vectors equals minus the unoriented angle if the sign is
 negative. -/
 theorem oangle_eq_neg_angle_of_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) :
@@ -803,7 +967,9 @@ theorem oangle_eq_neg_angle_of_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sig
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
         (InnerProductGeometry.angle_le_pi _ _))
 #align orientation.oangle_eq_neg_angle_of_sign_eq_neg_one Orientation.oangle_eq_neg_angle_of_sign_eq_neg_one
+-/
 
+#print Orientation.oangle_eq_zero_iff_angle_eq_zero /-
 /-- The oriented angle between two nonzero vectors is zero if and only if the unoriented angle
 is zero. -/
 theorem oangle_eq_zero_iff_angle_eq_zero {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
@@ -815,7 +981,9 @@ theorem oangle_eq_zero_iff_angle_eq_zero {x y : V} (hx : x ≠ 0) (hy : y ≠ 0)
     rw [h] at ha 
     simpa using ha
 #align orientation.oangle_eq_zero_iff_angle_eq_zero Orientation.oangle_eq_zero_iff_angle_eq_zero
+-/
 
+#print Orientation.oangle_eq_pi_iff_angle_eq_pi /-
 /-- The oriented angle between two vectors is `π` if and only if the unoriented angle is `π`. -/
 theorem oangle_eq_pi_iff_angle_eq_pi {x y : V} :
     o.oangle x y = π ↔ InnerProductGeometry.angle x y = π :=
@@ -835,7 +1003,9 @@ theorem oangle_eq_pi_iff_angle_eq_pi {x y : V} :
     rw [h] at ha 
     simpa using ha
 #align orientation.oangle_eq_pi_iff_angle_eq_pi Orientation.oangle_eq_pi_iff_angle_eq_pi
+-/
 
+#print Orientation.eq_zero_or_oangle_eq_iff_inner_eq_zero /-
 /-- One of two vectors is zero or the oriented angle between them is plus or minus `π / 2` if
 and only if the inner product of those vectors is zero. -/
 theorem eq_zero_or_oangle_eq_iff_inner_eq_zero {x y : V} :
@@ -849,32 +1019,41 @@ theorem eq_zero_or_oangle_eq_iff_inner_eq_zero {x y : V} :
   · convert o.oangle_eq_angle_or_eq_neg_angle hx hy <;> rw [h]
     exact neg_div _ _
 #align orientation.eq_zero_or_oangle_eq_iff_inner_eq_zero Orientation.eq_zero_or_oangle_eq_iff_inner_eq_zero
+-/
 
+#print Orientation.inner_eq_zero_of_oangle_eq_pi_div_two /-
 /-- If the oriented angle between two vectors is `π / 2`, the inner product of those vectors
 is zero. -/
 theorem inner_eq_zero_of_oangle_eq_pi_div_two {x y : V} (h : o.oangle x y = (π / 2 : ℝ)) :
     ⟪x, y⟫ = 0 :=
   o.eq_zero_or_oangle_eq_iff_inner_eq_zero.1 <| Or.inr <| Or.inr <| Or.inl h
 #align orientation.inner_eq_zero_of_oangle_eq_pi_div_two Orientation.inner_eq_zero_of_oangle_eq_pi_div_two
+-/
 
+#print Orientation.inner_rev_eq_zero_of_oangle_eq_pi_div_two /-
 /-- If the oriented angle between two vectors is `π / 2`, the inner product of those vectors
 (reversed) is zero. -/
 theorem inner_rev_eq_zero_of_oangle_eq_pi_div_two {x y : V} (h : o.oangle x y = (π / 2 : ℝ)) :
     ⟪y, x⟫ = 0 := by rw [real_inner_comm, o.inner_eq_zero_of_oangle_eq_pi_div_two h]
 #align orientation.inner_rev_eq_zero_of_oangle_eq_pi_div_two Orientation.inner_rev_eq_zero_of_oangle_eq_pi_div_two
+-/
 
+#print Orientation.inner_eq_zero_of_oangle_eq_neg_pi_div_two /-
 /-- If the oriented angle between two vectors is `-π / 2`, the inner product of those vectors
 is zero. -/
 theorem inner_eq_zero_of_oangle_eq_neg_pi_div_two {x y : V} (h : o.oangle x y = (-π / 2 : ℝ)) :
     ⟪x, y⟫ = 0 :=
   o.eq_zero_or_oangle_eq_iff_inner_eq_zero.1 <| Or.inr <| Or.inr <| Or.inr h
 #align orientation.inner_eq_zero_of_oangle_eq_neg_pi_div_two Orientation.inner_eq_zero_of_oangle_eq_neg_pi_div_two
+-/
 
+#print Orientation.inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two /-
 /-- If the oriented angle between two vectors is `-π / 2`, the inner product of those vectors
 (reversed) is zero. -/
 theorem inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two {x y : V} (h : o.oangle x y = (-π / 2 : ℝ)) :
     ⟪y, x⟫ = 0 := by rw [real_inner_comm, o.inner_eq_zero_of_oangle_eq_neg_pi_div_two h]
 #align orientation.inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two Orientation.inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two
+-/
 
 #print Orientation.oangle_sign_neg_left /-
 /-- Negating the first vector passed to `oangle` negates the sign of the angle. -/
@@ -898,6 +1077,7 @@ theorem oangle_sign_neg_right (x y : V) : (o.oangle x (-y)).sign = -(o.oangle x
 #align orientation.oangle_sign_neg_right Orientation.oangle_sign_neg_right
 -/
 
+#print Orientation.oangle_sign_smul_left /-
 /-- Multiplying the first vector passed to `oangle` by a real multiplies the sign of the angle by
 the sign of the real. -/
 @[simp]
@@ -905,7 +1085,9 @@ theorem oangle_sign_smul_left (x y : V) (r : ℝ) :
     (o.oangle (r • x) y).sign = SignType.sign r * (o.oangle x y).sign := by
   rcases lt_trichotomy r 0 with (h | h | h) <;> simp [h]
 #align orientation.oangle_sign_smul_left Orientation.oangle_sign_smul_left
+-/
 
+#print Orientation.oangle_sign_smul_right /-
 /-- Multiplying the second vector passed to `oangle` by a real multiplies the sign of the angle by
 the sign of the real. -/
 @[simp]
@@ -913,7 +1095,9 @@ theorem oangle_sign_smul_right (x y : V) (r : ℝ) :
     (o.oangle x (r • y)).sign = SignType.sign r * (o.oangle x y).sign := by
   rcases lt_trichotomy r 0 with (h | h | h) <;> simp [h]
 #align orientation.oangle_sign_smul_right Orientation.oangle_sign_smul_right
+-/
 
+#print Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff /-
 /-- Auxiliary lemma for the proof of `oangle_sign_smul_add_right`; not intended to be used
 outside of that proof. -/
 theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
@@ -943,6 +1127,7 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     rw [MulZeroClass.zero_mul, sub_zero] at h0 
     simpa [h0] using hm
 #align orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff
+-/
 
 #print Orientation.oangle_sign_smul_add_right /-
 /-- Adding a multiple of the first vector passed to `oangle` to the second vector does not change
@@ -1157,6 +1342,7 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
 #align orientation.oangle_sign_smul_add_smul_smul_add_smul Orientation.oangle_sign_smul_add_smul_smul_add_smul
 -/
 
+#print Orientation.abs_oangle_sub_left_toReal_lt_pi_div_two /-
 /-- A base angle of an isosceles triangle is acute, oriented vector angle form. -/
 theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y‖) :
     |(o.oangle (y - x) y).toReal| < π / 2 :=
@@ -1181,12 +1367,15 @@ theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y
     exact False.elim (hn hr.symm)
   · exact hs
 #align orientation.abs_oangle_sub_left_to_real_lt_pi_div_two Orientation.abs_oangle_sub_left_toReal_lt_pi_div_two
+-/
 
+#print Orientation.abs_oangle_sub_right_toReal_lt_pi_div_two /-
 /-- A base angle of an isosceles triangle is acute, oriented vector angle form. -/
 theorem abs_oangle_sub_right_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y‖) :
     |(o.oangle x (x - y)).toReal| < π / 2 :=
   (o.oangle_sub_eq_oangle_sub_rev_of_norm_eq h).symm ▸ o.abs_oangle_sub_left_toReal_lt_pi_div_two h
 #align orientation.abs_oangle_sub_right_to_real_lt_pi_div_two Orientation.abs_oangle_sub_right_toReal_lt_pi_div_two
+-/
 
 end Orientation
 
Diff
@@ -57,11 +57,13 @@ variable [Fact (finrank ℝ V = 2)] [Fact (finrank ℝ V' = 2)] (o : Orientation
 -- mathport name: exprω
 local notation "ω" => o.areaForm
 
+#print Orientation.oangle /-
 /-- The oriented angle from `x` to `y`, modulo `2 * π`. If either vector is 0, this is 0.
 See `inner_product_geometry.angle` for the corresponding unoriented angle definition. -/
 def oangle (x y : V) : Real.Angle :=
   Complex.arg (o.kahler x y)
 #align orientation.oangle Orientation.oangle
+-/
 
 /-- Oriented angles are continuous when the vectors involved are nonzero. -/
 theorem continuousAt_oangle {x : V × V} (hx1 : x.1 ≠ 0) (hx2 : x.2 ≠ 0) :
@@ -166,10 +168,12 @@ theorem right_ne_zero_of_oangle_sign_ne_zero {x y : V} (h : (o.oangle x y).sign
   o.right_ne_zero_of_oangle_ne_zero (Real.Angle.sign_ne_zero_iff.1 h).1
 #align orientation.right_ne_zero_of_oangle_sign_ne_zero Orientation.right_ne_zero_of_oangle_sign_ne_zero
 
+#print Orientation.ne_of_oangle_sign_ne_zero /-
 /-- If the sign of the angle between two vectors is nonzero, the vectors are not equal. -/
 theorem ne_of_oangle_sign_ne_zero {x y : V} (h : (o.oangle x y).sign ≠ 0) : x ≠ y :=
   o.ne_of_oangle_ne_zero (Real.Angle.sign_ne_zero_iff.1 h).1
 #align orientation.ne_of_oangle_sign_ne_zero Orientation.ne_of_oangle_sign_ne_zero
+-/
 
 /-- If the sign of the angle between two vectors is positive, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) : x ≠ 0 :=
@@ -181,10 +185,12 @@ theorem right_ne_zero_of_oangle_sign_eq_one {x y : V} (h : (o.oangle x y).sign =
   o.right_ne_zero_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.right_ne_zero_of_oangle_sign_eq_one Orientation.right_ne_zero_of_oangle_sign_eq_one
 
+#print Orientation.ne_of_oangle_sign_eq_one /-
 /-- If the sign of the angle between two vectors is positive, the vectors are not equal. -/
 theorem ne_of_oangle_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) : x ≠ y :=
   o.ne_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.ne_of_oangle_sign_eq_one Orientation.ne_of_oangle_sign_eq_one
+-/
 
 /-- If the sign of the angle between two vectors is negative, the first vector is nonzero. -/
 theorem left_ne_zero_of_oangle_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) : x ≠ 0 :=
@@ -196,10 +202,12 @@ theorem right_ne_zero_of_oangle_sign_eq_neg_one {x y : V} (h : (o.oangle x y).si
   o.right_ne_zero_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.right_ne_zero_of_oangle_sign_eq_neg_one Orientation.right_ne_zero_of_oangle_sign_eq_neg_one
 
+#print Orientation.ne_of_oangle_sign_eq_neg_one /-
 /-- If the sign of the angle between two vectors is negative, the vectors are not equal. -/
 theorem ne_of_oangle_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) : x ≠ y :=
   o.ne_of_oangle_sign_ne_zero (h.symm ▸ by decide : (o.oangle x y).sign ≠ 0)
 #align orientation.ne_of_oangle_sign_eq_neg_one Orientation.ne_of_oangle_sign_eq_neg_one
+-/
 
 /-- Swapping the two vectors passed to `oangle` negates the angle. -/
 theorem oangle_rev (x y : V) : o.oangle y x = -o.oangle x y := by
@@ -710,6 +718,7 @@ theorem eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero {x y : V}
   rcases h with (h | h) <;> simp [h, real.pi_pos.le]
 #align orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero Orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero
 
+#print Orientation.oangle_eq_of_angle_eq_of_sign_eq /-
 /-- If two unoriented angles are equal, and the signs of the corresponding oriented angles are
 equal, then the oriented angles are equal (even in degenerate cases). -/
 theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
@@ -752,6 +761,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
     rwa [o.angle_eq_abs_oangle_to_real h0.1.1 h0.1.2,
       o.angle_eq_abs_oangle_to_real h0.2.1 h0.2.2] at h 
 #align orientation.oangle_eq_of_angle_eq_of_sign_eq Orientation.oangle_eq_of_angle_eq_of_sign_eq
+-/
 
 /-- If the signs of two oriented angles between nonzero vectors are equal, the oriented angles are
 equal if and only if the unoriented angles are equal. -/
@@ -866,6 +876,7 @@ theorem inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two {x y : V} (h : o.oangle x
     ⟪y, x⟫ = 0 := by rw [real_inner_comm, o.inner_eq_zero_of_oangle_eq_neg_pi_div_two h]
 #align orientation.inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two Orientation.inner_rev_eq_zero_of_oangle_eq_neg_pi_div_two
 
+#print Orientation.oangle_sign_neg_left /-
 /-- Negating the first vector passed to `oangle` negates the sign of the angle. -/
 @[simp]
 theorem oangle_sign_neg_left (x y : V) : (o.oangle (-x) y).sign = -(o.oangle x y).sign :=
@@ -874,7 +885,9 @@ theorem oangle_sign_neg_left (x y : V) : (o.oangle (-x) y).sign = -(o.oangle x y
   by_cases hy : y = 0; · simp [hy]
   rw [o.oangle_neg_left hx hy, Real.Angle.sign_add_pi]
 #align orientation.oangle_sign_neg_left Orientation.oangle_sign_neg_left
+-/
 
+#print Orientation.oangle_sign_neg_right /-
 /-- Negating the second vector passed to `oangle` negates the sign of the angle. -/
 @[simp]
 theorem oangle_sign_neg_right (x y : V) : (o.oangle x (-y)).sign = -(o.oangle x y).sign :=
@@ -883,6 +896,7 @@ theorem oangle_sign_neg_right (x y : V) : (o.oangle x (-y)).sign = -(o.oangle x
   by_cases hy : y = 0; · simp [hy]
   rw [o.oangle_neg_right hx hy, Real.Angle.sign_add_pi]
 #align orientation.oangle_sign_neg_right Orientation.oangle_sign_neg_right
+-/
 
 /-- Multiplying the first vector passed to `oangle` by a real multiplies the sign of the angle by
 the sign of the real. -/
@@ -930,6 +944,7 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     simpa [h0] using hm
 #align orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff
 
+#print Orientation.oangle_sign_smul_add_right /-
 /-- Adding a multiple of the first vector passed to `oangle` to the second vector does not change
 the sign of the angle. -/
 @[simp]
@@ -972,7 +987,9 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
   have hy : (x, r • x + y) ∈ s := Set.mem_image_of_mem _ (Set.mem_univ _)
   convert Real.Angle.sign_eq_of_continuousOn hc hf hs hx hy
 #align orientation.oangle_sign_smul_add_right Orientation.oangle_sign_smul_add_right
+-/
 
+#print Orientation.oangle_sign_add_smul_left /-
 /-- Adding a multiple of the second vector passed to `oangle` to the first vector does not change
 the sign of the angle. -/
 @[simp]
@@ -980,7 +997,9 @@ theorem oangle_sign_add_smul_left (x y : V) (r : ℝ) :
     (o.oangle (x + r • y) y).sign = (o.oangle x y).sign := by
   simp_rw [o.oangle_rev y, Real.Angle.sign_neg, add_comm x, oangle_sign_smul_add_right]
 #align orientation.oangle_sign_add_smul_left Orientation.oangle_sign_add_smul_left
+-/
 
+#print Orientation.oangle_sign_sub_smul_right /-
 /-- Subtracting a multiple of the first vector passed to `oangle` from the second vector does
 not change the sign of the angle. -/
 @[simp]
@@ -988,7 +1007,9 @@ theorem oangle_sign_sub_smul_right (x y : V) (r : ℝ) :
     (o.oangle x (y - r • x)).sign = (o.oangle x y).sign := by
   rw [sub_eq_add_neg, ← neg_smul, add_comm, oangle_sign_smul_add_right]
 #align orientation.oangle_sign_sub_smul_right Orientation.oangle_sign_sub_smul_right
+-/
 
+#print Orientation.oangle_sign_sub_smul_left /-
 /-- Subtracting a multiple of the second vector passed to `oangle` from the first vector does
 not change the sign of the angle. -/
 @[simp]
@@ -996,35 +1017,45 @@ theorem oangle_sign_sub_smul_left (x y : V) (r : ℝ) :
     (o.oangle (x - r • y) y).sign = (o.oangle x y).sign := by
   rw [sub_eq_add_neg, ← neg_smul, oangle_sign_add_smul_left]
 #align orientation.oangle_sign_sub_smul_left Orientation.oangle_sign_sub_smul_left
+-/
 
+#print Orientation.oangle_sign_add_right /-
 /-- Adding the first vector passed to `oangle` to the second vector does not change the sign of
 the angle. -/
 @[simp]
 theorem oangle_sign_add_right (x y : V) : (o.oangle x (x + y)).sign = (o.oangle x y).sign := by
   rw [← o.oangle_sign_smul_add_right x y 1, one_smul]
 #align orientation.oangle_sign_add_right Orientation.oangle_sign_add_right
+-/
 
+#print Orientation.oangle_sign_add_left /-
 /-- Adding the second vector passed to `oangle` to the first vector does not change the sign of
 the angle. -/
 @[simp]
 theorem oangle_sign_add_left (x y : V) : (o.oangle (x + y) y).sign = (o.oangle x y).sign := by
   rw [← o.oangle_sign_add_smul_left x y 1, one_smul]
 #align orientation.oangle_sign_add_left Orientation.oangle_sign_add_left
+-/
 
+#print Orientation.oangle_sign_sub_right /-
 /-- Subtracting the first vector passed to `oangle` from the second vector does not change the
 sign of the angle. -/
 @[simp]
 theorem oangle_sign_sub_right (x y : V) : (o.oangle x (y - x)).sign = (o.oangle x y).sign := by
   rw [← o.oangle_sign_sub_smul_right x y 1, one_smul]
 #align orientation.oangle_sign_sub_right Orientation.oangle_sign_sub_right
+-/
 
+#print Orientation.oangle_sign_sub_left /-
 /-- Subtracting the second vector passed to `oangle` from the first vector does not change the
 sign of the angle. -/
 @[simp]
 theorem oangle_sign_sub_left (x y : V) : (o.oangle (x - y) y).sign = (o.oangle x y).sign := by
   rw [← o.oangle_sign_sub_smul_left x y 1, one_smul]
 #align orientation.oangle_sign_sub_left Orientation.oangle_sign_sub_left
+-/
 
+#print Orientation.oangle_sign_smul_sub_right /-
 /-- Subtracting the second vector passed to `oangle` from a multiple of the first vector negates
 the sign of the angle. -/
 @[simp]
@@ -1032,7 +1063,9 @@ theorem oangle_sign_smul_sub_right (x y : V) (r : ℝ) :
     (o.oangle x (r • x - y)).sign = -(o.oangle x y).sign := by
   rw [← oangle_sign_neg_right, sub_eq_add_neg, oangle_sign_smul_add_right]
 #align orientation.oangle_sign_smul_sub_right Orientation.oangle_sign_smul_sub_right
+-/
 
+#print Orientation.oangle_sign_smul_sub_left /-
 /-- Subtracting the first vector passed to `oangle` from a multiple of the second vector negates
 the sign of the angle. -/
 @[simp]
@@ -1040,33 +1073,43 @@ theorem oangle_sign_smul_sub_left (x y : V) (r : ℝ) :
     (o.oangle (r • y - x) y).sign = -(o.oangle x y).sign := by
   rw [← oangle_sign_neg_left, sub_eq_neg_add, oangle_sign_add_smul_left]
 #align orientation.oangle_sign_smul_sub_left Orientation.oangle_sign_smul_sub_left
+-/
 
+#print Orientation.oangle_sign_sub_right_eq_neg /-
 /-- Subtracting the second vector passed to `oangle` from the first vector negates the sign of
 the angle. -/
 theorem oangle_sign_sub_right_eq_neg (x y : V) : (o.oangle x (x - y)).sign = -(o.oangle x y).sign :=
   by rw [← o.oangle_sign_smul_sub_right x y 1, one_smul]
 #align orientation.oangle_sign_sub_right_eq_neg Orientation.oangle_sign_sub_right_eq_neg
+-/
 
+#print Orientation.oangle_sign_sub_left_eq_neg /-
 /-- Subtracting the first vector passed to `oangle` from the second vector negates the sign of
 the angle. -/
 theorem oangle_sign_sub_left_eq_neg (x y : V) : (o.oangle (y - x) y).sign = -(o.oangle x y).sign :=
   by rw [← o.oangle_sign_smul_sub_left x y 1, one_smul]
 #align orientation.oangle_sign_sub_left_eq_neg Orientation.oangle_sign_sub_left_eq_neg
+-/
 
+#print Orientation.oangle_sign_sub_right_swap /-
 /-- Subtracting the first vector passed to `oangle` from the second vector then swapping the
 vectors does not change the sign of the angle. -/
 @[simp]
 theorem oangle_sign_sub_right_swap (x y : V) : (o.oangle y (y - x)).sign = (o.oangle x y).sign := by
   rw [oangle_sign_sub_right_eq_neg, o.oangle_rev y x, Real.Angle.sign_neg]
 #align orientation.oangle_sign_sub_right_swap Orientation.oangle_sign_sub_right_swap
+-/
 
+#print Orientation.oangle_sign_sub_left_swap /-
 /-- Subtracting the second vector passed to `oangle` from the first vector then swapping the
 vectors does not change the sign of the angle. -/
 @[simp]
 theorem oangle_sign_sub_left_swap (x y : V) : (o.oangle (x - y) x).sign = (o.oangle x y).sign := by
   rw [oangle_sign_sub_left_eq_neg, o.oangle_rev y x, Real.Angle.sign_neg]
 #align orientation.oangle_sign_sub_left_swap Orientation.oangle_sign_sub_left_swap
+-/
 
+#print Orientation.oangle_sign_smul_add_smul_right /-
 /-- The sign of the angle between a vector, and a linear combination of that vector with a second
 vector, is the sign of the factor by which the second vector is multiplied in that combination
 multiplied by the sign of the angle between the two vectors. -/
@@ -1077,7 +1120,9 @@ theorem oangle_sign_smul_add_smul_right (x y : V) (r₁ r₂ : ℝ) :
   rw [← o.oangle_sign_smul_add_right x (r₁ • x + r₂ • y) (-r₁)]
   simp
 #align orientation.oangle_sign_smul_add_smul_right Orientation.oangle_sign_smul_add_smul_right
+-/
 
+#print Orientation.oangle_sign_smul_add_smul_left /-
 /-- The sign of the angle between a linear combination of two vectors and the second vector is
 the sign of the factor by which the first vector is multiplied in that combination multiplied by
 the sign of the angle between the two vectors. -/
@@ -1087,7 +1132,9 @@ theorem oangle_sign_smul_add_smul_left (x y : V) (r₁ r₂ : ℝ) :
   simp_rw [o.oangle_rev y, Real.Angle.sign_neg, add_comm (r₁ • x), oangle_sign_smul_add_smul_right,
     mul_neg]
 #align orientation.oangle_sign_smul_add_smul_left Orientation.oangle_sign_smul_add_smul_left
+-/
 
+#print Orientation.oangle_sign_smul_add_smul_smul_add_smul /-
 /-- The sign of the angle between two linear combinations of two vectors is the sign of the
 determinant of the factors in those combinations multiplied by the sign of the angle between the
 two vectors. -/
@@ -1108,6 +1155,7 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
       mul_assoc, div_mul_cancel _ hr₁, add_comm, neg_mul, ← sub_eq_add_neg, mul_comm r₄,
       mul_comm r₃]
 #align orientation.oangle_sign_smul_add_smul_smul_add_smul Orientation.oangle_sign_smul_add_smul_smul_add_smul
+-/
 
 /-- A base angle of an isosceles triangle is acute, oriented vector angle form. -/
 theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y‖) :
Diff
@@ -747,7 +747,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
       have h0' := o.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero hsyz
       simpa [hyz, real.pi_pos.ne.symm, hpi] using h0'
     rcases h0wx with (h0wx | h0wx) <;> rcases h0yz with (h0yz | h0yz) <;> simp [h0wx, h0yz]
-  · push_neg  at h0 
+  · push_neg at h0 
     rw [Real.Angle.eq_iff_abs_toReal_eq_of_sign_eq hs]
     rwa [o.angle_eq_abs_oangle_to_real h0.1.1 h0.1.2,
       o.angle_eq_abs_oangle_to_real h0.2.1 h0.2.2] at h 
Diff
@@ -395,7 +395,7 @@ equal. -/
 theorem two_zsmul_oangle_left_of_span_eq {x y : V} (z : V) (h : (ℝ ∙ x) = ℝ ∙ y) :
     (2 : ℤ) • o.oangle x z = (2 : ℤ) • o.oangle y z :=
   by
-  rw [Submodule.span_singleton_eq_span_singleton] at h
+  rw [Submodule.span_singleton_eq_span_singleton] at h 
   rcases h with ⟨r, rfl⟩
   exact (o.two_zsmul_oangle_smul_left_of_ne_zero _ _ (Units.ne_zero _)).symm
 #align orientation.two_zsmul_oangle_left_of_span_eq Orientation.two_zsmul_oangle_left_of_span_eq
@@ -405,7 +405,7 @@ equal. -/
 theorem two_zsmul_oangle_right_of_span_eq (x : V) {y z : V} (h : (ℝ ∙ y) = ℝ ∙ z) :
     (2 : ℤ) • o.oangle x y = (2 : ℤ) • o.oangle x z :=
   by
-  rw [Submodule.span_singleton_eq_span_singleton] at h
+  rw [Submodule.span_singleton_eq_span_singleton] at h 
   rcases h with ⟨r, rfl⟩
   exact (o.two_zsmul_oangle_smul_right_of_ne_zero _ _ (Units.ne_zero _)).symm
 #align orientation.two_zsmul_oangle_right_of_span_eq Orientation.two_zsmul_oangle_right_of_span_eq
@@ -450,7 +450,7 @@ theorem oangle_eq_pi_iff_sameRay_neg {x y : V} :
     refine' ⟨hx, hy, _⟩
     rw [o.oangle_neg_right hx hy, h, Real.Angle.coe_pi_add_coe_pi]
   · rintro ⟨hx, hy, h⟩
-    rwa [o.oangle_neg_right hx hy, ← Real.Angle.sub_coe_pi_eq_add_coe_pi, sub_eq_zero] at h
+    rwa [o.oangle_neg_right hx hy, ← Real.Angle.sub_coe_pi_eq_add_coe_pi, sub_eq_zero] at h 
 #align orientation.oangle_eq_pi_iff_same_ray_neg Orientation.oangle_eq_pi_iff_sameRay_neg
 
 /-- The oriented angle between two vectors is zero or `π` if and only if those two vectors are
@@ -608,7 +608,7 @@ theorem oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq {x y : V} (hn : x ≠ y
   rw [eq_sub_iff_add_eq, ← oangle_neg_neg, ← add_assoc]
   have hy : y ≠ 0 := by
     rintro rfl
-    rw [norm_zero, norm_eq_zero] at h
+    rw [norm_zero, norm_eq_zero] at h 
     exact hn h
   have hx : x ≠ 0 := norm_ne_zero_iff.1 (h.symm ▸ norm_ne_zero_iff.2 hy)
   convert o.oangle_add_cyc3_neg_right (neg_ne_zero.2 hy) hx (sub_ne_zero_of_ne hn.symm) <;> simp
@@ -706,7 +706,7 @@ theorem eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero {x y : V}
   by_cases hx : x = 0; · simp [hx]
   by_cases hy : y = 0; · simp [hy]
   rw [o.angle_eq_abs_oangle_to_real hx hy]
-  rw [Real.Angle.sign_eq_zero_iff] at h
+  rw [Real.Angle.sign_eq_zero_iff] at h 
   rcases h with (h | h) <;> simp [h, real.pi_pos.le]
 #align orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero Orientation.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero
 
@@ -735,7 +735,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
     rcases h' with ⟨hwx, hyz⟩
     have hpi : π / 2 ≠ π := by
       intro hpi
-      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel] at hpi
+      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel] at hpi 
       · exact real.pi_pos.ne.symm hpi
       · exact two_ne_zero
     have h0wx : w = 0 ∨ x = 0 :=
@@ -747,10 +747,10 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
       have h0' := o.eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero hsyz
       simpa [hyz, real.pi_pos.ne.symm, hpi] using h0'
     rcases h0wx with (h0wx | h0wx) <;> rcases h0yz with (h0yz | h0yz) <;> simp [h0wx, h0yz]
-  · push_neg  at h0
+  · push_neg  at h0 
     rw [Real.Angle.eq_iff_abs_toReal_eq_of_sign_eq hs]
     rwa [o.angle_eq_abs_oangle_to_real h0.1.1 h0.1.2,
-      o.angle_eq_abs_oangle_to_real h0.2.1 h0.2.2] at h
+      o.angle_eq_abs_oangle_to_real h0.2.1 h0.2.2] at h 
 #align orientation.oangle_eq_of_angle_eq_of_sign_eq Orientation.oangle_eq_of_angle_eq_of_sign_eq
 
 /-- If the signs of two oriented angles between nonzero vectors are equal, the oriented angles are
@@ -771,7 +771,7 @@ theorem oangle_eq_angle_of_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) :
   by_cases hy : y = 0; · exfalso; simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_right _
   intro hxy
-  rw [hxy, Real.Angle.sign_neg, neg_eq_iff_eq_neg, ← SignType.neg_iff, ← not_le] at h
+  rw [hxy, Real.Angle.sign_neg, neg_eq_iff_eq_neg, ← SignType.neg_iff, ← not_le] at h 
   exact
     h
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
@@ -787,7 +787,7 @@ theorem oangle_eq_neg_angle_of_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sig
   by_cases hy : y = 0; · exfalso; simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_left _
   intro hxy
-  rw [hxy, ← SignType.neg_iff, ← not_le] at h
+  rw [hxy, ← SignType.neg_iff, ← not_le] at h 
   exact
     h
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
@@ -802,7 +802,7 @@ theorem oangle_eq_zero_iff_angle_eq_zero {x y : V} (hx : x ≠ 0) (hy : y ≠ 0)
   refine' ⟨fun h => _, fun h => _⟩
   · simpa [o.angle_eq_abs_oangle_to_real hx hy]
   · have ha := o.oangle_eq_angle_or_eq_neg_angle hx hy
-    rw [h] at ha
+    rw [h] at ha 
     simpa using ha
 #align orientation.oangle_eq_zero_iff_angle_eq_zero Orientation.oangle_eq_zero_iff_angle_eq_zero
 
@@ -822,7 +822,7 @@ theorem oangle_eq_pi_iff_angle_eq_pi {x y : V} :
   · rw [o.angle_eq_abs_oangle_to_real hx hy, h]
     simp [real.pi_pos.le]
   · have ha := o.oangle_eq_angle_or_eq_neg_angle hx hy
-    rw [h] at ha
+    rw [h] at ha 
     simpa using ha
 #align orientation.oangle_eq_pi_iff_angle_eq_pi Orientation.oangle_eq_pi_iff_angle_eq_pi
 
@@ -909,24 +909,24 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     Fin.sum_univ_two, Fin.exists_fin_two]
   refine' ⟨fun h => _, fun h => _⟩
   · rcases h with ⟨m, h, hm⟩
-    change m 0 • x + m 1 • (r • x + y) = 0 at h
+    change m 0 • x + m 1 • (r • x + y) = 0 at h 
     refine' ⟨![m 0 + m 1 * r, m 1], _⟩
     change (m 0 + m 1 * r) • x + m 1 • y = 0 ∧ (m 0 + m 1 * r ≠ 0 ∨ m 1 ≠ 0)
-    rw [smul_add, smul_smul, ← add_assoc, ← add_smul] at h
+    rw [smul_add, smul_smul, ← add_assoc, ← add_smul] at h 
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
-    rw [h1] at h0 hm
-    rw [MulZeroClass.zero_mul, add_zero] at h0
+    rw [h1] at h0 hm 
+    rw [MulZeroClass.zero_mul, add_zero] at h0 
     simpa [h0] using hm
   · rcases h with ⟨m, h, hm⟩
-    change m 0 • x + m 1 • y = 0 at h
+    change m 0 • x + m 1 • y = 0 at h 
     refine' ⟨![m 0 - m 1 * r, m 1], _⟩
     change (m 0 - m 1 * r) • x + m 1 • (r • x + y) = 0 ∧ (m 0 - m 1 * r ≠ 0 ∨ m 1 ≠ 0)
     rw [sub_smul, smul_add, smul_smul, ← add_assoc, sub_add_cancel]
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
-    rw [h1] at h0 hm
-    rw [MulZeroClass.zero_mul, sub_zero] at h0
+    rw [h1] at h0 hm 
+    rw [MulZeroClass.zero_mul, sub_zero] at h0 
     simpa [h0] using hm
 #align orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff
 
@@ -943,7 +943,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
   have h' : ∀ r' : ℝ, o.oangle x (r' • x + y) ≠ 0 ∧ o.oangle x (r' • x + y) ≠ π :=
     by
     intro r'
-    rwa [← o.oangle_smul_add_right_eq_zero_or_eq_pi_iff r', not_or] at h
+    rwa [← o.oangle_smul_add_right_eq_zero_or_eq_pi_iff r', not_or] at h 
   let s : Set (V × V) := (fun r' : ℝ => (x, r' • x + y)) '' Set.univ
   have hc : IsConnected s :=
     is_connected_univ.image _
@@ -953,7 +953,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
     by
     refine' ContinuousAt.continuousOn fun z hz => o.continuous_at_oangle _ _
     all_goals
-      simp_rw [s, Set.mem_image] at hz
+      simp_rw [s, Set.mem_image] at hz 
       obtain ⟨r', -, rfl⟩ := hz
       simp only [Prod.fst, Prod.snd]
       intro hz
@@ -962,7 +962,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
   have hs : ∀ z : V × V, z ∈ s → o.oangle z.1 z.2 ≠ 0 ∧ o.oangle z.1 z.2 ≠ π :=
     by
     intro z hz
-    simp_rw [s, Set.mem_image] at hz
+    simp_rw [s, Set.mem_image] at hz 
     obtain ⟨r', -, rfl⟩ := hz
     exact h' r'
   have hx : (x, y) ∈ s :=
@@ -1118,18 +1118,18 @@ theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y
     by
     conv_rhs => rw [oangle_sign_sub_left_swap]
     rw [o.oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq hn h, Real.Angle.sign_pi_sub]
-  rw [Real.Angle.sign_two_zsmul_eq_sign_iff] at hs
+  rw [Real.Angle.sign_two_zsmul_eq_sign_iff] at hs 
   rcases hs with (hs | hs)
-  · rw [oangle_eq_pi_iff_oangle_rev_eq_pi, oangle_eq_pi_iff_same_ray_neg, neg_sub] at hs
+  · rw [oangle_eq_pi_iff_oangle_rev_eq_pi, oangle_eq_pi_iff_same_ray_neg, neg_sub] at hs 
     rcases hs with ⟨hy, -, hr⟩
-    rw [← exists_nonneg_left_iff_sameRay hy] at hr
+    rw [← exists_nonneg_left_iff_sameRay hy] at hr 
     rcases hr with ⟨r, hr0, hr⟩
-    rw [eq_sub_iff_add_eq] at hr
-    nth_rw 2 [← one_smul ℝ y] at hr
-    rw [← add_smul] at hr
+    rw [eq_sub_iff_add_eq] at hr 
+    nth_rw 2 [← one_smul ℝ y] at hr 
+    rw [← add_smul] at hr 
     rw [← hr, norm_smul, Real.norm_eq_abs, abs_of_pos (Left.add_pos_of_nonneg_of_pos hr0 one_pos),
-      mul_left_eq_self₀, or_iff_left (norm_ne_zero_iff.2 hy), add_left_eq_self] at h
-    rw [h, zero_add, one_smul] at hr
+      mul_left_eq_self₀, or_iff_left (norm_ne_zero_iff.2 hy), add_left_eq_self] at h 
+    rw [h, zero_add, one_smul] at hr 
     exact False.elim (hn hr.symm)
   · exact hs
 #align orientation.abs_oangle_sub_left_to_real_lt_pi_div_two Orientation.abs_oangle_sub_left_toReal_lt_pi_div_two
Diff
@@ -38,7 +38,7 @@ noncomputable section
 
 open FiniteDimensional Complex
 
-open Real RealInnerProductSpace ComplexConjugate
+open scoped Real RealInnerProductSpace ComplexConjugate
 
 namespace Orientation
 
Diff
@@ -95,23 +95,17 @@ theorem oangle_self (x : V) : o.oangle x x = 0 :=
 #align orientation.oangle_self Orientation.oangle_self
 
 /-- If the angle between two vectors is nonzero, the first vector is nonzero. -/
-theorem left_ne_zero_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : x ≠ 0 :=
-  by
-  rintro rfl
+theorem left_ne_zero_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : x ≠ 0 := by rintro rfl;
   simpa using h
 #align orientation.left_ne_zero_of_oangle_ne_zero Orientation.left_ne_zero_of_oangle_ne_zero
 
 /-- If the angle between two vectors is nonzero, the second vector is nonzero. -/
-theorem right_ne_zero_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : y ≠ 0 :=
-  by
-  rintro rfl
+theorem right_ne_zero_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : y ≠ 0 := by rintro rfl;
   simpa using h
 #align orientation.right_ne_zero_of_oangle_ne_zero Orientation.right_ne_zero_of_oangle_ne_zero
 
 /-- If the angle between two vectors is nonzero, the vectors are not equal. -/
-theorem ne_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : x ≠ y :=
-  by
-  rintro rfl
+theorem ne_of_oangle_ne_zero {x y : V} (h : o.oangle x y ≠ 0) : x ≠ y := by rintro rfl;
   simpa using h
 #align orientation.ne_of_oangle_ne_zero Orientation.ne_of_oangle_ne_zero
 
@@ -451,10 +445,8 @@ theorem oangle_eq_pi_iff_sameRay_neg {x y : V} :
   rw [← o.oangle_eq_zero_iff_same_ray]
   constructor
   · intro h
-    by_cases hx : x = 0
-    · simpa [hx, real.angle.pi_ne_zero.symm] using h
-    by_cases hy : y = 0
-    · simpa [hy, real.angle.pi_ne_zero.symm] using h
+    by_cases hx : x = 0; · simpa [hx, real.angle.pi_ne_zero.symm] using h
+    by_cases hy : y = 0; · simpa [hy, real.angle.pi_ne_zero.symm] using h
     refine' ⟨hx, hy, _⟩
     rw [o.oangle_neg_right hx hy, h, Real.Angle.coe_pi_add_coe_pi]
   · rintro ⟨hx, hy, h⟩
@@ -477,19 +469,15 @@ theorem oangle_eq_zero_or_eq_pi_iff_right_eq_smul {x y : V} :
   rw [oangle_eq_zero_iff_same_ray, oangle_eq_pi_iff_same_ray_neg]
   refine' ⟨fun h => _, fun h => _⟩
   · rcases h with (h | ⟨-, -, h⟩)
-    · by_cases hx : x = 0
-      · simp [hx]
+    · by_cases hx : x = 0; · simp [hx]
       obtain ⟨r, -, rfl⟩ := h.exists_nonneg_left hx
       exact Or.inr ⟨r, rfl⟩
-    · by_cases hx : x = 0
-      · simp [hx]
+    · by_cases hx : x = 0; · simp [hx]
       obtain ⟨r, -, hy⟩ := h.exists_nonneg_left hx
       refine' Or.inr ⟨-r, _⟩
       simp [hy]
-  · rcases h with (rfl | ⟨r, rfl⟩)
-    · simp
-    by_cases hx : x = 0
-    · simp [hx]
+  · rcases h with (rfl | ⟨r, rfl⟩); · simp
+    by_cases hx : x = 0; · simp [hx]
     rcases lt_trichotomy r 0 with (hr | hr | hr)
     · rw [← neg_smul]
       exact
@@ -779,12 +767,8 @@ theorem angle_eq_iff_oangle_eq_of_sign_eq {w x y z : V} (hw : w ≠ 0) (hx : x 
 theorem oangle_eq_angle_of_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) :
     o.oangle x y = InnerProductGeometry.angle x y :=
   by
-  by_cases hx : x = 0;
-  · exfalso
-    simpa [hx] using h
-  by_cases hy : y = 0;
-  · exfalso
-    simpa [hy] using h
+  by_cases hx : x = 0; · exfalso; simpa [hx] using h
+  by_cases hy : y = 0; · exfalso; simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_right _
   intro hxy
   rw [hxy, Real.Angle.sign_neg, neg_eq_iff_eq_neg, ← SignType.neg_iff, ← not_le] at h
@@ -799,12 +783,8 @@ negative. -/
 theorem oangle_eq_neg_angle_of_sign_eq_neg_one {x y : V} (h : (o.oangle x y).sign = -1) :
     o.oangle x y = -InnerProductGeometry.angle x y :=
   by
-  by_cases hx : x = 0;
-  · exfalso
-    simpa [hx] using h
-  by_cases hy : y = 0;
-  · exfalso
-    simpa [hy] using h
+  by_cases hx : x = 0; · exfalso; simpa [hx] using h
+  by_cases hy : y = 0; · exfalso; simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_left _
   intro hxy
   rw [hxy, ← SignType.neg_iff, ← not_le] at h
@@ -1133,8 +1113,7 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
 theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y‖) :
     |(o.oangle (y - x) y).toReal| < π / 2 :=
   by
-  by_cases hn : x = y
-  · simp [hn, div_pos, Real.pi_pos]
+  by_cases hn : x = y; · simp [hn, div_pos, Real.pi_pos]
   have hs : ((2 : ℤ) • o.oangle (y - x) y).sign = (o.oangle (y - x) y).sign :=
     by
     conv_rhs => rw [oangle_sign_sub_left_swap]
Diff
@@ -4,12 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
 
 ! This file was ported from Lean 3 source module geometry.euclidean.angle.oriented.basic
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
+! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.InnerProductSpace.TwoDim
-import Mathbin.Analysis.SpecialFunctions.Complex.Circle
 import Mathbin.Geometry.Euclidean.Angle.Unoriented.Basic
 
 /-!
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
 
 ! This file was ported from Lean 3 source module geometry.euclidean.angle.oriented.basic
-! leanprover-community/mathlib commit 2196ab363eb097c008d4497125e0dde23fb36db2
+! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -47,7 +47,11 @@ attribute [local instance] fact_finite_dimensional_of_finrank_eq_succ
 
 attribute [local instance] Complex.finrank_real_complex_fact
 
-variable {V V' : Type _} [InnerProductSpace ℝ V] [InnerProductSpace ℝ V']
+variable {V V' : Type _}
+
+variable [NormedAddCommGroup V] [NormedAddCommGroup V']
+
+variable [InnerProductSpace ℝ V] [InnerProductSpace ℝ V']
 
 variable [Fact (finrank ℝ V = 2)] [Fact (finrank ℝ V' = 2)] (o : Orientation ℝ V (Fin 2))
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
 
 ! This file was ported from Lean 3 source module geometry.euclidean.angle.oriented.basic
-! leanprover-community/mathlib commit fb319896dcaa409bd4a3cc0f8484297ef9dae2c3
+! leanprover-community/mathlib commit 2196ab363eb097c008d4497125e0dde23fb36db2
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -437,7 +437,7 @@ theorem oangle_eq_zero_iff_sameRay {x y : V} : o.oangle x y = 0 ↔ SameRay ℝ
 /-- The oriented angle between two vectors is `π` if and only if the angle with the vectors
 swapped is `π`. -/
 theorem oangle_eq_pi_iff_oangle_rev_eq_pi {x y : V} : o.oangle x y = π ↔ o.oangle y x = π := by
-  rw [oangle_rev, neg_eq_iff_neg_eq, eq_comm, Real.Angle.neg_coe_pi]
+  rw [oangle_rev, neg_eq_iff_eq_neg, Real.Angle.neg_coe_pi]
 #align orientation.oangle_eq_pi_iff_oangle_rev_eq_pi Orientation.oangle_eq_pi_iff_oangle_rev_eq_pi
 
 /-- The oriented angle between two vectors is `π` if and only they are nonzero and the first is
@@ -784,7 +784,7 @@ theorem oangle_eq_angle_of_sign_eq_one {x y : V} (h : (o.oangle x y).sign = 1) :
     simpa [hy] using h
   refine' (o.oangle_eq_angle_or_eq_neg_angle hx hy).resolve_right _
   intro hxy
-  rw [hxy, Real.Angle.sign_neg, neg_eq_iff_neg_eq, eq_comm, ← SignType.neg_iff, ← not_le] at h
+  rw [hxy, Real.Angle.sign_neg, neg_eq_iff_eq_neg, ← SignType.neg_iff, ← not_le] at h
   exact
     h
       (Real.Angle.sign_coe_nonneg_of_nonneg_of_le_pi (InnerProductGeometry.angle_nonneg _ _)
Diff
@@ -933,7 +933,7 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
     rw [h1] at h0 hm
-    rw [zero_mul, add_zero] at h0
+    rw [MulZeroClass.zero_mul, add_zero] at h0
     simpa [h0] using hm
   · rcases h with ⟨m, h, hm⟩
     change m 0 • x + m 1 • y = 0 at h
@@ -943,7 +943,7 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
     rw [h1] at h0 hm
-    rw [zero_mul, sub_zero] at h0
+    rw [MulZeroClass.zero_mul, sub_zero] at h0
     simpa [h0] using hm
 #align orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff
 
@@ -1114,9 +1114,9 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
   by
   by_cases hr₁ : r₁ = 0
   ·
-    rw [hr₁, zero_smul, zero_mul, zero_add, zero_sub, Left.sign_neg, oangle_sign_smul_left,
-      add_comm, oangle_sign_smul_add_smul_right, oangle_rev, Real.Angle.sign_neg, sign_mul, mul_neg,
-      mul_neg, neg_mul, mul_assoc]
+    rw [hr₁, zero_smul, MulZeroClass.zero_mul, zero_add, zero_sub, Left.sign_neg,
+      oangle_sign_smul_left, add_comm, oangle_sign_smul_add_smul_right, oangle_rev,
+      Real.Angle.sign_neg, sign_mul, mul_neg, mul_neg, neg_mul, mul_assoc]
   ·
     rw [← o.oangle_sign_smul_add_right (r₁ • x + r₂ • y) (r₃ • x + r₄ • y) (-r₃ / r₁), smul_add,
       smul_smul, smul_smul, div_mul_cancel _ hr₁, neg_smul, ← add_assoc, add_comm (-(r₃ • x)), ←
Diff
@@ -85,7 +85,7 @@ theorem oangle_zero_right (x : V) : o.oangle x 0 = 0 := by simp [oangle]
 @[simp]
 theorem oangle_self (x : V) : o.oangle x x = 0 :=
   by
-  simp only [oangle, kahler_apply_self, ← Complex.of_real_pow]
+  simp only [oangle, kahler_apply_self, ← Complex.ofReal_pow]
   convert QuotientAddGroup.mk_zero _
   apply arg_of_real_of_nonneg
   positivity
Diff
@@ -489,9 +489,10 @@ theorem oangle_eq_zero_or_eq_pi_iff_right_eq_smul {x y : V} :
     · simp [hx]
     rcases lt_trichotomy r 0 with (hr | hr | hr)
     · rw [← neg_smul]
-      exact Or.inr ⟨hx, smul_ne_zero hr.ne hx, sameRay_pos_smul_right x (Left.neg_pos_iff.2 hr)⟩
+      exact
+        Or.inr ⟨hx, smul_ne_zero hr.ne hx, SameRay.sameRay_pos_smul_right x (Left.neg_pos_iff.2 hr)⟩
     · simp [hr]
-    · exact Or.inl (sameRay_pos_smul_right x hr)
+    · exact Or.inl (SameRay.sameRay_pos_smul_right x hr)
 #align orientation.oangle_eq_zero_or_eq_pi_iff_right_eq_smul Orientation.oangle_eq_zero_or_eq_pi_iff_right_eq_smul
 
 /-- The oriented angle between two vectors is not zero or `π` if and only if those two vectors

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 2 (#12361)

A PR analogous to #12338: reformatting proofs following the multiple goals linter of #12339.

Diff
@@ -510,11 +510,11 @@ theorem oangle_add {x y z : V} (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0) :
     o.oangle x y + o.oangle y z = o.oangle x z := by
   simp_rw [oangle]
   rw [← Complex.arg_mul_coe_angle, o.kahler_mul y x z]
-  congr 1
-  convert Complex.arg_real_mul _ (_ : 0 < ‖y‖ ^ 2) using 2
-  · norm_cast
-  · have : 0 < ‖y‖ := by simpa using hy
-    positivity
+  · congr 1
+    convert Complex.arg_real_mul _ (_ : 0 < ‖y‖ ^ 2) using 2
+    · norm_cast
+    · have : 0 < ‖y‖ := by simpa using hy
+      positivity
   · exact o.kahler_ne_zero hx hy
   · exact o.kahler_ne_zero hy hz
 #align orientation.oangle_add Orientation.oangle_add
feat: Axiomatise b ≠ 0 → a * b / b = a (#12424)

This lets us unify a few lemmas between GroupWithZero and EuclideanDomain and two lemmas that were previously proved separately for Nat, Int, Polynomial.

Diff
@@ -628,7 +628,6 @@ theorem inner_eq_norm_mul_norm_mul_cos_oangle (x y : V) :
   rw [oangle, Real.Angle.cos_coe, Complex.cos_arg, o.abs_kahler]
   · simp only [kahler_apply_apply, real_smul, add_re, ofReal_re, mul_re, I_re, ofReal_im]
     field_simp
-    ring
   · exact o.kahler_ne_zero hx hy
 #align orientation.inner_eq_norm_mul_norm_mul_cos_oangle Orientation.inner_eq_norm_mul_norm_mul_cos_oangle
 
@@ -638,7 +637,6 @@ theorem cos_oangle_eq_inner_div_norm_mul_norm {x y : V} (hx : x ≠ 0) (hy : y 
     Real.Angle.cos (o.oangle x y) = ⟪x, y⟫ / (‖x‖ * ‖y‖) := by
   rw [o.inner_eq_norm_mul_norm_mul_cos_oangle]
   field_simp [norm_ne_zero_iff.2 hx, norm_ne_zero_iff.2 hy]
-  ring
 #align orientation.cos_oangle_eq_inner_div_norm_mul_norm Orientation.cos_oangle_eq_inner_div_norm_mul_norm
 
 /-- The cosine of the oriented angle between two nonzero vectors equals that of the unoriented
chore: Rename mul-div cancellation lemmas (#11530)

Lemma names around cancellation of multiplication and division are a mess.

This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero lemma name, the Group lemma, the AddGroup lemma name).

| Statement | New name | Old name | |

Diff
@@ -702,7 +702,7 @@ theorem oangle_eq_of_angle_eq_of_sign_eq {w x y z : V}
     rcases h' with ⟨hwx, hyz⟩
     have hpi : π / 2 ≠ π := by
       intro hpi
-      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel] at hpi
+      rw [div_eq_iff, eq_comm, ← sub_eq_zero, mul_two, add_sub_cancel_right] at hpi
       · exact Real.pi_pos.ne.symm hpi
       · exact two_ne_zero
     have h0wx : w = 0 ∨ x = 0 := by
@@ -1055,10 +1055,10 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
       oangle_sign_smul_left, add_comm, oangle_sign_smul_add_smul_right, oangle_rev,
       Real.Angle.sign_neg, sign_mul, mul_neg, mul_neg, neg_mul, mul_assoc]
   · rw [← o.oangle_sign_smul_add_right (r₁ • x + r₂ • y) (r₃ • x + r₄ • y) (-r₃ / r₁), smul_add,
-      smul_smul, smul_smul, div_mul_cancel _ hr₁, neg_smul, ← add_assoc, add_comm (-(r₃ • x)), ←
+      smul_smul, smul_smul, div_mul_cancel₀ _ hr₁, neg_smul, ← add_assoc, add_comm (-(r₃ • x)), ←
       sub_eq_add_neg, sub_add_cancel, ← add_smul, oangle_sign_smul_right,
       oangle_sign_smul_add_smul_left, ← mul_assoc, ← sign_mul, add_mul, mul_assoc, mul_comm r₂ r₁, ←
-      mul_assoc, div_mul_cancel _ hr₁, add_comm, neg_mul, ← sub_eq_add_neg, mul_comm r₄,
+      mul_assoc, div_mul_cancel₀ _ hr₁, add_comm, neg_mul, ← sub_eq_add_neg, mul_comm r₄,
       mul_comm r₃]
 #align orientation.oangle_sign_smul_add_smul_smul_add_smul Orientation.oangle_sign_smul_add_smul_smul_add_smul
 
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -42,11 +42,8 @@ namespace Orientation
 attribute [local instance] Complex.finrank_real_complex_fact
 
 variable {V V' : Type*}
-
 variable [NormedAddCommGroup V] [NormedAddCommGroup V']
-
 variable [InnerProductSpace ℝ V] [InnerProductSpace ℝ V']
-
 variable [Fact (finrank ℝ V = 2)] [Fact (finrank ℝ V' = 2)] (o : Orientation ℝ V (Fin 2))
 
 local notation "ω" => o.areaForm
chore: remove unused tactics (#11351)

I removed some of the tactics that were not used and are hopefully uncontroversial arising from the linter at #11308.

As the commit messages should convey, the removed tactics are, essentially,

push_cast
norm_cast
congr
norm_num
dsimp
funext
intro
infer_instance
Diff
@@ -79,7 +79,7 @@ theorem oangle_zero_right (x : V) : o.oangle x 0 = 0 := by simp [oangle]
 /-- If the two vectors passed to `oangle` are the same, the result is 0. -/
 @[simp]
 theorem oangle_self (x : V) : o.oangle x x = 0 := by
-  rw [oangle, kahler_apply_self, ← ofReal_pow]; norm_cast
+  rw [oangle, kahler_apply_self, ← ofReal_pow]
   convert QuotientAddGroup.mk_zero (AddSubgroup.zmultiples (2 * π))
   apply arg_ofReal_of_nonneg
   positivity
chore: move Mathlib to v4.7.0-rc1 (#11162)

This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0 branch as we update to intermediate nightlies.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>

Diff
@@ -913,7 +913,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
   have hf : ContinuousOn (fun z : V × V => o.oangle z.1 z.2) s := by
     refine' ContinuousAt.continuousOn fun z hz => o.continuousAt_oangle _ _
     all_goals
-      simp_rw [Set.mem_image] at hz
+      simp_rw [s, Set.mem_image] at hz
       obtain ⟨r', -, rfl⟩ := hz
       simp only [Prod.fst, Prod.snd]
       intro hz
@@ -921,7 +921,7 @@ theorem oangle_sign_smul_add_right (x y : V) (r : ℝ) :
     · simpa [hz] using (h' r').1
   have hs : ∀ z : V × V, z ∈ s → o.oangle z.1 z.2 ≠ 0 ∧ o.oangle z.1 z.2 ≠ π := by
     intro z hz
-    simp_rw [Set.mem_image] at hz
+    simp_rw [s, Set.mem_image] at hz
     obtain ⟨r', -, rfl⟩ := hz
     exact h' r'
   have hx : (x, y) ∈ s := by
chore: classify simp can do this porting notes (#10619)

Classify by adding issue number (#10618) to porting notes claiming anything semantically equivalent to simp can prove this or simp can simplify this.

Diff
@@ -264,13 +264,13 @@ theorem oangle_neg_self_right {x : V} (hx : x ≠ 0) : o.oangle x (-x) = π := b
 #align orientation.oangle_neg_self_right Orientation.oangle_neg_self_right
 
 /-- Twice the angle between the negation of a vector and that vector is 0. -/
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
 theorem two_zsmul_oangle_neg_self_left (x : V) : (2 : ℤ) • o.oangle (-x) x = 0 := by
   by_cases hx : x = 0 <;> simp [hx]
 #align orientation.two_zsmul_oangle_neg_self_left Orientation.two_zsmul_oangle_neg_self_left
 
 /-- Twice the angle between a vector and its negation is 0. -/
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
 theorem two_zsmul_oangle_neg_self_right (x : V) : (2 : ℤ) • o.oangle x (-x) = 0 := by
   by_cases hx : x = 0 <;> simp [hx]
 #align orientation.two_zsmul_oangle_neg_self_right Orientation.two_zsmul_oangle_neg_self_right
@@ -1030,7 +1030,7 @@ theorem oangle_sign_sub_left_swap (x y : V) : (o.oangle (x - y) x).sign = (o.oan
 /-- The sign of the angle between a vector, and a linear combination of that vector with a second
 vector, is the sign of the factor by which the second vector is multiplied in that combination
 multiplied by the sign of the angle between the two vectors. -/
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
 theorem oangle_sign_smul_add_smul_right (x y : V) (r₁ r₂ : ℝ) :
     (o.oangle x (r₁ • x + r₂ • y)).sign = SignType.sign r₂ * (o.oangle x y).sign := by
   rw [← o.oangle_sign_smul_add_right x (r₁ • x + r₂ • y) (-r₁)]
@@ -1040,7 +1040,7 @@ theorem oangle_sign_smul_add_smul_right (x y : V) (r₁ r₂ : ℝ) :
 /-- The sign of the angle between a linear combination of two vectors and the second vector is
 the sign of the factor by which the first vector is multiplied in that combination multiplied by
 the sign of the angle between the two vectors. -/
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
 theorem oangle_sign_smul_add_smul_left (x y : V) (r₁ r₂ : ℝ) :
     (o.oangle (r₁ • x + r₂ • y) y).sign = SignType.sign r₁ * (o.oangle x y).sign := by
   simp_rw [o.oangle_rev y, Real.Angle.sign_neg, add_comm (r₁ • x), oangle_sign_smul_add_smul_right,
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -79,7 +79,7 @@ theorem oangle_zero_right (x : V) : o.oangle x 0 = 0 := by simp [oangle]
 /-- If the two vectors passed to `oangle` are the same, the result is 0. -/
 @[simp]
 theorem oangle_self (x : V) : o.oangle x x = 0 := by
-  rw [oangle, kahler_apply_self]; norm_cast
+  rw [oangle, kahler_apply_self, ← ofReal_pow]; norm_cast
   convert QuotientAddGroup.mk_zero (AddSubgroup.zmultiples (2 * π))
   apply arg_ofReal_of_nonneg
   positivity
chore: removing unneeded maxHeartbeats (#7761)

Due to recent changes in core we can reduce or remove many set_option maxHeartbeats statements.

I have tried to be careful to not leave anything too close to the line, so don't be surprised if some of these can still be reduced further.

This reduces us from 96 maxHeartbeats statements to 44. (There are 10 false positives in meta or testing code.)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -1065,7 +1065,6 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
       mul_comm r₃]
 #align orientation.oangle_sign_smul_add_smul_smul_add_smul Orientation.oangle_sign_smul_add_smul_smul_add_smul
 
-set_option maxHeartbeats 350000 in
 /-- A base angle of an isosceles triangle is acute, oriented vector angle form. -/
 theorem abs_oangle_sub_left_toReal_lt_pi_div_two {x y : V} (h : ‖x‖ = ‖y‖) :
     |(o.oangle (y - x) y).toReal| < π / 2 := by
chore: drop MulZeroClass. in mul_zero/zero_mul (#6682)

Search&replace MulZeroClass.mul_zero -> mul_zero, MulZeroClass.zero_mul -> zero_mul.

These were introduced by Mathport, as the full name of mul_zero is actually MulZeroClass.mul_zero (it's exported with the short name).

Diff
@@ -882,7 +882,7 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
     rw [h1] at h0 hm
-    rw [MulZeroClass.zero_mul, add_zero] at h0
+    rw [zero_mul, add_zero] at h0
     simp [h0] at hm
   · rcases h with ⟨m, h, hm⟩
     change m 0 • x + m 1 • y = 0 at h
@@ -892,7 +892,7 @@ theorem oangle_smul_add_right_eq_zero_or_eq_pi_iff {x y : V} (r : ℝ) :
     refine' ⟨h, not_and_or.1 fun h0 => _⟩
     obtain ⟨h0, h1⟩ := h0
     rw [h1] at h0 hm
-    rw [MulZeroClass.zero_mul, sub_zero] at h0
+    rw [zero_mul, sub_zero] at h0
     simp [h0] at hm
 #align orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff Orientation.oangle_smul_add_right_eq_zero_or_eq_pi_iff
 
@@ -1054,7 +1054,7 @@ theorem oangle_sign_smul_add_smul_smul_add_smul (x y : V) (r₁ r₂ r₃ r₄ :
     (o.oangle (r₁ • x + r₂ • y) (r₃ • x + r₄ • y)).sign =
       SignType.sign (r₁ * r₄ - r₂ * r₃) * (o.oangle x y).sign := by
   by_cases hr₁ : r₁ = 0
-  · rw [hr₁, zero_smul, MulZeroClass.zero_mul, zero_add, zero_sub, Left.sign_neg,
+  · rw [hr₁, zero_smul, zero_mul, zero_add, zero_sub, Left.sign_neg,
       oangle_sign_smul_left, add_comm, oangle_sign_smul_add_smul_right, oangle_rev,
       Real.Angle.sign_neg, sign_mul, mul_neg, mul_neg, neg_mul, mul_assoc]
   · rw [← o.oangle_sign_smul_add_right (r₁ • x + r₂ • y) (r₃ • x + r₄ • y) (-r₃ / r₁), smul_add,
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -41,7 +41,7 @@ namespace Orientation
 
 attribute [local instance] Complex.finrank_real_complex_fact
 
-variable {V V' : Type _}
+variable {V V' : Type*}
 
 variable [NormedAddCommGroup V] [NormedAddCommGroup V']
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers, Heather Macbeth
-
-! This file was ported from Lean 3 source module geometry.euclidean.angle.oriented.basic
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.InnerProductSpace.TwoDim
 import Mathlib.Geometry.Euclidean.Angle.Unoriented.Basic
 
+#align_import geometry.euclidean.angle.oriented.basic from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
+
 /-!
 # Oriented angles.
 
feat: port Geometry.Euclidean.Angle.Oriented.Basic (#4966)

Dependencies 12 + 923

924 files ported (98.7%)
408843 lines ported (98.6%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file