analysis.quaternionMathlib.Analysis.Quaternion

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -217,7 +217,7 @@ theorem norm_piLp_equiv_symm_equivTuple (x : ℍ) :
   by
   rw [norm_eq_sqrt_real_inner, norm_eq_sqrt_real_inner, inner_self, norm_sq_def', PiLp.inner_apply,
     Fin.sum_univ_four]
-  simp_rw [IsROrC.inner_apply, starRingEnd_apply, star_trivial, ← sq]
+  simp_rw [RCLike.inner_apply, starRingEnd_apply, star_trivial, ← sq]
   rfl
 #align quaternion.norm_pi_Lp_equiv_symm_equiv_tuple Quaternion.norm_piLp_equiv_symm_equivTuple
 -/
Diff
@@ -3,10 +3,10 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 -/
-import Mathbin.Algebra.Quaternion
-import Mathbin.Analysis.InnerProductSpace.Basic
-import Mathbin.Analysis.InnerProductSpace.PiL2
-import Mathbin.Topology.Algebra.Algebra
+import Algebra.Quaternion
+import Analysis.InnerProductSpace.Basic
+import Analysis.InnerProductSpace.PiL2
+import Topology.Algebra.Algebra
 
 #align_import analysis.quaternion from "leanprover-community/mathlib"@"599fffe78f0e11eb6a034e834ec51882167b9688"
 
Diff
@@ -119,7 +119,7 @@ instance : NormedAlgebra ℝ ℍ where
   toAlgebra := (Quaternion.algebra : Algebra ℝ ℍ)
 
 instance : CstarRing ℍ
-    where norm_star_mul_self x := (norm_mul _ _).trans <| congr_arg (· * ‖x‖) (norm_star x)
+    where norm_star_hMul_self x := (norm_mul _ _).trans <| congr_arg (· * ‖x‖) (norm_star x)
 
 instance : Coe ℂ ℍ :=
   ⟨fun z => ⟨z.re, z.im, 0, 0⟩⟩
Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2020 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
-
-! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit 599fffe78f0e11eb6a034e834ec51882167b9688
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Quaternion
 import Mathbin.Analysis.InnerProductSpace.Basic
 import Mathbin.Analysis.InnerProductSpace.PiL2
 import Mathbin.Topology.Algebra.Algebra
 
+#align_import analysis.quaternion from "leanprover-community/mathlib"@"599fffe78f0e11eb6a034e834ec51882167b9688"
+
 /-!
 # Quaternions as a normed algebra
 
Diff
@@ -39,7 +39,6 @@ quaternion, normed ring, normed space, normed algebra
 -/
 
 
--- mathport name: quaternion.real
 scoped[Quaternion] notation "ℍ" => Quaternion ℝ
 
 open scoped RealInnerProductSpace
@@ -49,13 +48,17 @@ namespace Quaternion
 instance : Inner ℝ ℍ :=
   ⟨fun a b => (a * star b).re⟩
 
+#print Quaternion.inner_self /-
 theorem inner_self (a : ℍ) : ⟪a, a⟫ = normSq a :=
   rfl
 #align quaternion.inner_self Quaternion.inner_self
+-/
 
+#print Quaternion.inner_def /-
 theorem inner_def (a b : ℍ) : ⟪a, b⟫ = (a * star b).re :=
   rfl
 #align quaternion.inner_def Quaternion.inner_def
+-/
 
 noncomputable instance : NormedAddCommGroup ℍ :=
   @InnerProductSpace.Core.toNormedAddCommGroup ℝ ℍ _ _ _
@@ -69,32 +72,42 @@ noncomputable instance : NormedAddCommGroup ℍ :=
 noncomputable instance : InnerProductSpace ℝ ℍ :=
   InnerProductSpace.ofCore _
 
+#print Quaternion.normSq_eq_norm_mul_self /-
 theorem normSq_eq_norm_mul_self (a : ℍ) : normSq a = ‖a‖ * ‖a‖ := by
   rw [← inner_self, real_inner_self_eq_norm_mul_norm]
 #align quaternion.norm_sq_eq_norm_sq Quaternion.normSq_eq_norm_mul_self
+-/
 
 instance : NormOneClass ℍ :=
   ⟨by rw [norm_eq_sqrt_real_inner, inner_self, norm_sq.map_one, Real.sqrt_one]⟩
 
+#print Quaternion.norm_coe /-
 @[simp, norm_cast]
 theorem norm_coe (a : ℝ) : ‖(a : ℍ)‖ = ‖a‖ := by
   rw [norm_eq_sqrt_real_inner, inner_self, norm_sq_coe, Real.sqrt_sq_eq_abs, Real.norm_eq_abs]
 #align quaternion.norm_coe Quaternion.norm_coe
+-/
 
+#print Quaternion.nnnorm_coe /-
 @[simp, norm_cast]
 theorem nnnorm_coe (a : ℝ) : ‖(a : ℍ)‖₊ = ‖a‖₊ :=
   Subtype.ext <| norm_coe a
 #align quaternion.nnnorm_coe Quaternion.nnnorm_coe
+-/
 
+#print Quaternion.norm_star /-
 @[simp]
 theorem norm_star (a : ℍ) : ‖star a‖ = ‖a‖ := by
   simp_rw [norm_eq_sqrt_real_inner, inner_self, norm_sq_star]
 #align quaternion.norm_star Quaternion.norm_star
+-/
 
+#print Quaternion.nnnorm_star /-
 @[simp]
 theorem nnnorm_star (a : ℍ) : ‖star a‖₊ = ‖a‖₊ :=
   Subtype.ext <| norm_star a
 #align quaternion.nnnorm_star Quaternion.nnnorm_star
+-/
 
 noncomputable instance : NormedDivisionRing ℍ
     where
@@ -128,43 +141,60 @@ theorem coeComplex_imI (z : ℂ) : (z : ℍ).imI = z.im :=
 #align quaternion.coe_complex_im_i Quaternion.coeComplex_imI
 -/
 
+#print Quaternion.coeComplex_imJ /-
 @[simp, norm_cast]
 theorem coeComplex_imJ (z : ℂ) : (z : ℍ).imJ = 0 :=
   rfl
 #align quaternion.coe_complex_im_j Quaternion.coeComplex_imJ
+-/
 
+#print Quaternion.coeComplex_imK /-
 @[simp, norm_cast]
 theorem coeComplex_imK (z : ℂ) : (z : ℍ).imK = 0 :=
   rfl
 #align quaternion.coe_complex_im_k Quaternion.coeComplex_imK
+-/
 
+#print Quaternion.coeComplex_add /-
 @[simp, norm_cast]
 theorem coeComplex_add (z w : ℂ) : ↑(z + w) = (z + w : ℍ) := by ext <;> simp
 #align quaternion.coe_complex_add Quaternion.coeComplex_add
+-/
 
+#print Quaternion.coeComplex_mul /-
 @[simp, norm_cast]
 theorem coeComplex_mul (z w : ℂ) : ↑(z * w) = (z * w : ℍ) := by ext <;> simp
 #align quaternion.coe_complex_mul Quaternion.coeComplex_mul
+-/
 
+#print Quaternion.coeComplex_zero /-
 @[simp, norm_cast]
 theorem coeComplex_zero : ((0 : ℂ) : ℍ) = 0 :=
   rfl
 #align quaternion.coe_complex_zero Quaternion.coeComplex_zero
+-/
 
+#print Quaternion.coeComplex_one /-
 @[simp, norm_cast]
 theorem coeComplex_one : ((1 : ℂ) : ℍ) = 1 :=
   rfl
 #align quaternion.coe_complex_one Quaternion.coeComplex_one
+-/
 
+#print Quaternion.coe_real_complex_mul /-
 @[simp, norm_cast]
 theorem coe_real_complex_mul (r : ℝ) (z : ℂ) : (r • z : ℍ) = ↑r * ↑z := by ext <;> simp
 #align quaternion.coe_real_complex_mul Quaternion.coe_real_complex_mul
+-/
 
+#print Quaternion.coeComplex_coe /-
 @[simp, norm_cast]
 theorem coeComplex_coe (r : ℝ) : ((r : ℂ) : ℍ) = r :=
   rfl
 #align quaternion.coe_complex_coe Quaternion.coeComplex_coe
+-/
 
+#print Quaternion.ofComplex /-
 /-- Coercion `ℂ →ₐ[ℝ] ℍ` as an algebra homomorphism. -/
 def ofComplex : ℂ →ₐ[ℝ] ℍ where
   toFun := coe
@@ -174,12 +204,16 @@ def ofComplex : ℂ →ₐ[ℝ] ℍ where
   map_mul' := coeComplex_mul
   commutes' x := rfl
 #align quaternion.of_complex Quaternion.ofComplex
+-/
 
+#print Quaternion.coe_ofComplex /-
 @[simp]
 theorem coe_ofComplex : ⇑ofComplex = coe :=
   rfl
 #align quaternion.coe_of_complex Quaternion.coe_ofComplex
+-/
 
+#print Quaternion.norm_piLp_equiv_symm_equivTuple /-
 /-- The norm of the components as a euclidean vector equals the norm of the quaternion. -/
 theorem norm_piLp_equiv_symm_equivTuple (x : ℍ) :
     ‖(PiLp.equiv 2 fun _ : Fin 4 => _).symm (equivTuple ℝ x)‖ = ‖x‖ :=
@@ -189,7 +223,9 @@ theorem norm_piLp_equiv_symm_equivTuple (x : ℍ) :
   simp_rw [IsROrC.inner_apply, starRingEnd_apply, star_trivial, ← sq]
   rfl
 #align quaternion.norm_pi_Lp_equiv_symm_equiv_tuple Quaternion.norm_piLp_equiv_symm_equivTuple
+-/
 
+#print Quaternion.linearIsometryEquivTuple /-
 /-- `quaternion_algebra.linear_equiv_tuple` as a `linear_isometry_equiv`. -/
 @[simps apply symm_apply]
 noncomputable def linearIsometryEquivTuple : ℍ ≃ₗᵢ[ℝ] EuclideanSpace ℝ (Fin 4) :=
@@ -201,42 +237,57 @@ noncomputable def linearIsometryEquivTuple : ℍ ≃ₗᵢ[ℝ] EuclideanSpace 
     invFun := fun a => ⟨a 0, a 1, a 2, a 3⟩
     norm_map' := norm_piLp_equiv_symm_equivTuple }
 #align quaternion.linear_isometry_equiv_tuple Quaternion.linearIsometryEquivTuple
+-/
 
+#print Quaternion.continuous_coe /-
 @[continuity]
 theorem continuous_coe : Continuous (coe : ℝ → ℍ) :=
   continuous_algebraMap ℝ ℍ
 #align quaternion.continuous_coe Quaternion.continuous_coe
+-/
 
+#print Quaternion.continuous_normSq /-
 @[continuity]
 theorem continuous_normSq : Continuous (normSq : ℍ → ℝ) := by
   simpa [← norm_sq_eq_norm_sq] using
     (continuous_norm.mul continuous_norm : Continuous fun q : ℍ => ‖q‖ * ‖q‖)
 #align quaternion.continuous_norm_sq Quaternion.continuous_normSq
+-/
 
+#print Quaternion.continuous_re /-
 @[continuity]
 theorem continuous_re : Continuous fun q : ℍ => q.re :=
   (continuous_apply 0).comp linearIsometryEquivTuple.Continuous
 #align quaternion.continuous_re Quaternion.continuous_re
+-/
 
+#print Quaternion.continuous_imI /-
 @[continuity]
 theorem continuous_imI : Continuous fun q : ℍ => q.imI :=
   (continuous_apply 1).comp linearIsometryEquivTuple.Continuous
 #align quaternion.continuous_im_i Quaternion.continuous_imI
+-/
 
+#print Quaternion.continuous_imJ /-
 @[continuity]
 theorem continuous_imJ : Continuous fun q : ℍ => q.imJ :=
   (continuous_apply 2).comp linearIsometryEquivTuple.Continuous
 #align quaternion.continuous_im_j Quaternion.continuous_imJ
+-/
 
+#print Quaternion.continuous_imK /-
 @[continuity]
 theorem continuous_imK : Continuous fun q : ℍ => q.imK :=
   (continuous_apply 3).comp linearIsometryEquivTuple.Continuous
 #align quaternion.continuous_im_k Quaternion.continuous_imK
+-/
 
+#print Quaternion.continuous_im /-
 @[continuity]
 theorem continuous_im : Continuous fun q : ℍ => q.im := by
   simpa only [← sub_self_re] using continuous_id.sub (continuous_coe.comp continuous_re)
 #align quaternion.continuous_im Quaternion.continuous_im
+-/
 
 instance : CompleteSpace ℍ :=
   haveI : UniformEmbedding linear_isometry_equiv_tuple.to_linear_equiv.to_equiv.symm :=
@@ -247,19 +298,24 @@ section infinite_sum
 
 variable {α : Type _}
 
+#print Quaternion.hasSum_coe /-
 @[simp, norm_cast]
 theorem hasSum_coe {f : α → ℝ} {r : ℝ} : HasSum (fun a => (f a : ℍ)) (↑r : ℍ) ↔ HasSum f r :=
   ⟨fun h => by simpa only using h.map (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reₗ _ _) continuous_re,
     fun h => by simpa only using h.map (algebraMap ℝ ℍ) (continuous_algebraMap _ _)⟩
 #align quaternion.has_sum_coe Quaternion.hasSum_coe
+-/
 
+#print Quaternion.summable_coe /-
 @[simp, norm_cast]
 theorem summable_coe {f : α → ℝ} : (Summable fun a => (f a : ℍ)) ↔ Summable f := by
   simpa only using
     Summable.map_iff_of_leftInverse (algebraMap ℝ ℍ) (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reₗ _ _)
       (continuous_algebraMap _ _) continuous_re coe_re
 #align quaternion.summable_coe Quaternion.summable_coe
+-/
 
+#print Quaternion.tsum_coe /-
 @[norm_cast]
 theorem tsum_coe (f : α → ℝ) : ∑' a, (f a : ℍ) = ↑(∑' a, f a) :=
   by
@@ -267,6 +323,7 @@ theorem tsum_coe (f : α → ℝ) : ∑' a, (f a : ℍ) = ↑(∑' a, f a) :=
   · exact (has_sum_coe.mpr hf.has_sum).tsum_eq
   · simp [tsum_eq_zero_of_not_summable hf, tsum_eq_zero_of_not_summable (summable_coe.not.mpr hf)]
 #align quaternion.tsum_coe Quaternion.tsum_coe
+-/
 
 end infinite_sum
 
Diff
@@ -261,7 +261,7 @@ theorem summable_coe {f : α → ℝ} : (Summable fun a => (f a : ℍ)) ↔ Summ
 #align quaternion.summable_coe Quaternion.summable_coe
 
 @[norm_cast]
-theorem tsum_coe (f : α → ℝ) : (∑' a, (f a : ℍ)) = ↑(∑' a, f a) :=
+theorem tsum_coe (f : α → ℝ) : ∑' a, (f a : ℍ) = ↑(∑' a, f a) :=
   by
   by_cases hf : Summable f
   · exact (has_sum_coe.mpr hf.has_sum).tsum_eq
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit 07992a1d1f7a4176c6d3f160209608be4e198566
+! leanprover-community/mathlib commit 599fffe78f0e11eb6a034e834ec51882167b9688
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -16,6 +16,9 @@ import Mathbin.Topology.Algebra.Algebra
 /-!
 # Quaternions as a normed algebra
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file we define the following structures on the space `ℍ := ℍ[ℝ]` of quaternions:
 
 * inner product space;
Diff
@@ -66,9 +66,9 @@ noncomputable instance : NormedAddCommGroup ℍ :=
 noncomputable instance : InnerProductSpace ℝ ℍ :=
   InnerProductSpace.ofCore _
 
-theorem normSq_eq_normSq (a : ℍ) : normSq a = ‖a‖ * ‖a‖ := by
+theorem normSq_eq_norm_mul_self (a : ℍ) : normSq a = ‖a‖ * ‖a‖ := by
   rw [← inner_self, real_inner_self_eq_norm_mul_norm]
-#align quaternion.norm_sq_eq_norm_sq Quaternion.normSq_eq_normSq
+#align quaternion.norm_sq_eq_norm_sq Quaternion.normSq_eq_norm_mul_self
 
 instance : NormOneClass ℍ :=
   ⟨by rw [norm_eq_sqrt_real_inner, inner_self, norm_sq.map_one, Real.sqrt_one]⟩
@@ -111,60 +111,64 @@ instance : CstarRing ℍ
 instance : Coe ℂ ℍ :=
   ⟨fun z => ⟨z.re, z.im, 0, 0⟩⟩
 
+#print Quaternion.coeComplex_re /-
 @[simp, norm_cast]
-theorem coe_complex_re (z : ℂ) : (z : ℍ).re = z.re :=
+theorem coeComplex_re (z : ℂ) : (z : ℍ).re = z.re :=
   rfl
-#align quaternion.coe_complex_re Quaternion.coe_complex_re
+#align quaternion.coe_complex_re Quaternion.coeComplex_re
+-/
 
+#print Quaternion.coeComplex_imI /-
 @[simp, norm_cast]
-theorem coe_complex_imI (z : ℂ) : (z : ℍ).imI = z.im :=
+theorem coeComplex_imI (z : ℂ) : (z : ℍ).imI = z.im :=
   rfl
-#align quaternion.coe_complex_im_i Quaternion.coe_complex_imI
+#align quaternion.coe_complex_im_i Quaternion.coeComplex_imI
+-/
 
 @[simp, norm_cast]
-theorem coe_complex_imJ (z : ℂ) : (z : ℍ).imJ = 0 :=
+theorem coeComplex_imJ (z : ℂ) : (z : ℍ).imJ = 0 :=
   rfl
-#align quaternion.coe_complex_im_j Quaternion.coe_complex_imJ
+#align quaternion.coe_complex_im_j Quaternion.coeComplex_imJ
 
 @[simp, norm_cast]
-theorem coe_complex_imK (z : ℂ) : (z : ℍ).imK = 0 :=
+theorem coeComplex_imK (z : ℂ) : (z : ℍ).imK = 0 :=
   rfl
-#align quaternion.coe_complex_im_k Quaternion.coe_complex_imK
+#align quaternion.coe_complex_im_k Quaternion.coeComplex_imK
 
 @[simp, norm_cast]
-theorem coe_complex_add (z w : ℂ) : ↑(z + w) = (z + w : ℍ) := by ext <;> simp
-#align quaternion.coe_complex_add Quaternion.coe_complex_add
+theorem coeComplex_add (z w : ℂ) : ↑(z + w) = (z + w : ℍ) := by ext <;> simp
+#align quaternion.coe_complex_add Quaternion.coeComplex_add
 
 @[simp, norm_cast]
-theorem coe_complex_mul (z w : ℂ) : ↑(z * w) = (z * w : ℍ) := by ext <;> simp
-#align quaternion.coe_complex_mul Quaternion.coe_complex_mul
+theorem coeComplex_mul (z w : ℂ) : ↑(z * w) = (z * w : ℍ) := by ext <;> simp
+#align quaternion.coe_complex_mul Quaternion.coeComplex_mul
 
 @[simp, norm_cast]
-theorem coe_complex_zero : ((0 : ℂ) : ℍ) = 0 :=
+theorem coeComplex_zero : ((0 : ℂ) : ℍ) = 0 :=
   rfl
-#align quaternion.coe_complex_zero Quaternion.coe_complex_zero
+#align quaternion.coe_complex_zero Quaternion.coeComplex_zero
 
 @[simp, norm_cast]
-theorem coe_complex_one : ((1 : ℂ) : ℍ) = 1 :=
+theorem coeComplex_one : ((1 : ℂ) : ℍ) = 1 :=
   rfl
-#align quaternion.coe_complex_one Quaternion.coe_complex_one
+#align quaternion.coe_complex_one Quaternion.coeComplex_one
 
 @[simp, norm_cast]
 theorem coe_real_complex_mul (r : ℝ) (z : ℂ) : (r • z : ℍ) = ↑r * ↑z := by ext <;> simp
 #align quaternion.coe_real_complex_mul Quaternion.coe_real_complex_mul
 
 @[simp, norm_cast]
-theorem coe_complex_coe (r : ℝ) : ((r : ℂ) : ℍ) = r :=
+theorem coeComplex_coe (r : ℝ) : ((r : ℂ) : ℍ) = r :=
   rfl
-#align quaternion.coe_complex_coe Quaternion.coe_complex_coe
+#align quaternion.coe_complex_coe Quaternion.coeComplex_coe
 
 /-- Coercion `ℂ →ₐ[ℝ] ℍ` as an algebra homomorphism. -/
 def ofComplex : ℂ →ₐ[ℝ] ℍ where
   toFun := coe
   map_one' := rfl
   map_zero' := rfl
-  map_add' := coe_complex_add
-  map_mul' := coe_complex_mul
+  map_add' := coeComplex_add
+  map_mul' := coeComplex_mul
   commutes' x := rfl
 #align quaternion.of_complex Quaternion.ofComplex
 
Diff
@@ -39,7 +39,7 @@ quaternion, normed ring, normed space, normed algebra
 -- mathport name: quaternion.real
 scoped[Quaternion] notation "ℍ" => Quaternion ℝ
 
-open RealInnerProductSpace
+open scoped RealInnerProductSpace
 
 namespace Quaternion
 
Diff
@@ -43,7 +43,7 @@ open RealInnerProductSpace
 
 namespace Quaternion
 
-instance : HasInner ℝ ℍ :=
+instance : Inner ℝ ℍ :=
   ⟨fun a b => (a * star b).re⟩
 
 theorem inner_self (a : ℍ) : ⟪a, a⟫ = normSq a :=
Diff
@@ -242,17 +242,15 @@ variable {α : Type _}
 
 @[simp, norm_cast]
 theorem hasSum_coe {f : α → ℝ} {r : ℝ} : HasSum (fun a => (f a : ℍ)) (↑r : ℍ) ↔ HasSum f r :=
-  ⟨fun h => by
-    simpa only using h.map (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reLm _ _) continuous_re, fun h =>
-    by simpa only using h.map (algebraMap ℝ ℍ) (continuous_algebraMap _ _)⟩
+  ⟨fun h => by simpa only using h.map (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reₗ _ _) continuous_re,
+    fun h => by simpa only using h.map (algebraMap ℝ ℍ) (continuous_algebraMap _ _)⟩
 #align quaternion.has_sum_coe Quaternion.hasSum_coe
 
 @[simp, norm_cast]
 theorem summable_coe {f : α → ℝ} : (Summable fun a => (f a : ℍ)) ↔ Summable f := by
   simpa only using
-    Summable.map_iff_of_leftInverse (algebraMap ℝ ℍ)
-      (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reLm _ _) (continuous_algebraMap _ _) continuous_re
-      coe_re
+    Summable.map_iff_of_leftInverse (algebraMap ℝ ℍ) (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reₗ _ _)
+      (continuous_algebraMap _ _) continuous_re coe_re
 #align quaternion.summable_coe Quaternion.summable_coe
 
 @[norm_cast]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit cf7a7252c1989efe5800e0b3cdfeb4228ac6b40e
+! leanprover-community/mathlib commit 07992a1d1f7a4176c6d3f160209608be4e198566
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -55,8 +55,8 @@ theorem inner_def (a b : ℍ) : ⟪a, b⟫ = (a * star b).re :=
 #align quaternion.inner_def Quaternion.inner_def
 
 noncomputable instance : NormedAddCommGroup ℍ :=
-  @InnerProductSpace.OfCore.toNormedAddCommGroup ℝ ℍ _ _ _
-    { inner := HasInner.inner
+  @InnerProductSpace.Core.toNormedAddCommGroup ℝ ℍ _ _ _
+    { toHasInner := inferInstance
       conj_symm := fun x y => by simp [inner_def, mul_comm]
       nonneg_re := fun x => normSq_nonneg
       definite := fun x => normSq_eq_zero.1
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit d3af0609f6db8691dffdc3e1fb7feb7da72698f2
+! leanprover-community/mathlib commit cf7a7252c1989efe5800e0b3cdfeb4228ac6b40e
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -44,13 +44,13 @@ open RealInnerProductSpace
 namespace Quaternion
 
 instance : HasInner ℝ ℍ :=
-  ⟨fun a b => (a * b.conj).re⟩
+  ⟨fun a b => (a * star b).re⟩
 
 theorem inner_self (a : ℍ) : ⟪a, a⟫ = normSq a :=
   rfl
 #align quaternion.inner_self Quaternion.inner_self
 
-theorem inner_def (a b : ℍ) : ⟪a, b⟫ = (a * b.conj).re :=
+theorem inner_def (a b : ℍ) : ⟪a, b⟫ = (a * star b).re :=
   rfl
 #align quaternion.inner_def Quaternion.inner_def
 
@@ -84,14 +84,14 @@ theorem nnnorm_coe (a : ℝ) : ‖(a : ℍ)‖₊ = ‖a‖₊ :=
 #align quaternion.nnnorm_coe Quaternion.nnnorm_coe
 
 @[simp]
-theorem norm_conj (a : ℍ) : ‖conj a‖ = ‖a‖ := by
-  simp_rw [norm_eq_sqrt_real_inner, inner_self, norm_sq_conj]
-#align quaternion.norm_conj Quaternion.norm_conj
+theorem norm_star (a : ℍ) : ‖star a‖ = ‖a‖ := by
+  simp_rw [norm_eq_sqrt_real_inner, inner_self, norm_sq_star]
+#align quaternion.norm_star Quaternion.norm_star
 
 @[simp]
-theorem nnnorm_conj (a : ℍ) : ‖conj a‖₊ = ‖a‖₊ :=
-  Subtype.ext <| norm_conj a
-#align quaternion.nnnorm_conj Quaternion.nnnorm_conj
+theorem nnnorm_star (a : ℍ) : ‖star a‖₊ = ‖a‖₊ :=
+  Subtype.ext <| norm_star a
+#align quaternion.nnnorm_star Quaternion.nnnorm_star
 
 noncomputable instance : NormedDivisionRing ℍ
     where
@@ -106,7 +106,7 @@ instance : NormedAlgebra ℝ ℍ where
   toAlgebra := (Quaternion.algebra : Algebra ℝ ℍ)
 
 instance : CstarRing ℍ
-    where norm_star_mul_self x := (norm_mul _ _).trans <| congr_arg (· * ‖x‖) (norm_conj x)
+    where norm_star_mul_self x := (norm_mul _ _).trans <| congr_arg (· * ‖x‖) (norm_star x)
 
 instance : Coe ℂ ℍ :=
   ⟨fun z => ⟨z.re, z.im, 0, 0⟩⟩
@@ -195,11 +195,6 @@ noncomputable def linearIsometryEquivTuple : ℍ ≃ₗᵢ[ℝ] EuclideanSpace 
     norm_map' := norm_piLp_equiv_symm_equivTuple }
 #align quaternion.linear_isometry_equiv_tuple Quaternion.linearIsometryEquivTuple
 
-@[continuity]
-theorem continuous_conj : Continuous (conj : ℍ → ℍ) :=
-  continuous_star
-#align quaternion.continuous_conj Quaternion.continuous_conj
-
 @[continuity]
 theorem continuous_coe : Continuous (coe : ℝ → ℍ) :=
   continuous_algebraMap ℝ ℍ
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit da3fc4a33ff6bc75f077f691dc94c217b8d41559
+! leanprover-community/mathlib commit d3af0609f6db8691dffdc3e1fb7feb7da72698f2
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -54,8 +54,8 @@ theorem inner_def (a b : ℍ) : ⟪a, b⟫ = (a * b.conj).re :=
   rfl
 #align quaternion.inner_def Quaternion.inner_def
 
-noncomputable instance : InnerProductSpace ℝ ℍ :=
-  InnerProductSpace.ofCore
+noncomputable instance : NormedAddCommGroup ℍ :=
+  @InnerProductSpace.OfCore.toNormedAddCommGroup ℝ ℍ _ _ _
     { inner := HasInner.inner
       conj_symm := fun x y => by simp [inner_def, mul_comm]
       nonneg_re := fun x => normSq_nonneg
@@ -63,6 +63,9 @@ noncomputable instance : InnerProductSpace ℝ ℍ :=
       add_left := fun x y z => by simp only [inner_def, add_mul, add_re]
       smul_left := fun x y r => by simp [inner_def] }
 
+noncomputable instance : InnerProductSpace ℝ ℍ :=
+  InnerProductSpace.ofCore _
+
 theorem normSq_eq_normSq (a : ℍ) : normSq a = ‖a‖ * ‖a‖ := by
   rw [← inner_self, real_inner_self_eq_norm_mul_norm]
 #align quaternion.norm_sq_eq_norm_sq Quaternion.normSq_eq_normSq
@@ -98,9 +101,8 @@ noncomputable instance : NormedDivisionRing ℍ
     simp only [norm_eq_sqrt_real_inner, inner_self, norm_sq.map_mul]
     exact Real.sqrt_mul norm_sq_nonneg _
 
-instance : NormedAlgebra ℝ ℍ
-    where
-  norm_smul_le a x := (norm_smul a x).le
+instance : NormedAlgebra ℝ ℍ where
+  norm_smul_le := norm_smul_le
   toAlgebra := (Quaternion.algebra : Algebra ℝ ℍ)
 
 instance : CstarRing ℍ
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit 3fc0b254310908f70a1a75f01147d52e53e9f8a2
+! leanprover-community/mathlib commit da3fc4a33ff6bc75f077f691dc94c217b8d41559
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -239,5 +239,34 @@ instance : CompleteSpace ℍ :=
     linear_isometry_equiv_tuple.to_continuous_linear_equiv.symm.uniform_embedding
   (completeSpace_congr this).1 (by infer_instance)
 
+section infinite_sum
+
+variable {α : Type _}
+
+@[simp, norm_cast]
+theorem hasSum_coe {f : α → ℝ} {r : ℝ} : HasSum (fun a => (f a : ℍ)) (↑r : ℍ) ↔ HasSum f r :=
+  ⟨fun h => by
+    simpa only using h.map (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reLm _ _) continuous_re, fun h =>
+    by simpa only using h.map (algebraMap ℝ ℍ) (continuous_algebraMap _ _)⟩
+#align quaternion.has_sum_coe Quaternion.hasSum_coe
+
+@[simp, norm_cast]
+theorem summable_coe {f : α → ℝ} : (Summable fun a => (f a : ℍ)) ↔ Summable f := by
+  simpa only using
+    Summable.map_iff_of_leftInverse (algebraMap ℝ ℍ)
+      (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reLm _ _) (continuous_algebraMap _ _) continuous_re
+      coe_re
+#align quaternion.summable_coe Quaternion.summable_coe
+
+@[norm_cast]
+theorem tsum_coe (f : α → ℝ) : (∑' a, (f a : ℍ)) = ↑(∑' a, f a) :=
+  by
+  by_cases hf : Summable f
+  · exact (has_sum_coe.mpr hf.has_sum).tsum_eq
+  · simp [tsum_eq_zero_of_not_summable hf, tsum_eq_zero_of_not_summable (summable_coe.not.mpr hf)]
+#align quaternion.tsum_coe Quaternion.tsum_coe
+
+end infinite_sum
+
 end Quaternion
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit d90149e913bf65828b011379540c3379e01105fd
+! leanprover-community/mathlib commit 3fc0b254310908f70a1a75f01147d52e53e9f8a2
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -57,7 +57,7 @@ theorem inner_def (a b : ℍ) : ⟪a, b⟫ = (a * b.conj).re :=
 noncomputable instance : InnerProductSpace ℝ ℍ :=
   InnerProductSpace.ofCore
     { inner := HasInner.inner
-      conj_sym := fun x y => by simp [inner_def, mul_comm]
+      conj_symm := fun x y => by simp [inner_def, mul_comm]
       nonneg_re := fun x => normSq_nonneg
       definite := fun x => normSq_eq_zero.1
       add_left := fun x y z => by simp only [inner_def, add_mul, add_re]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit 48085f140e684306f9e7da907cd5932056d1aded
+! leanprover-community/mathlib commit d90149e913bf65828b011379540c3379e01105fd
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -229,6 +229,11 @@ theorem continuous_imK : Continuous fun q : ℍ => q.imK :=
   (continuous_apply 3).comp linearIsometryEquivTuple.Continuous
 #align quaternion.continuous_im_k Quaternion.continuous_imK
 
+@[continuity]
+theorem continuous_im : Continuous fun q : ℍ => q.im := by
+  simpa only [← sub_self_re] using continuous_id.sub (continuous_coe.comp continuous_re)
+#align quaternion.continuous_im Quaternion.continuous_im
+
 instance : CompleteSpace ℍ :=
   haveI : UniformEmbedding linear_isometry_equiv_tuple.to_linear_equiv.to_equiv.symm :=
     linear_isometry_equiv_tuple.to_continuous_linear_equiv.symm.uniform_embedding

Changes in mathlib4

mathlib3
mathlib4
chore: remove mathport name: <expression> lines (#11928)

Quoting [@digama0](https://github.com/digama0):

These were actually never meant to go in the file, they are basically debugging information and only useful on significantly broken mathport files. You can safely remove all of them.

Diff
@@ -33,7 +33,6 @@ quaternion, normed ring, normed space, normed algebra
 -/
 
 
--- mathport name: quaternion.real
 @[inherit_doc] scoped[Quaternion] notation "ℍ" => Quaternion ℝ
 
 open scoped RealInnerProductSpace
chore: Rename IsROrC to RCLike (#10819)

IsROrC contains data, which goes against the expectation that classes prefixed with Is are prop-valued. People have been complaining about this on and off, so this PR renames IsROrC to RCLike.

Diff
@@ -175,7 +175,7 @@ theorem norm_piLp_equiv_symm_equivTuple (x : ℍ) :
     ‖(WithLp.equiv 2 (Fin 4 → _)).symm (equivTuple ℝ x)‖ = ‖x‖ := by
   rw [norm_eq_sqrt_real_inner, norm_eq_sqrt_real_inner, inner_self, normSq_def', PiLp.inner_apply,
     Fin.sum_univ_four]
-  simp_rw [IsROrC.inner_apply, starRingEnd_apply, star_trivial, ← sq]
+  simp_rw [RCLike.inner_apply, starRingEnd_apply, star_trivial, ← sq]
   rfl
 set_option linter.uppercaseLean3 false in
 #align quaternion.norm_pi_Lp_equiv_symm_equiv_tuple Quaternion.norm_piLp_equiv_symm_equivTuple
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -96,7 +96,7 @@ noncomputable instance : NormedDivisionRing ℍ where
     simp only [norm_eq_sqrt_real_inner, inner_self, normSq.map_mul]
     exact Real.sqrt_mul normSq_nonneg _
 
--- porting note: added `noncomputable`
+-- Porting note: added `noncomputable`
 noncomputable instance : NormedAlgebra ℝ ℍ where
   norm_smul_le := norm_smul_le
   toAlgebra := Quaternion.algebra
chore: classify simp cannot prove porting notes (#10960)

Classifies by adding issue number #10959 porting notes claiming anything semantically equivalent to:

  • "simp cannot prove this"
  • "simp used to be able to close this goal"
  • "simp can't handle this"
  • "simp used to work here"
Diff
@@ -80,12 +80,12 @@ theorem nnnorm_coe (a : ℝ) : ‖(a : ℍ)‖₊ = ‖a‖₊ :=
   Subtype.ext <| norm_coe a
 #align quaternion.nnnorm_coe Quaternion.nnnorm_coe
 
-@[simp, nolint simpNF] -- Porting note: simp cannot prove this
+@[simp, nolint simpNF] -- Porting note (#10959): simp cannot prove this
 theorem norm_star (a : ℍ) : ‖star a‖ = ‖a‖ := by
   simp_rw [norm_eq_sqrt_real_inner, inner_self, normSq_star]
 #align quaternion.norm_star Quaternion.norm_star
 
-@[simp, nolint simpNF] -- Porting note: simp cannot prove this
+@[simp, nolint simpNF] -- Porting note (#10959): simp cannot prove this
 theorem nnnorm_star (a : ℍ) : ‖star a‖₊ = ‖a‖₊ :=
   Subtype.ext <| norm_star a
 #align quaternion.nnnorm_star Quaternion.nnnorm_star
@@ -147,7 +147,7 @@ theorem coeComplex_one : ((1 : ℂ) : ℍ) = 1 :=
   rfl
 #align quaternion.coe_complex_one Quaternion.coeComplex_one
 
-@[simp, norm_cast, nolint simpNF] -- Porting note: simp cannot prove this
+@[simp, norm_cast, nolint simpNF] -- Porting note (#10959): simp cannot prove this
 theorem coe_real_complex_mul (r : ℝ) (z : ℂ) : (r • z : ℍ) = ↑r * ↑z := by ext <;> simp
 #align quaternion.coe_real_complex_mul Quaternion.coe_real_complex_mul
 
doc: @[inherit_doc] on notations (#9942)

Make all the notations that unambiguously should inherit the docstring of their definition actually inherit it.

Also write a few docstrings by hand. I only wrote the ones I was competent to write and which I was sure of. Some docstrings come from mathlib3 as they were lost during the early port.

This PR is only intended as a first pass There are many more docstrings to add.

Diff
@@ -34,7 +34,7 @@ quaternion, normed ring, normed space, normed algebra
 
 
 -- mathport name: quaternion.real
-scoped[Quaternion] notation "ℍ" => Quaternion ℝ
+@[inherit_doc] scoped[Quaternion] notation "ℍ" => Quaternion ℝ
 
 open scoped RealInnerProductSpace
 
refactor: remove PiLp.equiv (#6501)

This removes the (PiLp.equiv 2 fun i => α i) abbreviation, replacing it with its implementation (WithLp.equiv 2 (∀ i, α i)). The same thing is done for PiLp.linearEquiv.

Diff
@@ -172,7 +172,7 @@ theorem coe_ofComplex : ⇑ofComplex = coeComplex := rfl
 
 /-- The norm of the components as a euclidean vector equals the norm of the quaternion. -/
 theorem norm_piLp_equiv_symm_equivTuple (x : ℍ) :
-    ‖(PiLp.equiv 2 fun _ : Fin 4 => _).symm (equivTuple ℝ x)‖ = ‖x‖ := by
+    ‖(WithLp.equiv 2 (Fin 4 → _)).symm (equivTuple ℝ x)‖ = ‖x‖ := by
   rw [norm_eq_sqrt_real_inner, norm_eq_sqrt_real_inner, inner_self, normSq_def', PiLp.inner_apply,
     Fin.sum_univ_four]
   simp_rw [IsROrC.inner_apply, starRingEnd_apply, star_trivial, ← sq]
@@ -184,8 +184,8 @@ set_option linter.uppercaseLean3 false in
 @[simps apply symm_apply]
 noncomputable def linearIsometryEquivTuple : ℍ ≃ₗᵢ[ℝ] EuclideanSpace ℝ (Fin 4) :=
   { (QuaternionAlgebra.linearEquivTuple (-1 : ℝ) (-1 : ℝ)).trans
-      (PiLp.linearEquiv 2 ℝ fun _ : Fin 4 => ℝ).symm with
-    toFun := fun a => (PiLp.equiv _ fun _ : Fin 4 => _).symm ![a.1, a.2, a.3, a.4]
+      (WithLp.linearEquiv 2 ℝ (Fin 4 → ℝ)).symm with
+    toFun := fun a => (WithLp.equiv _ (Fin 4 → _)).symm ![a.1, a.2, a.3, a.4]
     invFun := fun a => ⟨a 0, a 1, a 2, a 3⟩
     norm_map' := norm_piLp_equiv_symm_equivTuple }
 #align quaternion.linear_isometry_equiv_tuple Quaternion.linearIsometryEquivTuple
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
@@ -233,7 +233,7 @@ instance : CompleteSpace ℍ :=
 
 section infinite_sum
 
-variable {α : Type _}
+variable {α : Type*}
 
 @[simp, norm_cast]
 theorem hasSum_coe {f : α → ℝ} {r : ℝ} : HasSum (fun a => (f a : ℍ)) (↑r : ℍ) ↔ HasSum f r :=
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,17 +2,14 @@
 Copyright (c) 2020 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov, Eric Wieser
-
-! This file was ported from Lean 3 source module analysis.quaternion
-! leanprover-community/mathlib commit 07992a1d1f7a4176c6d3f160209608be4e198566
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Quaternion
 import Mathlib.Analysis.InnerProductSpace.Basic
 import Mathlib.Analysis.InnerProductSpace.PiL2
 import Mathlib.Topology.Algebra.Algebra
 
+#align_import analysis.quaternion from "leanprover-community/mathlib"@"07992a1d1f7a4176c6d3f160209608be4e198566"
+
 /-!
 # Quaternions as a normed algebra
 
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -107,7 +107,7 @@ noncomputable instance : NormedAlgebra ℝ ℍ where
 instance : CstarRing ℍ where
   norm_star_mul_self {x} := (norm_mul _ _).trans <| congr_arg (· * ‖x‖) (norm_star x)
 
-/-- Coerction from `ℂ` to `ℍ`. -/
+/-- Coercion from `ℂ` to `ℍ`. -/
 @[coe] def coeComplex (z : ℂ) : ℍ := ⟨z.re, z.im, 0, 0⟩
 
 instance : Coe ℂ ℍ := ⟨coeComplex⟩
feat: port Analysis.Quaternion (#4515)

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Dependencies 12 + 910

911 files ported (98.7%)
404428 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