analysis.special_functions.exponential ⟷ Mathlib.Analysis.SpecialFunctions.Exponential

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker, Eric Wieser
 -/
 import Analysis.NormedSpace.Exponential
-import Analysis.Calculus.FderivAnalytic
+import Analysis.Calculus.FDeriv.Analytic
 import Topology.MetricSpace.CauSeqFilter
 
 #align_import analysis.special_functions.exponential from "leanprover-community/mathlib"@"c20927220ef87bb4962ba08bf6da2ce3cf50a6dd"
@@ -56,7 +56,7 @@ We prove most result for an arbitrary field `𝕂`, and then specialize to `𝕂
 -/
 
 
-open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
+open Filter RCLike ContinuousMultilinearMap NormedField Asymptotics
 
 open scoped Nat Topology BigOperators ENNReal
 
@@ -184,7 +184,7 @@ end deriv
 
 section IsROrCAnyAlgebra
 
-variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
+variable {𝕂 𝔸 : Type _} [RCLike 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
 #print hasStrictFDerivAt_exp_zero /-
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet-derivative
@@ -206,7 +206,7 @@ end IsROrCAnyAlgebra
 
 section IsROrCCommAlgebra
 
-variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
+variable {𝕂 𝔸 : Type _} [RCLike 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
 #print hasStrictFDerivAt_exp /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
@@ -231,7 +231,7 @@ end IsROrCCommAlgebra
 
 section DerivROrC
 
-variable {𝕂 : Type _} [IsROrC 𝕂]
+variable {𝕂 : Type _} [RCLike 𝕂]
 
 #print hasStrictDerivAt_exp /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 x` at any point
@@ -448,9 +448,9 @@ theorem hasDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
 
 end MemBall
 
-section IsROrC
+section RCLike
 
-variable [IsROrC 𝕂]
+variable [RCLike 𝕂]
 
 variable [NormedCommRing π•Š] [NormedRing 𝔸]
 
@@ -532,7 +532,7 @@ theorem hasDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
 #align has_deriv_at_exp_smul_const' hasDerivAt_exp_smul_const'
 -/
 
-end IsROrC
+end RCLike
 
 end NormedSpace.exp_smul
 
Diff
@@ -68,21 +68,21 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [
 #print hasStrictFDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has strict FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
-theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
-    HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (NormedSpace.exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   by
-  convert (hasFPowerSeriesAt_exp_zero_of_radius_pos h).HasStrictFDerivAt
+  convert (NormedSpace.hasFPowerSeriesAt_exp_zero_of_radius_pos h).HasStrictFDerivAt
   ext x
-  change x = expSeries 𝕂 𝔸 1 fun _ => x
-  simp [expSeries_apply_eq]
+  change x = NormedSpace.expSeries 𝕂 𝔸 1 fun _ => x
+  simp [NormedSpace.expSeries_apply_eq]
 #align has_strict_fderiv_at_exp_zero_of_radius_pos hasStrictFDerivAt_exp_zero_of_radius_pos
 -/
 
 #print hasFDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
-theorem hasFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
-    HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+theorem hasFDerivAt_exp_zero_of_radius_pos (h : 0 < (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (NormedSpace.exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   (hasStrictFDerivAt_exp_zero_of_radius_pos h).HasFDerivAt
 #align has_fderiv_at_exp_zero_of_radius_pos hasFDerivAt_exp_zero_of_radius_pos
 -/
@@ -99,22 +99,27 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedCommRing 
 characteristic zero has FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in the
 disk of convergence. -/
 theorem hasFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
-    (hx : x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+    (hx : x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   by
-  have hpos : 0 < (expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt hx
+  have hpos : 0 < (NormedSpace.expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt hx
   rw [hasFDerivAt_iff_isLittleO_nhds_zero]
   suffices
-    (fun h => exp 𝕂 x * (exp 𝕂 (0 + h) - exp 𝕂 0 - ContinuousLinearMap.id 𝕂 𝔸 h)) =αΆ [𝓝 0] fun h =>
-      exp 𝕂 (x + h) - exp 𝕂 x - exp 𝕂 x β€’ ContinuousLinearMap.id 𝕂 𝔸 h
+    (fun h =>
+        NormedSpace.exp 𝕂 x *
+          (NormedSpace.exp 𝕂 (0 + h) - NormedSpace.exp 𝕂 0 - ContinuousLinearMap.id 𝕂 𝔸 h)) =αΆ [𝓝 0]
+      fun h =>
+      NormedSpace.exp 𝕂 (x + h) - NormedSpace.exp 𝕂 x -
+        NormedSpace.exp 𝕂 x β€’ ContinuousLinearMap.id 𝕂 𝔸 h
     by
     refine' (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _)
     rw [← hasFDerivAt_iff_isLittleO_nhds_zero]
     exact hasFDerivAt_exp_zero_of_radius_pos hpos
-  have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
+  have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius :=
     EMetric.ball_mem_nhds _ hpos
   filter_upwards [this] with _ hh
-  rw [exp_add_of_mem_ball hx hh, exp_zero, zero_add, ContinuousLinearMap.id_apply, smul_eq_mul]
+  rw [NormedSpace.exp_add_of_mem_ball hx hh, NormedSpace.exp_zero, zero_add,
+    ContinuousLinearMap.id_apply, smul_eq_mul]
   ring
 #align has_fderiv_at_exp_of_mem_ball hasFDerivAt_exp_of_mem_ball
 -/
@@ -124,9 +129,9 @@ theorem hasFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
 characteristic zero has strict FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in
 the disk of convergence. -/
 theorem hasStrictFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
-    (hx : x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasStrictFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
-  let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball x hx
+    (hx : x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+  let ⟨p, hp⟩ := NormedSpace.analyticAt_exp_of_mem_ball x hx
   hp.HasFDerivAt.unique (hasFDerivAt_exp_of_mem_ball hx) β–Έ hp.HasStrictFDerivAt
 #align has_strict_fderiv_at_exp_of_mem_ball hasStrictFDerivAt_exp_of_mem_ball
 -/
@@ -141,8 +146,9 @@ variable {𝕂 : Type _} [NontriviallyNormedField 𝕂] [CompleteSpace 𝕂]
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasStrictDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
-    (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
-  by simpa using (hasStrictFDerivAt_exp_of_mem_ball hx).HasStrictDerivAt
+    (hx : x ∈ EMetric.ball (0 : 𝕂) (NormedSpace.expSeries 𝕂 𝕂).radius) :
+    HasStrictDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x) x := by
+  simpa using (hasStrictFDerivAt_exp_of_mem_ball hx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_of_mem_ball hasStrictDerivAt_exp_of_mem_ball
 -/
 
@@ -150,7 +156,8 @@ theorem hasStrictDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
-    (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
+    (hx : x ∈ EMetric.ball (0 : 𝕂) (NormedSpace.expSeries 𝕂 𝕂).radius) :
+    HasDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x) x :=
   (hasStrictDerivAt_exp_of_mem_ball hx).HasDerivAt
 #align has_deriv_at_exp_of_mem_ball hasDerivAt_exp_of_mem_ball
 -/
@@ -158,8 +165,8 @@ theorem hasDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
 #print hasStrictDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
 `1` at zero, as long as it converges on a neighborhood of zero. -/
-theorem hasStrictDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).radius) :
-    HasStrictDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
+theorem hasStrictDerivAt_exp_zero_of_radius_pos (h : 0 < (NormedSpace.expSeries 𝕂 𝕂).radius) :
+    HasStrictDerivAt (NormedSpace.exp 𝕂) (1 : 𝕂) 0 :=
   (hasStrictFDerivAt_exp_zero_of_radius_pos h).HasStrictDerivAt
 #align has_strict_deriv_at_exp_zero_of_radius_pos hasStrictDerivAt_exp_zero_of_radius_pos
 -/
@@ -167,8 +174,8 @@ theorem hasStrictDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).r
 #print hasDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
 `1` at zero, as long as it converges on a neighborhood of zero. -/
-theorem hasDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).radius) :
-    HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
+theorem hasDerivAt_exp_zero_of_radius_pos (h : 0 < (NormedSpace.expSeries 𝕂 𝕂).radius) :
+    HasDerivAt (NormedSpace.exp 𝕂) (1 : 𝕂) 0 :=
   (hasStrictDerivAt_exp_zero_of_radius_pos h).HasDerivAt
 #align has_deriv_at_exp_zero_of_radius_pos hasDerivAt_exp_zero_of_radius_pos
 -/
@@ -182,15 +189,15 @@ variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 
 #print hasStrictFDerivAt_exp_zero /-
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
-theorem hasStrictFDerivAt_exp_zero : HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
-  hasStrictFDerivAt_exp_zero_of_radius_pos (expSeries_radius_pos 𝕂 𝔸)
+theorem hasStrictFDerivAt_exp_zero : HasStrictFDerivAt (NormedSpace.exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+  hasStrictFDerivAt_exp_zero_of_radius_pos (NormedSpace.expSeries_radius_pos 𝕂 𝔸)
 #align has_strict_fderiv_at_exp_zero hasStrictFDerivAt_exp_zero
 -/
 
 #print hasFDerivAt_exp_zero /-
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
-theorem hasFDerivAt_exp_zero : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+theorem hasFDerivAt_exp_zero : HasFDerivAt (NormedSpace.exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   hasStrictFDerivAt_exp_zero.HasFDerivAt
 #align has_fderiv_at_exp_zero hasFDerivAt_exp_zero
 -/
@@ -204,15 +211,18 @@ variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra
 #print hasStrictFDerivAt_exp /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
 FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
-theorem hasStrictFDerivAt_exp {x : 𝔸} : HasStrictFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
-  hasStrictFDerivAt_exp_of_mem_ball ((expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _)
+theorem hasStrictFDerivAt_exp {x : 𝔸} :
+    HasStrictFDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+  hasStrictFDerivAt_exp_of_mem_ball
+    ((NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _)
 #align has_strict_fderiv_at_exp hasStrictFDerivAt_exp
 -/
 
 #print hasFDerivAt_exp /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has
 FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
-theorem hasFDerivAt_exp {x : 𝔸} : HasFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+theorem hasFDerivAt_exp {x : 𝔸} :
+    HasFDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   hasStrictFDerivAt_exp.HasFDerivAt
 #align has_fderiv_at_exp hasFDerivAt_exp
 -/
@@ -226,28 +236,30 @@ variable {𝕂 : Type _} [IsROrC 𝕂]
 #print hasStrictDerivAt_exp /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 x` at any point
 `x`. -/
-theorem hasStrictDerivAt_exp {x : 𝕂} : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
-  hasStrictDerivAt_exp_of_mem_ball ((expSeries_radius_eq_top 𝕂 𝕂).symm β–Έ edist_lt_top _ _)
+theorem hasStrictDerivAt_exp {x : 𝕂} :
+    HasStrictDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x) x :=
+  hasStrictDerivAt_exp_of_mem_ball
+    ((NormedSpace.expSeries_radius_eq_top 𝕂 𝕂).symm β–Έ edist_lt_top _ _)
 #align has_strict_deriv_at_exp hasStrictDerivAt_exp
 -/
 
 #print hasDerivAt_exp /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `exp 𝕂 x` at any point `x`. -/
-theorem hasDerivAt_exp {x : 𝕂} : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
+theorem hasDerivAt_exp {x : 𝕂} : HasDerivAt (NormedSpace.exp 𝕂) (NormedSpace.exp 𝕂 x) x :=
   hasStrictDerivAt_exp.HasDerivAt
 #align has_deriv_at_exp hasDerivAt_exp
 -/
 
 #print hasStrictDerivAt_exp_zero /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `1` at zero. -/
-theorem hasStrictDerivAt_exp_zero : HasStrictDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
-  hasStrictDerivAt_exp_zero_of_radius_pos (expSeries_radius_pos 𝕂 𝕂)
+theorem hasStrictDerivAt_exp_zero : HasStrictDerivAt (NormedSpace.exp 𝕂) (1 : 𝕂) 0 :=
+  hasStrictDerivAt_exp_zero_of_radius_pos (NormedSpace.expSeries_radius_pos 𝕂 𝕂)
 #align has_strict_deriv_at_exp_zero hasStrictDerivAt_exp_zero
 -/
 
 #print hasDerivAt_exp_zero /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `1` at zero. -/
-theorem hasDerivAt_exp_zero : HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
+theorem hasDerivAt_exp_zero : HasDerivAt (NormedSpace.exp 𝕂) (1 : 𝕂) 0 :=
   hasStrictDerivAt_exp_zero.HasDerivAt
 #align has_deriv_at_exp_zero hasDerivAt_exp_zero
 -/
@@ -255,16 +267,18 @@ theorem hasDerivAt_exp_zero : HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
 end DerivROrC
 
 #print Complex.exp_eq_exp_β„‚ /-
-theorem Complex.exp_eq_exp_β„‚ : Complex.exp = exp β„‚ :=
+theorem Complex.exp_eq_exp_β„‚ : Complex.exp = NormedSpace.exp β„‚ :=
   by
   refine' funext fun x => _
-  rw [Complex.exp, exp_eq_tsum_div]
-  exact tendsto_nhds_unique x.exp'.tendsto_limit (expSeries_div_summable ℝ x).HasSum.tendsto_sum_nat
+  rw [Complex.exp, NormedSpace.exp_eq_tsum_div]
+  exact
+    tendsto_nhds_unique x.exp'.tendsto_limit
+      (NormedSpace.expSeries_div_summable ℝ x).HasSum.tendsto_sum_nat
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
 -/
 
 #print Real.exp_eq_exp_ℝ /-
-theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ := by ext x;
+theorem Real.exp_eq_exp_ℝ : Real.exp = NormedSpace.exp ℝ := by ext x;
   exact_mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
 #align real.exp_eq_exp_ℝ Real.exp_eq_exp_ℝ
 -/
@@ -291,7 +305,7 @@ TODO: prove this result too!
 -/
 
 
-section exp_smul
+section NormedSpace.exp_smul
 
 variable {𝕂 π•Š 𝔸 : Type _}
 
@@ -315,25 +329,28 @@ variable [CompleteSpace 𝔸]
 
 #print hasFDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (NormedSpace.exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
   by
   -- TODO: prove this via `has_fderiv_at_exp_of_mem_ball` using the commutative ring
   -- `algebra.elemental_algebra π•Š x`. See leanprover-community/mathlib#19062 for discussion.
-  have hpos : 0 < (expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt htx
+  have hpos : 0 < (NormedSpace.expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt htx
   rw [hasFDerivAt_iff_isLittleO_nhds_zero]
   suffices
     (fun h =>
-        exp 𝕂 (t β€’ x) *
-          (exp 𝕂 ((0 + h) β€’ x) - exp 𝕂 ((0 : π•Š) β€’ x) - ((1 : π•Š β†’L[𝕂] π•Š).smul_right x) h)) =αΆ [𝓝 0]
+        NormedSpace.exp 𝕂 (t β€’ x) *
+          (NormedSpace.exp 𝕂 ((0 + h) β€’ x) - NormedSpace.exp 𝕂 ((0 : π•Š) β€’ x) -
+            ((1 : π•Š β†’L[𝕂] π•Š).smul_right x) h)) =αΆ [𝓝 0]
       fun h =>
-      exp 𝕂 ((t + h) β€’ x) - exp 𝕂 (t β€’ x) - (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) h
+      NormedSpace.exp 𝕂 ((t + h) β€’ x) - NormedSpace.exp 𝕂 (t β€’ x) -
+        (NormedSpace.exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) h
     by
     refine' (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _)
     rw [←
-      @hasFDerivAt_iff_isLittleO_nhds_zero _ _ _ _ _ _ _ _ (fun u => exp 𝕂 (u β€’ x))
+      @hasFDerivAt_iff_isLittleO_nhds_zero _ _ _ _ _ _ _ _ (fun u => NormedSpace.exp 𝕂 (u β€’ x))
         ((1 : π•Š β†’L[𝕂] π•Š).smul_right x) 0]
-    have : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) ((1 : π•Š β†’L[𝕂] π•Š).smul_right x 0) :=
+    have : HasFDerivAt (NormedSpace.exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) ((1 : π•Š β†’L[𝕂] π•Š).smul_right x 0) :=
       by
       rw [ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply, zero_smul]
       exact hasFDerivAt_exp_zero_of_radius_pos hpos
@@ -342,13 +359,13 @@ theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
     by
     rw [← zero_smul π•Š x]
     exact tendsto_id.smul_const x
-  have : βˆ€αΆ  h in 𝓝 (0 : π•Š), h β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
+  have : βˆ€αΆ  h in 𝓝 (0 : π•Š), h β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius :=
     this.eventually (EMetric.ball_mem_nhds _ hpos)
   filter_upwards [this]
   intro h hh
   have : Commute (t β€’ x) (h β€’ x) := ((Commute.refl x).smul_left t).smul_right h
-  rw [add_smul t h, exp_add_of_commute_of_mem_ball this htx hh, zero_add, zero_smul, exp_zero,
-    ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply,
+  rw [add_smul t h, NormedSpace.exp_add_of_commute_of_mem_ball this htx hh, zero_add, zero_smul,
+    NormedSpace.exp_zero, ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply,
     ContinuousLinearMap.smul_apply, ContinuousLinearMap.smulRight_apply,
     ContinuousLinearMap.one_apply, smul_eq_mul, mul_sub_left_distrib, mul_sub_left_distrib, mul_one]
 #align has_fderiv_at_exp_smul_const_of_mem_ball hasFDerivAt_exp_smul_const_of_mem_ball
@@ -356,26 +373,26 @@ theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
 
 #print hasFDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
-      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (NormedSpace.exp 𝕂 (t β€’ x))) t :=
   by
   convert hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ htx using 1
   ext t'
-  show Commute (t' β€’ x) (exp 𝕂 (t β€’ x))
+  show Commute (t' β€’ x) (NormedSpace.exp 𝕂 (t β€’ x))
   exact (((Commute.refl x).smul_left t').smul_right t).exp_right 𝕂
 #align has_fderiv_at_exp_smul_const_of_mem_ball' hasFDerivAt_exp_smul_const_of_mem_ball'
 -/
 
 #print hasStrictFDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x)
-      t :=
-  let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball (t β€’ x) htx
-  have deriv₁ : HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) _ t :=
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (NormedSpace.exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
+  let ⟨p, hp⟩ := NormedSpace.analyticAt_exp_of_mem_ball (t β€’ x) htx
+  have deriv₁ : HasStrictFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x)) _ t :=
     hp.HasStrictFDerivAt.comp t ((ContinuousLinearMap.id 𝕂 π•Š).smul_right x).HasStrictFDerivAt
-  have derivβ‚‚ : HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) _ t :=
+  have derivβ‚‚ : HasFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x)) _ t :=
     hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx
   deriv₁.HasFDerivAt.unique derivβ‚‚ β–Έ deriv₁
 #align has_strict_fderiv_at_exp_smul_const_of_mem_ball hasStrictFDerivAt_exp_smul_const_of_mem_ball
@@ -383,14 +400,14 @@ theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
 
 #print hasStrictFDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
-      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (NormedSpace.exp 𝕂 (t β€’ x))) t :=
   by
-  let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball (t β€’ x) htx
+  let ⟨p, hp⟩ := NormedSpace.analyticAt_exp_of_mem_ball (t β€’ x) htx
   convert hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ htx using 1
   ext t'
-  show Commute (t' β€’ x) (exp 𝕂 (t β€’ x))
+  show Commute (t' β€’ x) (NormedSpace.exp 𝕂 (t β€’ x))
   exact (((Commute.refl x).smul_left t').smul_right t).exp_right 𝕂
 #align has_strict_fderiv_at_exp_smul_const_of_mem_ball' hasStrictFDerivAt_exp_smul_const_of_mem_ball'
 -/
@@ -399,32 +416,32 @@ variable {𝕂}
 
 #print hasStrictDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasStrictDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : 𝕂)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t := by
-  simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx).HasStrictDerivAt
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasStrictDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (NormedSpace.exp 𝕂 (t β€’ x) * x) t :=
+  by simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_smul_const_of_mem_ball hasStrictDerivAt_exp_smul_const_of_mem_ball
 -/
 
 #print hasStrictDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasStrictDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t := by
-  simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 x t htx).HasStrictDerivAt
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasStrictDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (x * NormedSpace.exp 𝕂 (t β€’ x)) t :=
+  by simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 x t htx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_smul_const_of_mem_ball' hasStrictDerivAt_exp_smul_const_of_mem_ball'
 -/
 
 #print hasDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : 𝕂)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (NormedSpace.exp 𝕂 (t β€’ x) * x) t :=
   (hasStrictDerivAt_exp_smul_const_of_mem_ball x t htx).HasDerivAt
 #align has_deriv_at_exp_smul_const_of_mem_ball hasDerivAt_exp_smul_const_of_mem_ball
 -/
 
 #print hasDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
-    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (NormedSpace.expSeries 𝕂 𝔸).radius) :
+    HasDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (x * NormedSpace.exp 𝕂 (t β€’ x)) t :=
   (hasStrictDerivAt_exp_smul_const_of_mem_ball' x t htx).HasDerivAt
 #align has_deriv_at_exp_smul_const_of_mem_ball' hasDerivAt_exp_smul_const_of_mem_ball'
 -/
@@ -447,36 +464,37 @@ variable (𝕂)
 
 #print hasFDerivAt_exp_smul_const /-
 theorem hasFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
-    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
+    HasFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (NormedSpace.exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
   hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_fderiv_at_exp_smul_const hasFDerivAt_exp_smul_const
 -/
 
 #print hasFDerivAt_exp_smul_const' /-
 theorem hasFDerivAt_exp_smul_const' (x : 𝔸) (t : π•Š) :
-    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
-      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+    HasFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (NormedSpace.exp 𝕂 (t β€’ x))) t :=
   hasFDerivAt_exp_smul_const_of_mem_ball' 𝕂 _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_fderiv_at_exp_smul_const' hasFDerivAt_exp_smul_const'
 -/
 
 #print hasStrictFDerivAt_exp_smul_const /-
 theorem hasStrictFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
-    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x)
-      t :=
+    HasStrictFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (NormedSpace.exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
   hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_fderiv_at_exp_smul_const hasStrictFDerivAt_exp_smul_const
 -/
 
 #print hasStrictFDerivAt_exp_smul_const' /-
 theorem hasStrictFDerivAt_exp_smul_const' (x : 𝔸) (t : π•Š) :
-    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
-      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+    HasStrictFDerivAt (fun u : π•Š => NormedSpace.exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (NormedSpace.exp 𝕂 (t β€’ x))) t :=
   hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_fderiv_at_exp_smul_const' hasStrictFDerivAt_exp_smul_const'
 -/
 
@@ -484,36 +502,37 @@ variable {𝕂}
 
 #print hasStrictDerivAt_exp_smul_const /-
 theorem hasStrictDerivAt_exp_smul_const (x : 𝔸) (t : 𝕂) :
-    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
+    HasStrictDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (NormedSpace.exp 𝕂 (t β€’ x) * x) t :=
   hasStrictDerivAt_exp_smul_const_of_mem_ball _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_deriv_at_exp_smul_const hasStrictDerivAt_exp_smul_const
 -/
 
 #print hasStrictDerivAt_exp_smul_const' /-
 theorem hasStrictDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
-    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
+    HasStrictDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (x * NormedSpace.exp 𝕂 (t β€’ x)) t :=
   hasStrictDerivAt_exp_smul_const_of_mem_ball' _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_deriv_at_exp_smul_const' hasStrictDerivAt_exp_smul_const'
 -/
 
 #print hasDerivAt_exp_smul_const /-
 theorem hasDerivAt_exp_smul_const (x : 𝔸) (t : 𝕂) :
-    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
-  hasDerivAt_exp_smul_const_of_mem_ball _ _ <| (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    HasDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (NormedSpace.exp 𝕂 (t β€’ x) * x) t :=
+  hasDerivAt_exp_smul_const_of_mem_ball _ _ <|
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_deriv_at_exp_smul_const hasDerivAt_exp_smul_const
 -/
 
 #print hasDerivAt_exp_smul_const' /-
 theorem hasDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
-    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
+    HasDerivAt (fun u : 𝕂 => NormedSpace.exp 𝕂 (u β€’ x)) (x * NormedSpace.exp 𝕂 (t β€’ x)) t :=
   hasDerivAt_exp_smul_const_of_mem_ball' _ _ <|
-    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+    (NormedSpace.expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_deriv_at_exp_smul_const' hasDerivAt_exp_smul_const'
 -/
 
 end IsROrC
 
-end exp_smul
+end NormedSpace.exp_smul
 
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2021 Anatole Dedecker. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker, Eric Wieser
 -/
-import Mathbin.Analysis.NormedSpace.Exponential
-import Mathbin.Analysis.Calculus.FderivAnalytic
-import Mathbin.Topology.MetricSpace.CauSeqFilter
+import Analysis.NormedSpace.Exponential
+import Analysis.Calculus.FderivAnalytic
+import Topology.MetricSpace.CauSeqFilter
 
 #align_import analysis.special_functions.exponential from "leanprover-community/mathlib"@"c20927220ef87bb4962ba08bf6da2ce3cf50a6dd"
 
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2021 Anatole Dedecker. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker, Eric Wieser
-
-! This file was ported from Lean 3 source module analysis.special_functions.exponential
-! leanprover-community/mathlib commit c20927220ef87bb4962ba08bf6da2ce3cf50a6dd
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.NormedSpace.Exponential
 import Mathbin.Analysis.Calculus.FderivAnalytic
 import Mathbin.Topology.MetricSpace.CauSeqFilter
 
+#align_import analysis.special_functions.exponential from "leanprover-community/mathlib"@"c20927220ef87bb4962ba08bf6da2ce3cf50a6dd"
+
 /-!
 # Calculus results on exponential in a Banach algebra
 
Diff
@@ -68,6 +68,7 @@ section AnyFieldAnyAlgebra
 variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸]
   [CompleteSpace 𝔸]
 
+#print hasStrictFDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has strict FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
 theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
@@ -78,13 +79,16 @@ theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).
   change x = expSeries 𝕂 𝔸 1 fun _ => x
   simp [expSeries_apply_eq]
 #align has_strict_fderiv_at_exp_zero_of_radius_pos hasStrictFDerivAt_exp_zero_of_radius_pos
+-/
 
+#print hasFDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
 theorem hasFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
     HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   (hasStrictFDerivAt_exp_zero_of_radius_pos h).HasFDerivAt
 #align has_fderiv_at_exp_zero_of_radius_pos hasFDerivAt_exp_zero_of_radius_pos
+-/
 
 end AnyFieldAnyAlgebra
 
@@ -93,6 +97,7 @@ section AnyFieldCommAlgebra
 variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸]
   [CompleteSpace 𝔸]
 
+#print hasFDerivAt_exp_of_mem_ball /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over a normed field `𝕂` of
 characteristic zero has FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in the
 disk of convergence. -/
@@ -115,7 +120,9 @@ theorem hasFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
   rw [exp_add_of_mem_ball hx hh, exp_zero, zero_add, ContinuousLinearMap.id_apply, smul_eq_mul]
   ring
 #align has_fderiv_at_exp_of_mem_ball hasFDerivAt_exp_of_mem_ball
+-/
 
+#print hasStrictFDerivAt_exp_of_mem_ball /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over a normed field `𝕂` of
 characteristic zero has strict FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in
 the disk of convergence. -/
@@ -125,6 +132,7 @@ theorem hasStrictFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
   let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball x hx
   hp.HasFDerivAt.unique (hasFDerivAt_exp_of_mem_ball hx) β–Έ hp.HasStrictFDerivAt
 #align has_strict_fderiv_at_exp_of_mem_ball hasStrictFDerivAt_exp_of_mem_ball
+-/
 
 end AnyFieldCommAlgebra
 
@@ -132,33 +140,41 @@ section deriv
 
 variable {𝕂 : Type _} [NontriviallyNormedField 𝕂] [CompleteSpace 𝕂]
 
+#print hasStrictDerivAt_exp_of_mem_ball /-
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasStrictDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
     (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
   by simpa using (hasStrictFDerivAt_exp_of_mem_ball hx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_of_mem_ball hasStrictDerivAt_exp_of_mem_ball
+-/
 
+#print hasDerivAt_exp_of_mem_ball /-
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
     (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
   (hasStrictDerivAt_exp_of_mem_ball hx).HasDerivAt
 #align has_deriv_at_exp_of_mem_ball hasDerivAt_exp_of_mem_ball
+-/
 
+#print hasStrictDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
 `1` at zero, as long as it converges on a neighborhood of zero. -/
 theorem hasStrictDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).radius) :
     HasStrictDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
   (hasStrictFDerivAt_exp_zero_of_radius_pos h).HasStrictDerivAt
 #align has_strict_deriv_at_exp_zero_of_radius_pos hasStrictDerivAt_exp_zero_of_radius_pos
+-/
 
+#print hasDerivAt_exp_zero_of_radius_pos /-
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
 `1` at zero, as long as it converges on a neighborhood of zero. -/
 theorem hasDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).radius) :
     HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
   (hasStrictDerivAt_exp_zero_of_radius_pos h).HasDerivAt
 #align has_deriv_at_exp_zero_of_radius_pos hasDerivAt_exp_zero_of_radius_pos
+-/
 
 end deriv
 
@@ -166,17 +182,21 @@ section IsROrCAnyAlgebra
 
 variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
+#print hasStrictFDerivAt_exp_zero /-
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
 theorem hasStrictFDerivAt_exp_zero : HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   hasStrictFDerivAt_exp_zero_of_radius_pos (expSeries_radius_pos 𝕂 𝔸)
 #align has_strict_fderiv_at_exp_zero hasStrictFDerivAt_exp_zero
+-/
 
+#print hasFDerivAt_exp_zero /-
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
 theorem hasFDerivAt_exp_zero : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   hasStrictFDerivAt_exp_zero.HasFDerivAt
 #align has_fderiv_at_exp_zero hasFDerivAt_exp_zero
+-/
 
 end IsROrCAnyAlgebra
 
@@ -184,17 +204,21 @@ section IsROrCCommAlgebra
 
 variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
+#print hasStrictFDerivAt_exp /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
 FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
 theorem hasStrictFDerivAt_exp {x : 𝔸} : HasStrictFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   hasStrictFDerivAt_exp_of_mem_ball ((expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _)
 #align has_strict_fderiv_at_exp hasStrictFDerivAt_exp
+-/
 
+#print hasFDerivAt_exp /-
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has
 FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
 theorem hasFDerivAt_exp {x : 𝔸} : HasFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   hasStrictFDerivAt_exp.HasFDerivAt
 #align has_fderiv_at_exp hasFDerivAt_exp
+-/
 
 end IsROrCCommAlgebra
 
@@ -217,24 +241,30 @@ theorem hasDerivAt_exp {x : 𝕂} : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
 #align has_deriv_at_exp hasDerivAt_exp
 -/
 
+#print hasStrictDerivAt_exp_zero /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `1` at zero. -/
 theorem hasStrictDerivAt_exp_zero : HasStrictDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
   hasStrictDerivAt_exp_zero_of_radius_pos (expSeries_radius_pos 𝕂 𝕂)
 #align has_strict_deriv_at_exp_zero hasStrictDerivAt_exp_zero
+-/
 
+#print hasDerivAt_exp_zero /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `1` at zero. -/
 theorem hasDerivAt_exp_zero : HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
   hasStrictDerivAt_exp_zero.HasDerivAt
 #align has_deriv_at_exp_zero hasDerivAt_exp_zero
+-/
 
 end DerivROrC
 
+#print Complex.exp_eq_exp_β„‚ /-
 theorem Complex.exp_eq_exp_β„‚ : Complex.exp = exp β„‚ :=
   by
   refine' funext fun x => _
   rw [Complex.exp, exp_eq_tsum_div]
   exact tendsto_nhds_unique x.exp'.tendsto_limit (expSeries_div_summable ℝ x).HasSum.tendsto_sum_nat
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
+-/
 
 #print Real.exp_eq_exp_ℝ /-
 theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ := by ext x;
@@ -286,6 +316,7 @@ variable [IsScalarTower 𝕂 π•Š 𝔸]
 
 variable [CompleteSpace 𝔸]
 
+#print hasFDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
@@ -324,7 +355,9 @@ theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
     ContinuousLinearMap.smul_apply, ContinuousLinearMap.smulRight_apply,
     ContinuousLinearMap.one_apply, smul_eq_mul, mul_sub_left_distrib, mul_sub_left_distrib, mul_one]
 #align has_fderiv_at_exp_smul_const_of_mem_ball hasFDerivAt_exp_smul_const_of_mem_ball
+-/
 
+#print hasFDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
@@ -335,7 +368,9 @@ theorem hasFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
   show Commute (t' β€’ x) (exp 𝕂 (t β€’ x))
   exact (((Commute.refl x).smul_left t').smul_right t).exp_right 𝕂
 #align has_fderiv_at_exp_smul_const_of_mem_ball' hasFDerivAt_exp_smul_const_of_mem_ball'
+-/
 
+#print hasStrictFDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x)
@@ -347,7 +382,9 @@ theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
     hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx
   deriv₁.HasFDerivAt.unique derivβ‚‚ β–Έ deriv₁
 #align has_strict_fderiv_at_exp_smul_const_of_mem_ball hasStrictFDerivAt_exp_smul_const_of_mem_ball
+-/
 
+#print hasStrictFDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
@@ -359,32 +396,41 @@ theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
   show Commute (t' β€’ x) (exp 𝕂 (t β€’ x))
   exact (((Commute.refl x).smul_left t').smul_right t).exp_right 𝕂
 #align has_strict_fderiv_at_exp_smul_const_of_mem_ball' hasStrictFDerivAt_exp_smul_const_of_mem_ball'
+-/
 
 variable {𝕂}
 
+#print hasStrictDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasStrictDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : 𝕂)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t := by
   simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_smul_const_of_mem_ball hasStrictDerivAt_exp_smul_const_of_mem_ball
+-/
 
+#print hasStrictDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasStrictDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t := by
   simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 x t htx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_smul_const_of_mem_ball' hasStrictDerivAt_exp_smul_const_of_mem_ball'
+-/
 
+#print hasDerivAt_exp_smul_const_of_mem_ball /-
 theorem hasDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : 𝕂)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
   (hasStrictDerivAt_exp_smul_const_of_mem_ball x t htx).HasDerivAt
 #align has_deriv_at_exp_smul_const_of_mem_ball hasDerivAt_exp_smul_const_of_mem_ball
+-/
 
+#print hasDerivAt_exp_smul_const_of_mem_ball' /-
 theorem hasDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
     (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
   (hasStrictDerivAt_exp_smul_const_of_mem_ball' x t htx).HasDerivAt
 #align has_deriv_at_exp_smul_const_of_mem_ball' hasDerivAt_exp_smul_const_of_mem_ball'
+-/
 
 end MemBall
 
@@ -402,57 +448,73 @@ variable [CompleteSpace 𝔸]
 
 variable (𝕂)
 
+#print hasFDerivAt_exp_smul_const /-
 theorem hasFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
     HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
   hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_fderiv_at_exp_smul_const hasFDerivAt_exp_smul_const
+-/
 
+#print hasFDerivAt_exp_smul_const' /-
 theorem hasFDerivAt_exp_smul_const' (x : 𝔸) (t : π•Š) :
     HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
       (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
   hasFDerivAt_exp_smul_const_of_mem_ball' 𝕂 _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_fderiv_at_exp_smul_const' hasFDerivAt_exp_smul_const'
+-/
 
+#print hasStrictFDerivAt_exp_smul_const /-
 theorem hasStrictFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
     HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x)
       t :=
   hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_fderiv_at_exp_smul_const hasStrictFDerivAt_exp_smul_const
+-/
 
+#print hasStrictFDerivAt_exp_smul_const' /-
 theorem hasStrictFDerivAt_exp_smul_const' (x : 𝔸) (t : π•Š) :
     HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
       (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
   hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_fderiv_at_exp_smul_const' hasStrictFDerivAt_exp_smul_const'
+-/
 
 variable {𝕂}
 
+#print hasStrictDerivAt_exp_smul_const /-
 theorem hasStrictDerivAt_exp_smul_const (x : 𝔸) (t : 𝕂) :
     HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
   hasStrictDerivAt_exp_smul_const_of_mem_ball _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_deriv_at_exp_smul_const hasStrictDerivAt_exp_smul_const
+-/
 
+#print hasStrictDerivAt_exp_smul_const' /-
 theorem hasStrictDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
     HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
   hasStrictDerivAt_exp_smul_const_of_mem_ball' _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_strict_deriv_at_exp_smul_const' hasStrictDerivAt_exp_smul_const'
+-/
 
+#print hasDerivAt_exp_smul_const /-
 theorem hasDerivAt_exp_smul_const (x : 𝔸) (t : 𝕂) :
     HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
   hasDerivAt_exp_smul_const_of_mem_ball _ _ <| (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_deriv_at_exp_smul_const hasDerivAt_exp_smul_const
+-/
 
+#print hasDerivAt_exp_smul_const' /-
 theorem hasDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
     HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
   hasDerivAt_exp_smul_const_of_mem_ball' _ _ <|
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_deriv_at_exp_smul_const' hasDerivAt_exp_smul_const'
+-/
 
 end IsROrC
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.special_functions.exponential
-! leanprover-community/mathlib commit e1a18cad9cd462973d760af7de36b05776b8811c
+! leanprover-community/mathlib commit c20927220ef87bb4962ba08bf6da2ce3cf50a6dd
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -15,6 +15,9 @@ import Mathbin.Topology.MetricSpace.CauSeqFilter
 /-!
 # Calculus results on exponential in a Banach algebra
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file, we prove basic properties about the derivative of the exponential map `exp 𝕂`
 in a Banach algebra `𝔸` over a field `𝕂`. We keep them separate from the main file
 `analysis/normed_space/exponential` in order to minimize dependencies.
Diff
@@ -199,16 +199,20 @@ section DerivROrC
 
 variable {𝕂 : Type _} [IsROrC 𝕂]
 
+#print hasStrictDerivAt_exp /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 x` at any point
 `x`. -/
 theorem hasStrictDerivAt_exp {x : 𝕂} : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
   hasStrictDerivAt_exp_of_mem_ball ((expSeries_radius_eq_top 𝕂 𝕂).symm β–Έ edist_lt_top _ _)
 #align has_strict_deriv_at_exp hasStrictDerivAt_exp
+-/
 
+#print hasDerivAt_exp /-
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `exp 𝕂 x` at any point `x`. -/
 theorem hasDerivAt_exp {x : 𝕂} : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
   hasStrictDerivAt_exp.HasDerivAt
 #align has_deriv_at_exp hasDerivAt_exp
+-/
 
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `1` at zero. -/
 theorem hasStrictDerivAt_exp_zero : HasStrictDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
@@ -229,9 +233,11 @@ theorem Complex.exp_eq_exp_β„‚ : Complex.exp = exp β„‚ :=
   exact tendsto_nhds_unique x.exp'.tendsto_limit (expSeries_div_summable ℝ x).HasSum.tendsto_sum_nat
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
 
+#print Real.exp_eq_exp_ℝ /-
 theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ := by ext x;
   exact_mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
 #align real.exp_eq_exp_ℝ Real.exp_eq_exp_ℝ
+-/
 
 /-! ### Derivative of $\exp (ux)$ by $u$
 
Diff
@@ -70,7 +70,7 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [
 theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
     HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   by
-  convert(hasFPowerSeriesAt_exp_zero_of_radius_pos h).HasStrictFDerivAt
+  convert (hasFPowerSeriesAt_exp_zero_of_radius_pos h).HasStrictFDerivAt
   ext x
   change x = expSeries 𝕂 𝔸 1 fun _ => x
   simp [expSeries_apply_eq]
@@ -108,7 +108,7 @@ theorem hasFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
     exact hasFDerivAt_exp_zero_of_radius_pos hpos
   have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
     EMetric.ball_mem_nhds _ hpos
-  filter_upwards [this]with _ hh
+  filter_upwards [this] with _ hh
   rw [exp_add_of_mem_ball hx hh, exp_zero, zero_add, ContinuousLinearMap.id_apply, smul_eq_mul]
   ring
 #align has_fderiv_at_exp_of_mem_ball hasFDerivAt_exp_of_mem_ball
@@ -226,8 +226,7 @@ theorem Complex.exp_eq_exp_β„‚ : Complex.exp = exp β„‚ :=
   by
   refine' funext fun x => _
   rw [Complex.exp, exp_eq_tsum_div]
-  exact
-    tendsto_nhds_unique x.exp'.tendsto_limit (exp_series_div_summable ℝ x).HasSum.tendsto_sum_nat
+  exact tendsto_nhds_unique x.exp'.tendsto_limit (expSeries_div_summable ℝ x).HasSum.tendsto_sum_nat
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
 
 theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ := by ext x;
Diff
@@ -70,7 +70,7 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [
 theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
     HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   by
-  convert(hasFpowerSeriesAtExpZeroOfRadiusPos h).HasStrictFDerivAt
+  convert(hasFPowerSeriesAt_exp_zero_of_radius_pos h).HasStrictFDerivAt
   ext x
   change x = expSeries 𝕂 𝔸 1 fun _ => x
   simp [expSeries_apply_eq]
Diff
@@ -58,7 +58,7 @@ We prove most result for an arbitrary field `𝕂`, and then specialize to `𝕂
 
 open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
 
-open Nat Topology BigOperators ENNReal
+open scoped Nat Topology BigOperators ENNReal
 
 section AnyFieldAnyAlgebra
 
@@ -262,7 +262,7 @@ variable {𝕂 π•Š 𝔸 : Type _}
 
 variable (𝕂)
 
-open Topology
+open scoped Topology
 
 open Asymptotics Filter
 
Diff
@@ -230,9 +230,7 @@ theorem Complex.exp_eq_exp_β„‚ : Complex.exp = exp β„‚ :=
     tendsto_nhds_unique x.exp'.tendsto_limit (exp_series_div_summable ℝ x).HasSum.tendsto_sum_nat
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
 
-theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ :=
-  by
-  ext x
+theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ := by ext x;
   exact_mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
 #align real.exp_eq_exp_ℝ Real.exp_eq_exp_ℝ
 
Diff
@@ -1,10 +1,10 @@
 /-
 Copyright (c) 2021 Anatole Dedecker. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
-Authors: Anatole Dedecker
+Authors: Anatole Dedecker, Eric Wieser
 
 ! This file was ported from Lean 3 source module analysis.special_functions.exponential
-! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
+! leanprover-community/mathlib commit e1a18cad9cd462973d760af7de36b05776b8811c
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -29,17 +29,24 @@ We prove most result for an arbitrary field `𝕂`, and then specialize to `𝕂
   `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero
   (see also `has_strict_deriv_at_exp_zero_of_radius_pos` for the case `𝔸 = 𝕂`)
 - `has_strict_fderiv_at_exp_of_lt_radius` : if `𝕂` has characteristic zero and `𝔸` is commutative,
-  then given a point `x` in the disk of convergence, `exp 𝕂` as strict FrΓ©chet-derivative
+  then given a point `x` in the disk of convergence, `exp 𝕂` has strict FrΓ©chet-derivative
   `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at x (see also `has_strict_deriv_at_exp_of_lt_radius` for the case
   `𝔸 = 𝕂`)
+- `has_strict_fderiv_at_exp_smul_const_of_mem_ball`: even when `𝔸` is non-commutative, if we have
+  an intermediate algebra `π•Š` which is commutative, then the function `(u : π•Š) ↦ exp 𝕂 (u β€’ x)`,
+  still has strict FrΓ©chet-derivative `exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x` at `t` if
+  `t β€’ x` is in the radius of convergence.
 
 ### `𝕂 = ℝ` or `𝕂 = β„‚`
 
 - `has_strict_fderiv_at_exp_zero` : `exp 𝕂` has strict FrΓ©chet-derivative `1 : 𝔸 β†’L[𝕂] 𝔸` at zero
   (see also `has_strict_deriv_at_exp_zero` for the case `𝔸 = 𝕂`)
-- `has_strict_fderiv_at_exp` : if `𝔸` is commutative, then given any point `x`, `exp 𝕂` as strict
+- `has_strict_fderiv_at_exp` : if `𝔸` is commutative, then given any point `x`, `exp 𝕂` has strict
   FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at x (see also `has_strict_deriv_at_exp` for the
   case `𝔸 = 𝕂`)
+- `has_strict_fderiv_at_exp_smul_const`: even when `𝔸` is non-commutative, if we have
+  an intermediate algebra `π•Š` which is commutative, then the function `(u : π•Š) ↦ exp 𝕂 (u β€’ x)`
+  still has strict FrΓ©chet-derivative `exp 𝕂 (t β€’ x) β€’ (1 : 𝔸 β†’L[𝕂] 𝔸).smul_right x` at `t`.
 
 ### Compatibilty with `real.exp` and `complex.exp`
 
@@ -229,3 +236,219 @@ theorem Real.exp_eq_exp_ℝ : Real.exp = exp ℝ :=
   exact_mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
 #align real.exp_eq_exp_ℝ Real.exp_eq_exp_ℝ
 
+/-! ### Derivative of $\exp (ux)$ by $u$
+
+Note that since for `x : 𝔸` we have `normed_ring 𝔸` not `normed_comm_ring 𝔸`, we cannot deduce
+these results from `has_fderiv_at_exp_of_mem_ball` applied to the algebra `𝔸`.
+
+One possible solution for that would be to apply `has_fderiv_at_exp_of_mem_ball` to the
+commutative algebra `algebra.elemental_algebra π•Š x`. Unfortunately we don't have all the required
+API, so we leave that to a future refactor (see leanprover-community/mathlib#19062 for discussion).
+
+We could also go the other way around and deduce `has_fderiv_at_exp_of_mem_ball` from
+`has_fderiv_at_exp_smul_const_of_mem_ball` applied to `π•Š := 𝔸`, `x := (1 : 𝔸)`, and `t := x`.
+However, doing so would make the aformentioned `elemental_algebra` refactor harder, so for now we
+just prove these two lemmas independently.
+
+A last strategy would be to deduce everything from the more general non-commutative case,
+$$\frac{d}{dt}e^{x(t)} = \int_0^1 e^{sx(t)} \left(\frac{d}{dt}e^{x(t)}\right) e^{(1-s)x(t)} ds$$
+but this is harder to prove, and typically is shown by going via these results first.
+
+TODO: prove this result too!
+-/
+
+
+section exp_smul
+
+variable {𝕂 π•Š 𝔸 : Type _}
+
+variable (𝕂)
+
+open Topology
+
+open Asymptotics Filter
+
+section MemBall
+
+variable [NontriviallyNormedField 𝕂] [CharZero 𝕂]
+
+variable [NormedCommRing π•Š] [NormedRing 𝔸]
+
+variable [NormedSpace 𝕂 π•Š] [NormedAlgebra 𝕂 𝔸] [Algebra π•Š 𝔸] [ContinuousSMul π•Š 𝔸]
+
+variable [IsScalarTower 𝕂 π•Š 𝔸]
+
+variable [CompleteSpace 𝔸]
+
+theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
+  by
+  -- TODO: prove this via `has_fderiv_at_exp_of_mem_ball` using the commutative ring
+  -- `algebra.elemental_algebra π•Š x`. See leanprover-community/mathlib#19062 for discussion.
+  have hpos : 0 < (expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt htx
+  rw [hasFDerivAt_iff_isLittleO_nhds_zero]
+  suffices
+    (fun h =>
+        exp 𝕂 (t β€’ x) *
+          (exp 𝕂 ((0 + h) β€’ x) - exp 𝕂 ((0 : π•Š) β€’ x) - ((1 : π•Š β†’L[𝕂] π•Š).smul_right x) h)) =αΆ [𝓝 0]
+      fun h =>
+      exp 𝕂 ((t + h) β€’ x) - exp 𝕂 (t β€’ x) - (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) h
+    by
+    refine' (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _)
+    rw [←
+      @hasFDerivAt_iff_isLittleO_nhds_zero _ _ _ _ _ _ _ _ (fun u => exp 𝕂 (u β€’ x))
+        ((1 : π•Š β†’L[𝕂] π•Š).smul_right x) 0]
+    have : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) ((1 : π•Š β†’L[𝕂] π•Š).smul_right x 0) :=
+      by
+      rw [ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply, zero_smul]
+      exact hasFDerivAt_exp_zero_of_radius_pos hpos
+    exact this.comp 0 ((1 : π•Š β†’L[𝕂] π•Š).smul_right x).HasFDerivAt
+  have : tendsto (fun h : π•Š => h β€’ x) (𝓝 0) (𝓝 0) :=
+    by
+    rw [← zero_smul π•Š x]
+    exact tendsto_id.smul_const x
+  have : βˆ€αΆ  h in 𝓝 (0 : π•Š), h β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
+    this.eventually (EMetric.ball_mem_nhds _ hpos)
+  filter_upwards [this]
+  intro h hh
+  have : Commute (t β€’ x) (h β€’ x) := ((Commute.refl x).smul_left t).smul_right h
+  rw [add_smul t h, exp_add_of_commute_of_mem_ball this htx hh, zero_add, zero_smul, exp_zero,
+    ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply,
+    ContinuousLinearMap.smul_apply, ContinuousLinearMap.smulRight_apply,
+    ContinuousLinearMap.one_apply, smul_eq_mul, mul_sub_left_distrib, mul_sub_left_distrib, mul_one]
+#align has_fderiv_at_exp_smul_const_of_mem_ball hasFDerivAt_exp_smul_const_of_mem_ball
+
+theorem hasFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+  by
+  convert hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ htx using 1
+  ext t'
+  show Commute (t' β€’ x) (exp 𝕂 (t β€’ x))
+  exact (((Commute.refl x).smul_left t').smul_right t).exp_right 𝕂
+#align has_fderiv_at_exp_smul_const_of_mem_ball' hasFDerivAt_exp_smul_const_of_mem_ball'
+
+theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x)
+      t :=
+  let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball (t β€’ x) htx
+  have deriv₁ : HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) _ t :=
+    hp.HasStrictFDerivAt.comp t ((ContinuousLinearMap.id 𝕂 π•Š).smul_right x).HasStrictFDerivAt
+  have derivβ‚‚ : HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) _ t :=
+    hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx
+  deriv₁.HasFDerivAt.unique derivβ‚‚ β–Έ deriv₁
+#align has_strict_fderiv_at_exp_smul_const_of_mem_ball hasStrictFDerivAt_exp_smul_const_of_mem_ball
+
+theorem hasStrictFDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : π•Š)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+  by
+  let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball (t β€’ x) htx
+  convert hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ htx using 1
+  ext t'
+  show Commute (t' β€’ x) (exp 𝕂 (t β€’ x))
+  exact (((Commute.refl x).smul_left t').smul_right t).exp_right 𝕂
+#align has_strict_fderiv_at_exp_smul_const_of_mem_ball' hasStrictFDerivAt_exp_smul_const_of_mem_ball'
+
+variable {𝕂}
+
+theorem hasStrictDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : 𝕂)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t := by
+  simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 x t htx).HasStrictDerivAt
+#align has_strict_deriv_at_exp_smul_const_of_mem_ball hasStrictDerivAt_exp_smul_const_of_mem_ball
+
+theorem hasStrictDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t := by
+  simpa using (hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 x t htx).HasStrictDerivAt
+#align has_strict_deriv_at_exp_smul_const_of_mem_ball' hasStrictDerivAt_exp_smul_const_of_mem_ball'
+
+theorem hasDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : 𝕂)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
+  (hasStrictDerivAt_exp_smul_const_of_mem_ball x t htx).HasDerivAt
+#align has_deriv_at_exp_smul_const_of_mem_ball hasDerivAt_exp_smul_const_of_mem_ball
+
+theorem hasDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
+    (htx : t β€’ x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
+  (hasStrictDerivAt_exp_smul_const_of_mem_ball' x t htx).HasDerivAt
+#align has_deriv_at_exp_smul_const_of_mem_ball' hasDerivAt_exp_smul_const_of_mem_ball'
+
+end MemBall
+
+section IsROrC
+
+variable [IsROrC 𝕂]
+
+variable [NormedCommRing π•Š] [NormedRing 𝔸]
+
+variable [NormedAlgebra 𝕂 π•Š] [NormedAlgebra 𝕂 𝔸] [Algebra π•Š 𝔸] [ContinuousSMul π•Š 𝔸]
+
+variable [IsScalarTower 𝕂 π•Š 𝔸]
+
+variable [CompleteSpace 𝔸]
+
+variable (𝕂)
+
+theorem hasFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
+    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x) t :=
+  hasFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_fderiv_at_exp_smul_const hasFDerivAt_exp_smul_const
+
+theorem hasFDerivAt_exp_smul_const' (x : 𝔸) (t : π•Š) :
+    HasFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+  hasFDerivAt_exp_smul_const_of_mem_ball' 𝕂 _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_fderiv_at_exp_smul_const' hasFDerivAt_exp_smul_const'
+
+theorem hasStrictFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
+    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smul_right x)
+      t :=
+  hasStrictFDerivAt_exp_smul_const_of_mem_ball 𝕂 _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_strict_fderiv_at_exp_smul_const hasStrictFDerivAt_exp_smul_const
+
+theorem hasStrictFDerivAt_exp_smul_const' (x : 𝔸) (t : π•Š) :
+    HasStrictFDerivAt (fun u : π•Š => exp 𝕂 (u β€’ x))
+      (((1 : π•Š β†’L[𝕂] π•Š).smul_right x).smul_right (exp 𝕂 (t β€’ x))) t :=
+  hasStrictFDerivAt_exp_smul_const_of_mem_ball' 𝕂 _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_strict_fderiv_at_exp_smul_const' hasStrictFDerivAt_exp_smul_const'
+
+variable {𝕂}
+
+theorem hasStrictDerivAt_exp_smul_const (x : 𝔸) (t : 𝕂) :
+    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
+  hasStrictDerivAt_exp_smul_const_of_mem_ball _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_strict_deriv_at_exp_smul_const hasStrictDerivAt_exp_smul_const
+
+theorem hasStrictDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
+    HasStrictDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
+  hasStrictDerivAt_exp_smul_const_of_mem_ball' _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_strict_deriv_at_exp_smul_const' hasStrictDerivAt_exp_smul_const'
+
+theorem hasDerivAt_exp_smul_const (x : 𝔸) (t : 𝕂) :
+    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (exp 𝕂 (t β€’ x) * x) t :=
+  hasDerivAt_exp_smul_const_of_mem_ball _ _ <| (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_deriv_at_exp_smul_const hasDerivAt_exp_smul_const
+
+theorem hasDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
+    HasDerivAt (fun u : 𝕂 => exp 𝕂 (u β€’ x)) (x * exp 𝕂 (t β€’ x)) t :=
+  hasDerivAt_exp_smul_const_of_mem_ball' _ _ <|
+    (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
+#align has_deriv_at_exp_smul_const' hasDerivAt_exp_smul_const'
+
+end IsROrC
+
+end exp_smul
+
Diff
@@ -60,21 +60,21 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [
 
 /-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has strict FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
-theorem hasStrictFderivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
-    HasStrictFderivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
+    HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   by
-  convert(hasFpowerSeriesAtExpZeroOfRadiusPos h).HasStrictFderivAt
+  convert(hasFpowerSeriesAtExpZeroOfRadiusPos h).HasStrictFDerivAt
   ext x
   change x = expSeries 𝕂 𝔸 1 fun _ => x
   simp [expSeries_apply_eq]
-#align has_strict_fderiv_at_exp_zero_of_radius_pos hasStrictFderivAt_exp_zero_of_radius_pos
+#align has_strict_fderiv_at_exp_zero_of_radius_pos hasStrictFDerivAt_exp_zero_of_radius_pos
 
 /-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
-theorem hasFderivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
-    HasFderivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
-  (hasStrictFderivAt_exp_zero_of_radius_pos h).HasFderivAt
-#align has_fderiv_at_exp_zero_of_radius_pos hasFderivAt_exp_zero_of_radius_pos
+theorem hasFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
+    HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+  (hasStrictFDerivAt_exp_zero_of_radius_pos h).HasFDerivAt
+#align has_fderiv_at_exp_zero_of_radius_pos hasFDerivAt_exp_zero_of_radius_pos
 
 end AnyFieldAnyAlgebra
 
@@ -86,35 +86,35 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedCommRing 
 /-- The exponential map in a commutative Banach-algebra `𝔸` over a normed field `𝕂` of
 characteristic zero has FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in the
 disk of convergence. -/
-theorem hasFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
+theorem hasFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
     (hx : x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+    HasFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   by
   have hpos : 0 < (expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt hx
-  rw [hasFderivAt_iff_isLittleO_nhds_zero]
+  rw [hasFDerivAt_iff_isLittleO_nhds_zero]
   suffices
     (fun h => exp 𝕂 x * (exp 𝕂 (0 + h) - exp 𝕂 0 - ContinuousLinearMap.id 𝕂 𝔸 h)) =αΆ [𝓝 0] fun h =>
       exp 𝕂 (x + h) - exp 𝕂 x - exp 𝕂 x β€’ ContinuousLinearMap.id 𝕂 𝔸 h
     by
     refine' (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _)
-    rw [← hasFderivAt_iff_isLittleO_nhds_zero]
-    exact hasFderivAt_exp_zero_of_radius_pos hpos
+    rw [← hasFDerivAt_iff_isLittleO_nhds_zero]
+    exact hasFDerivAt_exp_zero_of_radius_pos hpos
   have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
     EMetric.ball_mem_nhds _ hpos
   filter_upwards [this]with _ hh
   rw [exp_add_of_mem_ball hx hh, exp_zero, zero_add, ContinuousLinearMap.id_apply, smul_eq_mul]
   ring
-#align has_fderiv_at_exp_of_mem_ball hasFderivAt_exp_of_mem_ball
+#align has_fderiv_at_exp_of_mem_ball hasFDerivAt_exp_of_mem_ball
 
 /-- The exponential map in a commutative Banach-algebra `𝔸` over a normed field `𝕂` of
 characteristic zero has strict FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in
 the disk of convergence. -/
-theorem hasStrictFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
+theorem hasStrictFDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
     (hx : x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
-    HasStrictFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+    HasStrictFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball x hx
-  hp.HasFderivAt.unique (hasFderivAt_exp_of_mem_ball hx) β–Έ hp.HasStrictFderivAt
-#align has_strict_fderiv_at_exp_of_mem_ball hasStrictFderivAt_exp_of_mem_ball
+  hp.HasFDerivAt.unique (hasFDerivAt_exp_of_mem_ball hx) β–Έ hp.HasStrictFDerivAt
+#align has_strict_fderiv_at_exp_of_mem_ball hasStrictFDerivAt_exp_of_mem_ball
 
 end AnyFieldCommAlgebra
 
@@ -126,7 +126,7 @@ variable {𝕂 : Type _} [NontriviallyNormedField 𝕂] [CompleteSpace 𝕂]
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasStrictDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
     (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
-  by simpa using (hasStrictFderivAt_exp_of_mem_ball hx).HasStrictDerivAt
+  by simpa using (hasStrictFDerivAt_exp_of_mem_ball hx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_of_mem_ball hasStrictDerivAt_exp_of_mem_ball
 
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
@@ -140,7 +140,7 @@ theorem hasDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
 `1` at zero, as long as it converges on a neighborhood of zero. -/
 theorem hasStrictDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).radius) :
     HasStrictDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
-  (hasStrictFderivAt_exp_zero_of_radius_pos h).HasStrictDerivAt
+  (hasStrictFDerivAt_exp_zero_of_radius_pos h).HasStrictDerivAt
 #align has_strict_deriv_at_exp_zero_of_radius_pos hasStrictDerivAt_exp_zero_of_radius_pos
 
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
@@ -158,15 +158,15 @@ variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 
 
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
-theorem hasStrictFderivAt_exp_zero : HasStrictFderivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
-  hasStrictFderivAt_exp_zero_of_radius_pos (expSeries_radius_pos 𝕂 𝔸)
-#align has_strict_fderiv_at_exp_zero hasStrictFderivAt_exp_zero
+theorem hasStrictFDerivAt_exp_zero : HasStrictFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+  hasStrictFDerivAt_exp_zero_of_radius_pos (expSeries_radius_pos 𝕂 𝔸)
+#align has_strict_fderiv_at_exp_zero hasStrictFDerivAt_exp_zero
 
 /-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has FrΓ©chet-derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
-theorem hasFderivAt_exp_zero : HasFderivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
-  hasStrictFderivAt_exp_zero.HasFderivAt
-#align has_fderiv_at_exp_zero hasFderivAt_exp_zero
+theorem hasFDerivAt_exp_zero : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
+  hasStrictFDerivAt_exp_zero.HasFDerivAt
+#align has_fderiv_at_exp_zero hasFDerivAt_exp_zero
 
 end IsROrCAnyAlgebra
 
@@ -176,15 +176,15 @@ variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra
 
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
 FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
-theorem hasStrictFderivAt_exp {x : 𝔸} : HasStrictFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
-  hasStrictFderivAt_exp_of_mem_ball ((expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _)
-#align has_strict_fderiv_at_exp hasStrictFderivAt_exp
+theorem hasStrictFDerivAt_exp {x : 𝔸} : HasStrictFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+  hasStrictFDerivAt_exp_of_mem_ball ((expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _)
+#align has_strict_fderiv_at_exp hasStrictFDerivAt_exp
 
 /-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has
 FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
-theorem hasFderivAt_exp {x : 𝔸} : HasFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
-  hasStrictFderivAt_exp.HasFderivAt
-#align has_fderiv_at_exp hasFderivAt_exp
+theorem hasFDerivAt_exp {x : 𝔸} : HasFDerivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
+  hasStrictFDerivAt_exp.HasFDerivAt
+#align has_fderiv_at_exp hasFDerivAt_exp
 
 end IsROrCCommAlgebra
 
Diff
@@ -4,13 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker
 
 ! This file was ported from Lean 3 source module analysis.special_functions.exponential
-! leanprover-community/mathlib commit ccf84e0d918668460a34aa19d02fe2e0e2286da0
+! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.NormedSpace.Exponential
 import Mathbin.Analysis.Calculus.FderivAnalytic
-import Mathbin.Data.Complex.Exponential
 import Mathbin.Topology.MetricSpace.CauSeqFilter
 
 /-!
Diff
@@ -92,13 +92,13 @@ theorem hasFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
     HasFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   by
   have hpos : 0 < (expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt hx
-  rw [hasFderivAt_iff_isOCat_nhds_zero]
+  rw [hasFderivAt_iff_isLittleO_nhds_zero]
   suffices
     (fun h => exp 𝕂 x * (exp 𝕂 (0 + h) - exp 𝕂 0 - ContinuousLinearMap.id 𝕂 𝔸 h)) =αΆ [𝓝 0] fun h =>
       exp 𝕂 (x + h) - exp 𝕂 x - exp 𝕂 x β€’ ContinuousLinearMap.id 𝕂 𝔸 h
     by
     refine' (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _)
-    rw [← hasFderivAt_iff_isOCat_nhds_zero]
+    rw [← hasFderivAt_iff_isLittleO_nhds_zero]
     exact hasFderivAt_exp_zero_of_radius_pos hpos
   have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
     EMetric.ball_mem_nhds _ hpos
Diff
@@ -64,7 +64,7 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [
 theorem hasStrictFderivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).radius) :
     HasStrictFderivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
   by
-  convert (hasFpowerSeriesAtExpZeroOfRadiusPos h).HasStrictFderivAt
+  convert(hasFpowerSeriesAtExpZeroOfRadiusPos h).HasStrictFderivAt
   ext x
   change x = expSeries 𝕂 𝔸 1 fun _ => x
   simp [expSeries_apply_eq]
Diff
@@ -88,7 +88,7 @@ variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedCommRing 
 characteristic zero has FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in the
 disk of convergence. -/
 theorem hasFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
-    (hx : x ∈ Emetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    (hx : x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   by
   have hpos : 0 < (expSeries 𝕂 𝔸).radius := (zero_le _).trans_lt hx
@@ -100,8 +100,8 @@ theorem hasFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
     refine' (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _)
     rw [← hasFderivAt_iff_isOCat_nhds_zero]
     exact hasFderivAt_exp_zero_of_radius_pos hpos
-  have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ Emetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
-    Emetric.ball_mem_nhds _ hpos
+  have : βˆ€αΆ  h in 𝓝 (0 : 𝔸), h ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius :=
+    EMetric.ball_mem_nhds _ hpos
   filter_upwards [this]with _ hh
   rw [exp_add_of_mem_ball hx hh, exp_zero, zero_add, ContinuousLinearMap.id_apply, smul_eq_mul]
   ring
@@ -111,7 +111,7 @@ theorem hasFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
 characteristic zero has strict FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in
 the disk of convergence. -/
 theorem hasStrictFderivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝔸}
-    (hx : x ∈ Emetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
+    (hx : x ∈ EMetric.ball (0 : 𝔸) (expSeries 𝕂 𝔸).radius) :
     HasStrictFderivAt (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
   let ⟨p, hp⟩ := analyticAt_exp_of_mem_ball x hx
   hp.HasFderivAt.unique (hasFderivAt_exp_of_mem_ball hx) β–Έ hp.HasStrictFderivAt
@@ -126,14 +126,14 @@ variable {𝕂 : Type _} [NontriviallyNormedField 𝕂] [CompleteSpace 𝕂]
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasStrictDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
-    (hx : x ∈ Emetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
+    (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasStrictDerivAt (exp 𝕂) (exp 𝕂 x) x :=
   by simpa using (hasStrictFderivAt_exp_of_mem_ball hx).HasStrictDerivAt
 #align has_strict_deriv_at_exp_of_mem_ball hasStrictDerivAt_exp_of_mem_ball
 
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
 theorem hasDerivAt_exp_of_mem_ball [CharZero 𝕂] {x : 𝕂}
-    (hx : x ∈ Emetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
+    (hx : x ∈ EMetric.ball (0 : 𝕂) (expSeries 𝕂 𝕂).radius) : HasDerivAt (exp 𝕂) (exp 𝕂 x) x :=
   (hasStrictDerivAt_exp_of_mem_ball hx).HasDerivAt
 #align has_deriv_at_exp_of_mem_ball hasDerivAt_exp_of_mem_ball
 
Diff
@@ -52,7 +52,7 @@ We prove most result for an arbitrary field `𝕂`, and then specialize to `𝕂
 
 open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
 
-open Nat Topology BigOperators Ennreal
+open Nat Topology BigOperators ENNReal
 
 section AnyFieldAnyAlgebra
 

Changes in mathlib4

mathlib3
mathlib4
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
@@ -53,7 +53,7 @@ We prove most results for an arbitrary field `𝕂`, and then specialize to `
 -/
 
 
-open Filter IsROrC ContinuousMultilinearMap NormedField NormedSpace Asymptotics
+open Filter RCLike ContinuousMultilinearMap NormedField NormedSpace Asymptotics
 
 open scoped Nat Topology BigOperators ENNReal
 
@@ -153,9 +153,9 @@ theorem hasDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝕂).radius)
 
 end deriv
 
-section IsROrCAnyAlgebra
+section RCLikeAnyAlgebra
 
-variable {𝕂 𝔸 : Type*} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
+variable {𝕂 𝔸 : Type*} [RCLike 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
 /-- The exponential in a Banach algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
@@ -169,11 +169,11 @@ theorem hasFDerivAt_exp_zero : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸)
   hasStrictFDerivAt_exp_zero.hasFDerivAt
 #align has_fderiv_at_exp_zero hasFDerivAt_exp_zero
 
-end IsROrCAnyAlgebra
+end RCLikeAnyAlgebra
 
-section IsROrCCommAlgebra
+section RCLikeCommAlgebra
 
-variable {𝕂 𝔸 : Type*} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
+variable {𝕂 𝔸 : Type*} [RCLike 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
 /-- The exponential map in a commutative Banach algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
 FrΓ©chet derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
@@ -187,11 +187,11 @@ theorem hasFDerivAt_exp {x : 𝔸} : HasFDerivAt (exp 𝕂) (exp 𝕂 x β€’ (1 :
   hasStrictFDerivAt_exp.hasFDerivAt
 #align has_fderiv_at_exp hasFDerivAt_exp
 
-end IsROrCCommAlgebra
+end RCLikeCommAlgebra
 
-section DerivROrC
+section DerivRCLike
 
-variable {𝕂 : Type*} [IsROrC 𝕂]
+variable {𝕂 : Type*} [RCLike 𝕂]
 
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 x` at any point
 `x`. -/
@@ -214,7 +214,7 @@ theorem hasDerivAt_exp_zero : HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
   hasStrictDerivAt_exp_zero.hasDerivAt
 #align has_deriv_at_exp_zero hasDerivAt_exp_zero
 
-end DerivROrC
+end DerivRCLike
 
 theorem Complex.exp_eq_exp_β„‚ : Complex.exp = NormedSpace.exp β„‚ := by
   refine' funext fun x => _
@@ -358,9 +358,9 @@ theorem hasDerivAt_exp_smul_const_of_mem_ball' (x : 𝔸) (t : 𝕂)
 
 end MemBall
 
-section IsROrC
+section RCLike
 
-variable [IsROrC 𝕂]
+variable [RCLike 𝕂]
 variable [NormedCommRing π•Š] [NormedRing 𝔸]
 variable [NormedAlgebra 𝕂 π•Š] [NormedAlgebra 𝕂 𝔸] [Algebra π•Š 𝔸] [ContinuousSMul π•Š 𝔸]
 variable [IsScalarTower 𝕂 π•Š 𝔸]
@@ -418,6 +418,6 @@ theorem hasDerivAt_exp_smul_const' (x : 𝔸) (t : 𝕂) :
     (expSeries_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _
 #align has_deriv_at_exp_smul_const' hasDerivAt_exp_smul_const'
 
-end IsROrC
+end RCLike
 
 end exp_smul
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


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

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

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

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -252,7 +252,6 @@ TODO: prove this result too!
 section exp_smul
 
 variable {𝕂 π•Š 𝔸 : Type*}
-
 variable (𝕂)
 
 open scoped Topology
@@ -262,13 +261,9 @@ open Asymptotics Filter
 section MemBall
 
 variable [NontriviallyNormedField 𝕂] [CharZero 𝕂]
-
 variable [NormedCommRing π•Š] [NormedRing 𝔸]
-
 variable [NormedSpace 𝕂 π•Š] [NormedAlgebra 𝕂 𝔸] [Algebra π•Š 𝔸] [ContinuousSMul π•Š 𝔸]
-
 variable [IsScalarTower 𝕂 π•Š 𝔸]
-
 variable [CompleteSpace 𝔸]
 
 theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
@@ -366,13 +361,9 @@ end MemBall
 section IsROrC
 
 variable [IsROrC 𝕂]
-
 variable [NormedCommRing π•Š] [NormedRing 𝔸]
-
 variable [NormedAlgebra 𝕂 π•Š] [NormedAlgebra 𝕂 𝔸] [Algebra π•Š 𝔸] [ContinuousSMul π•Š 𝔸]
-
 variable [IsScalarTower 𝕂 π•Š 𝔸]
-
 variable [CompleteSpace 𝔸]
 
 theorem hasFDerivAt_exp_smul_const (x : 𝔸) (t : π•Š) :
refactor: replace some [@foo](https://github.com/foo) _ _ _ _ _ ... by named arguments (#8702)

Using Lean4's named arguments, we manage to remove a few hard-to-read explicit function calls [@foo](https://github.com/foo) _ _ _ _ _ ... which used to be necessary in Lean3.

Occasionally, this results in slightly longer code. The benefit of named arguments is readability, as well as to reduce the brittleness of the code when the argument order is changed.

Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>

Diff
@@ -283,8 +283,8 @@ theorem hasFDerivAt_exp_smul_const_of_mem_ball (x : 𝔸) (t : π•Š)
         fun h =>
           exp 𝕂 ((t + h) β€’ x) - exp 𝕂 (t β€’ x) - (exp 𝕂 (t β€’ x) β€’ (1 : π•Š β†’L[𝕂] π•Š).smulRight x) h by
     apply (IsLittleO.const_mul_left _ _).congr' this (EventuallyEq.refl _ _)
-    rw [← @hasFDerivAt_iff_isLittleO_nhds_zero _ _ _ _ _ _ _ _ (fun u => exp 𝕂 (u β€’ x))
-      ((1 : π•Š β†’L[𝕂] π•Š).smulRight x) 0]
+    rw [← hasFDerivAt_iff_isLittleO_nhds_zero (f := fun u => exp 𝕂 (u β€’ x))
+      (f' := (1 : π•Š β†’L[𝕂] π•Š).smulRight x) (x := 0)]
     have : HasFDerivAt (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) ((1 : π•Š β†’L[𝕂] π•Š).smulRight x 0) := by
       rw [ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply, zero_smul]
       exact hasFDerivAt_exp_zero_of_radius_pos hpos
chore: replace exact_mod_cast tactic with mod_cast elaborator where possible (#8404)

We still have the exact_mod_cast tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast are the ones that don't work using the term elaborator by itself.

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

Diff
@@ -224,7 +224,7 @@ theorem Complex.exp_eq_exp_β„‚ : Complex.exp = NormedSpace.exp β„‚ := by
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
 
 theorem Real.exp_eq_exp_ℝ : Real.exp = NormedSpace.exp ℝ := by
-  ext x; exact_mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
+  ext x; exact mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
 #align real.exp_eq_exp_ℝ Real.exp_eq_exp_ℝ
 
 /-! ### Derivative of $\exp (ux)$ by $u$
chore: exp -> NormedSpace.exp (#8436)

Per discussion at zulip

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

Diff
@@ -53,7 +53,7 @@ We prove most results for an arbitrary field `𝕂`, and then specialize to `
 -/
 
 
-open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
+open Filter IsROrC ContinuousMultilinearMap NormedField NormedSpace Asymptotics
 
 open scoped Nat Topology BigOperators ENNReal
 
@@ -216,14 +216,14 @@ theorem hasDerivAt_exp_zero : HasDerivAt (exp 𝕂) (1 : 𝕂) 0 :=
 
 end DerivROrC
 
-theorem Complex.exp_eq_exp_β„‚ : Complex.exp = _root_.exp β„‚ := by
+theorem Complex.exp_eq_exp_β„‚ : Complex.exp = NormedSpace.exp β„‚ := by
   refine' funext fun x => _
   rw [Complex.exp, exp_eq_tsum_div]
   have : CauSeq.IsComplete β„‚ norm := Complex.instIsComplete
   exact tendsto_nhds_unique x.exp'.tendsto_limit (expSeries_div_summable ℝ x).hasSum.tendsto_sum_nat
 #align complex.exp_eq_exp_β„‚ Complex.exp_eq_exp_β„‚
 
-theorem Real.exp_eq_exp_ℝ : Real.exp = _root_.exp ℝ := by
+theorem Real.exp_eq_exp_ℝ : Real.exp = NormedSpace.exp ℝ := by
   ext x; exact_mod_cast congr_fun Complex.exp_eq_exp_β„‚ x
 #align real.exp_eq_exp_ℝ Real.exp_eq_exp_ℝ
 
chore: rm [@simp](https://github.com/simp) from factorial (#7078)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -69,7 +69,7 @@ theorem hasStrictFDerivAt_exp_zero_of_radius_pos (h : 0 < (expSeries 𝕂 𝔸).
   convert (hasFPowerSeriesAt_exp_zero_of_radius_pos h).hasStrictFDerivAt
   ext x
   change x = expSeries 𝕂 𝔸 1 fun _ => x
-  simp [expSeries_apply_eq]
+  simp [expSeries_apply_eq, Nat.factorial]
 #align has_strict_fderiv_at_exp_zero_of_radius_pos hasStrictFDerivAt_exp_zero_of_radius_pos
 
 /-- The exponential in a Banach algebra `𝔸` over a normed field `𝕂` has FrΓ©chet derivative
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
@@ -59,7 +59,7 @@ open scoped Nat Topology BigOperators ENNReal
 
 section AnyFieldAnyAlgebra
 
-variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸]
+variable {𝕂 𝔸 : Type*} [NontriviallyNormedField 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸]
   [CompleteSpace 𝔸]
 
 /-- The exponential in a Banach algebra `𝔸` over a normed field `𝕂` has strict FrΓ©chet derivative
@@ -83,7 +83,7 @@ end AnyFieldAnyAlgebra
 
 section AnyFieldCommAlgebra
 
-variable {𝕂 𝔸 : Type _} [NontriviallyNormedField 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸]
+variable {𝕂 𝔸 : Type*} [NontriviallyNormedField 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸]
   [CompleteSpace 𝔸]
 
 /-- The exponential map in a commutative Banach algebra `𝔸` over a normed field `𝕂` of
@@ -121,7 +121,7 @@ end AnyFieldCommAlgebra
 
 section deriv
 
-variable {𝕂 : Type _} [NontriviallyNormedField 𝕂] [CompleteSpace 𝕂]
+variable {𝕂 : Type*} [NontriviallyNormedField 𝕂] [CompleteSpace 𝕂]
 
 /-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
 `exp 𝕂 x` at any point `x` in the disk of convergence. -/
@@ -155,7 +155,7 @@ end deriv
 
 section IsROrCAnyAlgebra
 
-variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
+variable {𝕂 𝔸 : Type*} [IsROrC 𝕂] [NormedRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
 /-- The exponential in a Banach algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet derivative
 `1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
@@ -173,7 +173,7 @@ end IsROrCAnyAlgebra
 
 section IsROrCCommAlgebra
 
-variable {𝕂 𝔸 : Type _} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
+variable {𝕂 𝔸 : Type*} [IsROrC 𝕂] [NormedCommRing 𝔸] [NormedAlgebra 𝕂 𝔸] [CompleteSpace 𝔸]
 
 /-- The exponential map in a commutative Banach algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
 FrΓ©chet derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
@@ -191,7 +191,7 @@ end IsROrCCommAlgebra
 
 section DerivROrC
 
-variable {𝕂 : Type _} [IsROrC 𝕂]
+variable {𝕂 : Type*} [IsROrC 𝕂]
 
 /-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 x` at any point
 `x`. -/
@@ -251,7 +251,7 @@ TODO: prove this result too!
 
 section exp_smul
 
-variable {𝕂 π•Š 𝔸 : Type _}
+variable {𝕂 π•Š 𝔸 : Type*}
 
 variable (𝕂)
 
chore(Deriv): rename some files (#6167)

Move some files to Analysis/Calculus/FDeriv

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker, Eric Wieser
 -/
 import Mathlib.Analysis.NormedSpace.Exponential
-import Mathlib.Analysis.Calculus.FDerivAnalytic
+import Mathlib.Analysis.Calculus.FDeriv.Analytic
 import Mathlib.Topology.MetricSpace.CauSeqFilter
 
 #align_import analysis.special_functions.exponential from "leanprover-community/mathlib"@"e1a18cad9cd462973d760af7de36b05776b8811c"
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,16 +2,13 @@
 Copyright (c) 2021 Anatole Dedecker. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anatole Dedecker, Eric Wieser
-
-! This file was ported from Lean 3 source module analysis.special_functions.exponential
-! leanprover-community/mathlib commit e1a18cad9cd462973d760af7de36b05776b8811c
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.NormedSpace.Exponential
 import Mathlib.Analysis.Calculus.FDerivAnalytic
 import Mathlib.Topology.MetricSpace.CauSeqFilter
 
+#align_import analysis.special_functions.exponential from "leanprover-community/mathlib"@"e1a18cad9cd462973d760af7de36b05776b8811c"
+
 /-!
 # Calculus results on exponential in a Banach algebra
 
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -48,7 +48,7 @@ We prove most results for an arbitrary field `𝕂`, and then specialize to `
   an intermediate algebra `π•Š` which is commutative, then the function `(u : π•Š) ↦ exp 𝕂 (u β€’ x)`
   still has strict FrΓ©chet derivative `exp 𝕂 (t β€’ x) β€’ (1 : 𝔸 β†’L[𝕂] 𝔸).smulRight x` at `t`.
 
-### Compatibilty with `Real.exp` and `Complex.exp`
+### Compatibility with `Real.exp` and `Complex.exp`
 
 - `Complex.exp_eq_exp_β„‚` : `Complex.exp = exp β„‚ β„‚`
 - `Real.exp_eq_exp_ℝ` : `Real.exp = exp ℝ ℝ`
@@ -241,7 +241,7 @@ API, so we leave that to a future refactor (see leanprover-community/mathlib#190
 
 We could also go the other way around and deduce `hasFDerivAt_exp_of_mem_ball` from
 `hasFDerivAt_exp_smul_const_of_mem_ball` applied to `π•Š := 𝔸`, `x := (1 : 𝔸)`, and `t := x`.
-However, doing so would make the aformentioned `elementalAlgebra` refactor harder, so for now we
+However, doing so would make the aforementioned `elementalAlgebra` refactor harder, so for now we
 just prove these two lemmas independently.
 
 A last strategy would be to deduce everything from the more general non-commutative case,
feat: port Analysis.SpecialFunctions.Exponential (#4713)

Dependencies 12 + 783

784 files ported (98.5%)
351535 lines ported (98.4%)
Show graph

The unported dependencies are

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