geometry.euclidean.sphere.basicMathlib.Geometry.Euclidean.Sphere.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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 -/
 import Analysis.Convex.StrictConvexBetween
-import Geometry.Euclidean.Basic
+import Geometry.Euclidean.PerpBisector
 
 #align_import geometry.euclidean.sphere.basic from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
 
Diff
@@ -146,7 +146,7 @@ theorem Sphere.center_eq_iff_eq_of_mem {s₁ s₂ : Sphere P} {p : P} (hs₁ : p
     s₁.center = s₂.center ↔ s₁ = s₂ :=
   by
   refine' ⟨fun h => sphere.ext _ _ h _, fun h => h ▸ rfl⟩
-  rw [mem_sphere] at hs₁ hs₂ 
+  rw [mem_sphere] at hs₁ hs₂
   rw [← hs₁, ← hs₂, h]
 #align euclidean_geometry.sphere.center_eq_iff_eq_of_mem EuclideanGeometry.Sphere.center_eq_iff_eq_of_mem
 -/
@@ -302,9 +302,9 @@ theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin
   by
   rw [affineIndependent_iff_not_collinear]
   intro hc
-  rw [collinear_iff_of_mem (Set.mem_range_self (0 : Fin 3))] at hc 
+  rw [collinear_iff_of_mem (Set.mem_range_self (0 : Fin 3))] at hc
   rcases hc with ⟨v, hv⟩
-  rw [Set.forall_range_iff] at hv 
+  rw [Set.forall_mem_range] at hv
   have hv0 : v ≠ 0 := by
     intro h
     have he : p 1 = p 0 := by simpa [h] using hv 1
@@ -319,14 +319,14 @@ theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin
     exact hs' i
   have hf0 : f 0 = 0 := by
     have hf0' := hf 0
-    rw [eq_comm, ← @vsub_eq_zero_iff_eq V, vadd_vsub, smul_eq_zero] at hf0' 
+    rw [eq_comm, ← @vsub_eq_zero_iff_eq V, vadd_vsub, smul_eq_zero] at hf0'
     simpa [hv0] using hf0'
   have hfi : Function.Injective f := by
     intro i j h
     have hi := hf i
-    rw [h, ← hf j] at hi 
+    rw [h, ← hf j] at hi
     exact hpi hi
-  simp_rw [← hsd 0, hf0, zero_smul, zero_vadd, dist_smul_vadd_eq_dist (p 0) c hv0] at hsd 
+  simp_rw [← hsd 0, hf0, zero_smul, zero_vadd, dist_smul_vadd_eq_dist (p 0) c hv0] at hsd
   have hfn0 : ∀ i, i ≠ 0 → f i ≠ 0 := fun i => (hfi.ne_iff' hf0).2
   have hfn0' : ∀ i, i ≠ 0 → f i = -2 * ⟪v, p 0 -ᵥ c⟫ / ⟪v, v⟫ :=
     by
@@ -408,7 +408,7 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
   by
   by_cases h : p₁ = p₂; · exact Or.inr h
   refine' Or.inl _
-  rw [mem_sphere] at hp₁ 
+  rw [mem_sphere] at hp₁
   rw [← vsub_sub_vsub_cancel_right p₁ p₂ s.center, inner_sub_left,
     real_inner_self_eq_norm_mul_norm,--, ←dist_eq_norm_vsub, hp₁
     sub_pos]
@@ -417,13 +417,13 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
   · rwa [← dist_eq_norm_vsub, ← dist_eq_norm_vsub, hp₁]
   · rcases hp₂.lt_or_eq with (hp₂' | hp₂')
     · refine' ((real_inner_le_norm _ _).trans_lt (mul_lt_mul_of_pos_right _ _)).Ne
-      · rwa [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂' 
+      · rwa [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂'
       · rw [norm_pos_iff, vsub_ne_zero]
         rintro rfl
-        rw [← hp₁] at hp₂' 
+        rw [← hp₁] at hp₂'
         refine' (dist_nonneg.not_lt : ¬dist p₂ s.center < 0) _
         simpa using hp₂'
-    · rw [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂' 
+    · rw [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂'
       nth_rw 1 [← hp₂']
       rw [Ne.def, inner_eq_norm_mul_iff_real, hp₂', ← sub_eq_zero, ← smul_sub,
         vsub_sub_vsub_cancel_right, ← Ne.def, smul_ne_zero_iff, vsub_ne_zero,
@@ -453,7 +453,7 @@ theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁
     (hp₂ : dist p₂ s.center < s.radius) : 0 < ⟪p₁ -ᵥ p₂, p₁ -ᵥ s.center⟫ :=
   by
   by_cases h : p₁ = p₂
-  · rw [h, mem_sphere] at hp₁ 
+  · rw [h, mem_sphere] at hp₁
     exact False.elim (hp₂.ne hp₁)
   exact (inner_pos_or_eq_of_dist_le_radius hp₁ hp₂.le).resolve_right h
 #align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radius
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2020 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 -/
-import Mathbin.Analysis.Convex.StrictConvexBetween
-import Mathbin.Geometry.Euclidean.Basic
+import Analysis.Convex.StrictConvexBetween
+import Geometry.Euclidean.Basic
 
 #align_import geometry.euclidean.sphere.basic from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
-
-! This file was ported from Lean 3 source module geometry.euclidean.sphere.basic
-! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.Convex.StrictConvexBetween
 import Mathbin.Geometry.Euclidean.Basic
 
+#align_import geometry.euclidean.sphere.basic from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
+
 /-!
 # Spheres
 
Diff
@@ -348,7 +348,7 @@ theorem Cospherical.affineIndependent_of_mem_of_ne {s : Set P} (hs : Cospherical
     AffineIndependent ℝ ![p₁, p₂, p₃] :=
   by
   refine' hs.affine_independent _ _
-  · simp [h₁, h₂, h₃, Set.insert_subset]
+  · simp [h₁, h₂, h₃, Set.insert_subset_iff]
   · erw [Fin.cons_injective_iff, Fin.cons_injective_iff]
     simp [h₁₂, h₁₃, h₂₃, Function.Injective]
 #align euclidean_geometry.cospherical.affine_independent_of_mem_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_mem_of_ne
Diff
@@ -244,8 +244,7 @@ section NormedSpace
 
 variable [NormedAddCommGroup V] [NormedSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
 
-include V
-
+#print EuclideanGeometry.cospherical_pair /-
 /-- Two points are cospherical. -/
 theorem cospherical_pair (p₁ p₂ : P) : Cospherical ({p₁, p₂} : Set P) :=
   ⟨midpoint ℝ p₁ p₂, ‖(2 : ℝ)‖⁻¹ * dist p₁ p₂,
@@ -254,6 +253,7 @@ theorem cospherical_pair (p₁ p₂ : P) : Cospherical ({p₁, p₂} : Set P) :=
     · rw [dist_comm, dist_midpoint_left]
     · rw [dist_comm, dist_midpoint_right]⟩
 #align euclidean_geometry.cospherical_pair EuclideanGeometry.cospherical_pair
+-/
 
 #print EuclideanGeometry.Concyclic /-
 /-- A set of points is concyclic if it is cospherical and coplanar. (Most results are stated
@@ -271,20 +271,26 @@ theorem Concyclic.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (h : Concy
 #align euclidean_geometry.concyclic.subset EuclideanGeometry.Concyclic.subset
 -/
 
+#print EuclideanGeometry.concyclic_empty /-
 /-- The empty set is concyclic. -/
 theorem concyclic_empty : Concyclic (∅ : Set P) :=
   ⟨cospherical_empty, coplanar_empty ℝ P⟩
 #align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_empty
+-/
 
+#print EuclideanGeometry.concyclic_singleton /-
 /-- A single point is concyclic. -/
 theorem concyclic_singleton (p : P) : Concyclic ({p} : Set P) :=
   ⟨cospherical_singleton p, coplanar_singleton ℝ p⟩
 #align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singleton
+-/
 
+#print EuclideanGeometry.concyclic_pair /-
 /-- Two points are concyclic. -/
 theorem concyclic_pair (p₁ p₂ : P) : Concyclic ({p₁, p₂} : Set P) :=
   ⟨cospherical_pair p₁ p₂, coplanar_pair ℝ p₁ p₂⟩
 #align euclidean_geometry.concyclic_pair EuclideanGeometry.concyclic_pair
+-/
 
 end NormedSpace
 
@@ -292,8 +298,6 @@ section EuclideanSpace
 
 variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
 
-include V
-
 #print EuclideanGeometry.Cospherical.affineIndependent /-
 /-- Any three points in a cospherical set are affinely independent. -/
 theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin 3 → P}
@@ -360,6 +364,7 @@ theorem Cospherical.affineIndependent_of_ne {p₁ p₂ p₃ : P} (hs : Cospheric
 #align euclidean_geometry.cospherical.affine_independent_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_ne
 -/
 
+#print EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere /-
 /-- Suppose that `p₁` and `p₂` lie in spheres `s₁` and `s₂`.  Then the vector between the centers
 of those spheres is orthogonal to that between `p₁` and `p₂`; this is a version of
 `inner_vsub_vsub_of_dist_eq_of_dist_eq` for bundled spheres.  (In two dimensions, this says that
@@ -370,7 +375,9 @@ theorem inner_vsub_vsub_of_mem_sphere_of_mem_sphere {p₁ p₂ : P} {s₁ s₂ :
   inner_vsub_vsub_of_dist_eq_of_dist_eq (dist_center_eq_dist_center_of_mem_sphere hp₁s₁ hp₂s₁)
     (dist_center_eq_dist_center_of_mem_sphere hp₁s₂ hp₂s₂)
 #align euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere
+-/
 
+#print EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two /-
 /-- Two spheres intersect in at most two points in a two-dimensional subspace containing their
 centers; this is a version of `eq_of_dist_eq_of_dist_eq_of_mem_of_finrank_eq_two` for bundled
 spheres. -/
@@ -382,7 +389,9 @@ theorem eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two {s : AffineSubsp
   eq_of_dist_eq_of_dist_eq_of_mem_of_finrank_eq_two hd hs₁ hs₂ hp₁s hp₂s hps
     ((Sphere.center_ne_iff_ne_of_mem hps₁ hps₂).2 hs) hp hp₁s₁ hp₂s₁ hps₁ hp₁s₂ hp₂s₂ hps₂
 #align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two
+-/
 
+#print EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two /-
 /-- Two spheres intersect in at most two points in two-dimensional space; this is a version of
 `eq_of_dist_eq_of_dist_eq_of_finrank_eq_two` for bundled spheres. -/
 theorem eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two [FiniteDimensional ℝ V]
@@ -392,7 +401,9 @@ theorem eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two [FiniteDimensional ℝ
   eq_of_dist_eq_of_dist_eq_of_finrank_eq_two hd ((Sphere.center_ne_iff_ne_of_mem hps₁ hps₂).2 hs) hp
     hp₁s₁ hp₂s₁ hps₁ hp₁s₂ hp₂s₂ hps₂
 #align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two
+-/
 
+#print EuclideanGeometry.inner_pos_or_eq_of_dist_le_radius /-
 /-- Given a point on a sphere and a point not outside it, the inner product between the
 difference of those points and the radius vector is positive unless the points are equal. -/
 theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -424,7 +435,9 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
       refine' h (Eq.symm _)
       simpa using hp₂'
 #align euclidean_geometry.inner_pos_or_eq_of_dist_le_radius EuclideanGeometry.inner_pos_or_eq_of_dist_le_radius
+-/
 
+#print EuclideanGeometry.inner_nonneg_of_dist_le_radius /-
 /-- Given a point on a sphere and a point not outside it, the inner product between the
 difference of those points and the radius vector is nonnegative. -/
 theorem inner_nonneg_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -434,7 +447,9 @@ theorem inner_nonneg_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p
   · exact h.le
   · simp
 #align euclidean_geometry.inner_nonneg_of_dist_le_radius EuclideanGeometry.inner_nonneg_of_dist_le_radius
+-/
 
+#print EuclideanGeometry.inner_pos_of_dist_lt_radius /-
 /-- Given a point on a sphere and a point inside it, the inner product between the difference of
 those points and the radius vector is positive. -/
 theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -445,7 +460,9 @@ theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁
     exact False.elim (hp₂.ne hp₁)
   exact (inner_pos_or_eq_of_dist_le_radius hp₁ hp₂.le).resolve_right h
 #align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radius
+-/
 
+#print EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radius /-
 /-- Given three collinear points, two on a sphere and one not outside it, the one not outside it
 is weakly between the other two points. -/
 theorem wbtw_of_collinear_of_dist_center_le_radius {s : Sphere P} {p₁ p₂ p₃ : P}
@@ -453,7 +470,9 @@ theorem wbtw_of_collinear_of_dist_center_le_radius {s : Sphere P} {p₁ p₂ p
     (hp₃ : p₃ ∈ s) (hp₁p₃ : p₁ ≠ p₃) : Wbtw ℝ p₁ p₂ p₃ :=
   h.wbtw_of_dist_eq_of_dist_le hp₁ hp₂ hp₃ hp₁p₃
 #align euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radius
+-/
 
+#print EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radius /-
 /-- Given three collinear points, two on a sphere and one inside it, the one inside it is
 strictly between the other two points. -/
 theorem sbtw_of_collinear_of_dist_center_lt_radius {s : Sphere P} {p₁ p₂ p₃ : P}
@@ -461,6 +480,7 @@ theorem sbtw_of_collinear_of_dist_center_lt_radius {s : Sphere P} {p₁ p₂ p
     (hp₃ : p₃ ∈ s) (hp₁p₃ : p₁ ≠ p₃) : Sbtw ℝ p₁ p₂ p₃ :=
   h.sbtw_of_dist_eq_of_dist_lt hp₁ hp₂ hp₃ hp₁p₃
 #align euclidean_geometry.sbtw_of_collinear_of_dist_center_lt_radius EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radius
+-/
 
 end EuclideanSpace
 
Diff
@@ -149,7 +149,7 @@ theorem Sphere.center_eq_iff_eq_of_mem {s₁ s₂ : Sphere P} {p : P} (hs₁ : p
     s₁.center = s₂.center ↔ s₁ = s₂ :=
   by
   refine' ⟨fun h => sphere.ext _ _ h _, fun h => h ▸ rfl⟩
-  rw [mem_sphere] at hs₁ hs₂
+  rw [mem_sphere] at hs₁ hs₂ 
   rw [← hs₁, ← hs₂, h]
 #align euclidean_geometry.sphere.center_eq_iff_eq_of_mem EuclideanGeometry.Sphere.center_eq_iff_eq_of_mem
 -/
@@ -180,14 +180,14 @@ theorem dist_center_eq_dist_center_of_mem_sphere' {p₁ p₂ : P} {s : Sphere P}
 point.  In two dimensions, this is the same thing as being
 concyclic. -/
 def Cospherical (ps : Set P) : Prop :=
-  ∃ (center : P)(radius : ℝ), ∀ p ∈ ps, dist p center = radius
+  ∃ (center : P) (radius : ℝ), ∀ p ∈ ps, dist p center = radius
 #align euclidean_geometry.cospherical EuclideanGeometry.Cospherical
 -/
 
 #print EuclideanGeometry.cospherical_def /-
 /-- The definition of `cospherical`. -/
 theorem cospherical_def (ps : Set P) :
-    Cospherical ps ↔ ∃ (center : P)(radius : ℝ), ∀ p ∈ ps, dist p center = radius :=
+    Cospherical ps ↔ ∃ (center : P) (radius : ℝ), ∀ p ∈ ps, dist p center = radius :=
   Iff.rfl
 #align euclidean_geometry.cospherical_def EuclideanGeometry.cospherical_def
 -/
@@ -301,9 +301,9 @@ theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin
   by
   rw [affineIndependent_iff_not_collinear]
   intro hc
-  rw [collinear_iff_of_mem (Set.mem_range_self (0 : Fin 3))] at hc
+  rw [collinear_iff_of_mem (Set.mem_range_self (0 : Fin 3))] at hc 
   rcases hc with ⟨v, hv⟩
-  rw [Set.forall_range_iff] at hv
+  rw [Set.forall_range_iff] at hv 
   have hv0 : v ≠ 0 := by
     intro h
     have he : p 1 = p 0 := by simpa [h] using hv 1
@@ -318,14 +318,14 @@ theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin
     exact hs' i
   have hf0 : f 0 = 0 := by
     have hf0' := hf 0
-    rw [eq_comm, ← @vsub_eq_zero_iff_eq V, vadd_vsub, smul_eq_zero] at hf0'
+    rw [eq_comm, ← @vsub_eq_zero_iff_eq V, vadd_vsub, smul_eq_zero] at hf0' 
     simpa [hv0] using hf0'
   have hfi : Function.Injective f := by
     intro i j h
     have hi := hf i
-    rw [h, ← hf j] at hi
+    rw [h, ← hf j] at hi 
     exact hpi hi
-  simp_rw [← hsd 0, hf0, zero_smul, zero_vadd, dist_smul_vadd_eq_dist (p 0) c hv0] at hsd
+  simp_rw [← hsd 0, hf0, zero_smul, zero_vadd, dist_smul_vadd_eq_dist (p 0) c hv0] at hsd 
   have hfn0 : ∀ i, i ≠ 0 → f i ≠ 0 := fun i => (hfi.ne_iff' hf0).2
   have hfn0' : ∀ i, i ≠ 0 → f i = -2 * ⟪v, p 0 -ᵥ c⟫ / ⟪v, v⟫ :=
     by
@@ -400,7 +400,7 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
   by
   by_cases h : p₁ = p₂; · exact Or.inr h
   refine' Or.inl _
-  rw [mem_sphere] at hp₁
+  rw [mem_sphere] at hp₁ 
   rw [← vsub_sub_vsub_cancel_right p₁ p₂ s.center, inner_sub_left,
     real_inner_self_eq_norm_mul_norm,--, ←dist_eq_norm_vsub, hp₁
     sub_pos]
@@ -409,13 +409,13 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
   · rwa [← dist_eq_norm_vsub, ← dist_eq_norm_vsub, hp₁]
   · rcases hp₂.lt_or_eq with (hp₂' | hp₂')
     · refine' ((real_inner_le_norm _ _).trans_lt (mul_lt_mul_of_pos_right _ _)).Ne
-      · rwa [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂'
+      · rwa [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂' 
       · rw [norm_pos_iff, vsub_ne_zero]
         rintro rfl
-        rw [← hp₁] at hp₂'
+        rw [← hp₁] at hp₂' 
         refine' (dist_nonneg.not_lt : ¬dist p₂ s.center < 0) _
         simpa using hp₂'
-    · rw [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂'
+    · rw [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂' 
       nth_rw 1 [← hp₂']
       rw [Ne.def, inner_eq_norm_mul_iff_real, hp₂', ← sub_eq_zero, ← smul_sub,
         vsub_sub_vsub_cancel_right, ← Ne.def, smul_ne_zero_iff, vsub_ne_zero,
@@ -441,7 +441,7 @@ theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁
     (hp₂ : dist p₂ s.center < s.radius) : 0 < ⟪p₁ -ᵥ p₂, p₁ -ᵥ s.center⟫ :=
   by
   by_cases h : p₁ = p₂
-  · rw [h, mem_sphere] at hp₁
+  · rw [h, mem_sphere] at hp₁ 
     exact False.elim (hp₂.ne hp₁)
   exact (inner_pos_or_eq_of_dist_le_radius hp₁ hp₂.le).resolve_right h
 #align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radius
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 
 ! This file was ported from Lean 3 source module geometry.euclidean.sphere.basic
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
+! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
 ! 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.Basic
 /-!
 # Spheres
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file defines and proves basic results about spheres and cospherical sets of points in
 Euclidean affine spaces.
 
Diff
@@ -32,7 +32,7 @@ Euclidean affine spaces.
 
 noncomputable section
 
-open RealInnerProductSpace
+open scoped RealInnerProductSpace
 
 namespace EuclideanGeometry
 
Diff
@@ -243,12 +243,6 @@ variable [NormedAddCommGroup V] [NormedSpace ℝ V] [MetricSpace P] [NormedAddTo
 
 include V
 
-/- warning: euclidean_geometry.cospherical_pair -> EuclideanGeometry.cospherical_pair is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Cospherical.{u2} P _inst_3 (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₂))
-but is expected to have type
-  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Cospherical.{u1} P _inst_3 (Insert.insert.{u1, u1} P (Set.{u1} P) (Set.instInsertSet.{u1} P) p₁ (Singleton.singleton.{u1, u1} P (Set.{u1} P) (Set.instSingletonSet.{u1} P) p₂))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.cospherical_pair EuclideanGeometry.cospherical_pairₓ'. -/
 /-- Two points are cospherical. -/
 theorem cospherical_pair (p₁ p₂ : P) : Cospherical ({p₁, p₂} : Set P) :=
   ⟨midpoint ℝ p₁ p₂, ‖(2 : ℝ)‖⁻¹ * dist p₁ p₂,
@@ -274,34 +268,16 @@ theorem Concyclic.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (h : Concy
 #align euclidean_geometry.concyclic.subset EuclideanGeometry.Concyclic.subset
 -/
 
-/- warning: euclidean_geometry.concyclic_empty -> EuclideanGeometry.concyclic_empty is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)], EuclideanGeometry.Concyclic.{u1, u2} V P _inst_1 _inst_2 _inst_3 _inst_4 (EmptyCollection.emptyCollection.{u2} (Set.{u2} P) (Set.hasEmptyc.{u2} P))
-but is expected to have type
-  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)], EuclideanGeometry.Concyclic.{u2, u1} V P _inst_1 _inst_2 _inst_3 _inst_4 (EmptyCollection.emptyCollection.{u1} (Set.{u1} P) (Set.instEmptyCollectionSet.{u1} P))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_emptyₓ'. -/
 /-- The empty set is concyclic. -/
 theorem concyclic_empty : Concyclic (∅ : Set P) :=
   ⟨cospherical_empty, coplanar_empty ℝ P⟩
 #align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_empty
 
-/- warning: euclidean_geometry.concyclic_singleton -> EuclideanGeometry.concyclic_singleton is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] (p : P), EuclideanGeometry.Concyclic.{u1, u2} V P _inst_1 _inst_2 _inst_3 _inst_4 (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p)
-but is expected to have type
-  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] (p : P), EuclideanGeometry.Concyclic.{u2, u1} V P _inst_1 _inst_2 _inst_3 _inst_4 (Singleton.singleton.{u1, u1} P (Set.{u1} P) (Set.instSingletonSet.{u1} P) p)
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singletonₓ'. -/
 /-- A single point is concyclic. -/
 theorem concyclic_singleton (p : P) : Concyclic ({p} : Set P) :=
   ⟨cospherical_singleton p, coplanar_singleton ℝ p⟩
 #align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singleton
 
-/- warning: euclidean_geometry.concyclic_pair -> EuclideanGeometry.concyclic_pair is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Concyclic.{u1, u2} V P _inst_1 _inst_2 _inst_3 _inst_4 (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₂))
-but is expected to have type
-  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Concyclic.{u2, u1} V P _inst_1 _inst_2 _inst_3 _inst_4 (Insert.insert.{u1, u1} P (Set.{u1} P) (Set.instInsertSet.{u1} P) p₁ (Singleton.singleton.{u1, u1} P (Set.{u1} P) (Set.instSingletonSet.{u1} P) p₂))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.concyclic_pair EuclideanGeometry.concyclic_pairₓ'. -/
 /-- Two points are concyclic. -/
 theorem concyclic_pair (p₁ p₂ : P) : Concyclic ({p₁, p₂} : Set P) :=
   ⟨cospherical_pair p₁ p₂, coplanar_pair ℝ p₁ p₂⟩
@@ -381,12 +357,6 @@ theorem Cospherical.affineIndependent_of_ne {p₁ p₂ p₃ : P} (hs : Cospheric
 #align euclidean_geometry.cospherical.affine_independent_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_ne
 -/
 
-/- warning: euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere -> EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {p₁ : P} {p₂ : P} {s₁ : EuclideanGeometry.Sphere.{u2} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u2} P _inst_3}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₂) -> (Eq.{1} Real (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₂) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₁)) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₂ p₁)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {p₁ : P} {p₂ : P} {s₁ : EuclideanGeometry.Sphere.{u2} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u2} P _inst_3}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s₁) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₂ s₁) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s₂) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₂ s₂) -> (Eq.{1} Real (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₂) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₁)) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₂ p₁)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphereₓ'. -/
 /-- Suppose that `p₁` and `p₂` lie in spheres `s₁` and `s₂`.  Then the vector between the centers
 of those spheres is orthogonal to that between `p₁` and `p₂`; this is a version of
 `inner_vsub_vsub_of_dist_eq_of_dist_eq` for bundled spheres.  (In two dimensions, this says that
@@ -398,9 +368,6 @@ theorem inner_vsub_vsub_of_mem_sphere_of_mem_sphere {p₁ p₂ : P} {s₁ s₂ :
     (dist_center_eq_dist_center_of_mem_sphere hp₁s₂ hp₂s₂)
 #align euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere
 
-/- warning: euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two -> EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_twoₓ'. -/
 /-- Two spheres intersect in at most two points in a two-dimensional subspace containing their
 centers; this is a version of `eq_of_dist_eq_of_dist_eq_of_mem_of_finrank_eq_two` for bundled
 spheres. -/
@@ -413,12 +380,6 @@ theorem eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two {s : AffineSubsp
     ((Sphere.center_ne_iff_ne_of_mem hps₁ hps₂).2 hs) hp hp₁s₁ hp₂s₁ hps₁ hp₁s₂ hp₂s₂ hps₂
 #align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two
 
-/- warning: euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two -> EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] [_inst_5 : FiniteDimensional.{0, u1} Real V Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2))], (Eq.{1} Nat (FiniteDimensional.finrank.{0, u1} Real V Real.semiring (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2))) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))) -> (forall {s₁ : EuclideanGeometry.Sphere.{u2} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p : P}, (Ne.{succ u2} (EuclideanGeometry.Sphere.{u2} P _inst_3) s₁ s₂) -> (Ne.{succ u2} P p₁ p₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p s₂) -> (Or (Eq.{succ u2} P p p₁) (Eq.{succ u2} P p p₂)))
-but is expected to have type
-  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : InnerProductSpace.{0, u2} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] [_inst_5 : FiniteDimensional.{0, u2} Real V Real.instDivisionRingReal (NormedAddCommGroup.toAddCommGroup.{u2} V _inst_1) (NormedSpace.toModule.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u2} Real V Real.isROrC _inst_1 _inst_2))], (Eq.{1} Nat (FiniteDimensional.finrank.{0, u2} Real V Real.semiring (NormedAddCommGroup.toAddCommGroup.{u2} V _inst_1) (NormedSpace.toModule.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u2} Real V Real.isROrC _inst_1 _inst_2))) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))) -> (forall {s₁ : EuclideanGeometry.Sphere.{u1} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u1} P _inst_3} {p₁ : P} {p₂ : P} {p : P}, (Ne.{succ u1} (EuclideanGeometry.Sphere.{u1} P _inst_3) s₁ s₂) -> (Ne.{succ u1} P p₁ p₂) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₁ s₁) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₂ s₁) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p s₁) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₁ s₂) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₂ s₂) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p s₂) -> (Or (Eq.{succ u1} P p p₁) (Eq.{succ u1} P p p₂)))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_twoₓ'. -/
 /-- Two spheres intersect in at most two points in two-dimensional space; this is a version of
 `eq_of_dist_eq_of_dist_eq_of_finrank_eq_two` for bundled spheres. -/
 theorem eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two [FiniteDimensional ℝ V]
@@ -429,12 +390,6 @@ theorem eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two [FiniteDimensional ℝ
     hp₁s₁ hp₂s₁ hps₁ hp₁s₂ hp₂s₂ hps₂
 #align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two
 
-/- warning: euclidean_geometry.inner_pos_or_eq_of_dist_le_radius -> EuclideanGeometry.inner_pos_or_eq_of_dist_le_radius is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Or (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)))) (Eq.{succ u2} P p₁ p₂))
-but is expected to have type
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Or (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)))) (Eq.{succ u2} P p₁ p₂))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_pos_or_eq_of_dist_le_radius EuclideanGeometry.inner_pos_or_eq_of_dist_le_radiusₓ'. -/
 /-- Given a point on a sphere and a point not outside it, the inner product between the
 difference of those points and the radius vector is positive unless the points are equal. -/
 theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -467,12 +422,6 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
       simpa using hp₂'
 #align euclidean_geometry.inner_pos_or_eq_of_dist_le_radius EuclideanGeometry.inner_pos_or_eq_of_dist_le_radius
 
-/- warning: euclidean_geometry.inner_nonneg_of_dist_le_radius -> EuclideanGeometry.inner_nonneg_of_dist_le_radius is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
-but is expected to have type
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_nonneg_of_dist_le_radius EuclideanGeometry.inner_nonneg_of_dist_le_radiusₓ'. -/
 /-- Given a point on a sphere and a point not outside it, the inner product between the
 difference of those points and the radius vector is nonnegative. -/
 theorem inner_nonneg_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -483,12 +432,6 @@ theorem inner_nonneg_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p
   · simp
 #align euclidean_geometry.inner_nonneg_of_dist_le_radius EuclideanGeometry.inner_nonneg_of_dist_le_radius
 
-/- warning: euclidean_geometry.inner_pos_of_dist_lt_radius -> EuclideanGeometry.inner_pos_of_dist_lt_radius is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.hasLt (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
-but is expected to have type
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radiusₓ'. -/
 /-- Given a point on a sphere and a point inside it, the inner product between the difference of
 those points and the radius vector is positive. -/
 theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -500,12 +443,6 @@ theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁
   exact (inner_pos_or_eq_of_dist_le_radius hp₁ hp₂.le).resolve_right h
 #align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radius
 
-/- warning: euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius -> EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radius is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₃)))) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Wbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) p₁ p₂ p₃)
-but is expected to have type
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.instDivisionRingReal (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.instSingletonSet.{u2} P) p₃)))) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Wbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) p₁ p₂ p₃)
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radiusₓ'. -/
 /-- Given three collinear points, two on a sphere and one not outside it, the one not outside it
 is weakly between the other two points. -/
 theorem wbtw_of_collinear_of_dist_center_le_radius {s : Sphere P} {p₁ p₂ p₃ : P}
@@ -514,12 +451,6 @@ theorem wbtw_of_collinear_of_dist_center_le_radius {s : Sphere P} {p₁ p₂ p
   h.wbtw_of_dist_eq_of_dist_le hp₁ hp₂ hp₃ hp₁p₃
 #align euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radius
 
-/- warning: euclidean_geometry.sbtw_of_collinear_of_dist_center_lt_radius -> EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radius is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₃)))) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.hasLt (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Sbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) p₁ p₂ p₃)
-but is expected to have type
-  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.instDivisionRingReal (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.instSingletonSet.{u2} P) p₃)))) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Sbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) p₁ p₂ p₃)
-Case conversion may be inaccurate. Consider using '#align euclidean_geometry.sbtw_of_collinear_of_dist_center_lt_radius EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radiusₓ'. -/
 /-- Given three collinear points, two on a sphere and one inside it, the one inside it is
 strictly between the other two points. -/
 theorem sbtw_of_collinear_of_dist_center_lt_radius {s : Sphere P} {p₁ p₂ p₃ : P}
Diff
@@ -40,6 +40,7 @@ variable {V : Type _} (P : Type _)
 
 open FiniteDimensional
 
+#print EuclideanGeometry.Sphere /-
 /-- A `sphere P` bundles a `center` and `radius`. This definition does not require the radius to
 be positive; that should be given as a hypothesis to lemmas that require it. -/
 @[ext]
@@ -47,6 +48,7 @@ structure Sphere [MetricSpace P] where
   center : P
   radius : ℝ
 #align euclidean_geometry.sphere EuclideanGeometry.Sphere
+-/
 
 variable {P}
 
@@ -63,60 +65,83 @@ instance : Coe (Sphere P) (Set P) :=
 instance : Membership P (Sphere P) :=
   ⟨fun p s => p ∈ (s : Set P)⟩
 
+#print EuclideanGeometry.Sphere.mk_center /-
 theorem Sphere.mk_center (c : P) (r : ℝ) : (⟨c, r⟩ : Sphere P).center = c :=
   rfl
 #align euclidean_geometry.sphere.mk_center EuclideanGeometry.Sphere.mk_center
+-/
 
+#print EuclideanGeometry.Sphere.mk_radius /-
 theorem Sphere.mk_radius (c : P) (r : ℝ) : (⟨c, r⟩ : Sphere P).radius = r :=
   rfl
 #align euclidean_geometry.sphere.mk_radius EuclideanGeometry.Sphere.mk_radius
+-/
 
+#print EuclideanGeometry.Sphere.mk_center_radius /-
 @[simp]
 theorem Sphere.mk_center_radius (s : Sphere P) : (⟨s.center, s.radius⟩ : Sphere P) = s := by
   ext <;> rfl
 #align euclidean_geometry.sphere.mk_center_radius EuclideanGeometry.Sphere.mk_center_radius
+-/
 
 theorem Sphere.coe_def (s : Sphere P) : (s : Set P) = Metric.sphere s.center s.radius :=
   rfl
 #align euclidean_geometry.sphere.coe_def EuclideanGeometry.Sphere.coe_def
 
+#print EuclideanGeometry.Sphere.coe_mk /-
 @[simp]
 theorem Sphere.coe_mk (c : P) (r : ℝ) : ↑(⟨c, r⟩ : Sphere P) = Metric.sphere c r :=
   rfl
 #align euclidean_geometry.sphere.coe_mk EuclideanGeometry.Sphere.coe_mk
+-/
 
+#print EuclideanGeometry.Sphere.mem_coe /-
 @[simp]
 theorem Sphere.mem_coe {p : P} {s : Sphere P} : p ∈ (s : Set P) ↔ p ∈ s :=
   Iff.rfl
 #align euclidean_geometry.sphere.mem_coe EuclideanGeometry.Sphere.mem_coe
+-/
 
+#print EuclideanGeometry.mem_sphere /-
 theorem mem_sphere {p : P} {s : Sphere P} : p ∈ s ↔ dist p s.center = s.radius :=
   Iff.rfl
 #align euclidean_geometry.mem_sphere EuclideanGeometry.mem_sphere
+-/
 
+#print EuclideanGeometry.mem_sphere' /-
 theorem mem_sphere' {p : P} {s : Sphere P} : p ∈ s ↔ dist s.center p = s.radius :=
   Metric.mem_sphere'
 #align euclidean_geometry.mem_sphere' EuclideanGeometry.mem_sphere'
+-/
 
+#print EuclideanGeometry.subset_sphere /-
 theorem subset_sphere {ps : Set P} {s : Sphere P} : ps ⊆ s ↔ ∀ p ∈ ps, p ∈ s :=
   Iff.rfl
 #align euclidean_geometry.subset_sphere EuclideanGeometry.subset_sphere
+-/
 
+#print EuclideanGeometry.dist_of_mem_subset_sphere /-
 theorem dist_of_mem_subset_sphere {p : P} {ps : Set P} {s : Sphere P} (hp : p ∈ ps)
     (hps : ps ⊆ (s : Set P)) : dist p s.center = s.radius :=
   mem_sphere.1 (Sphere.mem_coe.1 (Set.mem_of_mem_of_subset hp hps))
 #align euclidean_geometry.dist_of_mem_subset_sphere EuclideanGeometry.dist_of_mem_subset_sphere
+-/
 
+#print EuclideanGeometry.dist_of_mem_subset_mk_sphere /-
 theorem dist_of_mem_subset_mk_sphere {p c : P} {ps : Set P} {r : ℝ} (hp : p ∈ ps)
     (hps : ps ⊆ ↑(⟨c, r⟩ : Sphere P)) : dist p c = r :=
   dist_of_mem_subset_sphere hp hps
 #align euclidean_geometry.dist_of_mem_subset_mk_sphere EuclideanGeometry.dist_of_mem_subset_mk_sphere
+-/
 
+#print EuclideanGeometry.Sphere.ne_iff /-
 theorem Sphere.ne_iff {s₁ s₂ : Sphere P} :
     s₁ ≠ s₂ ↔ s₁.center ≠ s₂.center ∨ s₁.radius ≠ s₂.radius := by
   rw [← not_and_or, ← sphere.ext_iff]
 #align euclidean_geometry.sphere.ne_iff EuclideanGeometry.Sphere.ne_iff
+-/
 
+#print EuclideanGeometry.Sphere.center_eq_iff_eq_of_mem /-
 theorem Sphere.center_eq_iff_eq_of_mem {s₁ s₂ : Sphere P} {p : P} (hs₁ : p ∈ s₁) (hs₂ : p ∈ s₂) :
     s₁.center = s₂.center ↔ s₁ = s₂ :=
   by
@@ -124,35 +149,47 @@ theorem Sphere.center_eq_iff_eq_of_mem {s₁ s₂ : Sphere P} {p : P} (hs₁ : p
   rw [mem_sphere] at hs₁ hs₂
   rw [← hs₁, ← hs₂, h]
 #align euclidean_geometry.sphere.center_eq_iff_eq_of_mem EuclideanGeometry.Sphere.center_eq_iff_eq_of_mem
+-/
 
+#print EuclideanGeometry.Sphere.center_ne_iff_ne_of_mem /-
 theorem Sphere.center_ne_iff_ne_of_mem {s₁ s₂ : Sphere P} {p : P} (hs₁ : p ∈ s₁) (hs₂ : p ∈ s₂) :
     s₁.center ≠ s₂.center ↔ s₁ ≠ s₂ :=
   (Sphere.center_eq_iff_eq_of_mem hs₁ hs₂).Not
 #align euclidean_geometry.sphere.center_ne_iff_ne_of_mem EuclideanGeometry.Sphere.center_ne_iff_ne_of_mem
+-/
 
+#print EuclideanGeometry.dist_center_eq_dist_center_of_mem_sphere /-
 theorem dist_center_eq_dist_center_of_mem_sphere {p₁ p₂ : P} {s : Sphere P} (hp₁ : p₁ ∈ s)
     (hp₂ : p₂ ∈ s) : dist p₁ s.center = dist p₂ s.center := by
   rw [mem_sphere.1 hp₁, mem_sphere.1 hp₂]
 #align euclidean_geometry.dist_center_eq_dist_center_of_mem_sphere EuclideanGeometry.dist_center_eq_dist_center_of_mem_sphere
+-/
 
+#print EuclideanGeometry.dist_center_eq_dist_center_of_mem_sphere' /-
 theorem dist_center_eq_dist_center_of_mem_sphere' {p₁ p₂ : P} {s : Sphere P} (hp₁ : p₁ ∈ s)
     (hp₂ : p₂ ∈ s) : dist s.center p₁ = dist s.center p₂ := by
   rw [mem_sphere'.1 hp₁, mem_sphere'.1 hp₂]
 #align euclidean_geometry.dist_center_eq_dist_center_of_mem_sphere' EuclideanGeometry.dist_center_eq_dist_center_of_mem_sphere'
+-/
 
+#print EuclideanGeometry.Cospherical /-
 /-- A set of points is cospherical if they are equidistant from some
 point.  In two dimensions, this is the same thing as being
 concyclic. -/
 def Cospherical (ps : Set P) : Prop :=
   ∃ (center : P)(radius : ℝ), ∀ p ∈ ps, dist p center = radius
 #align euclidean_geometry.cospherical EuclideanGeometry.Cospherical
+-/
 
+#print EuclideanGeometry.cospherical_def /-
 /-- The definition of `cospherical`. -/
 theorem cospherical_def (ps : Set P) :
     Cospherical ps ↔ ∃ (center : P)(radius : ℝ), ∀ p ∈ ps, dist p center = radius :=
   Iff.rfl
 #align euclidean_geometry.cospherical_def EuclideanGeometry.cospherical_def
+-/
 
+#print EuclideanGeometry.cospherical_iff_exists_sphere /-
 /-- A set of points is cospherical if and only if they lie in some sphere. -/
 theorem cospherical_iff_exists_sphere {ps : Set P} :
     Cospherical ps ↔ ∃ s : Sphere P, ps ⊆ (s : Set P) :=
@@ -163,31 +200,40 @@ theorem cospherical_iff_exists_sphere {ps : Set P} :
   · rcases h with ⟨s, h⟩
     exact ⟨s.center, s.radius, h⟩
 #align euclidean_geometry.cospherical_iff_exists_sphere EuclideanGeometry.cospherical_iff_exists_sphere
+-/
 
+#print EuclideanGeometry.Sphere.cospherical /-
 /-- The set of points in a sphere is cospherical. -/
 theorem Sphere.cospherical (s : Sphere P) : Cospherical (s : Set P) :=
   cospherical_iff_exists_sphere.2 ⟨s, Set.Subset.rfl⟩
 #align euclidean_geometry.sphere.cospherical EuclideanGeometry.Sphere.cospherical
+-/
 
+#print EuclideanGeometry.Cospherical.subset /-
 /-- A subset of a cospherical set is cospherical. -/
 theorem Cospherical.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (hc : Cospherical ps₂) :
     Cospherical ps₁ := by
   rcases hc with ⟨c, r, hcr⟩
   exact ⟨c, r, fun p hp => hcr p (hs hp)⟩
 #align euclidean_geometry.cospherical.subset EuclideanGeometry.Cospherical.subset
+-/
 
+#print EuclideanGeometry.cospherical_empty /-
 /-- The empty set is cospherical. -/
 theorem cospherical_empty [Nonempty P] : Cospherical (∅ : Set P) :=
   let ⟨p⟩ := ‹Nonempty P›
   ⟨p, 0, fun p => False.elim⟩
 #align euclidean_geometry.cospherical_empty EuclideanGeometry.cospherical_empty
+-/
 
+#print EuclideanGeometry.cospherical_singleton /-
 /-- A single point is cospherical. -/
 theorem cospherical_singleton (p : P) : Cospherical ({p} : Set P) :=
   by
   use p
   simp
 #align euclidean_geometry.cospherical_singleton EuclideanGeometry.cospherical_singleton
+-/
 
 end MetricSpace
 
@@ -197,6 +243,12 @@ variable [NormedAddCommGroup V] [NormedSpace ℝ V] [MetricSpace P] [NormedAddTo
 
 include V
 
+/- warning: euclidean_geometry.cospherical_pair -> EuclideanGeometry.cospherical_pair is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Cospherical.{u2} P _inst_3 (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₂))
+but is expected to have type
+  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Cospherical.{u1} P _inst_3 (Insert.insert.{u1, u1} P (Set.{u1} P) (Set.instInsertSet.{u1} P) p₁ (Singleton.singleton.{u1, u1} P (Set.{u1} P) (Set.instSingletonSet.{u1} P) p₂))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.cospherical_pair EuclideanGeometry.cospherical_pairₓ'. -/
 /-- Two points are cospherical. -/
 theorem cospherical_pair (p₁ p₂ : P) : Cospherical ({p₁, p₂} : Set P) :=
   ⟨midpoint ℝ p₁ p₂, ‖(2 : ℝ)‖⁻¹ * dist p₁ p₂,
@@ -206,28 +258,50 @@ theorem cospherical_pair (p₁ p₂ : P) : Cospherical ({p₁, p₂} : Set P) :=
     · rw [dist_comm, dist_midpoint_right]⟩
 #align euclidean_geometry.cospherical_pair EuclideanGeometry.cospherical_pair
 
+#print EuclideanGeometry.Concyclic /-
 /-- A set of points is concyclic if it is cospherical and coplanar. (Most results are stated
 directly in terms of `cospherical` instead of using `concyclic`.) -/
 structure Concyclic (ps : Set P) : Prop where
   Cospherical : Cospherical ps
   Coplanar : Coplanar ℝ ps
 #align euclidean_geometry.concyclic EuclideanGeometry.Concyclic
+-/
 
+#print EuclideanGeometry.Concyclic.subset /-
 /-- A subset of a concyclic set is concyclic. -/
 theorem Concyclic.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (h : Concyclic ps₂) : Concyclic ps₁ :=
   ⟨h.1.Subset hs, h.2.Subset hs⟩
 #align euclidean_geometry.concyclic.subset EuclideanGeometry.Concyclic.subset
+-/
 
+/- warning: euclidean_geometry.concyclic_empty -> EuclideanGeometry.concyclic_empty is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)], EuclideanGeometry.Concyclic.{u1, u2} V P _inst_1 _inst_2 _inst_3 _inst_4 (EmptyCollection.emptyCollection.{u2} (Set.{u2} P) (Set.hasEmptyc.{u2} P))
+but is expected to have type
+  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)], EuclideanGeometry.Concyclic.{u2, u1} V P _inst_1 _inst_2 _inst_3 _inst_4 (EmptyCollection.emptyCollection.{u1} (Set.{u1} P) (Set.instEmptyCollectionSet.{u1} P))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_emptyₓ'. -/
 /-- The empty set is concyclic. -/
 theorem concyclic_empty : Concyclic (∅ : Set P) :=
   ⟨cospherical_empty, coplanar_empty ℝ P⟩
 #align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_empty
 
+/- warning: euclidean_geometry.concyclic_singleton -> EuclideanGeometry.concyclic_singleton is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] (p : P), EuclideanGeometry.Concyclic.{u1, u2} V P _inst_1 _inst_2 _inst_3 _inst_4 (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p)
+but is expected to have type
+  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] (p : P), EuclideanGeometry.Concyclic.{u2, u1} V P _inst_1 _inst_2 _inst_3 _inst_4 (Singleton.singleton.{u1, u1} P (Set.{u1} P) (Set.instSingletonSet.{u1} P) p)
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singletonₓ'. -/
 /-- A single point is concyclic. -/
 theorem concyclic_singleton (p : P) : Concyclic ({p} : Set P) :=
   ⟨cospherical_singleton p, coplanar_singleton ℝ p⟩
 #align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singleton
 
+/- warning: euclidean_geometry.concyclic_pair -> EuclideanGeometry.concyclic_pair is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : NormedSpace.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1)] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Concyclic.{u1, u2} V P _inst_1 _inst_2 _inst_3 _inst_4 (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₂))
+but is expected to have type
+  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : NormedSpace.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1)] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] (p₁ : P) (p₂ : P), EuclideanGeometry.Concyclic.{u2, u1} V P _inst_1 _inst_2 _inst_3 _inst_4 (Insert.insert.{u1, u1} P (Set.{u1} P) (Set.instInsertSet.{u1} P) p₁ (Singleton.singleton.{u1, u1} P (Set.{u1} P) (Set.instSingletonSet.{u1} P) p₂))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.concyclic_pair EuclideanGeometry.concyclic_pairₓ'. -/
 /-- Two points are concyclic. -/
 theorem concyclic_pair (p₁ p₂ : P) : Concyclic ({p₁, p₂} : Set P) :=
   ⟨cospherical_pair p₁ p₂, coplanar_pair ℝ p₁ p₂⟩
@@ -241,6 +315,7 @@ variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace P] [Norme
 
 include V
 
+#print EuclideanGeometry.Cospherical.affineIndependent /-
 /-- Any three points in a cospherical set are affinely independent. -/
 theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin 3 → P}
     (hps : Set.range p ⊆ s) (hpi : Function.Injective p) : AffineIndependent ℝ p :=
@@ -281,7 +356,9 @@ theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin
   have hf12 : f 1 = f 2 := by rw [hfn0' 1 (by decide), hfn0' 2 (by decide)]
   exact (by decide : (1 : Fin 3) ≠ 2) (hfi hf12)
 #align euclidean_geometry.cospherical.affine_independent EuclideanGeometry.Cospherical.affineIndependent
+-/
 
+#print EuclideanGeometry.Cospherical.affineIndependent_of_mem_of_ne /-
 /-- Any three points in a cospherical set are affinely independent. -/
 theorem Cospherical.affineIndependent_of_mem_of_ne {s : Set P} (hs : Cospherical s) {p₁ p₂ p₃ : P}
     (h₁ : p₁ ∈ s) (h₂ : p₂ ∈ s) (h₃ : p₃ ∈ s) (h₁₂ : p₁ ≠ p₂) (h₁₃ : p₁ ≠ p₃) (h₂₃ : p₂ ≠ p₃) :
@@ -292,7 +369,9 @@ theorem Cospherical.affineIndependent_of_mem_of_ne {s : Set P} (hs : Cospherical
   · erw [Fin.cons_injective_iff, Fin.cons_injective_iff]
     simp [h₁₂, h₁₃, h₂₃, Function.Injective]
 #align euclidean_geometry.cospherical.affine_independent_of_mem_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_mem_of_ne
+-/
 
+#print EuclideanGeometry.Cospherical.affineIndependent_of_ne /-
 /-- The three points of a cospherical set are affinely independent. -/
 theorem Cospherical.affineIndependent_of_ne {p₁ p₂ p₃ : P} (hs : Cospherical ({p₁, p₂, p₃} : Set P))
     (h₁₂ : p₁ ≠ p₂) (h₁₃ : p₁ ≠ p₃) (h₂₃ : p₂ ≠ p₃) : AffineIndependent ℝ ![p₁, p₂, p₃] :=
@@ -300,7 +379,14 @@ theorem Cospherical.affineIndependent_of_ne {p₁ p₂ p₃ : P} (hs : Cospheric
     (Set.mem_insert_of_mem _ (Set.mem_insert _ _))
     (Set.mem_insert_of_mem _ (Set.mem_insert_of_mem _ (Set.mem_singleton _))) h₁₂ h₁₃ h₂₃
 #align euclidean_geometry.cospherical.affine_independent_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_ne
+-/
 
+/- warning: euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere -> EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {p₁ : P} {p₂ : P} {s₁ : EuclideanGeometry.Sphere.{u2} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u2} P _inst_3}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₂) -> (Eq.{1} Real (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₂) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₁)) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₂ p₁)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {p₁ : P} {p₂ : P} {s₁ : EuclideanGeometry.Sphere.{u2} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u2} P _inst_3}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s₁) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₂ s₁) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s₂) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₂ s₂) -> (Eq.{1} Real (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₂) (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s₁)) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₂ p₁)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphereₓ'. -/
 /-- Suppose that `p₁` and `p₂` lie in spheres `s₁` and `s₂`.  Then the vector between the centers
 of those spheres is orthogonal to that between `p₁` and `p₂`; this is a version of
 `inner_vsub_vsub_of_dist_eq_of_dist_eq` for bundled spheres.  (In two dimensions, this says that
@@ -312,6 +398,9 @@ theorem inner_vsub_vsub_of_mem_sphere_of_mem_sphere {p₁ p₂ : P} {s₁ s₂ :
     (dist_center_eq_dist_center_of_mem_sphere hp₁s₂ hp₂s₂)
 #align euclidean_geometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere EuclideanGeometry.inner_vsub_vsub_of_mem_sphere_of_mem_sphere
 
+/- warning: euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two -> EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_twoₓ'. -/
 /-- Two spheres intersect in at most two points in a two-dimensional subspace containing their
 centers; this is a version of `eq_of_dist_eq_of_dist_eq_of_mem_of_finrank_eq_two` for bundled
 spheres. -/
@@ -324,6 +413,12 @@ theorem eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two {s : AffineSubsp
     ((Sphere.center_ne_iff_ne_of_mem hps₁ hps₂).2 hs) hp hp₁s₁ hp₂s₁ hps₁ hp₁s₂ hp₂s₂ hps₂
 #align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two
 
+/- warning: euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two -> EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] [_inst_5 : FiniteDimensional.{0, u1} Real V Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2))], (Eq.{1} Nat (FiniteDimensional.finrank.{0, u1} Real V Real.semiring (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2))) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))) -> (forall {s₁ : EuclideanGeometry.Sphere.{u2} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p : P}, (Ne.{succ u2} (EuclideanGeometry.Sphere.{u2} P _inst_3) s₁ s₂) -> (Ne.{succ u2} P p₁ p₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p s₁) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₂ s₂) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p s₂) -> (Or (Eq.{succ u2} P p p₁) (Eq.{succ u2} P p p₂)))
+but is expected to have type
+  forall {V : Type.{u2}} {P : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} V] [_inst_2 : InnerProductSpace.{0, u2} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u1} P] [_inst_4 : NormedAddTorsor.{u2, u1} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u1} P _inst_3)] [_inst_5 : FiniteDimensional.{0, u2} Real V Real.instDivisionRingReal (NormedAddCommGroup.toAddCommGroup.{u2} V _inst_1) (NormedSpace.toModule.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u2} Real V Real.isROrC _inst_1 _inst_2))], (Eq.{1} Nat (FiniteDimensional.finrank.{0, u2} Real V Real.semiring (NormedAddCommGroup.toAddCommGroup.{u2} V _inst_1) (NormedSpace.toModule.{0, u2} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u2} Real V Real.isROrC _inst_1 _inst_2))) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))) -> (forall {s₁ : EuclideanGeometry.Sphere.{u1} P _inst_3} {s₂ : EuclideanGeometry.Sphere.{u1} P _inst_3} {p₁ : P} {p₂ : P} {p : P}, (Ne.{succ u1} (EuclideanGeometry.Sphere.{u1} P _inst_3) s₁ s₂) -> (Ne.{succ u1} P p₁ p₂) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₁ s₁) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₂ s₁) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p s₁) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₁ s₂) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p₂ s₂) -> (Membership.mem.{u1, u1} P (EuclideanGeometry.Sphere.{u1} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u1} P _inst_3) p s₂) -> (Or (Eq.{succ u1} P p p₁) (Eq.{succ u1} P p p₂)))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_twoₓ'. -/
 /-- Two spheres intersect in at most two points in two-dimensional space; this is a version of
 `eq_of_dist_eq_of_dist_eq_of_finrank_eq_two` for bundled spheres. -/
 theorem eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two [FiniteDimensional ℝ V]
@@ -334,6 +429,12 @@ theorem eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two [FiniteDimensional ℝ
     hp₁s₁ hp₂s₁ hps₁ hp₁s₂ hp₂s₂ hps₂
 #align euclidean_geometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two EuclideanGeometry.eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two
 
+/- warning: euclidean_geometry.inner_pos_or_eq_of_dist_le_radius -> EuclideanGeometry.inner_pos_or_eq_of_dist_le_radius is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Or (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)))) (Eq.{succ u2} P p₁ p₂))
+but is expected to have type
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Or (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)))) (Eq.{succ u2} P p₁ p₂))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_pos_or_eq_of_dist_le_radius EuclideanGeometry.inner_pos_or_eq_of_dist_le_radiusₓ'. -/
 /-- Given a point on a sphere and a point not outside it, the inner product between the
 difference of those points and the radius vector is positive unless the points are equal. -/
 theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -366,6 +467,12 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
       simpa using hp₂'
 #align euclidean_geometry.inner_pos_or_eq_of_dist_le_radius EuclideanGeometry.inner_pos_or_eq_of_dist_le_radius
 
+/- warning: euclidean_geometry.inner_nonneg_of_dist_le_radius -> EuclideanGeometry.inner_nonneg_of_dist_le_radius is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
+but is expected to have type
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_nonneg_of_dist_le_radius EuclideanGeometry.inner_nonneg_of_dist_le_radiusₓ'. -/
 /-- Given a point on a sphere and a point not outside it, the inner product between the
 difference of those points and the radius vector is nonnegative. -/
 theorem inner_nonneg_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -376,6 +483,12 @@ theorem inner_nonneg_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p
   · simp
 #align euclidean_geometry.inner_nonneg_of_dist_le_radius EuclideanGeometry.inner_nonneg_of_dist_le_radius
 
+/- warning: euclidean_geometry.inner_pos_of_dist_lt_radius -> EuclideanGeometry.inner_pos_of_dist_lt_radius is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.hasLt (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Inner.inner.{0, u1} Real V (InnerProductSpace.toHasInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toHasVsub.{u1, u2} V P (NormedAddGroup.toAddGroup.{u1} V (NormedAddCommGroup.toNormedAddGroup.{u1} V _inst_1)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
+but is expected to have type
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P}, (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Inner.inner.{0, u1} Real V (InnerProductSpace.toInner.{0, u1} Real V Real.isROrC _inst_1 _inst_2) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ p₂) (VSub.vsub.{u1, u2} V P (AddTorsor.toVSub.{u1, u2} V P (SeminormedAddGroup.toAddGroup.{u1} V (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} V (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1))) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4)) p₁ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s))))
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radiusₓ'. -/
 /-- Given a point on a sphere and a point inside it, the inner product between the difference of
 those points and the radius vector is positive. -/
 theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
@@ -387,6 +500,12 @@ theorem inner_pos_of_dist_lt_radius {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁
   exact (inner_pos_or_eq_of_dist_le_radius hp₁ hp₂.le).resolve_right h
 #align euclidean_geometry.inner_pos_of_dist_lt_radius EuclideanGeometry.inner_pos_of_dist_lt_radius
 
+/- warning: euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius -> EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radius is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₃)))) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Wbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) p₁ p₂ p₃)
+but is expected to have type
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.instDivisionRingReal (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.instSingletonSet.{u2} P) p₃)))) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Wbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) p₁ p₂ p₃)
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radiusₓ'. -/
 /-- Given three collinear points, two on a sphere and one not outside it, the one not outside it
 is weakly between the other two points. -/
 theorem wbtw_of_collinear_of_dist_center_le_radius {s : Sphere P} {p₁ p₂ p₃ : P}
@@ -395,6 +514,12 @@ theorem wbtw_of_collinear_of_dist_center_le_radius {s : Sphere P} {p₁ p₂ p
   h.wbtw_of_dist_eq_of_dist_le hp₁ hp₂ hp₃ hp₁p₃
 #align euclidean_geometry.wbtw_of_collinear_of_dist_center_le_radius EuclideanGeometry.wbtw_of_collinear_of_dist_center_le_radius
 
+/- warning: euclidean_geometry.sbtw_of_collinear_of_dist_center_lt_radius -> EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radius is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.hasInsert.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.hasSingleton.{u2} P) p₃)))) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.hasLt (Dist.dist.{u2} P (PseudoMetricSpace.toHasDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.Mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.Sphere.hasMem.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Sbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor'.{u1, u2} V P _inst_1 _inst_3 _inst_4) p₁ p₂ p₃)
+but is expected to have type
+  forall {V : Type.{u1}} {P : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} V] [_inst_2 : InnerProductSpace.{0, u1} Real V Real.isROrC _inst_1] [_inst_3 : MetricSpace.{u2} P] [_inst_4 : NormedAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)] {s : EuclideanGeometry.Sphere.{u2} P _inst_3} {p₁ : P} {p₂ : P} {p₃ : P}, (Collinear.{0, u1, u2} Real V P Real.instDivisionRingReal (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₁ (Insert.insert.{u2, u2} P (Set.{u2} P) (Set.instInsertSet.{u2} P) p₂ (Singleton.singleton.{u2, u2} P (Set.{u2} P) (Set.instSingletonSet.{u2} P) p₃)))) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₁ s) -> (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u2} P (PseudoMetricSpace.toDist.{u2} P (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3)) p₂ (EuclideanGeometry.Sphere.center.{u2} P _inst_3 s)) (EuclideanGeometry.Sphere.radius.{u2} P _inst_3 s)) -> (Membership.mem.{u2, u2} P (EuclideanGeometry.Sphere.{u2} P _inst_3) (EuclideanGeometry.instMembershipSphere.{u2} P _inst_3) p₃ s) -> (Ne.{succ u2} P p₁ p₃) -> (Sbtw.{0, u1, u2} Real V P Real.orderedRing (NormedAddCommGroup.toAddCommGroup.{u1} V _inst_1) (NormedSpace.toModule.{0, u1} Real V Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (InnerProductSpace.toNormedSpace.{0, u1} Real V Real.isROrC _inst_1 _inst_2)) (NormedAddTorsor.toAddTorsor.{u1, u2} V P (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} V _inst_1) (MetricSpace.toPseudoMetricSpace.{u2} P _inst_3) _inst_4) p₁ p₂ p₃)
+Case conversion may be inaccurate. Consider using '#align euclidean_geometry.sbtw_of_collinear_of_dist_center_lt_radius EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radiusₓ'. -/
 /-- Given three collinear points, two on a sphere and one inside it, the one inside it is
 strictly between the other two points. -/
 theorem sbtw_of_collinear_of_dist_center_lt_radius {s : Sphere P} {p₁ p₂ p₃ : P}
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 
 ! This file was ported from Lean 3 source module geometry.euclidean.sphere.basic
-! leanprover-community/mathlib commit 027ff1e4f0b337893269a7dcd90476ceab95570b
+! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -237,7 +237,7 @@ end NormedSpace
 
 section EuclideanSpace
 
-variable [InnerProductSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
+variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
 
 include V
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 
 ! This file was ported from Lean 3 source module geometry.euclidean.sphere.basic
-! leanprover-community/mathlib commit eea141bc9cf205beebfd46e2068c7c01ee8db4f6
+! leanprover-community/mathlib commit 027ff1e4f0b337893269a7dcd90476ceab95570b
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -36,20 +36,24 @@ open RealInnerProductSpace
 
 namespace EuclideanGeometry
 
-variable {V : Type _} (P : Type _) [InnerProductSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
+variable {V : Type _} (P : Type _)
 
 open FiniteDimensional
 
 /-- A `sphere P` bundles a `center` and `radius`. This definition does not require the radius to
 be positive; that should be given as a hypothesis to lemmas that require it. -/
 @[ext]
-structure Sphere where
+structure Sphere [MetricSpace P] where
   center : P
   radius : ℝ
 #align euclidean_geometry.sphere EuclideanGeometry.Sphere
 
 variable {P}
 
+section MetricSpace
+
+variable [MetricSpace P]
+
 instance [Nonempty P] : Nonempty (Sphere P) :=
   ⟨⟨Classical.arbitrary P, 0⟩⟩
 
@@ -172,17 +176,12 @@ theorem Cospherical.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (hc : Co
   exact ⟨c, r, fun p hp => hcr p (hs hp)⟩
 #align euclidean_geometry.cospherical.subset EuclideanGeometry.Cospherical.subset
 
-include V
-
 /-- The empty set is cospherical. -/
-theorem cospherical_empty : Cospherical (∅ : Set P) :=
-  by
-  use add_torsor.nonempty.some
-  simp
+theorem cospherical_empty [Nonempty P] : Cospherical (∅ : Set P) :=
+  let ⟨p⟩ := ‹Nonempty P›
+  ⟨p, 0, fun p => False.elim⟩
 #align euclidean_geometry.cospherical_empty EuclideanGeometry.cospherical_empty
 
-omit V
-
 /-- A single point is cospherical. -/
 theorem cospherical_singleton (p : P) : Cospherical ({p} : Set P) :=
   by
@@ -190,27 +189,58 @@ theorem cospherical_singleton (p : P) : Cospherical ({p} : Set P) :=
   simp
 #align euclidean_geometry.cospherical_singleton EuclideanGeometry.cospherical_singleton
 
+end MetricSpace
+
+section NormedSpace
+
+variable [NormedAddCommGroup V] [NormedSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
+
 include V
 
 /-- Two points are cospherical. -/
 theorem cospherical_pair (p₁ p₂ : P) : Cospherical ({p₁, p₂} : Set P) :=
-  by
-  use (2⁻¹ : ℝ) • (p₂ -ᵥ p₁) +ᵥ p₁, (2⁻¹ : ℝ) * dist p₂ p₁
-  intro p
-  rw [Set.mem_insert_iff, Set.mem_singleton_iff]
-  rintro ⟨_ | _⟩
-  · rw [dist_eq_norm_vsub V p₁, vsub_vadd_eq_vsub_sub, vsub_self, zero_sub, norm_neg, norm_smul,
-      dist_eq_norm_vsub V p₂]
-    simp
-  · rw [H, dist_eq_norm_vsub V p₂, vsub_vadd_eq_vsub_sub, dist_eq_norm_vsub V p₂]
-    conv_lhs =>
-      congr
-      congr
-      rw [← one_smul ℝ (p₂ -ᵥ p₁ : V)]
-    rw [← sub_smul, norm_smul]
-    norm_num
+  ⟨midpoint ℝ p₁ p₂, ‖(2 : ℝ)‖⁻¹ * dist p₁ p₂,
+    by
+    rintro p (rfl | rfl | _)
+    · rw [dist_comm, dist_midpoint_left]
+    · rw [dist_comm, dist_midpoint_right]⟩
 #align euclidean_geometry.cospherical_pair EuclideanGeometry.cospherical_pair
 
+/-- A set of points is concyclic if it is cospherical and coplanar. (Most results are stated
+directly in terms of `cospherical` instead of using `concyclic`.) -/
+structure Concyclic (ps : Set P) : Prop where
+  Cospherical : Cospherical ps
+  Coplanar : Coplanar ℝ ps
+#align euclidean_geometry.concyclic EuclideanGeometry.Concyclic
+
+/-- A subset of a concyclic set is concyclic. -/
+theorem Concyclic.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (h : Concyclic ps₂) : Concyclic ps₁ :=
+  ⟨h.1.Subset hs, h.2.Subset hs⟩
+#align euclidean_geometry.concyclic.subset EuclideanGeometry.Concyclic.subset
+
+/-- The empty set is concyclic. -/
+theorem concyclic_empty : Concyclic (∅ : Set P) :=
+  ⟨cospherical_empty, coplanar_empty ℝ P⟩
+#align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_empty
+
+/-- A single point is concyclic. -/
+theorem concyclic_singleton (p : P) : Concyclic ({p} : Set P) :=
+  ⟨cospherical_singleton p, coplanar_singleton ℝ p⟩
+#align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singleton
+
+/-- Two points are concyclic. -/
+theorem concyclic_pair (p₁ p₂ : P) : Concyclic ({p₁, p₂} : Set P) :=
+  ⟨cospherical_pair p₁ p₂, coplanar_pair ℝ p₁ p₂⟩
+#align euclidean_geometry.concyclic_pair EuclideanGeometry.concyclic_pair
+
+end NormedSpace
+
+section EuclideanSpace
+
+variable [InnerProductSpace ℝ V] [MetricSpace P] [NormedAddTorsor V P]
+
+include V
+
 /-- Any three points in a cospherical set are affinely independent. -/
 theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin 3 → P}
     (hps : Set.range p ⊆ s) (hpi : Function.Injective p) : AffineIndependent ℝ p :=
@@ -373,32 +403,7 @@ theorem sbtw_of_collinear_of_dist_center_lt_radius {s : Sphere P} {p₁ p₂ p
   h.sbtw_of_dist_eq_of_dist_lt hp₁ hp₂ hp₃ hp₁p₃
 #align euclidean_geometry.sbtw_of_collinear_of_dist_center_lt_radius EuclideanGeometry.sbtw_of_collinear_of_dist_center_lt_radius
 
-/-- A set of points is concyclic if it is cospherical and coplanar. (Most results are stated
-directly in terms of `cospherical` instead of using `concyclic`.) -/
-structure Concyclic (ps : Set P) : Prop where
-  Cospherical : Cospherical ps
-  Coplanar : Coplanar ℝ ps
-#align euclidean_geometry.concyclic EuclideanGeometry.Concyclic
-
-/-- A subset of a concyclic set is concyclic. -/
-theorem Concyclic.subset {ps₁ ps₂ : Set P} (hs : ps₁ ⊆ ps₂) (h : Concyclic ps₂) : Concyclic ps₁ :=
-  ⟨h.1.Subset hs, h.2.Subset hs⟩
-#align euclidean_geometry.concyclic.subset EuclideanGeometry.Concyclic.subset
-
-/-- The empty set is concyclic. -/
-theorem concyclic_empty : Concyclic (∅ : Set P) :=
-  ⟨cospherical_empty, coplanar_empty ℝ P⟩
-#align euclidean_geometry.concyclic_empty EuclideanGeometry.concyclic_empty
-
-/-- A single point is concyclic. -/
-theorem concyclic_singleton (p : P) : Concyclic ({p} : Set P) :=
-  ⟨cospherical_singleton p, coplanar_singleton ℝ p⟩
-#align euclidean_geometry.concyclic_singleton EuclideanGeometry.concyclic_singleton
-
-/-- Two points are concyclic. -/
-theorem concyclic_pair (p₁ p₂ : P) : Concyclic ({p₁, p₂} : Set P) :=
-  ⟨cospherical_pair p₁ p₂, coplanar_pair ℝ p₁ p₂⟩
-#align euclidean_geometry.concyclic_pair EuclideanGeometry.concyclic_pair
+end EuclideanSpace
 
 end EuclideanGeometry
 

Changes in mathlib4

mathlib3
mathlib4
doc(EuclideanGeometry): document a few declarations (#12481)
Diff
@@ -41,7 +41,9 @@ open FiniteDimensional
 be positive; that should be given as a hypothesis to lemmas that require it. -/
 @[ext]
 structure Sphere [MetricSpace P] where
+  /-- center of this sphere -/
   center : P
+  /-- radius of the sphere: not required to be positive -/
   radius : ℝ
 #align euclidean_geometry.sphere EuclideanGeometry.Sphere
 
chore: backports from #11997, adaptations for nightly-2024-04-07 (#12176)

These are changes from #11997, the latest adaptation PR for nightly-2024-04-07, which can be made directly on master.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>

Diff
@@ -346,8 +346,8 @@ theorem inner_pos_or_eq_of_dist_le_radius {s : Sphere P} {p₁ p₂ : P} (hp₁
         simpa using hp₂'
     · rw [← hp₁, @dist_eq_norm_vsub V, @dist_eq_norm_vsub V] at hp₂'
       nth_rw 1 [← hp₂']
-      rw [Ne.def, inner_eq_norm_mul_iff_real, hp₂', ← sub_eq_zero, ← smul_sub,
-        vsub_sub_vsub_cancel_right, ← Ne.def, smul_ne_zero_iff, vsub_ne_zero,
+      rw [Ne, inner_eq_norm_mul_iff_real, hp₂', ← sub_eq_zero, ← smul_sub,
+        vsub_sub_vsub_cancel_right, ← Ne, smul_ne_zero_iff, vsub_ne_zero,
         and_iff_left (Ne.symm h), norm_ne_zero_iff, vsub_ne_zero]
       rintro rfl
       refine' h (Eq.symm _)
chore: Remove ball and bex from lemma names (#10816)

ball for "bounded forall" and bex for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem and exists_mem in the few Set lemma names that mention them.

Also deprecate ball_image_of_ball, mem_image_elim, mem_image_elim_on since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image semi-implicit), have obscure names and are completely unused.

Diff
@@ -242,7 +242,7 @@ theorem Cospherical.affineIndependent {s : Set P} (hs : Cospherical s) {p : Fin
   intro hc
   rw [collinear_iff_of_mem (Set.mem_range_self (0 : Fin 3))] at hc
   rcases hc with ⟨v, hv⟩
-  rw [Set.forall_range_iff] at hv
+  rw [Set.forall_mem_range] at hv
   have hv0 : v ≠ 0 := by
     intro h
     have he : p 1 = p 0 := by simpa [h] using hv 1
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
@@ -280,7 +280,7 @@ theorem Cospherical.affineIndependent_of_mem_of_ne {s : Set P} (hs : Cospherical
   refine' hs.affineIndependent _ _
   · simp [h₁, h₂, h₃, Set.insert_subset_iff]
   · erw [Fin.cons_injective_iff, Fin.cons_injective_iff]
-    simp [h₁₂, h₁₃, h₂₃, Function.Injective]
+    simp [h₁₂, h₁₃, h₂₃, Function.Injective, eq_iff_true_of_subsingleton]
 #align euclidean_geometry.cospherical.affine_independent_of_mem_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_mem_of_ne
 
 /-- The three points of a cospherical set are affinely independent. -/
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
@@ -33,7 +33,7 @@ open RealInnerProductSpace
 
 namespace EuclideanGeometry
 
-variable {V : Type _} (P : Type _)
+variable {V : Type*} (P : Type*)
 
 open FiniteDimensional
 
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) 2020 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
-
-! This file was ported from Lean 3 source module geometry.euclidean.sphere.basic
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Convex.StrictConvexBetween
 import Mathlib.Geometry.Euclidean.Basic
 
+#align_import geometry.euclidean.sphere.basic from "leanprover-community/mathlib"@"46b633fd842bef9469441c0209906f6dddd2b4f5"
+
 /-!
 # Spheres
 
feat(Data.Set.Basic/Data.Finset.Basic): rename insert_subset (#5450)

Currently, (for both Set and Finset) insert_subset is an iff lemma stating that insert a s ⊆ t if and only if a ∈ t and s ⊆ t. For both types, this PR renames this lemma to insert_subset_iff, and adds an insert_subset lemma that gives the implication just in the reverse direction : namely theorem insert_subset (ha : a ∈ t) (hs : s ⊆ t) : insert a s ⊆ t .

This both aligns the naming with union_subset and union_subset_iff, and removes the need for the awkward insert_subset.mpr ⟨_,_⟩ idiom. It touches a lot of files (too many to list), but in a trivial way.

Diff
@@ -281,7 +281,7 @@ theorem Cospherical.affineIndependent_of_mem_of_ne {s : Set P} (hs : Cospherical
     (h₁ : p₁ ∈ s) (h₂ : p₂ ∈ s) (h₃ : p₃ ∈ s) (h₁₂ : p₁ ≠ p₂) (h₁₃ : p₁ ≠ p₃) (h₂₃ : p₂ ≠ p₃) :
     AffineIndependent ℝ ![p₁, p₂, p₃] := by
   refine' hs.affineIndependent _ _
-  · simp [h₁, h₂, h₃, Set.insert_subset]
+  · simp [h₁, h₂, h₃, Set.insert_subset_iff]
   · erw [Fin.cons_injective_iff, Fin.cons_injective_iff]
     simp [h₁₂, h₁₃, h₂₃, Function.Injective]
 #align euclidean_geometry.cospherical.affine_independent_of_mem_of_ne EuclideanGeometry.Cospherical.affineIndependent_of_mem_of_ne
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -153,7 +153,7 @@ def Cospherical (ps : Set P) : Prop :=
 
 /-- The definition of `Cospherical`. -/
 theorem cospherical_def (ps : Set P) :
-    Cospherical ps ↔ ∃ (center : P)(radius : ℝ), ∀ p ∈ ps, dist p center = radius :=
+    Cospherical ps ↔ ∃ (center : P) (radius : ℝ), ∀ p ∈ ps, dist p center = radius :=
   Iff.rfl
 #align euclidean_geometry.cospherical_def EuclideanGeometry.cospherical_def
 
chore: tidy various files (#4466)
Diff
@@ -78,8 +78,8 @@ theorem Sphere.mk_center_radius (s : Sphere P) : (⟨s.center, s.radius⟩ : Sph
 
 /- Porting note: is a syntactic tautology
 theorem Sphere.coe_def (s : Sphere P) : (s : Set P) = Metric.sphere s.center s.radius :=
-  rfl
-#align euclidean_geometry.sphere.coe_def EuclideanGeometry.Sphere.coe_def -/
+  rfl -/
+#noalign euclidean_geometry.sphere.coe_def
 
 @[simp]
 theorem Sphere.coe_mk (c : P) (r : ℝ) : ↑(⟨c, r⟩ : Sphere P) = Metric.sphere c r :=
feat: port Geometry.Euclidean.Sphere.Basic (#4408)

Dependencies 12 + 873

874 files ported (98.6%)
388923 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