geometry.manifold.instances.sphere
⟷
Mathlib.Geometry.Manifold.Instances.Sphere
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -10,7 +10,7 @@ import Analysis.InnerProductSpace.Calculus
import Analysis.InnerProductSpace.PiL2
import Geometry.Manifold.Algebra.LieGroup
import Geometry.Manifold.Instances.Real
-import Geometry.Manifold.ContMdiffMfderiv
+import Geometry.Manifold.ContMDiffMFDeriv
#align_import geometry.manifold.instances.sphere from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -157,7 +157,7 @@ theorem stereoInvFunAux_mem (hv : ‖v‖ = 1) {w : E} (hw : w ∈ (ℝ ∙ v)
by
have h₃ : 0 ≤ ‖stereoInvFunAux v w‖ := norm_nonneg _
simpa [h₁, h₃, -one_pow] using this
- rw [Submodule.mem_orthogonal_singleton_iff_inner_left] at hw
+ rw [Submodule.mem_orthogonal_singleton_iff_inner_left] at hw
simp [norm_add_sq_real, norm_smul, inner_smul_left, inner_smul_right, hw, mul_pow,
Real.norm_eq_abs, hv]
ring
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -508,8 +508,8 @@ instance {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
(cont_diff_stereo_inv_fun_aux.comp (ℝ ∙ (v : E))ᗮ.subtypeL.ContDiff).comp U.symm.cont_diff
convert H₁.comp' (H₂.cont_diff_on : ContDiffOn ℝ ⊤ _ Set.univ) using 1
-- squeezed from `ext, simp [sphere_ext_iff, stereographic'_symm_apply, real_inner_comm]`
- simp only [PartialHomeomorph.trans_toLocalEquiv, PartialHomeomorph.symm_toLocalEquiv,
- LocalEquiv.trans_source, LocalEquiv.symm_source, stereographic'_target,
+ simp only [PartialHomeomorph.trans_toPartialEquiv, PartialHomeomorph.symm_toPartialEquiv,
+ PartialEquiv.trans_source, PartialEquiv.symm_source, stereographic'_target,
stereographic'_source]
simp only [modelWithCornersSelf_coe, modelWithCornersSelf_coe_symm, Set.preimage_id,
Set.range_id, Set.inter_univ, Set.univ_inter, Set.compl_singleton_eq, Set.preimage_setOf_eq]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -336,7 +336,7 @@ theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v
#print stereographic /-
/-- Stereographic projection from the unit sphere in `E`, centred at a unit vector `v` in `E`; this
is the version as a local homeomorphism. -/
-def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ ∙ v)ᗮ
+def stereographic (hv : ‖v‖ = 1) : PartialHomeomorph (sphere (0 : E) 1) (ℝ ∙ v)ᗮ
where
toFun := stereoToFun v ∘ coe
invFun := stereoInvFun hv
@@ -424,10 +424,10 @@ space `E`. This version has codomain the Euclidean space of dimension `n`, and
composing the original sterographic projection (`stereographic`) with an arbitrary linear isometry
from `(ℝ ∙ v)ᗮ` to the Euclidean space. -/
def stereographic' (n : ℕ) [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
- LocalHomeomorph (sphere (0 : E) 1) (EuclideanSpace ℝ (Fin n)) :=
+ PartialHomeomorph (sphere (0 : E) 1) (EuclideanSpace ℝ (Fin n)) :=
stereographic (norm_eq_of_mem_sphere v) ≫ₕ
(OrthonormalBasis.fromOrthogonalSpanSingleton n
- (ne_zero_of_mem_unit_sphere v)).repr.toHomeomorph.toLocalHomeomorph
+ (ne_zero_of_mem_unit_sphere v)).repr.toHomeomorph.toPartialHomeomorph
#align stereographic' stereographic'
-/
@@ -508,12 +508,12 @@ instance {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
(cont_diff_stereo_inv_fun_aux.comp (ℝ ∙ (v : E))ᗮ.subtypeL.ContDiff).comp U.symm.cont_diff
convert H₁.comp' (H₂.cont_diff_on : ContDiffOn ℝ ⊤ _ Set.univ) using 1
-- squeezed from `ext, simp [sphere_ext_iff, stereographic'_symm_apply, real_inner_comm]`
- simp only [LocalHomeomorph.trans_toLocalEquiv, LocalHomeomorph.symm_toLocalEquiv,
+ simp only [PartialHomeomorph.trans_toLocalEquiv, PartialHomeomorph.symm_toLocalEquiv,
LocalEquiv.trans_source, LocalEquiv.symm_source, stereographic'_target,
stereographic'_source]
simp only [modelWithCornersSelf_coe, modelWithCornersSelf_coe_symm, Set.preimage_id,
Set.range_id, Set.inter_univ, Set.univ_inter, Set.compl_singleton_eq, Set.preimage_setOf_eq]
- simp only [id.def, comp_apply, Submodule.subtypeL_apply, LocalHomeomorph.coe_coe_symm,
+ simp only [id.def, comp_apply, Submodule.subtypeL_apply, PartialHomeomorph.coe_coe_symm,
innerSL_apply, Ne.def, sphere_ext_iff, real_inner_comm (v' : E)]
rfl)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,14 +3,14 @@ Copyright (c) 2021 Heather Macbeth. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
-/
-import Mathbin.Analysis.Calculus.Deriv.Inv
-import Mathbin.Analysis.NormedSpace.BallAction
-import Mathbin.Analysis.SpecialFunctions.ExpDeriv
-import Mathbin.Analysis.InnerProductSpace.Calculus
-import Mathbin.Analysis.InnerProductSpace.PiL2
-import Mathbin.Geometry.Manifold.Algebra.LieGroup
-import Mathbin.Geometry.Manifold.Instances.Real
-import Mathbin.Geometry.Manifold.ContMdiffMfderiv
+import Analysis.Calculus.Deriv.Inv
+import Analysis.NormedSpace.BallAction
+import Analysis.SpecialFunctions.ExpDeriv
+import Analysis.InnerProductSpace.Calculus
+import Analysis.InnerProductSpace.PiL2
+import Geometry.Manifold.Algebra.LieGroup
+import Geometry.Manifold.Instances.Real
+import Geometry.Manifold.ContMdiffMfderiv
#align_import geometry.manifold.instances.sphere from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -667,7 +667,7 @@ instance : SmoothManifoldWithCorners (𝓡 1) circle :=
/-- The unit circle in `ℂ` is a Lie group. -/
instance : LieGroup (𝓡 1) circle
where
- smooth_mul := by
+ smooth_hMul := by
apply ContMDiff.codRestrict_sphere
let c : circle → ℂ := coe
have h₂ : ContMDiff (𝓘(ℝ, ℂ).Prod 𝓘(ℝ, ℂ)) 𝓘(ℝ, ℂ) ∞ fun z : ℂ × ℂ => z.fst * z.snd :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2021 Heather Macbeth. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
-
-! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Calculus.Deriv.Inv
import Mathbin.Analysis.NormedSpace.BallAction
@@ -17,6 +12,8 @@ import Mathbin.Geometry.Manifold.Algebra.LieGroup
import Mathbin.Geometry.Manifold.Instances.Real
import Mathbin.Geometry.Manifold.ContMdiffMfderiv
+#align_import geometry.manifold.instances.sphere from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
+
/-!
# Manifold structure on the sphere
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf2428c9486c407ca38b5b3fb10b87dad0bc99fa
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 0dc4079202c28226b2841a51eb6d3cc2135bb80f
+! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -20,6 +20,9 @@ import Mathbin.Geometry.Manifold.ContMdiffMfderiv
/-!
# Manifold structure on the sphere
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines stereographic projection from the sphere in an inner product space `E`, and uses
it to put a smooth manifold structure on the sphere.
mathlib commit https://github.com/leanprover-community/mathlib/commit/2fe465deb81bcd7ccafa065bb686888a82f15372
@@ -80,6 +80,7 @@ variable (v : E)
/-! ### Construction of the stereographic projection -/
+#print stereoToFun /-
/-- Stereographic projection, forward direction. This is a map from an inner product space `E` to
the orthogonal complement of an element `v` of `E`. It is smooth away from the affine hyperplane
through `v` parallel to the orthogonal complement. It restricts on the sphere to the stereographic
@@ -87,15 +88,19 @@ projection. -/
def stereoToFun [CompleteSpace E] (x : E) : (ℝ ∙ v)ᗮ :=
(2 / ((1 : ℝ) - innerSL _ v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x
#align stereo_to_fun stereoToFun
+-/
variable {v}
+#print stereoToFun_apply /-
@[simp]
theorem stereoToFun_apply [CompleteSpace E] (x : E) :
stereoToFun v x = (2 / ((1 : ℝ) - innerSL _ v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x :=
rfl
#align stereo_to_fun_apply stereoToFun_apply
+-/
+#print contDiffOn_stereoToFun /-
theorem contDiffOn_stereoToFun [CompleteSpace E] :
ContDiffOn ℝ ⊤ (stereoToFun v) {x : E | innerSL _ v x ≠ (1 : ℝ)} :=
by
@@ -105,14 +110,18 @@ theorem contDiffOn_stereoToFun [CompleteSpace E] :
· intro x h h'
exact h (sub_eq_zero.mp h').symm
#align cont_diff_on_stereo_to_fun contDiffOn_stereoToFun
+-/
+#print continuousOn_stereoToFun /-
theorem continuousOn_stereoToFun [CompleteSpace E] :
ContinuousOn (stereoToFun v) {x : E | innerSL _ v x ≠ (1 : ℝ)} :=
(@contDiffOn_stereoToFun E _ _ v _).ContinuousOn
#align continuous_on_stereo_to_fun continuousOn_stereoToFun
+-/
variable (v)
+#print stereoInvFunAux /-
/-- Auxiliary function for the construction of the reverse direction of the stereographic
projection. This is a map from the orthogonal complement of a unit vector `v` in an inner product
space `E` to `E`; we will later prove that it takes values in the unit sphere.
@@ -121,15 +130,19 @@ For most purposes, use `stereo_inv_fun`, not `stereo_inv_fun_aux`. -/
def stereoInvFunAux (w : E) : E :=
(‖w‖ ^ 2 + 4)⁻¹ • ((4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v)
#align stereo_inv_fun_aux stereoInvFunAux
+-/
variable {v}
+#print stereoInvFunAux_apply /-
@[simp]
theorem stereoInvFunAux_apply (w : E) :
stereoInvFunAux v w = (‖w‖ ^ 2 + 4)⁻¹ • ((4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) :=
rfl
#align stereo_inv_fun_aux_apply stereoInvFunAux_apply
+-/
+#print stereoInvFunAux_mem /-
theorem stereoInvFunAux_mem (hv : ‖v‖ = 1) {w : E} (hw : w ∈ (ℝ ∙ v)ᗮ) :
stereoInvFunAux v w ∈ sphere (0 : E) 1 :=
by
@@ -149,7 +162,9 @@ theorem stereoInvFunAux_mem (hv : ‖v‖ = 1) {w : E} (hw : w ∈ (ℝ ∙ v)
Real.norm_eq_abs, hv]
ring
#align stereo_inv_fun_aux_mem stereoInvFunAux_mem
+-/
+#print hasFDerivAt_stereoInvFunAux /-
theorem hasFDerivAt_stereoInvFunAux (v : E) :
HasFDerivAt (stereoInvFunAux v) (ContinuousLinearMap.id ℝ E) 0 :=
by
@@ -172,7 +187,9 @@ theorem hasFDerivAt_stereoInvFunAux (v : E) :
ext w
simp
#align has_fderiv_at_stereo_inv_fun_aux hasFDerivAt_stereoInvFunAux
+-/
+#print hasFDerivAt_stereoInvFunAux_comp_coe /-
theorem hasFDerivAt_stereoInvFunAux_comp_coe (v : E) :
HasFDerivAt (stereoInvFunAux v ∘ (coe : (ℝ ∙ v)ᗮ → E)) (ℝ ∙ v)ᗮ.subtypeL 0 :=
by
@@ -180,7 +197,9 @@ theorem hasFDerivAt_stereoInvFunAux_comp_coe (v : E) :
hasFDerivAt_stereoInvFunAux v
convert this.comp (0 : (ℝ ∙ v)ᗮ) (by apply ContinuousLinearMap.hasFDerivAt)
#align has_fderiv_at_stereo_inv_fun_aux_comp_coe hasFDerivAt_stereoInvFunAux_comp_coe
+-/
+#print contDiff_stereoInvFunAux /-
theorem contDiff_stereoInvFunAux : ContDiff ℝ ⊤ (stereoInvFunAux v) :=
by
have h₀ : ContDiff ℝ ⊤ fun w : E => ‖w‖ ^ 2 := contDiff_norm_sq ℝ
@@ -195,19 +214,25 @@ theorem contDiff_stereoInvFunAux : ContDiff ℝ ⊤ (stereoInvFunAux v) :=
refine' (h₀.sub contDiff_const).smul contDiff_const
exact h₁.smul h₂
#align cont_diff_stereo_inv_fun_aux contDiff_stereoInvFunAux
+-/
+#print stereoInvFun /-
/-- Stereographic projection, reverse direction. This is a map from the orthogonal complement of a
unit vector `v` in an inner product space `E` to the unit sphere in `E`. -/
def stereoInvFun (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : sphere (0 : E) 1 :=
⟨stereoInvFunAux v (w : E), stereoInvFunAux_mem hv w.2⟩
#align stereo_inv_fun stereoInvFun
+-/
+#print stereoInvFun_apply /-
@[simp]
theorem stereoInvFun_apply (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) :
(stereoInvFun hv w : E) = (‖w‖ ^ 2 + 4)⁻¹ • ((4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) :=
rfl
#align stereo_inv_fun_apply stereoInvFun_apply
+-/
+#print stereoInvFun_ne_north_pole /-
theorem stereoInvFun_ne_north_pole (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) :
stereoInvFun hv w ≠ (⟨v, by simp [hv]⟩ : sphere (0 : E) 1) :=
by
@@ -223,13 +248,17 @@ theorem stereoInvFun_ne_north_pole (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) :
hv] using hw'
· simpa using stereoInvFunAux_mem hv w.2
#align stereo_inv_fun_ne_north_pole stereoInvFun_ne_north_pole
+-/
+#print continuous_stereoInvFun /-
theorem continuous_stereoInvFun (hv : ‖v‖ = 1) : Continuous (stereoInvFun hv) :=
continuous_induced_rng.2 (contDiff_stereoInvFunAux.Continuous.comp continuous_subtype_val)
#align continuous_stereo_inv_fun continuous_stereoInvFun
+-/
variable [CompleteSpace E]
+#print stereo_left_inv /-
theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E) ≠ v) :
stereoInvFun hv (stereoToFun v x) = x := by
ext
@@ -239,7 +268,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
set y := orthogonalProjection (ℝ ∙ v)ᗮ x
have split : ↑x = a • v + ↑y :=
by
- convert eq_sum_orthogonalProjection_self_orthogonalComplement (ℝ ∙ v) x
+ convert orthogonalProjection_add_orthogonalProjection_orthogonal (ℝ ∙ v) x
exact (orthogonalProjection_unit_singleton ℝ hv x).symm
have hvy : ⟪v, y⟫_ℝ = 0 := submodule.mem_orthogonal_singleton_iff_inner_right.mp y.2
have pythag : 1 = a ^ 2 + ‖y‖ ^ 2 :=
@@ -282,7 +311,9 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
mul_pow, Real.norm_eq_abs, sq_abs, norm_smul]
· simp [split, add_comm]
#align stereo_left_inv stereo_left_inv
+-/
+#print stereo_right_inv /-
theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v (stereoInvFun hv w) = w :=
by
have : 2 / (1 - (‖(w : E)‖ ^ 2 + 4)⁻¹ * (‖(w : E)‖ ^ 2 - 4)) * (‖(w : E)‖ ^ 2 + 4)⁻¹ * 4 = 1 :=
@@ -300,7 +331,9 @@ theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v
simp [h₁, h₂, h₃, h₄, ContinuousLinearMap.map_add, ContinuousLinearMap.map_smul, mul_smul]
· simp
#align stereo_right_inv stereo_right_inv
+-/
+#print stereographic /-
/-- Stereographic projection from the unit sphere in `E`, centred at a unit vector `v` in `E`; this
is the version as a local homeomorphism. -/
def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ ∙ v)ᗮ
@@ -320,28 +353,38 @@ def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ
h ∘ Subtype.ext ∘ Eq.symm ∘ (inner_eq_one_iff_of_norm_one hv (by simp)).mp
continuous_invFun := (continuous_stereoInvFun hv).ContinuousOn
#align stereographic stereographic
+-/
+#print stereographic_apply /-
theorem stereographic_apply (hv : ‖v‖ = 1) (x : sphere (0 : E) 1) :
stereographic hv x = (2 / ((1 : ℝ) - inner v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x :=
rfl
#align stereographic_apply stereographic_apply
+-/
+#print stereographic_source /-
@[simp]
theorem stereographic_source (hv : ‖v‖ = 1) : (stereographic hv).source = {⟨v, by simp [hv]⟩}ᶜ :=
rfl
#align stereographic_source stereographic_source
+-/
+#print stereographic_target /-
@[simp]
theorem stereographic_target (hv : ‖v‖ = 1) : (stereographic hv).target = Set.univ :=
rfl
#align stereographic_target stereographic_target
+-/
+#print stereographic_apply_neg /-
@[simp]
theorem stereographic_apply_neg (v : sphere (0 : E) 1) :
stereographic (norm_eq_of_mem_sphere v) (-v) = 0 := by
simp [stereographic_apply, orthogonalProjection_orthogonalComplement_singleton_eq_zero]
#align stereographic_apply_neg stereographic_apply_neg
+-/
+#print stereographic_neg_apply /-
@[simp]
theorem stereographic_neg_apply (v : sphere (0 : E) 1) :
stereographic (norm_eq_of_mem_sphere (-v)) v = 0 :=
@@ -350,6 +393,7 @@ theorem stereographic_neg_apply (v : sphere (0 : E) 1) :
ext1
simp
#align stereographic_neg_apply stereographic_neg_apply
+-/
end StereographicProjection
@@ -374,6 +418,7 @@ orthogonalization, but in the finite-dimensional case it follows more easily by
-/
+#print stereographic' /-
/-- Variant of the stereographic projection, for the sphere in an `n + 1`-dimensional inner product
space `E`. This version has codomain the Euclidean space of dimension `n`, and is obtained by
composing the original sterographic projection (`stereographic`) with an arbitrary linear isometry
@@ -384,16 +429,21 @@ def stereographic' (n : ℕ) [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E)
(OrthonormalBasis.fromOrthogonalSpanSingleton n
(ne_zero_of_mem_unit_sphere v)).repr.toHomeomorph.toLocalHomeomorph
#align stereographic' stereographic'
+-/
+#print stereographic'_source /-
@[simp]
theorem stereographic'_source {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
(stereographic' n v).source = {v}ᶜ := by simp [stereographic']
#align stereographic'_source stereographic'_source
+-/
+#print stereographic'_target /-
@[simp]
theorem stereographic'_target {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
(stereographic' n v).target = Set.univ := by simp [stereographic']
#align stereographic'_target stereographic'_target
+-/
/-- The unit sphere in an `n + 1`-dimensional inner product space `E` is a charted space
modelled on the Euclidean space of dimension `n`. -/
@@ -409,10 +459,13 @@ end ChartedSpace
section SmoothManifold
+#print sphere_ext_iff /-
theorem sphere_ext_iff (u v : sphere (0 : E) 1) : u = v ↔ ⟪(u : E), v⟫_ℝ = 1 := by
simp [Subtype.ext_iff, inner_eq_one_iff_of_norm_one]
#align sphere_ext_iff sphere_ext_iff
+-/
+#print stereographic'_symm_apply /-
theorem stereographic'_symm_apply {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1)
(x : EuclideanSpace ℝ (Fin n)) :
((stereographic' n v).symm x : E) =
@@ -422,6 +475,7 @@ theorem stereographic'_symm_apply {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v :
(‖(U.symm x : E)‖ ^ 2 + 4)⁻¹ • (‖(U.symm x : E)‖ ^ 2 - 4) • v :=
by simp [real_inner_comm, stereographic, stereographic', ← Submodule.coe_norm]
#align stereographic'_symm_apply stereographic'_symm_apply
+-/
/-! ### Smooth manifold structure on the sphere -/
@@ -463,6 +517,7 @@ instance {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
innerSL_apply, Ne.def, sphere_ext_iff, real_inner_comm (v' : E)]
rfl)
+#print contMDiff_coe_sphere /-
/-- The inclusion map (i.e., `coe`) from the sphere in `E` to `E` is smooth. -/
theorem contMDiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
ContMDiff (𝓡 n) 𝓘(ℝ, E) ∞ (coe : sphere (0 : E) 1 → E) :=
@@ -479,6 +534,7 @@ theorem contMDiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
((cont_diff_stereo_inv_fun_aux.comp (ℝ ∙ (-v : E))ᗮ.subtypeL.ContDiff).comp
U.symm.cont_diff).ContDiffOn
#align cont_mdiff_coe_sphere contMDiff_coe_sphere
+-/
variable {F : Type _} [NormedAddCommGroup F] [NormedSpace ℝ F]
@@ -486,6 +542,7 @@ variable {H : Type _} [TopologicalSpace H] {I : ModelWithCorners ℝ F H}
variable {M : Type _} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
+#print ContMDiff.codRestrict_sphere /-
/-- If a `cont_mdiff` function `f : M → E`, where `M` is some manifold, takes values in the
sphere, then it restricts to a `cont_mdiff` function from `M` to the sphere. -/
theorem ContMDiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m : ℕ∞} {f : M → E}
@@ -512,7 +569,9 @@ theorem ContMDiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
dsimp [chart_at]
simp [not_iff_not, Subtype.ext_iff, hfxv, real_inner_comm]
#align cont_mdiff.cod_restrict_sphere ContMDiff.codRestrict_sphere
+-/
+#print contMDiff_neg_sphere /-
/-- The antipodal map is smooth. -/
theorem contMDiff_neg_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
ContMDiff (𝓡 n) (𝓡 n) ∞ fun x : sphere (0 : E) 1 => -x :=
@@ -522,7 +581,9 @@ theorem contMDiff_neg_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
apply cont_diff_neg.cont_mdiff.comp _
exact contMDiff_coe_sphere
#align cont_mdiff_neg_sphere contMDiff_neg_sphere
+-/
+#print range_mfderiv_coe_sphere /-
/-- Consider the differential of the inclusion of the sphere in `E` at the point `v` as a continuous
linear map from `tangent_space (𝓡 n) v` to `E`. The range of this map is the orthogonal complement
of `v` in `E`.
@@ -562,7 +623,9 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
rw [Submodule.neg_mem_iff]
exact Submodule.mem_span_singleton_self v
#align range_mfderiv_coe_sphere range_mfderiv_coe_sphere
+-/
+#print mfderiv_coe_sphere_injective /-
/-- Consider the differential of the inclusion of the sphere in `E` at the point `v` as a continuous
linear map from `tangent_space (𝓡 n) v` to `E`. This map is injective. -/
theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
@@ -583,6 +646,7 @@ theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v
rw [(this.comp 0 U.symm.to_continuous_linear_equiv.has_fderiv_at).fderiv]
simpa using Subtype.coe_injective
#align mfderiv_coe_sphere_injective mfderiv_coe_sphere_injective
+-/
end SmoothManifold
@@ -620,10 +684,12 @@ instance : LieGroup (𝓡 1) circle
simp only [← coe_inv_circle, coe_inv_circle_eq_conj]
exact complex.conj_cle.cont_diff.cont_mdiff.comp contMDiff_coe_sphere
+#print contMDiff_expMapCircle /-
/-- The map `λ t, exp (t * I)` from `ℝ` to the unit circle in `ℂ` is smooth. -/
theorem contMDiff_expMapCircle : ContMDiff 𝓘(ℝ, ℝ) (𝓡 1) ∞ expMapCircle :=
(contDiff_exp.comp (contDiff_id.smul contDiff_const)).ContMDiff.codRestrict_sphere _
#align cont_mdiff_exp_map_circle contMDiff_expMapCircle
+-/
end circle
mathlib commit https://github.com/leanprover-community/mathlib/commit/fdc286cc6967a012f41b87f76dcd2797b53152af
@@ -534,7 +534,7 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
(mfderiv (𝓡 n) 𝓘(ℝ, E) (coe : sphere (0 : E) 1 → E) v : TangentSpace (𝓡 n) v →L[ℝ] E).range =
(ℝ ∙ (v : E))ᗮ :=
by
- rw [((contMDiff_coe_sphere v).MdifferentiableAt le_top).mfderiv]
+ rw [((contMDiff_coe_sphere v).MDifferentiableAt le_top).mfderiv]
simp only [chart_at, stereographic', stereographic_neg_apply, fderivWithin_univ,
LinearIsometryEquiv.toHomeomorph_symm, LinearIsometryEquiv.coe_toHomeomorph,
LinearIsometryEquiv.map_zero, mfld_simps]
@@ -568,7 +568,7 @@ linear map from `tangent_space (𝓡 n) v` to `E`. This map is injective. -/
theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
Injective (mfderiv (𝓡 n) 𝓘(ℝ, E) (coe : sphere (0 : E) 1 → E) v) :=
by
- rw [((contMDiff_coe_sphere v).MdifferentiableAt le_top).mfderiv]
+ rw [((contMDiff_coe_sphere v).MDifferentiableAt le_top).mfderiv]
simp only [chart_at, stereographic', stereographic_neg_apply, fderivWithin_univ,
LinearIsometryEquiv.toHomeomorph_symm, LinearIsometryEquiv.coe_toHomeomorph,
LinearIsometryEquiv.map_zero, mfld_simps]
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -464,10 +464,10 @@ instance {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
rfl)
/-- The inclusion map (i.e., `coe`) from the sphere in `E` to `E` is smooth. -/
-theorem contMdiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
- ContMdiff (𝓡 n) 𝓘(ℝ, E) ∞ (coe : sphere (0 : E) 1 → E) :=
+theorem contMDiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
+ ContMDiff (𝓡 n) 𝓘(ℝ, E) ∞ (coe : sphere (0 : E) 1 → E) :=
by
- rw [contMdiff_iff]
+ rw [contMDiff_iff]
constructor
· exact continuous_subtype_val
· intro v _
@@ -478,7 +478,7 @@ theorem contMdiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
exact
((cont_diff_stereo_inv_fun_aux.comp (ℝ ∙ (-v : E))ᗮ.subtypeL.ContDiff).comp
U.symm.cont_diff).ContDiffOn
-#align cont_mdiff_coe_sphere contMdiff_coe_sphere
+#align cont_mdiff_coe_sphere contMDiff_coe_sphere
variable {F : Type _} [NormedAddCommGroup F] [NormedSpace ℝ F]
@@ -488,11 +488,11 @@ variable {M : Type _} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWit
/-- If a `cont_mdiff` function `f : M → E`, where `M` is some manifold, takes values in the
sphere, then it restricts to a `cont_mdiff` function from `M` to the sphere. -/
-theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m : ℕ∞} {f : M → E}
- (hf : ContMdiff I 𝓘(ℝ, E) m f) (hf' : ∀ x, f x ∈ sphere (0 : E) 1) :
- ContMdiff I (𝓡 n) m (Set.codRestrict _ _ hf' : M → sphere (0 : E) 1) :=
+theorem ContMDiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m : ℕ∞} {f : M → E}
+ (hf : ContMDiff I 𝓘(ℝ, E) m f) (hf' : ∀ x, f x ∈ sphere (0 : E) 1) :
+ ContMDiff I (𝓡 n) m (Set.codRestrict _ _ hf' : M → sphere (0 : E) 1) :=
by
- rw [contMdiff_iff_target]
+ rw [contMDiff_iff_target]
refine' ⟨continuous_induced_rng.2 hf.continuous, _⟩
intro v
let U : _ ≃ₗᵢ[ℝ] _ :=
@@ -500,8 +500,8 @@ theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
OrthonormalBasis.fromOrthogonalSpanSingleton
n (ne_zero_of_mem_unit_sphere (-v))).repr
have h : ContDiffOn ℝ ⊤ _ Set.univ := U.cont_diff.cont_diff_on
- have H₁ := (h.comp' contDiffOn_stereoToFun).ContMdiffOn
- have H₂ : ContMdiffOn _ _ _ _ Set.univ := hf.cont_mdiff_on
+ have H₁ := (h.comp' contDiffOn_stereoToFun).ContMDiffOn
+ have H₂ : ContMDiffOn _ _ _ _ Set.univ := hf.cont_mdiff_on
convert (H₁.of_le le_top).comp' H₂ using 1
ext x
have hfxv : f x = -↑v ↔ ⟪f x, -↑v⟫_ℝ = 1 :=
@@ -511,17 +511,17 @@ theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
exact norm_eq_of_mem_sphere (-v)
dsimp [chart_at]
simp [not_iff_not, Subtype.ext_iff, hfxv, real_inner_comm]
-#align cont_mdiff.cod_restrict_sphere ContMdiff.codRestrict_sphere
+#align cont_mdiff.cod_restrict_sphere ContMDiff.codRestrict_sphere
/-- The antipodal map is smooth. -/
-theorem contMdiff_neg_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
- ContMdiff (𝓡 n) (𝓡 n) ∞ fun x : sphere (0 : E) 1 => -x :=
+theorem contMDiff_neg_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
+ ContMDiff (𝓡 n) (𝓡 n) ∞ fun x : sphere (0 : E) 1 => -x :=
by
-- this doesn't elaborate well in term mode
- apply ContMdiff.codRestrict_sphere
+ apply ContMDiff.codRestrict_sphere
apply cont_diff_neg.cont_mdiff.comp _
- exact contMdiff_coe_sphere
-#align cont_mdiff_neg_sphere contMdiff_neg_sphere
+ exact contMDiff_coe_sphere
+#align cont_mdiff_neg_sphere contMDiff_neg_sphere
/-- Consider the differential of the inclusion of the sphere in `E` at the point `v` as a continuous
linear map from `tangent_space (𝓡 n) v` to `E`. The range of this map is the orthogonal complement
@@ -534,7 +534,7 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
(mfderiv (𝓡 n) 𝓘(ℝ, E) (coe : sphere (0 : E) 1 → E) v : TangentSpace (𝓡 n) v →L[ℝ] E).range =
(ℝ ∙ (v : E))ᗮ :=
by
- rw [((contMdiff_coe_sphere v).MdifferentiableAt le_top).mfderiv]
+ rw [((contMDiff_coe_sphere v).MdifferentiableAt le_top).mfderiv]
simp only [chart_at, stereographic', stereographic_neg_apply, fderivWithin_univ,
LinearIsometryEquiv.toHomeomorph_symm, LinearIsometryEquiv.coe_toHomeomorph,
LinearIsometryEquiv.map_zero, mfld_simps]
@@ -568,7 +568,7 @@ linear map from `tangent_space (𝓡 n) v` to `E`. This map is injective. -/
theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
Injective (mfderiv (𝓡 n) 𝓘(ℝ, E) (coe : sphere (0 : E) 1 → E) v) :=
by
- rw [((contMdiff_coe_sphere v).MdifferentiableAt le_top).mfderiv]
+ rw [((contMDiff_coe_sphere v).MdifferentiableAt le_top).mfderiv]
simp only [chart_at, stereographic', stereographic_neg_apply, fderivWithin_univ,
LinearIsometryEquiv.toHomeomorph_symm, LinearIsometryEquiv.coe_toHomeomorph,
LinearIsometryEquiv.map_zero, mfld_simps]
@@ -604,26 +604,26 @@ instance : SmoothManifoldWithCorners (𝓡 1) circle :=
instance : LieGroup (𝓡 1) circle
where
smooth_mul := by
- apply ContMdiff.codRestrict_sphere
+ apply ContMDiff.codRestrict_sphere
let c : circle → ℂ := coe
- have h₂ : ContMdiff (𝓘(ℝ, ℂ).Prod 𝓘(ℝ, ℂ)) 𝓘(ℝ, ℂ) ∞ fun z : ℂ × ℂ => z.fst * z.snd :=
+ have h₂ : ContMDiff (𝓘(ℝ, ℂ).Prod 𝓘(ℝ, ℂ)) 𝓘(ℝ, ℂ) ∞ fun z : ℂ × ℂ => z.fst * z.snd :=
by
- rw [contMdiff_iff]
+ rw [contMDiff_iff]
exact ⟨continuous_mul, fun x y => cont_diff_mul.cont_diff_on⟩
- suffices h₁ : ContMdiff _ _ _ (Prod.map c c)
+ suffices h₁ : ContMDiff _ _ _ (Prod.map c c)
· apply h₂.comp h₁
-- this elaborates much faster with `apply`
- apply ContMdiff.prod_map <;>
- exact contMdiff_coe_sphere
+ apply ContMDiff.prod_map <;>
+ exact contMDiff_coe_sphere
smooth_inv := by
- apply ContMdiff.codRestrict_sphere
+ apply ContMDiff.codRestrict_sphere
simp only [← coe_inv_circle, coe_inv_circle_eq_conj]
- exact complex.conj_cle.cont_diff.cont_mdiff.comp contMdiff_coe_sphere
+ exact complex.conj_cle.cont_diff.cont_mdiff.comp contMDiff_coe_sphere
/-- The map `λ t, exp (t * I)` from `ℝ` to the unit circle in `ℂ` is smooth. -/
-theorem contMdiff_expMapCircle : ContMdiff 𝓘(ℝ, ℝ) (𝓡 1) ∞ expMapCircle :=
- (contDiff_exp.comp (contDiff_id.smul contDiff_const)).ContMdiff.codRestrict_sphere _
-#align cont_mdiff_exp_map_circle contMdiff_expMapCircle
+theorem contMDiff_expMapCircle : ContMDiff 𝓘(ℝ, ℝ) (𝓡 1) ∞ expMapCircle :=
+ (contDiff_exp.comp (contDiff_id.smul contDiff_const)).ContMDiff.codRestrict_sphere _
+#align cont_mdiff_exp_map_circle contMDiff_expMapCircle
end circle
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
+! leanprover-community/mathlib commit 0dc4079202c28226b2841a51eb6d3cc2135bb80f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,7 @@ import Mathbin.Analysis.InnerProductSpace.Calculus
import Mathbin.Analysis.InnerProductSpace.PiL2
import Mathbin.Geometry.Manifold.Algebra.LieGroup
import Mathbin.Geometry.Manifold.Instances.Real
+import Mathbin.Geometry.Manifold.ContMdiffMfderiv
/-!
# Manifold structure on the sphere
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -96,7 +96,7 @@ theorem stereoToFun_apply [CompleteSpace E] (x : E) :
#align stereo_to_fun_apply stereoToFun_apply
theorem contDiffOn_stereoToFun [CompleteSpace E] :
- ContDiffOn ℝ ⊤ (stereoToFun v) { x : E | innerSL _ v x ≠ (1 : ℝ) } :=
+ ContDiffOn ℝ ⊤ (stereoToFun v) {x : E | innerSL _ v x ≠ (1 : ℝ)} :=
by
refine' ContDiffOn.smul _ (orthogonalProjection (ℝ ∙ v)ᗮ).ContDiff.ContDiffOn
refine' cont_diff_const.cont_diff_on.div _ _
@@ -106,7 +106,7 @@ theorem contDiffOn_stereoToFun [CompleteSpace E] :
#align cont_diff_on_stereo_to_fun contDiffOn_stereoToFun
theorem continuousOn_stereoToFun [CompleteSpace E] :
- ContinuousOn (stereoToFun v) { x : E | innerSL _ v x ≠ (1 : ℝ) } :=
+ ContinuousOn (stereoToFun v) {x : E | innerSL _ v x ≠ (1 : ℝ)} :=
(@contDiffOn_stereoToFun E _ _ v _).ContinuousOn
#align continuous_on_stereo_to_fun continuousOn_stereoToFun
@@ -154,15 +154,16 @@ theorem hasFDerivAt_stereoInvFunAux (v : E) :
by
have h₀ : HasFDerivAt (fun w : E => ‖w‖ ^ 2) (0 : E →L[ℝ] ℝ) 0 :=
by
- convert(hasStrictFDerivAt_norm_sq _).HasFDerivAt
+ convert (hasStrictFDerivAt_norm_sq _).HasFDerivAt
simp
have h₁ : HasFDerivAt (fun w : E => (‖w‖ ^ 2 + 4)⁻¹) (0 : E →L[ℝ] ℝ) 0 := by
- convert(hasFDerivAt_inv _).comp _ (h₀.add (hasFDerivAt_const 4 0)) <;> simp
+ convert (hasFDerivAt_inv _).comp _ (h₀.add (hasFDerivAt_const 4 0)) <;> simp
have h₂ :
HasFDerivAt (fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) ((4 : ℝ) • ContinuousLinearMap.id ℝ E)
0 :=
by
- convert((hasFDerivAt_const (4 : ℝ) 0).smul (hasFDerivAt_id 0)).add
+ convert
+ ((hasFDerivAt_const (4 : ℝ) 0).smul (hasFDerivAt_id 0)).add
((h₀.sub (hasFDerivAt_const (4 : ℝ) 0)).smul (hasFDerivAt_const v 0))
ext w
simp
@@ -273,9 +274,8 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
nlinarith
ring
-- deduce the result
- convert congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁)
- (congr_arg (fun t => t • v) h₂) using
- 1
+ convert
+ congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁) (congr_arg (fun t => t • v) h₂) using 1
·
simp [inner_add_right, inner_smul_right, hvy, real_inner_self_eq_norm_mul_norm, hv, mul_smul,
mul_pow, Real.norm_eq_abs, sq_abs, norm_smul]
@@ -399,7 +399,7 @@ modelled on the Euclidean space of dimension `n`. -/
instance {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
ChartedSpace (EuclideanSpace ℝ (Fin n)) (sphere (0 : E) 1)
where
- atlas := { f | ∃ v : sphere (0 : E) 1, f = stereographic' n v }
+ atlas := {f | ∃ v : sphere (0 : E) 1, f = stereographic' n v}
chartAt v := stereographic' n (-v)
mem_chart_source v := by simpa using ne_neg_of_mem_unit_sphere ℝ v
chart_mem_atlas v := ⟨-v, rfl⟩
@@ -501,7 +501,7 @@ theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
have h : ContDiffOn ℝ ⊤ _ Set.univ := U.cont_diff.cont_diff_on
have H₁ := (h.comp' contDiffOn_stereoToFun).ContMdiffOn
have H₂ : ContMdiffOn _ _ _ _ Set.univ := hf.cont_mdiff_on
- convert(H₁.of_le le_top).comp' H₂ using 1
+ convert (H₁.of_le le_top).comp' H₂ using 1
ext x
have hfxv : f x = -↑v ↔ ⟪f x, -↑v⟫_ℝ = 1 :=
by
@@ -546,7 +546,8 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
convert hasFDerivAt_stereoInvFunAux_comp_coe (-v : E)
simp
rw [(this.comp 0 U.symm.to_continuous_linear_equiv.has_fderiv_at).fderiv]
- convert(U.symm : EuclideanSpace ℝ (Fin n) ≃ₗᵢ[ℝ] (ℝ ∙ (↑(-v) : E))ᗮ).range_comp
+ convert
+ (U.symm : EuclideanSpace ℝ (Fin n) ≃ₗᵢ[ℝ] (ℝ ∙ (↑(-v) : E))ᗮ).range_comp
(ℝ ∙ (↑(-v) : E))ᗮ.Subtype using
1
simp only [Submodule.range_subtype, coe_neg_sphere]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -143,7 +143,7 @@ theorem stereoInvFunAux_mem (hv : ‖v‖ = 1) {w : E} (hw : w ∈ (ℝ ∙ v)
by
have h₃ : 0 ≤ ‖stereoInvFunAux v w‖ := norm_nonneg _
simpa [h₁, h₃, -one_pow] using this
- rw [Submodule.mem_orthogonal_singleton_iff_inner_left] at hw
+ rw [Submodule.mem_orthogonal_singleton_iff_inner_left] at hw
simp [norm_add_sq_real, norm_smul, inner_smul_left, inner_smul_right, hw, mul_pow,
Real.norm_eq_abs, hv]
ring
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -68,7 +68,7 @@ noncomputable section
open Metric FiniteDimensional Function
-open Manifold
+open scoped Manifold
attribute [local instance] fact_finite_dimensional_of_finrank_eq_succ
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
+! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
+import Mathbin.Analysis.Calculus.Deriv.Inv
import Mathbin.Analysis.NormedSpace.BallAction
import Mathbin.Analysis.SpecialFunctions.ExpDeriv
import Mathbin.Analysis.InnerProductSpace.Calculus
@@ -236,7 +237,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
set y := orthogonalProjection (ℝ ∙ v)ᗮ x
have split : ↑x = a • v + ↑y :=
by
- convert eq_sum_orthogonalProjection_self_orthogonal_complement (ℝ ∙ v) x
+ convert eq_sum_orthogonalProjection_self_orthogonalComplement (ℝ ∙ v) x
exact (orthogonalProjection_unit_singleton ℝ hv x).symm
have hvy : ⟪v, y⟫_ℝ = 0 := submodule.mem_orthogonal_singleton_iff_inner_right.mp y.2
have pythag : 1 = a ^ 2 + ‖y‖ ^ 2 :=
@@ -291,7 +292,7 @@ theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v
ring
convert congr_arg (fun c => c • w) this
· have h₁ : orthogonalProjection (ℝ ∙ v)ᗮ v = 0 :=
- orthogonalProjection_orthogonal_complement_singleton_eq_zero v
+ orthogonalProjection_orthogonalComplement_singleton_eq_zero v
have h₂ : orthogonalProjection (ℝ ∙ v)ᗮ w = w := orthogonalProjection_mem_subspace_eq_self w
have h₃ : innerSL _ v w = (0 : ℝ) := submodule.mem_orthogonal_singleton_iff_inner_right.mp w.2
have h₄ : innerSL _ v v = (1 : ℝ) := by simp [real_inner_self_eq_norm_mul_norm, hv]
@@ -337,7 +338,7 @@ theorem stereographic_target (hv : ‖v‖ = 1) : (stereographic hv).target = Se
@[simp]
theorem stereographic_apply_neg (v : sphere (0 : E) 1) :
stereographic (norm_eq_of_mem_sphere v) (-v) = 0 := by
- simp [stereographic_apply, orthogonalProjection_orthogonal_complement_singleton_eq_zero]
+ simp [stereographic_apply, orthogonalProjection_orthogonalComplement_singleton_eq_zero]
#align stereographic_apply_neg stereographic_apply_neg
@[simp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/33c67ae661dd8988516ff7f247b0be3018cdd952
@@ -148,35 +148,35 @@ theorem stereoInvFunAux_mem (hv : ‖v‖ = 1) {w : E} (hw : w ∈ (ℝ ∙ v)
ring
#align stereo_inv_fun_aux_mem stereoInvFunAux_mem
-theorem hasFderivAt_stereoInvFunAux (v : E) :
- HasFderivAt (stereoInvFunAux v) (ContinuousLinearMap.id ℝ E) 0 :=
+theorem hasFDerivAt_stereoInvFunAux (v : E) :
+ HasFDerivAt (stereoInvFunAux v) (ContinuousLinearMap.id ℝ E) 0 :=
by
- have h₀ : HasFderivAt (fun w : E => ‖w‖ ^ 2) (0 : E →L[ℝ] ℝ) 0 :=
+ have h₀ : HasFDerivAt (fun w : E => ‖w‖ ^ 2) (0 : E →L[ℝ] ℝ) 0 :=
by
- convert(hasStrictFderivAt_norm_sq _).HasFderivAt
+ convert(hasStrictFDerivAt_norm_sq _).HasFDerivAt
simp
- have h₁ : HasFderivAt (fun w : E => (‖w‖ ^ 2 + 4)⁻¹) (0 : E →L[ℝ] ℝ) 0 := by
- convert(hasFderivAt_inv _).comp _ (h₀.add (hasFderivAt_const 4 0)) <;> simp
+ have h₁ : HasFDerivAt (fun w : E => (‖w‖ ^ 2 + 4)⁻¹) (0 : E →L[ℝ] ℝ) 0 := by
+ convert(hasFDerivAt_inv _).comp _ (h₀.add (hasFDerivAt_const 4 0)) <;> simp
have h₂ :
- HasFderivAt (fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) ((4 : ℝ) • ContinuousLinearMap.id ℝ E)
+ HasFDerivAt (fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) ((4 : ℝ) • ContinuousLinearMap.id ℝ E)
0 :=
by
- convert((hasFderivAt_const (4 : ℝ) 0).smul (hasFderivAt_id 0)).add
- ((h₀.sub (hasFderivAt_const (4 : ℝ) 0)).smul (hasFderivAt_const v 0))
+ convert((hasFDerivAt_const (4 : ℝ) 0).smul (hasFDerivAt_id 0)).add
+ ((h₀.sub (hasFDerivAt_const (4 : ℝ) 0)).smul (hasFDerivAt_const v 0))
ext w
simp
convert h₁.smul h₂
ext w
simp
-#align has_fderiv_at_stereo_inv_fun_aux hasFderivAt_stereoInvFunAux
+#align has_fderiv_at_stereo_inv_fun_aux hasFDerivAt_stereoInvFunAux
-theorem hasFderivAt_stereoInvFunAux_comp_coe (v : E) :
- HasFderivAt (stereoInvFunAux v ∘ (coe : (ℝ ∙ v)ᗮ → E)) (ℝ ∙ v)ᗮ.subtypeL 0 :=
+theorem hasFDerivAt_stereoInvFunAux_comp_coe (v : E) :
+ HasFDerivAt (stereoInvFunAux v ∘ (coe : (ℝ ∙ v)ᗮ → E)) (ℝ ∙ v)ᗮ.subtypeL 0 :=
by
- have : HasFderivAt (stereoInvFunAux v) (ContinuousLinearMap.id ℝ E) ((ℝ ∙ v)ᗮ.subtypeL 0) :=
- hasFderivAt_stereoInvFunAux v
- convert this.comp (0 : (ℝ ∙ v)ᗮ) (by apply ContinuousLinearMap.hasFderivAt)
-#align has_fderiv_at_stereo_inv_fun_aux_comp_coe hasFderivAt_stereoInvFunAux_comp_coe
+ have : HasFDerivAt (stereoInvFunAux v) (ContinuousLinearMap.id ℝ E) ((ℝ ∙ v)ᗮ.subtypeL 0) :=
+ hasFDerivAt_stereoInvFunAux v
+ convert this.comp (0 : (ℝ ∙ v)ᗮ) (by apply ContinuousLinearMap.hasFDerivAt)
+#align has_fderiv_at_stereo_inv_fun_aux_comp_coe hasFDerivAt_stereoInvFunAux_comp_coe
theorem contDiff_stereoInvFunAux : ContDiff ℝ ⊤ (stereoInvFunAux v) :=
by
@@ -539,10 +539,10 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
let U := (OrthonormalBasis.fromOrthogonalSpanSingleton n (ne_zero_of_mem_unit_sphere (-v))).repr
change (fderiv ℝ ((stereoInvFunAux (-v : E) ∘ coe) ∘ U.symm) 0).range = (ℝ ∙ (v : E))ᗮ
have :
- HasFderivAt (stereoInvFunAux (-v : E) ∘ (coe : (ℝ ∙ (↑(-v) : E))ᗮ → E))
+ HasFDerivAt (stereoInvFunAux (-v : E) ∘ (coe : (ℝ ∙ (↑(-v) : E))ᗮ → E))
(ℝ ∙ (↑(-v) : E))ᗮ.subtypeL (U.symm 0) :=
by
- convert hasFderivAt_stereoInvFunAux_comp_coe (-v : E)
+ convert hasFDerivAt_stereoInvFunAux_comp_coe (-v : E)
simp
rw [(this.comp 0 U.symm.to_continuous_linear_equiv.has_fderiv_at).fderiv]
convert(U.symm : EuclideanSpace ℝ (Fin n) ≃ₗᵢ[ℝ] (ℝ ∙ (↑(-v) : E))ᗮ).range_comp
@@ -572,10 +572,10 @@ theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v
let U := (OrthonormalBasis.fromOrthogonalSpanSingleton n (ne_zero_of_mem_unit_sphere (-v))).repr
change injective (fderiv ℝ ((stereoInvFunAux (-v : E) ∘ coe) ∘ U.symm) 0)
have :
- HasFderivAt (stereoInvFunAux (-v : E) ∘ (coe : (ℝ ∙ (↑(-v) : E))ᗮ → E))
+ HasFDerivAt (stereoInvFunAux (-v : E) ∘ (coe : (ℝ ∙ (↑(-v) : E))ᗮ → E))
(ℝ ∙ (↑(-v) : E))ᗮ.subtypeL (U.symm 0) :=
by
- convert hasFderivAt_stereoInvFunAux_comp_coe (-v : E)
+ convert hasFDerivAt_stereoInvFunAux_comp_coe (-v : E)
simp
rw [(this.comp 0 U.symm.to_continuous_linear_equiv.has_fderiv_at).fderiv]
simpa using Subtype.coe_injective
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -4,12 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 07992a1d1f7a4176c6d3f160209608be4e198566
+! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
-import Mathbin.Analysis.Complex.Circle
import Mathbin.Analysis.NormedSpace.BallAction
+import Mathbin.Analysis.SpecialFunctions.ExpDeriv
import Mathbin.Analysis.InnerProductSpace.Calculus
import Mathbin.Analysis.InnerProductSpace.PiL2
import Mathbin.Geometry.Manifold.Algebra.LieGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/738054fa93d43512da144ec45ce799d18fd44248
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
+! leanprover-community/mathlib commit 07992a1d1f7a4176c6d3f160209608be4e198566
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -315,7 +315,7 @@ def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ
open_target := isOpen_univ
continuous_toFun :=
continuousOn_stereoToFun.comp continuous_subtype_val.ContinuousOn fun w h =>
- h ∘ Subtype.ext ∘ Eq.symm ∘ (inner_eq_norm_mul_iff_of_norm_one hv (by simp)).mp
+ h ∘ Subtype.ext ∘ Eq.symm ∘ (inner_eq_one_iff_of_norm_one hv (by simp)).mp
continuous_invFun := (continuous_stereoInvFun hv).ContinuousOn
#align stereographic stereographic
@@ -408,7 +408,7 @@ end ChartedSpace
section SmoothManifold
theorem sphere_ext_iff (u v : sphere (0 : E) 1) : u = v ↔ ⟪(u : E), v⟫_ℝ = 1 := by
- simp [Subtype.ext_iff, inner_eq_norm_mul_iff_of_norm_one]
+ simp [Subtype.ext_iff, inner_eq_one_iff_of_norm_one]
#align sphere_ext_iff sphere_ext_iff
theorem stereographic'_symm_apply {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1)
@@ -505,7 +505,7 @@ theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
have hfxv : f x = -↑v ↔ ⟪f x, -↑v⟫_ℝ = 1 :=
by
have hfx : ‖f x‖ = 1 := by simpa using hf' x
- rw [inner_eq_norm_mul_iff_of_norm_one hfx]
+ rw [inner_eq_one_iff_of_norm_one hfx]
exact norm_eq_of_mem_sphere (-v)
dsimp [chart_at]
simp [not_iff_not, Subtype.ext_iff, hfxv, real_inner_comm]
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit c78cad350eb321c81e1eacf68d14e3d3ba1e17f7
+! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -61,7 +61,7 @@ naive expression `euclidean_space ℝ (fin (finrank ℝ E - 1))` for the model s
-/
-variable {E : Type _} [InnerProductSpace ℝ E]
+variable {E : Type _} [NormedAddCommGroup E] [InnerProductSpace ℝ E]
noncomputable section
@@ -106,7 +106,7 @@ theorem contDiffOn_stereoToFun [CompleteSpace E] :
theorem continuousOn_stereoToFun [CompleteSpace E] :
ContinuousOn (stereoToFun v) { x : E | innerSL _ v x ≠ (1 : ℝ) } :=
- (@contDiffOn_stereoToFun E _ v _).ContinuousOn
+ (@contDiffOn_stereoToFun E _ _ v _).ContinuousOn
#align continuous_on_stereo_to_fun continuousOn_stereoToFun
variable (v)
@@ -180,7 +180,7 @@ theorem hasFderivAt_stereoInvFunAux_comp_coe (v : E) :
theorem contDiff_stereoInvFunAux : ContDiff ℝ ⊤ (stereoInvFunAux v) :=
by
- have h₀ : ContDiff ℝ ⊤ fun w : E => ‖w‖ ^ 2 := contDiff_norm_sq
+ have h₀ : ContDiff ℝ ⊤ fun w : E => ‖w‖ ^ 2 := contDiff_norm_sq ℝ
have h₁ : ContDiff ℝ ⊤ fun w : E => (‖w‖ ^ 2 + 4)⁻¹ :=
by
refine' (h₀.add contDiff_const).inv _
@@ -469,8 +469,8 @@ theorem contMdiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
constructor
· exact continuous_subtype_val
· intro v _
- let U :=
- (-- Again, removing type ascription...
+ let U : _ ≃ₗᵢ[ℝ] _ :=
+ (-- Again, partially removing type ascription...
OrthonormalBasis.fromOrthogonalSpanSingleton
n (ne_zero_of_mem_unit_sphere (-v))).repr
exact
@@ -493,8 +493,8 @@ theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
rw [contMdiff_iff_target]
refine' ⟨continuous_induced_rng.2 hf.continuous, _⟩
intro v
- let U :=
- (-- Again, removing type ascription... Weird that this helps!
+ let U : _ ≃ₗᵢ[ℝ] _ :=
+ (-- Again, partially removing type ascription... Weird that this helps!
OrthonormalBasis.fromOrthogonalSpanSingleton
n (ne_zero_of_mem_unit_sphere (-v))).repr
have h : ContDiffOn ℝ ⊤ _ Set.univ := U.cont_diff.cont_diff_on
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ec294687917cbc5c73620b4414ae9b5dd9ae1b4
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 29d5700b0872ffc82431073f46c5b1092f74151c
+! leanprover-community/mathlib commit c78cad350eb321c81e1eacf68d14e3d3ba1e17f7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -83,29 +83,29 @@ the orthogonal complement of an element `v` of `E`. It is smooth away from the a
through `v` parallel to the orthogonal complement. It restricts on the sphere to the stereographic
projection. -/
def stereoToFun [CompleteSpace E] (x : E) : (ℝ ∙ v)ᗮ :=
- (2 / ((1 : ℝ) - innerSL v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x
+ (2 / ((1 : ℝ) - innerSL _ v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x
#align stereo_to_fun stereoToFun
variable {v}
@[simp]
theorem stereoToFun_apply [CompleteSpace E] (x : E) :
- stereoToFun v x = (2 / ((1 : ℝ) - innerSL v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x :=
+ stereoToFun v x = (2 / ((1 : ℝ) - innerSL _ v x)) • orthogonalProjection (ℝ ∙ v)ᗮ x :=
rfl
#align stereo_to_fun_apply stereoToFun_apply
theorem contDiffOn_stereoToFun [CompleteSpace E] :
- ContDiffOn ℝ ⊤ (stereoToFun v) { x : E | innerSL v x ≠ (1 : ℝ) } :=
+ ContDiffOn ℝ ⊤ (stereoToFun v) { x : E | innerSL _ v x ≠ (1 : ℝ) } :=
by
refine' ContDiffOn.smul _ (orthogonalProjection (ℝ ∙ v)ᗮ).ContDiff.ContDiffOn
refine' cont_diff_const.cont_diff_on.div _ _
- · exact (cont_diff_const.sub (innerSL v : E →L[ℝ] ℝ).ContDiff).ContDiffOn
+ · exact (cont_diff_const.sub (innerSL ℝ v).ContDiff).ContDiffOn
· intro x h h'
exact h (sub_eq_zero.mp h').symm
#align cont_diff_on_stereo_to_fun contDiffOn_stereoToFun
theorem continuousOn_stereoToFun [CompleteSpace E] :
- ContinuousOn (stereoToFun v) { x : E | innerSL v x ≠ (1 : ℝ) } :=
+ ContinuousOn (stereoToFun v) { x : E | innerSL _ v x ≠ (1 : ℝ) } :=
(@contDiffOn_stereoToFun E _ v _).ContinuousOn
#align continuous_on_stereo_to_fun continuousOn_stereoToFun
@@ -232,7 +232,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
ext
simp only [stereoToFun_apply, stereoInvFun_apply, smul_add]
-- name two frequently-occuring quantities and write down their basic properties
- set a : ℝ := innerSL v x
+ set a : ℝ := innerSL _ v x
set y := orthogonalProjection (ℝ ∙ v)ᗮ x
have split : ↑x = a • v + ↑y :=
by
@@ -293,8 +293,8 @@ theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v
· have h₁ : orthogonalProjection (ℝ ∙ v)ᗮ v = 0 :=
orthogonalProjection_orthogonal_complement_singleton_eq_zero v
have h₂ : orthogonalProjection (ℝ ∙ v)ᗮ w = w := orthogonalProjection_mem_subspace_eq_self w
- have h₃ : innerSL v w = (0 : ℝ) := submodule.mem_orthogonal_singleton_iff_inner_right.mp w.2
- have h₄ : innerSL v v = (1 : ℝ) := by simp [real_inner_self_eq_norm_mul_norm, hv]
+ have h₃ : innerSL _ v w = (0 : ℝ) := submodule.mem_orthogonal_singleton_iff_inner_right.mp w.2
+ have h₄ : innerSL _ v v = (1 : ℝ) := by simp [real_inner_self_eq_norm_mul_norm, hv]
simp [h₁, h₂, h₃, h₄, ContinuousLinearMap.map_add, ContinuousLinearMap.map_smul, mul_smul]
· simp
#align stereo_right_inv stereo_right_inv
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -153,16 +153,15 @@ theorem hasFderivAt_stereoInvFunAux (v : E) :
by
have h₀ : HasFderivAt (fun w : E => ‖w‖ ^ 2) (0 : E →L[ℝ] ℝ) 0 :=
by
- convert (hasStrictFderivAt_norm_sq _).HasFderivAt
+ convert(hasStrictFderivAt_norm_sq _).HasFderivAt
simp
have h₁ : HasFderivAt (fun w : E => (‖w‖ ^ 2 + 4)⁻¹) (0 : E →L[ℝ] ℝ) 0 := by
- convert (hasFderivAt_inv _).comp _ (h₀.add (hasFderivAt_const 4 0)) <;> simp
+ convert(hasFderivAt_inv _).comp _ (h₀.add (hasFderivAt_const 4 0)) <;> simp
have h₂ :
HasFderivAt (fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) ((4 : ℝ) • ContinuousLinearMap.id ℝ E)
0 :=
by
- convert
- ((hasFderivAt_const (4 : ℝ) 0).smul (hasFderivAt_id 0)).add
+ convert((hasFderivAt_const (4 : ℝ) 0).smul (hasFderivAt_id 0)).add
((h₀.sub (hasFderivAt_const (4 : ℝ) 0)).smul (hasFderivAt_const v 0))
ext w
simp
@@ -273,8 +272,9 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
nlinarith
ring
-- deduce the result
- convert
- congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁) (congr_arg (fun t => t • v) h₂) using 1
+ convert congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁)
+ (congr_arg (fun t => t • v) h₂) using
+ 1
·
simp [inner_add_right, inner_smul_right, hvy, real_inner_self_eq_norm_mul_norm, hv, mul_smul,
mul_pow, Real.norm_eq_abs, sq_abs, norm_smul]
@@ -500,7 +500,7 @@ theorem ContMdiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m
have h : ContDiffOn ℝ ⊤ _ Set.univ := U.cont_diff.cont_diff_on
have H₁ := (h.comp' contDiffOn_stereoToFun).ContMdiffOn
have H₂ : ContMdiffOn _ _ _ _ Set.univ := hf.cont_mdiff_on
- convert (H₁.of_le le_top).comp' H₂ using 1
+ convert(H₁.of_le le_top).comp' H₂ using 1
ext x
have hfxv : f x = -↑v ↔ ⟪f x, -↑v⟫_ℝ = 1 :=
by
@@ -545,8 +545,7 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
convert hasFderivAt_stereoInvFunAux_comp_coe (-v : E)
simp
rw [(this.comp 0 U.symm.to_continuous_linear_equiv.has_fderiv_at).fderiv]
- convert
- (U.symm : EuclideanSpace ℝ (Fin n) ≃ₗᵢ[ℝ] (ℝ ∙ (↑(-v) : E))ᗮ).range_comp
+ convert(U.symm : EuclideanSpace ℝ (Fin n) ≃ₗᵢ[ℝ] (ℝ ∙ (↑(-v) : E))ᗮ).range_comp
(ℝ ∙ (↑(-v) : E))ᗮ.Subtype using
1
simp only [Submodule.range_subtype, coe_neg_sphere]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit e99e8c8934985b3bed8c6badbd333043a18c49c9
+! leanprover-community/mathlib commit 29d5700b0872ffc82431073f46c5b1092f74151c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -451,8 +451,15 @@ instance {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
have H₂ :=
(cont_diff_stereo_inv_fun_aux.comp (ℝ ∙ (v : E))ᗮ.subtypeL.ContDiff).comp U.symm.cont_diff
convert H₁.comp' (H₂.cont_diff_on : ContDiffOn ℝ ⊤ _ Set.univ) using 1
- ext
- simp [sphere_ext_iff, stereographic'_symm_apply, real_inner_comm])
+ -- squeezed from `ext, simp [sphere_ext_iff, stereographic'_symm_apply, real_inner_comm]`
+ simp only [LocalHomeomorph.trans_toLocalEquiv, LocalHomeomorph.symm_toLocalEquiv,
+ LocalEquiv.trans_source, LocalEquiv.symm_source, stereographic'_target,
+ stereographic'_source]
+ simp only [modelWithCornersSelf_coe, modelWithCornersSelf_coe_symm, Set.preimage_id,
+ Set.range_id, Set.inter_univ, Set.univ_inter, Set.compl_singleton_eq, Set.preimage_setOf_eq]
+ simp only [id.def, comp_apply, Submodule.subtypeL_apply, LocalHomeomorph.coe_coe_symm,
+ innerSL_apply, Ne.def, sphere_ext_iff, real_inner_comm (v' : E)]
+ rfl)
/-- The inclusion map (i.e., `coe`) from the sphere in `E` to `E` is smooth. -/
theorem contMdiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
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>
@@ -424,8 +424,8 @@ instance EuclideanSpace.instSmoothManifoldWithCornersSphere {n : ℕ} [Fact (fin
stereographic'_source]
simp only [modelWithCornersSelf_coe, modelWithCornersSelf_coe_symm, Set.preimage_id,
Set.range_id, Set.inter_univ, Set.univ_inter, Set.compl_singleton_eq, Set.preimage_setOf_eq]
- simp only [id.def, comp_apply, Submodule.subtypeL_apply, PartialHomeomorph.coe_coe_symm,
- innerSL_apply, Ne.def, sphere_ext_iff, real_inner_comm (v' : E)]
+ simp only [id, comp_apply, Submodule.subtypeL_apply, PartialHomeomorph.coe_coe_symm,
+ innerSL_apply, Ne, sphere_ext_iff, real_inner_comm (v' : E)]
rfl)
/-- The inclusion map (i.e., `coe`) from the sphere in `E` to `E` is smooth. -/
@@ -223,34 +223,23 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
have pythag : 1 = a ^ 2 + ‖y‖ ^ 2 := by
have hvy' : ⟪a • v, y⟫_ℝ = 0 := by simp only [inner_smul_left, hvy, mul_zero]
convert norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero _ _ hvy' using 2
- -- porting note (#10745): was simp [← split] but wasn't finding `norm_eq_of_mem_sphere`
- · simp only [norm_eq_of_mem_sphere, Nat.cast_one, mul_one, ← split]
+ · simp [← split]
· simp [norm_smul, hv, ← sq, sq_abs]
· exact sq _
- -- Porting note: added to work around cancel_denoms and nlinarith failures
- have duh : ‖y.val‖ ^ 2 = 1 - a ^ 2 := by
- rw [← Submodule.coe_norm, pythag]; ring
-- two facts which will be helpful for clearing denominators in the main calculation
have ha : 1 - a ≠ 0 := by
have : a < 1 := (inner_lt_one_iff_real_of_norm_one hv (by simp)).mpr hx.symm
linarith
-- the core of the problem is these two algebraic identities:
have h₁ : (2 ^ 2 / (1 - a) ^ 2 * ‖y‖ ^ 2 + 4)⁻¹ * 4 * (2 / (1 - a)) = 1 := by
- -- Porting note: used to be `field_simp; simp only [Submodule.coe_norm] at *; nlinarith`
- -- but cancel_denoms does not seem to be working and
- -- nlinarith cannot close the goal even if it did
- -- clear_value because field_simp does zeta-reduction (by design?) and is annoying
- clear_value a y
- field_simp
- rw [duh]
- ring
+ field_simp; simp only [Submodule.coe_norm] at *; nlinarith
have h₂ : (2 ^ 2 / (1 - a) ^ 2 * ‖y‖ ^ 2 + 4)⁻¹ * (2 ^ 2 / (1 - a) ^ 2 * ‖y‖ ^ 2 - 4) = a := by
- -- Porting note: field_simp is not behaving as in ml3
- -- see porting note above; previous proof used trans and was comparably complicated
- clear_value a y
field_simp
- rw [duh]
- ring
+ transitivity (1 - a) ^ 2 * (a * (2 ^ 2 * ‖y‖ ^ 2 + 4 * (1 - a) ^ 2))
+ · congr
+ simp only [Submodule.coe_norm] at *
+ nlinarith
+ ring!
convert
congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁) (congr_arg (fun t => t • v) h₂) using 1
· simp [a, inner_add_right, inner_smul_right, hvy, real_inner_self_eq_norm_mul_norm, hv, mul_smul,
Init.Data.Subtype.Basic
(#11887)
The few useful lemmas can go to Data.Subtype.Basic
and the other ones can be deleted.
@@ -193,7 +193,7 @@ theorem stereoInvFun_apply (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) :
theorem stereoInvFun_ne_north_pole (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) :
stereoInvFun hv w ≠ (⟨v, by simp [hv]⟩ : sphere (0 : E) 1) := by
- refine' Subtype.ne_of_val_ne _
+ refine' Subtype.coe_ne_coe.1 _
rw [← inner_lt_one_iff_real_of_norm_one _ hv]
· have hw : ⟪v, w⟫_ℝ = 0 := Submodule.mem_orthogonal_singleton_iff_inner_right.mp w.2
have hw' : (‖(w : E)‖ ^ 2 + 4)⁻¹ * (‖(w : E)‖ ^ 2 - 4) < 1 := by
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -458,9 +458,7 @@ theorem contMDiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
#align cont_mdiff_coe_sphere contMDiff_coe_sphere
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F]
-
variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ F H}
-
variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
/-- If a `ContMDiff` function `f : M → E`, where `M` is some manifold, takes values in the
@@ -253,7 +253,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
ring
convert
congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁) (congr_arg (fun t => t • v) h₂) using 1
- · simp [inner_add_right, inner_smul_right, hvy, real_inner_self_eq_norm_mul_norm, hv, mul_smul,
+ · simp [a, inner_add_right, inner_smul_right, hvy, real_inner_self_eq_norm_mul_norm, hv, mul_smul,
mul_pow, Real.norm_eq_abs, sq_abs, norm_smul]
-- Porting note: used to be simp only [split, add_comm] but get maxRec errors
· rw [split, add_comm]
In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:
) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.
@@ -227,7 +227,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
· simp only [norm_eq_of_mem_sphere, Nat.cast_one, mul_one, ← split]
· simp [norm_smul, hv, ← sq, sq_abs]
· exact sq _
- -- Porting note : added to work around cancel_denoms and nlinarith failures
+ -- Porting note: added to work around cancel_denoms and nlinarith failures
have duh : ‖y.val‖ ^ 2 = 1 - a ^ 2 := by
rw [← Submodule.coe_norm, pythag]; ring
-- two facts which will be helpful for clearing denominators in the main calculation
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -175,7 +175,7 @@ theorem contDiff_stereoInvFunAux : ContDiff ℝ ⊤ (stereoInvFunAux v) := by
nlinarith
have h₂ : ContDiff ℝ ⊤ fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v := by
refine' (contDiff_const.smul contDiff_id).add _
- refine' (h₀.sub contDiff_const).smul contDiff_const
+ exact (h₀.sub contDiff_const).smul contDiff_const
exact h₁.smul h₂
#align cont_diff_stereo_inv_fun_aux contDiff_stereoInvFunAux
@@ -223,7 +223,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
have pythag : 1 = a ^ 2 + ‖y‖ ^ 2 := by
have hvy' : ⟪a • v, y⟫_ℝ = 0 := by simp only [inner_smul_left, hvy, mul_zero]
convert norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero _ _ hvy' using 2
- -- Porting note: was simp [← split] but wasn't finding `norm_eq_of_mem_sphere`
+ -- porting note (#10745): was simp [← split] but wasn't finding `norm_eq_of_mem_sphere`
· simp only [norm_eq_of_mem_sphere, Nat.cast_one, mul_one, ← split]
· simp [norm_smul, hv, ← sq, sq_abs]
· exact sq _
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -131,11 +131,11 @@ theorem stereoInvFunAux_apply (w : E) :
theorem stereoInvFunAux_mem (hv : ‖v‖ = 1) {w : E} (hw : w ∈ (ℝ ∙ v)ᗮ) :
stereoInvFunAux v w ∈ sphere (0 : E) 1 := by
have h₁ : (0 : ℝ) < ‖w‖ ^ 2 + 4 := by positivity
- suffices : ‖(4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v‖ = ‖w‖ ^ 2 + 4
- · simp only [mem_sphere_zero_iff_norm, norm_smul, Real.norm_eq_abs, abs_inv, this,
+ suffices ‖(4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v‖ = ‖w‖ ^ 2 + 4 by
+ simp only [mem_sphere_zero_iff_norm, norm_smul, Real.norm_eq_abs, abs_inv, this,
abs_of_pos h₁, stereoInvFunAux_apply, inv_mul_cancel h₁.ne']
- suffices : ‖(4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v‖ ^ 2 = (‖w‖ ^ 2 + 4) ^ 2
- · simpa [sq_eq_sq_iff_abs_eq_abs, abs_of_pos h₁] using this
+ suffices ‖(4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v‖ ^ 2 = (‖w‖ ^ 2 + 4) ^ 2 by
+ simpa [sq_eq_sq_iff_abs_eq_abs, abs_of_pos h₁] using this
rw [Submodule.mem_orthogonal_singleton_iff_inner_left] at hw
simp [norm_add_sq_real, norm_smul, inner_smul_left, inner_smul_right, hw, mul_pow,
Real.norm_eq_abs, hv]
@@ -149,9 +149,9 @@ theorem hasFDerivAt_stereoInvFunAux (v : E) :
simp
have h₁ : HasFDerivAt (fun w : E => (‖w‖ ^ 2 + 4)⁻¹) (0 : E →L[ℝ] ℝ) 0 := by
convert (hasFDerivAt_inv _).comp _ (h₀.add (hasFDerivAt_const 4 0)) <;> simp
- have h₂ :
- HasFDerivAt (fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v) ((4 : ℝ) • ContinuousLinearMap.id ℝ E) 0
- · convert ((hasFDerivAt_const (4 : ℝ) 0).smul (hasFDerivAt_id 0)).add
+ have h₂ : HasFDerivAt (fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v)
+ ((4 : ℝ) • ContinuousLinearMap.id ℝ E) 0 := by
+ convert ((hasFDerivAt_const (4 : ℝ) 0).smul (hasFDerivAt_id 0)).add
((h₀.sub (hasFDerivAt_const (4 : ℝ) 0)).smul (hasFDerivAt_const v 0)) using 1
ext w
simp
@@ -518,9 +518,9 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
let U := (OrthonormalBasis.fromOrthogonalSpanSingleton (𝕜 := ℝ) n
(ne_zero_of_mem_unit_sphere (-v))).repr
-- Porting note: this `suffices` was a `change`
- suffices :
- LinearMap.range (fderiv ℝ ((stereoInvFunAux (-v : E) ∘ (↑)) ∘ U.symm) 0) = (ℝ ∙ (v : E))ᗮ
- · convert this using 3
+ suffices
+ LinearMap.range (fderiv ℝ ((stereoInvFunAux (-v : E) ∘ (↑)) ∘ U.symm) 0) = (ℝ ∙ (v : E))ᗮ by
+ convert this using 3
show stereographic' n (-v) v = 0
dsimp [stereographic']
simp only [AddEquivClass.map_eq_zero_iff]
@@ -557,14 +557,13 @@ theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v
LinearIsometryEquiv.map_zero, mfld_simps]
let U := (OrthonormalBasis.fromOrthogonalSpanSingleton
(𝕜 := ℝ) n (ne_zero_of_mem_unit_sphere (-v))).repr
- suffices : Injective (fderiv ℝ ((stereoInvFunAux (-v : E) ∘ (↑)) ∘ U.symm) 0)
- · convert this using 3
+ suffices Injective (fderiv ℝ ((stereoInvFunAux (-v : E) ∘ (↑)) ∘ U.symm) 0) by
+ convert this using 3
show stereographic' n (-v) v = 0
dsimp [stereographic']
simp only [AddEquivClass.map_eq_zero_iff]
apply stereographic_neg_apply
- have :
- HasFDerivAt (stereoInvFunAux (-v : E) ∘ (Subtype.val : (ℝ ∙ (↑(-v) : E))ᗮ → E))
+ have : HasFDerivAt (stereoInvFunAux (-v : E) ∘ (Subtype.val : (ℝ ∙ (↑(-v) : E))ᗮ → E))
(ℝ ∙ (↑(-v) : E))ᗮ.subtypeL (U.symm 0) := by
convert hasFDerivAt_stereoInvFunAux_comp_coe (-v : E)
simp
@@ -603,10 +602,10 @@ instance : LieGroup (𝓡 1) circle where
rw [contMDiff_iff]
exact ⟨continuous_mul, fun x y => contDiff_mul.contDiffOn⟩
-- Porting note: needed to fill in first 3 arguments or could not figure out typeclasses
- suffices h₁ : ContMDiff ((𝓡 1).prod (𝓡 1)) (𝓘(ℝ, ℂ).prod 𝓘(ℝ, ℂ)) ⊤ (Prod.map c c)
- · apply h₂.comp h₁
- · apply ContMDiff.prod_map <;>
- exact contMDiff_coe_sphere
+ suffices h₁ : ContMDiff ((𝓡 1).prod (𝓡 1)) (𝓘(ℝ, ℂ).prod 𝓘(ℝ, ℂ)) ⊤ (Prod.map c c) from
+ h₂.comp h₁
+ apply ContMDiff.prod_map <;>
+ exact contMDiff_coe_sphere
smooth_inv := by
apply ContMDiff.codRestrict_sphere
simp only [← coe_inv_circle, coe_inv_circle_eq_conj]
Rename lemmas to enable new-style dot notation or drop repeating FiniteDimensional.finiteDimensional_*
.
Restore old names as deprecated aliases.
@@ -357,7 +357,7 @@ orthogonalization, but in the finite-dimensional case it follows more easily by
-- Porting note: unnecessary in Lean 3
private theorem findim (n : ℕ) [Fact (finrank ℝ E = n + 1)] : FiniteDimensional ℝ E :=
- fact_finiteDimensional_of_finrank_eq_succ n
+ .of_fact_finrank_eq_succ n
/-- Variant of the stereographic projection, for the sphere in an `n + 1`-dimensional inner product
space `E`. This version has codomain the Euclidean space of dimension `n`, and is obtained by
Clm
-> CLM
, Cle
-> CLE
(#10018)
Rename
Complex.equivRealProdClm
→ Complex.equivRealProdCLM
;
CLE
?Complex.reClm
→ Complex.reCLM
;Complex.imClm
→ Complex.imCLM
;Complex.conjLie
→ Complex.conjLIE
;Complex.conjCle
→ Complex.conjCLE
;Complex.ofRealLi
→ Complex.ofRealLI
;Complex.ofRealClm
→ Complex.ofRealCLM
;fderivInnerClm
→ fderivInnerCLM
;LinearPMap.adjointDomainMkClm
→ LinearPMap.adjointDomainMkCLM
;LinearPMap.adjointDomainMkClmExtend
→ LinearPMap.adjointDomainMkCLMExtend
;IsROrC.reClm
→ IsROrC.reCLM
;IsROrC.imClm
→ IsROrC.imCLM
;IsROrC.conjLie
→ IsROrC.conjLIE
;IsROrC.conjCle
→ IsROrC.conjCLE
;IsROrC.ofRealLi
→ IsROrC.ofRealLI
;IsROrC.ofRealClm
→ IsROrC.ofRealCLM
;MeasureTheory.condexpL1Clm
→ MeasureTheory.condexpL1CLM
;algebraMapClm
→ algebraMapCLM
;WeakDual.CharacterSpace.toClm
→ WeakDual.CharacterSpace.toCLM
;BoundedContinuousFunction.evalClm
→ BoundedContinuousFunction.evalCLM
;ContinuousMap.evalClm
→ ContinuousMap.evalCLM
;TrivSqZeroExt.fstClm
→ TrivSqZeroExt.fstClm
;TrivSqZeroExt.sndClm
→ TrivSqZeroExt.sndCLM
;TrivSqZeroExt.inlClm
→ TrivSqZeroExt.inlCLM
;TrivSqZeroExt.inrClm
→ TrivSqZeroExt.inrCLM
and related theorems.
@@ -610,7 +610,7 @@ instance : LieGroup (𝓡 1) circle where
smooth_inv := by
apply ContMDiff.codRestrict_sphere
simp only [← coe_inv_circle, coe_inv_circle_eq_conj]
- exact Complex.conjCle.contDiff.contMDiff.comp contMDiff_coe_sphere
+ exact Complex.conjCLE.contDiff.contMDiff.comp contMDiff_coe_sphere
/-- The map `fun t ↦ exp (t * I)` from `ℝ` to the unit circle in `ℂ` is smooth. -/
theorem contMDiff_expMapCircle : ContMDiff 𝓘(ℝ, ℝ) (𝓡 1) ∞ expMapCircle :=
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -568,7 +568,7 @@ theorem mfderiv_coe_sphere_injective {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v
(ℝ ∙ (↑(-v) : E))ᗮ.subtypeL (U.symm 0) := by
convert hasFDerivAt_stereoInvFunAux_comp_coe (-v : E)
simp
- have := congr_arg FunLike.coe <| (this.comp 0 U.symm.toContinuousLinearEquiv.hasFDerivAt).fderiv
+ have := congr_arg DFunLike.coe <| (this.comp 0 U.symm.toContinuousLinearEquiv.hasFDerivAt).fderiv
refine Eq.subst this.symm ?_
rw [ContinuousLinearMap.coe_comp', ContinuousLinearEquiv.coe_coe]
simpa using Subtype.coe_injective
@@ -10,7 +10,7 @@ import Mathlib.Analysis.InnerProductSpace.Calculus
import Mathlib.Analysis.InnerProductSpace.PiL2
import Mathlib.Geometry.Manifold.Algebra.LieGroup
import Mathlib.Geometry.Manifold.Instances.Real
-import Mathlib.Geometry.Manifold.MFDeriv
+import Mathlib.Geometry.Manifold.MFDeriv.Basic
#align_import geometry.manifold.instances.sphere from "leanprover-community/mathlib"@"0dc4079202c28226b2841a51eb6d3cc2135bb80f"
Items 1-3 in reference Zulip
Rename chartedSpace
, smoothMfldWithCorners
, and funLike
.
@@ -382,7 +382,7 @@ theorem stereographic'_target {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : sphe
/-- The unit sphere in an `n + 1`-dimensional inner product space `E` is a charted space
modelled on the Euclidean space of dimension `n`. -/
-instance chartedSpace {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
+instance EuclideanSpace.instChartedSpaceSphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
ChartedSpace (EuclideanSpace ℝ (Fin n)) (sphere (0 : E) 1) where
atlas := {f | ∃ v : sphere (0 : E) 1, f = stereographic' n v}
chartAt v := stereographic' n (-v)
@@ -411,7 +411,7 @@ theorem stereographic'_symm_apply {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v :
/-- The unit sphere in an `n + 1`-dimensional inner product space `E` is a smooth manifold,
modelled on the Euclidean space of dimension `n`. -/
-instance smoothMfldWithCorners {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
+instance EuclideanSpace.instSmoothManifoldWithCornersSphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
SmoothManifoldWithCorners (𝓡 n) (sphere (0 : E) 1) :=
smoothManifoldWithCorners_of_contDiffOn (𝓡 n) (sphere (0 : E) 1)
(by
@@ -443,7 +443,7 @@ instance smoothMfldWithCorners {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
theorem contMDiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
ContMDiff (𝓡 n) 𝓘(ℝ, E) ∞ ((↑) : sphere (0 : E) 1 → E) := by
-- Porting note: trouble with filling these implicit variables in the instance
- have := smoothMfldWithCorners (E := E) (n := n)
+ have := EuclideanSpace.instSmoothManifoldWithCornersSphere (E := E) (n := n)
rw [contMDiff_iff]
constructor
· exact continuous_subtype_val
@@ -589,10 +589,10 @@ attribute [local instance] finrank_real_complex_fact'
/-- The unit circle in `ℂ` is a charted space modelled on `EuclideanSpace ℝ (Fin 1)`. This
follows by definition from the corresponding result for `Metric.Sphere`. -/
instance : ChartedSpace (EuclideanSpace ℝ (Fin 1)) circle :=
- chartedSpace
+ EuclideanSpace.instChartedSpaceSphere
instance : SmoothManifoldWithCorners (𝓡 1) circle :=
- smoothMfldWithCorners (E := ℂ)
+ EuclideanSpace.instSmoothManifoldWithCornersSphere (E := ℂ)
/-- The unit circle in `ℂ` is a Lie group. -/
instance : LieGroup (𝓡 1) circle where
@@ -23,11 +23,11 @@ it to put a smooth manifold structure on the sphere.
## Main results
For a unit vector `v` in `E`, the definition `stereographic` gives the stereographic projection
-centred at `v`, a local homeomorphism from the sphere to `(ℝ ∙ v)ᗮ` (the orthogonal complement of
+centred at `v`, a partial homeomorphism from the sphere to `(ℝ ∙ v)ᗮ` (the orthogonal complement of
`v`).
For finite-dimensional `E`, we then construct a smooth manifold instance on the sphere; the charts
-here are obtained by composing the local homeomorphisms `stereographic` with arbitrary isometries
+here are obtained by composing the partial homeomorphisms `stereographic` with arbitrary isometries
from `(ℝ ∙ v)ᗮ` to Euclidean space.
We prove two lemmas about smooth maps:
@@ -279,8 +279,8 @@ theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v
· simp
#align stereo_right_inv stereo_right_inv
-/-- Stereographic projection from the unit sphere in `E`, centred at a unit vector `v` in `E`; this
-is the version as a local homeomorphism. -/
+/-- Stereographic projection from the unit sphere in `E`, centred at a unit vector `v` in `E`;
+this is the version as a partial homeomorphism. -/
def stereographic (hv : ‖v‖ = 1) : PartialHomeomorph (sphere (0 : E) 1) (ℝ ∙ v)ᗮ where
toFun := stereoToFun v ∘ (↑)
invFun := stereoInvFun hv
The current name is misleading: there's no open set involved; it's just an equivalence between subsets of domain and target. zulip discussion
PEquiv
is similarly named: this is fine, as they're different designs for the same concept.
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -430,8 +430,8 @@ instance smoothMfldWithCorners {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
(ℝ ∙ (v : E))ᗮ.subtypeL.contDiff).comp U.symm.contDiff
convert H₁.comp' (H₂.contDiffOn : ContDiffOn ℝ ⊤ _ Set.univ) using 1
-- -- squeezed from `ext, simp [sphere_ext_iff, stereographic'_symm_apply, real_inner_comm]`
- simp only [PartialHomeomorph.trans_toLocalEquiv, PartialHomeomorph.symm_toLocalEquiv,
- LocalEquiv.trans_source, LocalEquiv.symm_source, stereographic'_target,
+ simp only [PartialHomeomorph.trans_toPartialEquiv, PartialHomeomorph.symm_toPartialEquiv,
+ PartialEquiv.trans_source, PartialEquiv.symm_source, stereographic'_target,
stereographic'_source]
simp only [modelWithCornersSelf_coe, modelWithCornersSelf_coe_symm, Set.preimage_id,
Set.range_id, Set.inter_univ, Set.univ_inter, Set.compl_singleton_eq, Set.preimage_setOf_eq]
LocalHomeomorph
evokes a "local homeomorphism": this is not what this means.
Instead, this is a homeomorphism on an open set of the domain (extended to the whole space, by the junk value pattern). Hence, partial homeomorphism is more appropriate, and avoids confusion with IsLocallyHomeomorph
.
A future PR will rename LocalEquiv
to PartialEquiv
.
@@ -281,7 +281,7 @@ theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v
/-- Stereographic projection from the unit sphere in `E`, centred at a unit vector `v` in `E`; this
is the version as a local homeomorphism. -/
-def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ ∙ v)ᗮ where
+def stereographic (hv : ‖v‖ = 1) : PartialHomeomorph (sphere (0 : E) 1) (ℝ ∙ v)ᗮ where
toFun := stereoToFun v ∘ (↑)
invFun := stereoInvFun hv
source := {⟨v, by simp [hv]⟩}ᶜ
@@ -364,10 +364,10 @@ space `E`. This version has codomain the Euclidean space of dimension `n`, and
composing the original sterographic projection (`stereographic`) with an arbitrary linear isometry
from `(ℝ ∙ v)ᗮ` to the Euclidean space. -/
def stereographic' (n : ℕ) [Fact (finrank ℝ E = n + 1)] (v : sphere (0 : E) 1) :
- LocalHomeomorph (sphere (0 : E) 1) (EuclideanSpace ℝ (Fin n)) :=
+ PartialHomeomorph (sphere (0 : E) 1) (EuclideanSpace ℝ (Fin n)) :=
stereographic (norm_eq_of_mem_sphere v) ≫ₕ
(OrthonormalBasis.fromOrthogonalSpanSingleton n
- (ne_zero_of_mem_unit_sphere v)).repr.toHomeomorph.toLocalHomeomorph
+ (ne_zero_of_mem_unit_sphere v)).repr.toHomeomorph.toPartialHomeomorph
#align stereographic' stereographic'
@[simp]
@@ -430,12 +430,12 @@ instance smoothMfldWithCorners {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
(ℝ ∙ (v : E))ᗮ.subtypeL.contDiff).comp U.symm.contDiff
convert H₁.comp' (H₂.contDiffOn : ContDiffOn ℝ ⊤ _ Set.univ) using 1
-- -- squeezed from `ext, simp [sphere_ext_iff, stereographic'_symm_apply, real_inner_comm]`
- simp only [LocalHomeomorph.trans_toLocalEquiv, LocalHomeomorph.symm_toLocalEquiv,
+ simp only [PartialHomeomorph.trans_toLocalEquiv, PartialHomeomorph.symm_toLocalEquiv,
LocalEquiv.trans_source, LocalEquiv.symm_source, stereographic'_target,
stereographic'_source]
simp only [modelWithCornersSelf_coe, modelWithCornersSelf_coe_symm, Set.preimage_id,
Set.range_id, Set.inter_univ, Set.univ_inter, Set.compl_singleton_eq, Set.preimage_setOf_eq]
- simp only [id.def, comp_apply, Submodule.subtypeL_apply, LocalHomeomorph.coe_coe_symm,
+ simp only [id.def, comp_apply, Submodule.subtypeL_apply, PartialHomeomorph.coe_coe_symm,
innerSL_apply, Ne.def, sphere_ext_iff, real_inner_comm (v' : E)]
rfl)
They have type ContinuousOn ..., hence should be named accordingly. Suggested by @fpvandoorn in #8736.
@@ -296,12 +296,12 @@ def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ
right_inv' w _ := stereo_right_inv hv w
open_source := isOpen_compl_singleton
open_target := isOpen_univ
- continuous_toFun :=
+ continuousOn_toFun :=
continuousOn_stereoToFun.comp continuous_subtype_val.continuousOn fun w h => by
dsimp
exact
h ∘ Subtype.ext ∘ Eq.symm ∘ (inner_eq_one_iff_of_norm_one hv (by simp)).mp
- continuous_invFun := (continuous_stereoInvFun hv).continuousOn
+ continuousOn_invFun := (continuous_stereoInvFun hv).continuousOn
#align stereographic stereographic
theorem stereographic_apply (hv : ‖v‖ = 1) (x : sphere (0 : E) 1) :
@@ -229,7 +229,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
· exact sq _
-- Porting note : added to work around cancel_denoms and nlinarith failures
have duh : ‖y.val‖ ^ 2 = 1 - a ^ 2 := by
- rw [←Submodule.coe_norm, pythag]; ring
+ rw [← Submodule.coe_norm, pythag]; ring
-- two facts which will be helpful for clearing denominators in the main calculation
have ha : 1 - a ≠ 0 := by
have : a < 1 := (inner_lt_one_iff_real_of_norm_one hv (by simp)).mpr hx.symm
@@ -289,7 +289,7 @@ def stereographic (hv : ‖v‖ = 1) : LocalHomeomorph (sphere (0 : E) 1) (ℝ
map_source' := by simp
map_target' {w} _ := fun h => (stereoInvFun_ne_north_pole hv w) (Set.eq_of_mem_singleton h)
left_inv' x hx := stereo_left_inv hv fun h => hx (by
- rw [←h] at hv
+ rw [← h] at hv
apply Subtype.ext
dsimp
exact h)
@@ -511,7 +511,7 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
rw [((contMDiff_coe_sphere v).mdifferentiableAt le_top).mfderiv]
dsimp [chartAt]
-- rw [LinearIsometryEquiv.toHomeomorph_symm]
- -- rw [←LinearIsometryEquiv.coe_toHomeomorph]
+ -- rw [← LinearIsometryEquiv.coe_toHomeomorph]
simp only [chartAt, stereographic_neg_apply, fderivWithin_univ,
LinearIsometryEquiv.toHomeomorph_symm, LinearIsometryEquiv.coe_toHomeomorph,
LinearIsometryEquiv.map_zero, mfld_simps]
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.
In particular this includes adjustments for the Lean PRs
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).
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})
.
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:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[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>
@@ -72,8 +72,6 @@ open Metric FiniteDimensional Function
open scoped Manifold
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
-
section StereographicProjection
variable (v : E)
@@ -426,8 +424,6 @@ instance smoothMfldWithCorners {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
(-- Removed type ascription, and this helped for some reason with timeout issues?
OrthonormalBasis.fromOrthogonalSpanSingleton (𝕜 := ℝ)
n (ne_zero_of_mem_unit_sphere v')).repr
- -- Porting note: trouble synth instances
- have := findim (E := E) n
have H₁ := U'.contDiff.comp_contDiffOn contDiffOn_stereoToFun
-- Porting note: need to help with implicit variables again
have H₂ := (contDiff_stereoInvFunAux (v := v.val)|>.comp
And fix some names in comments where this revealed issues
@@ -541,7 +541,7 @@ theorem range_mfderiv_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] (v : s
(ℝ ∙ (↑(-v) : E))ᗮ.subtype using 1
simp only [Submodule.range_subtype, coe_neg_sphere]
congr 1
- -- we must show `submodule.span ℝ {v} = submodule.span ℝ {-v}`
+ -- we must show `Submodule.span ℝ {v} = Submodule.span ℝ {-v}`
apply Submodule.span_eq_span
· simp only [Set.singleton_subset_iff, SetLike.mem_coe]
rw [← Submodule.neg_mem_iff]
@@ -346,7 +346,7 @@ In this section we construct a charted space structure on the unit sphere in a f
real inner product space `E`; that is, we show that it is locally homeomorphic to the Euclidean
space of dimension one less than `E`.
-The restriction to finite dimension is for convenience. The most natural `charted_space`
+The restriction to finite dimension is for convenience. The most natural `ChartedSpace`
structure for the sphere uses the stereographic projection from the antipodes of a point as the
canonical chart at this point. However, the codomain of the stereographic projection constructed
in the previous section is `(ℝ ∙ v)ᗮ`, the orthogonal complement of the vector `v` in `E` which is
@@ -467,8 +467,8 @@ variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ F H}
variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
-/-- If a `cont_mdiff` function `f : M → E`, where `M` is some manifold, takes values in the
-sphere, then it restricts to a `cont_mdiff` function from `M` to the sphere. -/
+/-- If a `ContMDiff` function `f : M → E`, where `M` is some manifold, takes values in the
+sphere, then it restricts to a `ContMDiff` function from `M` to the sphere. -/
theorem ContMDiff.codRestrict_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] {m : ℕ∞} {f : M → E}
(hf : ContMDiff I 𝓘(ℝ, E) m f) (hf' : ∀ x, f x ∈ sphere (0 : E) 1) :
ContMDiff I (𝓡 n) m (Set.codRestrict _ _ hf' : M → sphere (0 : E) 1) := by
The main reasons is that having h : 0 < denom
in the context should suffice for field_simp
to do its job, without the need to manually pass h.ne
or similar.
Quite a few have := … ≠ 0
could be dropped, and some field_simp
calls no longer need explicit arguments; this is promising.
This does break some proofs where field_simp
was not used as a closing tactic, and it now
shuffles terms around a bit different. These were fixed. Using field_simp
in the middle of a proof seems rather fragile anyways.
As a drive-by contribution, positivity
now knows about π > 0
.
fixes: #4835
Co-authored-by: Matthew Ballard <matt@mrb.email>
@@ -236,12 +236,6 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
have ha : 1 - a ≠ 0 := by
have : a < 1 := (inner_lt_one_iff_real_of_norm_one hv (by simp)).mpr hx.symm
linarith
- have : 2 ^ 2 * ‖y‖ ^ 2 + 4 * (1 - a) ^ 2 ≠ 0 := by
- refine' ne_of_gt _
- have : (0 : ℝ) < (1 - a) ^ 2 := sq_pos_of_ne_zero (1 - a) ha
- -- Porting note: nlinarith needed a little help
- change 0 < 4 * _ + 4 * _
- nlinarith
-- the core of the problem is these two algebraic identities:
have h₁ : (2 ^ 2 / (1 - a) ^ 2 * ‖y‖ ^ 2 + 4)⁻¹ * 4 * (2 / (1 - a)) = 1 := by
-- Porting note: used to be `field_simp; simp only [Submodule.coe_norm] at *; nlinarith`
@@ -250,21 +244,15 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
-- clear_value because field_simp does zeta-reduction (by design?) and is annoying
clear_value a y
field_simp
- rw [div_eq_iff, duh]
- · ring
- · apply mul_ne_zero_iff.mpr ⟨?_,ha⟩
- convert this using 2; rw [Submodule.coe_norm]; ring
+ rw [duh]
+ ring
have h₂ : (2 ^ 2 / (1 - a) ^ 2 * ‖y‖ ^ 2 + 4)⁻¹ * (2 ^ 2 / (1 - a) ^ 2 * ‖y‖ ^ 2 - 4) = a := by
-- Porting note: field_simp is not behaving as in ml3
-- see porting note above; previous proof used trans and was comparably complicated
clear_value a y
field_simp
- rw [div_eq_iff, duh]
- ring_nf
- -- Porting note: shouldn't repeat myself but getting the coercion right is annoying
- apply mul_ne_zero_iff.mpr ⟨?_,?_⟩
- · convert this using 2; rw [Submodule.coe_norm]; ring
- · apply pow_ne_zero _ ha
+ rw [duh]
+ ring
convert
congr_arg₂ Add.add (congr_arg (fun t => t • (y : E)) h₁) (congr_arg (fun t => t • v) h₂) using 1
· simp [inner_add_right, inner_smul_right, hvy, real_inner_self_eq_norm_mul_norm, hv, mul_smul,
@@ -281,10 +269,7 @@ theorem stereo_left_inv (hv : ‖v‖ = 1) {x : sphere (0 : E) 1} (hx : (x : E)
theorem stereo_right_inv (hv : ‖v‖ = 1) (w : (ℝ ∙ v)ᗮ) : stereoToFun v (stereoInvFun hv w) = w := by
have : 2 / (1 - (‖(w : E)‖ ^ 2 + 4)⁻¹ * (‖(w : E)‖ ^ 2 - 4)) * (‖(w : E)‖ ^ 2 + 4)⁻¹ * 4 = 1 := by
- have : ‖(w : E)‖ ^ 2 + 4 ≠ 0 := by nlinarith
- have : (4 : ℝ) + 4 ≠ 0 := by nlinarith
- field_simp
- ring
+ field_simp; ring
convert congr_arg (· • w) this
· have h₁ : orthogonalProjection (ℝ ∙ v)ᗮ v = 0 :=
orthogonalProjection_orthogonalComplement_singleton_eq_zero v
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -64,7 +64,7 @@ Relate the stereographic projection to the inversion of the space.
-/
-variable {E : Type _} [NormedAddCommGroup E] [InnerProductSpace ℝ E]
+variable {E : Type*} [NormedAddCommGroup E] [InnerProductSpace ℝ E]
noncomputable section
@@ -476,11 +476,11 @@ theorem contMDiff_coe_sphere {n : ℕ} [Fact (finrank ℝ E = n + 1)] :
U.symm.contDiff).contDiffOn
#align cont_mdiff_coe_sphere contMDiff_coe_sphere
-variable {F : Type _} [NormedAddCommGroup F] [NormedSpace ℝ F]
+variable {F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F]
-variable {H : Type _} [TopologicalSpace H] {I : ModelWithCorners ℝ F H}
+variable {H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ F H}
-variable {M : Type _} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
+variable {M : Type*} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
/-- If a `cont_mdiff` function `f : M → E`, where `M` is some manifold, takes values in the
sphere, then it restricts to a `cont_mdiff` function from `M` to the sphere. -/
@@ -72,7 +72,7 @@ open Metric FiniteDimensional Function
open scoped Manifold
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See Lean 4 issue #2220
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
section StereographicProjection
@@ -2,11 +2,6 @@
Copyright (c) 2021 Heather Macbeth. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Heather Macbeth
-
-! This file was ported from Lean 3 source module geometry.manifold.instances.sphere
-! leanprover-community/mathlib commit 0dc4079202c28226b2841a51eb6d3cc2135bb80f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Calculus.Deriv.Inv
import Mathlib.Analysis.NormedSpace.BallAction
@@ -17,6 +12,8 @@ import Mathlib.Geometry.Manifold.Algebra.LieGroup
import Mathlib.Geometry.Manifold.Instances.Real
import Mathlib.Geometry.Manifold.MFDeriv
+#align_import geometry.manifold.instances.sphere from "leanprover-community/mathlib"@"0dc4079202c28226b2841a51eb6d3cc2135bb80f"
+
/-!
# Manifold structure on the sphere
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file