analysis.special_functions.exp_deriv ⟷ Mathlib.Analysis.SpecialFunctions.ExpDeriv

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -37,7 +37,7 @@ theorem hasDerivAt_exp (x : β„‚) : HasDerivAt exp (exp x) x :=
   by
   rw [hasDerivAt_iff_isLittleO_nhds_zero]
   have : (1 : β„•) < 2 := by norm_num
-  refine' (is_O.of_bound β€–exp xβ€– _).trans_isLittleO (is_o_pow_id this)
+  refine' (is_O.of_bound β€–NormedSpace.exp xβ€– _).trans_isLittleO (is_o_pow_id this)
   filter_upwards [Metric.ball_mem_nhds (0 : β„‚) zero_lt_one]
   simp only [Metric.mem_ball, dist_zero_right, norm_pow]
   exact fun z hz => exp_bound_sq x z hz.le
@@ -75,7 +75,8 @@ theorem iter_deriv_exp : βˆ€ n : β„•, (deriv^[n]) exp = exp
 theorem contDiff_exp : βˆ€ {n}, ContDiff π•œ n exp :=
   by
   refine' contDiff_all_iff_nat.2 fun n => _
-  have : ContDiff β„‚ (↑n) exp := by
+  have : ContDiff β„‚ (↑n) NormedSpace.exp :=
+    by
     induction' n with n ihn
     Β· exact contDiff_zero.2 continuous_exp
     Β· rw [contDiff_succ_iff_deriv]
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2018 Chris Hughes. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 -/
-import Mathbin.Analysis.Complex.RealDeriv
+import Analysis.Complex.RealDeriv
 
 #align_import analysis.special_functions.exp_deriv from "leanprover-community/mathlib"@"575b4ea3738b017e30fb205cb9b4a8742e5e82b6"
 
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2018 Chris Hughes. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
-
-! This file was ported from Lean 3 source module analysis.special_functions.exp_deriv
-! leanprover-community/mathlib commit 575b4ea3738b017e30fb205cb9b4a8742e5e82b6
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.Complex.RealDeriv
 
+#align_import analysis.special_functions.exp_deriv from "leanprover-community/mathlib"@"575b4ea3738b017e30fb205cb9b4a8742e5e82b6"
+
 /-!
 # Complex and real exponential
 
Diff
@@ -34,6 +34,7 @@ namespace Complex
 
 variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚]
 
+#print Complex.hasDerivAt_exp /-
 /-- The complex exponential is everywhere differentiable, with the derivative `exp x`. -/
 theorem hasDerivAt_exp (x : β„‚) : HasDerivAt exp (exp x) x :=
   by
@@ -44,26 +45,36 @@ theorem hasDerivAt_exp (x : β„‚) : HasDerivAt exp (exp x) x :=
   simp only [Metric.mem_ball, dist_zero_right, norm_pow]
   exact fun z hz => exp_bound_sq x z hz.le
 #align complex.has_deriv_at_exp Complex.hasDerivAt_exp
+-/
 
+#print Complex.differentiable_exp /-
 theorem differentiable_exp : Differentiable π•œ exp := fun x =>
   (hasDerivAt_exp x).DifferentiableAt.restrictScalars π•œ
 #align complex.differentiable_exp Complex.differentiable_exp
+-/
 
+#print Complex.differentiableAt_exp /-
 theorem differentiableAt_exp {x : β„‚} : DifferentiableAt π•œ exp x :=
   differentiable_exp x
 #align complex.differentiable_at_exp Complex.differentiableAt_exp
+-/
 
+#print Complex.deriv_exp /-
 @[simp]
 theorem deriv_exp : deriv exp = exp :=
   funext fun x => (hasDerivAt_exp x).deriv
 #align complex.deriv_exp Complex.deriv_exp
+-/
 
+#print Complex.iter_deriv_exp /-
 @[simp]
 theorem iter_deriv_exp : βˆ€ n : β„•, (deriv^[n]) exp = exp
   | 0 => rfl
   | n + 1 => by rw [iterate_succ_apply, deriv_exp, iter_deriv_exp n]
 #align complex.iter_deriv_exp Complex.iter_deriv_exp
+-/
 
+#print Complex.contDiff_exp /-
 theorem contDiff_exp : βˆ€ {n}, ContDiff π•œ n exp :=
   by
   refine' contDiff_all_iff_nat.2 fun n => _
@@ -75,14 +86,19 @@ theorem contDiff_exp : βˆ€ {n}, ContDiff π•œ n exp :=
       rwa [deriv_exp]
   exact this.restrict_scalars π•œ
 #align complex.cont_diff_exp Complex.contDiff_exp
+-/
 
+#print Complex.hasStrictDerivAt_exp /-
 theorem hasStrictDerivAt_exp (x : β„‚) : HasStrictDerivAt exp (exp x) x :=
   contDiff_exp.ContDiffAt.hasStrictDerivAt' (hasDerivAt_exp x) le_rfl
 #align complex.has_strict_deriv_at_exp Complex.hasStrictDerivAt_exp
+-/
 
+#print Complex.hasStrictFDerivAt_exp_real /-
 theorem hasStrictFDerivAt_exp_real (x : β„‚) : HasStrictFDerivAt exp (exp x β€’ (1 : β„‚ β†’L[ℝ] β„‚)) x :=
   (hasStrictDerivAt_exp x).complexToReal_fderiv
 #align complex.has_strict_fderiv_at_exp_real Complex.hasStrictFDerivAt_exp_real
+-/
 
 end Complex
 
@@ -91,31 +107,41 @@ section
 variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {f : π•œ β†’ β„‚} {f' : β„‚} {x : π•œ}
   {s : Set π•œ}
 
+#print HasStrictDerivAt.cexp /-
 theorem HasStrictDerivAt.cexp (hf : HasStrictDerivAt f f' x) :
     HasStrictDerivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) * f') x :=
   (Complex.hasStrictDerivAt_exp (f x)).comp x hf
 #align has_strict_deriv_at.cexp HasStrictDerivAt.cexp
+-/
 
+#print HasDerivAt.cexp /-
 theorem HasDerivAt.cexp (hf : HasDerivAt f f' x) :
     HasDerivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) * f') x :=
   (Complex.hasDerivAt_exp (f x)).comp x hf
 #align has_deriv_at.cexp HasDerivAt.cexp
+-/
 
+#print HasDerivWithinAt.cexp /-
 theorem HasDerivWithinAt.cexp (hf : HasDerivWithinAt f f' s x) :
     HasDerivWithinAt (fun x => Complex.exp (f x)) (Complex.exp (f x) * f') s x :=
   (Complex.hasDerivAt_exp (f x)).comp_hasDerivWithinAt x hf
 #align has_deriv_within_at.cexp HasDerivWithinAt.cexp
+-/
 
+#print derivWithin_cexp /-
 theorem derivWithin_cexp (hf : DifferentiableWithinAt π•œ f s x) (hxs : UniqueDiffWithinAt π•œ s x) :
     derivWithin (fun x => Complex.exp (f x)) s x = Complex.exp (f x) * derivWithin f s x :=
   hf.HasDerivWithinAt.cexp.derivWithin hxs
 #align deriv_within_cexp derivWithin_cexp
+-/
 
+#print deriv_cexp /-
 @[simp]
 theorem deriv_cexp (hc : DifferentiableAt π•œ f x) :
     deriv (fun x => Complex.exp (f x)) x = Complex.exp (f x) * deriv f x :=
   hc.HasDerivAt.cexp.deriv
 #align deriv_cexp deriv_cexp
+-/
 
 end
 
@@ -124,59 +150,81 @@ section
 variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {E : Type _}
   [NormedAddCommGroup E] [NormedSpace π•œ E] {f : E β†’ β„‚} {f' : E β†’L[π•œ] β„‚} {x : E} {s : Set E}
 
+#print HasStrictFDerivAt.cexp /-
 theorem HasStrictFDerivAt.cexp (hf : HasStrictFDerivAt f f' x) :
     HasStrictFDerivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') x :=
   (Complex.hasStrictDerivAt_exp (f x)).comp_hasStrictFDerivAt x hf
 #align has_strict_fderiv_at.cexp HasStrictFDerivAt.cexp
+-/
 
+#print HasFDerivWithinAt.cexp /-
 theorem HasFDerivWithinAt.cexp (hf : HasFDerivWithinAt f f' s x) :
     HasFDerivWithinAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') s x :=
   (Complex.hasDerivAt_exp (f x)).comp_hasFDerivWithinAt x hf
 #align has_fderiv_within_at.cexp HasFDerivWithinAt.cexp
+-/
 
+#print HasFDerivAt.cexp /-
 theorem HasFDerivAt.cexp (hf : HasFDerivAt f f' x) :
     HasFDerivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') x :=
   hasFDerivWithinAt_univ.1 <| hf.HasFDerivWithinAt.cexp
 #align has_fderiv_at.cexp HasFDerivAt.cexp
+-/
 
+#print DifferentiableWithinAt.cexp /-
 theorem DifferentiableWithinAt.cexp (hf : DifferentiableWithinAt π•œ f s x) :
     DifferentiableWithinAt π•œ (fun x => Complex.exp (f x)) s x :=
   hf.HasFDerivWithinAt.cexp.DifferentiableWithinAt
 #align differentiable_within_at.cexp DifferentiableWithinAt.cexp
+-/
 
+#print DifferentiableAt.cexp /-
 @[simp]
 theorem DifferentiableAt.cexp (hc : DifferentiableAt π•œ f x) :
     DifferentiableAt π•œ (fun x => Complex.exp (f x)) x :=
   hc.HasFDerivAt.cexp.DifferentiableAt
 #align differentiable_at.cexp DifferentiableAt.cexp
+-/
 
+#print DifferentiableOn.cexp /-
 theorem DifferentiableOn.cexp (hc : DifferentiableOn π•œ f s) :
     DifferentiableOn π•œ (fun x => Complex.exp (f x)) s := fun x h => (hc x h).cexp
 #align differentiable_on.cexp DifferentiableOn.cexp
+-/
 
+#print Differentiable.cexp /-
 @[simp]
 theorem Differentiable.cexp (hc : Differentiable π•œ f) :
     Differentiable π•œ fun x => Complex.exp (f x) := fun x => (hc x).cexp
 #align differentiable.cexp Differentiable.cexp
+-/
 
+#print ContDiff.cexp /-
 theorem ContDiff.cexp {n} (h : ContDiff π•œ n f) : ContDiff π•œ n fun x => Complex.exp (f x) :=
   Complex.contDiff_exp.comp h
 #align cont_diff.cexp ContDiff.cexp
+-/
 
+#print ContDiffAt.cexp /-
 theorem ContDiffAt.cexp {n} (hf : ContDiffAt π•œ n f x) :
     ContDiffAt π•œ n (fun x => Complex.exp (f x)) x :=
   Complex.contDiff_exp.ContDiffAt.comp x hf
 #align cont_diff_at.cexp ContDiffAt.cexp
+-/
 
+#print ContDiffOn.cexp /-
 theorem ContDiffOn.cexp {n} (hf : ContDiffOn π•œ n f s) :
     ContDiffOn π•œ n (fun x => Complex.exp (f x)) s :=
   Complex.contDiff_exp.comp_contDiffOn hf
 #align cont_diff_on.cexp ContDiffOn.cexp
+-/
 
+#print ContDiffWithinAt.cexp /-
 theorem ContDiffWithinAt.cexp {n} (hf : ContDiffWithinAt π•œ n f s x) :
     ContDiffWithinAt π•œ n (fun x => Complex.exp (f x)) s x :=
   Complex.contDiff_exp.ContDiffAt.comp_contDiffWithinAt x hf
 #align cont_diff_within_at.cexp ContDiffWithinAt.cexp
+-/
 
 end
 
@@ -238,31 +286,41 @@ function, for standalone use and use with `simp`. -/
 
 variable {f : ℝ β†’ ℝ} {f' x : ℝ} {s : Set ℝ}
 
+#print HasStrictDerivAt.exp /-
 theorem HasStrictDerivAt.exp (hf : HasStrictDerivAt f f' x) :
     HasStrictDerivAt (fun x => Real.exp (f x)) (Real.exp (f x) * f') x :=
   (Real.hasStrictDerivAt_exp (f x)).comp x hf
 #align has_strict_deriv_at.exp HasStrictDerivAt.exp
+-/
 
+#print HasDerivAt.exp /-
 theorem HasDerivAt.exp (hf : HasDerivAt f f' x) :
     HasDerivAt (fun x => Real.exp (f x)) (Real.exp (f x) * f') x :=
   (Real.hasDerivAt_exp (f x)).comp x hf
 #align has_deriv_at.exp HasDerivAt.exp
+-/
 
+#print HasDerivWithinAt.exp /-
 theorem HasDerivWithinAt.exp (hf : HasDerivWithinAt f f' s x) :
     HasDerivWithinAt (fun x => Real.exp (f x)) (Real.exp (f x) * f') s x :=
   (Real.hasDerivAt_exp (f x)).comp_hasDerivWithinAt x hf
 #align has_deriv_within_at.exp HasDerivWithinAt.exp
+-/
 
+#print derivWithin_exp /-
 theorem derivWithin_exp (hf : DifferentiableWithinAt ℝ f s x) (hxs : UniqueDiffWithinAt ℝ s x) :
     derivWithin (fun x => Real.exp (f x)) s x = Real.exp (f x) * derivWithin f s x :=
   hf.HasDerivWithinAt.exp.derivWithin hxs
 #align deriv_within_exp derivWithin_exp
+-/
 
+#print deriv_exp /-
 @[simp]
 theorem deriv_exp (hc : DifferentiableAt ℝ f x) :
     deriv (fun x => Real.exp (f x)) x = Real.exp (f x) * deriv f x :=
   hc.HasDerivAt.exp.deriv
 #align deriv_exp deriv_exp
+-/
 
 end
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 
 ! This file was ported from Lean 3 source module analysis.special_functions.exp_deriv
-! leanprover-community/mathlib commit 6a5c85000ab93fe5dcfdf620676f614ba8e18c26
+! leanprover-community/mathlib commit 575b4ea3738b017e30fb205cb9b4a8742e5e82b6
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -13,6 +13,9 @@ import Mathbin.Analysis.Complex.RealDeriv
 /-!
 # Complex and real exponential
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file we prove that `complex.exp` and `real.exp` are infinitely smooth functions.
 
 ## Tags
Diff
@@ -181,35 +181,49 @@ namespace Real
 
 variable {x y z : ℝ}
 
+#print Real.hasStrictDerivAt_exp /-
 theorem hasStrictDerivAt_exp (x : ℝ) : HasStrictDerivAt exp (exp x) x :=
   (Complex.hasStrictDerivAt_exp x).real_of_complex
 #align real.has_strict_deriv_at_exp Real.hasStrictDerivAt_exp
+-/
 
+#print Real.hasDerivAt_exp /-
 theorem hasDerivAt_exp (x : ℝ) : HasDerivAt exp (exp x) x :=
   (Complex.hasDerivAt_exp x).real_of_complex
 #align real.has_deriv_at_exp Real.hasDerivAt_exp
+-/
 
+#print Real.contDiff_exp /-
 theorem contDiff_exp {n} : ContDiff ℝ n exp :=
   Complex.contDiff_exp.real_of_complex
 #align real.cont_diff_exp Real.contDiff_exp
+-/
 
+#print Real.differentiable_exp /-
 theorem differentiable_exp : Differentiable ℝ exp := fun x => (hasDerivAt_exp x).DifferentiableAt
 #align real.differentiable_exp Real.differentiable_exp
+-/
 
+#print Real.differentiableAt_exp /-
 theorem differentiableAt_exp : DifferentiableAt ℝ exp x :=
   differentiable_exp x
 #align real.differentiable_at_exp Real.differentiableAt_exp
+-/
 
+#print Real.deriv_exp /-
 @[simp]
 theorem deriv_exp : deriv exp = exp :=
   funext fun x => (hasDerivAt_exp x).deriv
 #align real.deriv_exp Real.deriv_exp
+-/
 
+#print Real.iter_deriv_exp /-
 @[simp]
 theorem iter_deriv_exp : βˆ€ n : β„•, (deriv^[n]) exp = exp
   | 0 => rfl
   | n + 1 => by rw [iterate_succ_apply, deriv_exp, iter_deriv_exp n]
 #align real.iter_deriv_exp Real.iter_deriv_exp
+-/
 
 end Real
 
@@ -258,68 +272,94 @@ function, for standalone use and use with `simp`. -/
 variable {E : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] {f : E β†’ ℝ} {f' : E β†’L[ℝ] ℝ} {x : E}
   {s : Set E}
 
+#print ContDiff.exp /-
 theorem ContDiff.exp {n} (hf : ContDiff ℝ n f) : ContDiff ℝ n fun x => Real.exp (f x) :=
   Real.contDiff_exp.comp hf
 #align cont_diff.exp ContDiff.exp
+-/
 
+#print ContDiffAt.exp /-
 theorem ContDiffAt.exp {n} (hf : ContDiffAt ℝ n f x) : ContDiffAt ℝ n (fun x => Real.exp (f x)) x :=
   Real.contDiff_exp.ContDiffAt.comp x hf
 #align cont_diff_at.exp ContDiffAt.exp
+-/
 
+#print ContDiffOn.exp /-
 theorem ContDiffOn.exp {n} (hf : ContDiffOn ℝ n f s) : ContDiffOn ℝ n (fun x => Real.exp (f x)) s :=
   Real.contDiff_exp.comp_contDiffOn hf
 #align cont_diff_on.exp ContDiffOn.exp
+-/
 
+#print ContDiffWithinAt.exp /-
 theorem ContDiffWithinAt.exp {n} (hf : ContDiffWithinAt ℝ n f s x) :
     ContDiffWithinAt ℝ n (fun x => Real.exp (f x)) s x :=
   Real.contDiff_exp.ContDiffAt.comp_contDiffWithinAt x hf
 #align cont_diff_within_at.exp ContDiffWithinAt.exp
+-/
 
+#print HasFDerivWithinAt.exp /-
 theorem HasFDerivWithinAt.exp (hf : HasFDerivWithinAt f f' s x) :
     HasFDerivWithinAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') s x :=
   (Real.hasDerivAt_exp (f x)).comp_hasFDerivWithinAt x hf
 #align has_fderiv_within_at.exp HasFDerivWithinAt.exp
+-/
 
+#print HasFDerivAt.exp /-
 theorem HasFDerivAt.exp (hf : HasFDerivAt f f' x) :
     HasFDerivAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') x :=
   (Real.hasDerivAt_exp (f x)).comp_hasFDerivAt x hf
 #align has_fderiv_at.exp HasFDerivAt.exp
+-/
 
+#print HasStrictFDerivAt.exp /-
 theorem HasStrictFDerivAt.exp (hf : HasStrictFDerivAt f f' x) :
     HasStrictFDerivAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') x :=
   (Real.hasStrictDerivAt_exp (f x)).comp_hasStrictFDerivAt x hf
 #align has_strict_fderiv_at.exp HasStrictFDerivAt.exp
+-/
 
+#print DifferentiableWithinAt.exp /-
 theorem DifferentiableWithinAt.exp (hf : DifferentiableWithinAt ℝ f s x) :
     DifferentiableWithinAt ℝ (fun x => Real.exp (f x)) s x :=
   hf.HasFDerivWithinAt.exp.DifferentiableWithinAt
 #align differentiable_within_at.exp DifferentiableWithinAt.exp
+-/
 
+#print DifferentiableAt.exp /-
 @[simp]
 theorem DifferentiableAt.exp (hc : DifferentiableAt ℝ f x) :
     DifferentiableAt ℝ (fun x => Real.exp (f x)) x :=
   hc.HasFDerivAt.exp.DifferentiableAt
 #align differentiable_at.exp DifferentiableAt.exp
+-/
 
+#print DifferentiableOn.exp /-
 theorem DifferentiableOn.exp (hc : DifferentiableOn ℝ f s) :
     DifferentiableOn ℝ (fun x => Real.exp (f x)) s := fun x h => (hc x h).exp
 #align differentiable_on.exp DifferentiableOn.exp
+-/
 
+#print Differentiable.exp /-
 @[simp]
 theorem Differentiable.exp (hc : Differentiable ℝ f) : Differentiable ℝ fun x => Real.exp (f x) :=
   fun x => (hc x).exp
 #align differentiable.exp Differentiable.exp
+-/
 
+#print fderivWithin_exp /-
 theorem fderivWithin_exp (hf : DifferentiableWithinAt ℝ f s x) (hxs : UniqueDiffWithinAt ℝ s x) :
     fderivWithin ℝ (fun x => Real.exp (f x)) s x = Real.exp (f x) β€’ fderivWithin ℝ f s x :=
   hf.HasFDerivWithinAt.exp.fderivWithin hxs
 #align fderiv_within_exp fderivWithin_exp
+-/
 
+#print fderiv_exp /-
 @[simp]
 theorem fderiv_exp (hc : DifferentiableAt ℝ f x) :
     fderiv ℝ (fun x => Real.exp (f x)) x = Real.exp (f x) β€’ fderiv ℝ f x :=
   hc.HasFDerivAt.exp.fderiv
 #align fderiv_exp fderiv_exp
+-/
 
 end
 
Diff
@@ -4,11 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 
 ! This file was ported from Lean 3 source module analysis.special_functions.exp_deriv
-! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
+! leanprover-community/mathlib commit 6a5c85000ab93fe5dcfdf620676f614ba8e18c26
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
-import Mathbin.Analysis.Calculus.Inverse
 import Mathbin.Analysis.Complex.RealDeriv
 
 /-!
@@ -75,17 +74,13 @@ theorem contDiff_exp : βˆ€ {n}, ContDiff π•œ n exp :=
 #align complex.cont_diff_exp Complex.contDiff_exp
 
 theorem hasStrictDerivAt_exp (x : β„‚) : HasStrictDerivAt exp (exp x) x :=
-  contDiff_exp.ContDiffAt.has_strict_deriv_at' (hasDerivAt_exp x) le_rfl
+  contDiff_exp.ContDiffAt.hasStrictDerivAt' (hasDerivAt_exp x) le_rfl
 #align complex.has_strict_deriv_at_exp Complex.hasStrictDerivAt_exp
 
 theorem hasStrictFDerivAt_exp_real (x : β„‚) : HasStrictFDerivAt exp (exp x β€’ (1 : β„‚ β†’L[ℝ] β„‚)) x :=
   (hasStrictDerivAt_exp x).complexToReal_fderiv
 #align complex.has_strict_fderiv_at_exp_real Complex.hasStrictFDerivAt_exp_real
 
-theorem isOpenMap_exp : IsOpenMap exp :=
-  open_map_of_strict_deriv hasStrictDerivAt_exp exp_ne_zero
-#align complex.is_open_map_exp Complex.isOpenMap_exp
-
 end Complex
 
 section
Diff
@@ -26,7 +26,7 @@ noncomputable section
 
 open Filter Asymptotics Set Function
 
-open Classical Topology
+open scoped Classical Topology
 
 namespace Complex
 
Diff
@@ -78,9 +78,9 @@ theorem hasStrictDerivAt_exp (x : β„‚) : HasStrictDerivAt exp (exp x) x :=
   contDiff_exp.ContDiffAt.has_strict_deriv_at' (hasDerivAt_exp x) le_rfl
 #align complex.has_strict_deriv_at_exp Complex.hasStrictDerivAt_exp
 
-theorem hasStrictFderivAt_exp_real (x : β„‚) : HasStrictFderivAt exp (exp x β€’ (1 : β„‚ β†’L[ℝ] β„‚)) x :=
+theorem hasStrictFDerivAt_exp_real (x : β„‚) : HasStrictFDerivAt exp (exp x β€’ (1 : β„‚ β†’L[ℝ] β„‚)) x :=
   (hasStrictDerivAt_exp x).complexToReal_fderiv
-#align complex.has_strict_fderiv_at_exp_real Complex.hasStrictFderivAt_exp_real
+#align complex.has_strict_fderiv_at_exp_real Complex.hasStrictFDerivAt_exp_real
 
 theorem isOpenMap_exp : IsOpenMap exp :=
   open_map_of_strict_deriv hasStrictDerivAt_exp exp_ne_zero
@@ -126,30 +126,30 @@ section
 variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {E : Type _}
   [NormedAddCommGroup E] [NormedSpace π•œ E] {f : E β†’ β„‚} {f' : E β†’L[π•œ] β„‚} {x : E} {s : Set E}
 
-theorem HasStrictFderivAt.cexp (hf : HasStrictFderivAt f f' x) :
-    HasStrictFderivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') x :=
-  (Complex.hasStrictDerivAt_exp (f x)).comp_hasStrictFderivAt x hf
-#align has_strict_fderiv_at.cexp HasStrictFderivAt.cexp
+theorem HasStrictFDerivAt.cexp (hf : HasStrictFDerivAt f f' x) :
+    HasStrictFDerivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') x :=
+  (Complex.hasStrictDerivAt_exp (f x)).comp_hasStrictFDerivAt x hf
+#align has_strict_fderiv_at.cexp HasStrictFDerivAt.cexp
 
-theorem HasFderivWithinAt.cexp (hf : HasFderivWithinAt f f' s x) :
-    HasFderivWithinAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') s x :=
-  (Complex.hasDerivAt_exp (f x)).comp_hasFderivWithinAt x hf
-#align has_fderiv_within_at.cexp HasFderivWithinAt.cexp
+theorem HasFDerivWithinAt.cexp (hf : HasFDerivWithinAt f f' s x) :
+    HasFDerivWithinAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') s x :=
+  (Complex.hasDerivAt_exp (f x)).comp_hasFDerivWithinAt x hf
+#align has_fderiv_within_at.cexp HasFDerivWithinAt.cexp
 
-theorem HasFderivAt.cexp (hf : HasFderivAt f f' x) :
-    HasFderivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') x :=
-  hasFderivWithinAt_univ.1 <| hf.HasFderivWithinAt.cexp
-#align has_fderiv_at.cexp HasFderivAt.cexp
+theorem HasFDerivAt.cexp (hf : HasFDerivAt f f' x) :
+    HasFDerivAt (fun x => Complex.exp (f x)) (Complex.exp (f x) β€’ f') x :=
+  hasFDerivWithinAt_univ.1 <| hf.HasFDerivWithinAt.cexp
+#align has_fderiv_at.cexp HasFDerivAt.cexp
 
 theorem DifferentiableWithinAt.cexp (hf : DifferentiableWithinAt π•œ f s x) :
     DifferentiableWithinAt π•œ (fun x => Complex.exp (f x)) s x :=
-  hf.HasFderivWithinAt.cexp.DifferentiableWithinAt
+  hf.HasFDerivWithinAt.cexp.DifferentiableWithinAt
 #align differentiable_within_at.cexp DifferentiableWithinAt.cexp
 
 @[simp]
 theorem DifferentiableAt.cexp (hc : DifferentiableAt π•œ f x) :
     DifferentiableAt π•œ (fun x => Complex.exp (f x)) x :=
-  hc.HasFderivAt.cexp.DifferentiableAt
+  hc.HasFDerivAt.cexp.DifferentiableAt
 #align differentiable_at.cexp DifferentiableAt.cexp
 
 theorem DifferentiableOn.cexp (hc : DifferentiableOn π•œ f s) :
@@ -280,30 +280,30 @@ theorem ContDiffWithinAt.exp {n} (hf : ContDiffWithinAt ℝ n f s x) :
   Real.contDiff_exp.ContDiffAt.comp_contDiffWithinAt x hf
 #align cont_diff_within_at.exp ContDiffWithinAt.exp
 
-theorem HasFderivWithinAt.exp (hf : HasFderivWithinAt f f' s x) :
-    HasFderivWithinAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') s x :=
-  (Real.hasDerivAt_exp (f x)).comp_hasFderivWithinAt x hf
-#align has_fderiv_within_at.exp HasFderivWithinAt.exp
+theorem HasFDerivWithinAt.exp (hf : HasFDerivWithinAt f f' s x) :
+    HasFDerivWithinAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') s x :=
+  (Real.hasDerivAt_exp (f x)).comp_hasFDerivWithinAt x hf
+#align has_fderiv_within_at.exp HasFDerivWithinAt.exp
 
-theorem HasFderivAt.exp (hf : HasFderivAt f f' x) :
-    HasFderivAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') x :=
-  (Real.hasDerivAt_exp (f x)).comp_hasFderivAt x hf
-#align has_fderiv_at.exp HasFderivAt.exp
+theorem HasFDerivAt.exp (hf : HasFDerivAt f f' x) :
+    HasFDerivAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') x :=
+  (Real.hasDerivAt_exp (f x)).comp_hasFDerivAt x hf
+#align has_fderiv_at.exp HasFDerivAt.exp
 
-theorem HasStrictFderivAt.exp (hf : HasStrictFderivAt f f' x) :
-    HasStrictFderivAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') x :=
-  (Real.hasStrictDerivAt_exp (f x)).comp_hasStrictFderivAt x hf
-#align has_strict_fderiv_at.exp HasStrictFderivAt.exp
+theorem HasStrictFDerivAt.exp (hf : HasStrictFDerivAt f f' x) :
+    HasStrictFDerivAt (fun x => Real.exp (f x)) (Real.exp (f x) β€’ f') x :=
+  (Real.hasStrictDerivAt_exp (f x)).comp_hasStrictFDerivAt x hf
+#align has_strict_fderiv_at.exp HasStrictFDerivAt.exp
 
 theorem DifferentiableWithinAt.exp (hf : DifferentiableWithinAt ℝ f s x) :
     DifferentiableWithinAt ℝ (fun x => Real.exp (f x)) s x :=
-  hf.HasFderivWithinAt.exp.DifferentiableWithinAt
+  hf.HasFDerivWithinAt.exp.DifferentiableWithinAt
 #align differentiable_within_at.exp DifferentiableWithinAt.exp
 
 @[simp]
 theorem DifferentiableAt.exp (hc : DifferentiableAt ℝ f x) :
     DifferentiableAt ℝ (fun x => Real.exp (f x)) x :=
-  hc.HasFderivAt.exp.DifferentiableAt
+  hc.HasFDerivAt.exp.DifferentiableAt
 #align differentiable_at.exp DifferentiableAt.exp
 
 theorem DifferentiableOn.exp (hc : DifferentiableOn ℝ f s) :
@@ -317,13 +317,13 @@ theorem Differentiable.exp (hc : Differentiable ℝ f) : Differentiable ℝ fun
 
 theorem fderivWithin_exp (hf : DifferentiableWithinAt ℝ f s x) (hxs : UniqueDiffWithinAt ℝ s x) :
     fderivWithin ℝ (fun x => Real.exp (f x)) s x = Real.exp (f x) β€’ fderivWithin ℝ f s x :=
-  hf.HasFderivWithinAt.exp.fderivWithin hxs
+  hf.HasFDerivWithinAt.exp.fderivWithin hxs
 #align fderiv_within_exp fderivWithin_exp
 
 @[simp]
 theorem fderiv_exp (hc : DifferentiableAt ℝ f x) :
     fderiv ℝ (fun x => Real.exp (f x)) x = Real.exp (f x) β€’ fderiv ℝ f x :=
-  hc.HasFderivAt.exp.fderiv
+  hc.HasFDerivAt.exp.fderiv
 #align fderiv_exp fderiv_exp
 
 end
Diff
@@ -4,13 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 
 ! This file was ported from Lean 3 source module analysis.special_functions.exp_deriv
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! 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.Calculus.Inverse
 import Mathbin.Analysis.Complex.RealDeriv
-import Mathbin.Analysis.SpecialFunctions.Exp
 
 /-!
 # Complex and real exponential
Diff
@@ -36,9 +36,9 @@ variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚]
 /-- The complex exponential is everywhere differentiable, with the derivative `exp x`. -/
 theorem hasDerivAt_exp (x : β„‚) : HasDerivAt exp (exp x) x :=
   by
-  rw [hasDerivAt_iff_isOCat_nhds_zero]
+  rw [hasDerivAt_iff_isLittleO_nhds_zero]
   have : (1 : β„•) < 2 := by norm_num
-  refine' (is_O.of_bound β€–exp xβ€– _).trans_isOCat (is_o_pow_id this)
+  refine' (is_O.of_bound β€–exp xβ€– _).trans_isLittleO (is_o_pow_id this)
   filter_upwards [Metric.ball_mem_nhds (0 : β„‚) zero_lt_one]
   simp only [Metric.mem_ball, dist_zero_right, norm_pow]
   exact fun z hz => exp_bound_sq x z hz.le

Changes in mathlib4

mathlib3
mathlib4
chore: replace refine' that already have a ?_ (#12261)

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

Diff
@@ -63,7 +63,7 @@ theorem iter_deriv_exp : βˆ€ n : β„•, deriv^[n] exp = exp
 
 theorem contDiff_exp : βˆ€ {n}, ContDiff π•œ n exp := by
   -- Porting note: added `@` due to `βˆ€ {n}` weirdness above
-  refine' @(contDiff_all_iff_nat.2 fun n => ?_)
+  refine @(contDiff_all_iff_nat.2 fun n => ?_)
   have : ContDiff β„‚ (↑n) exp := by
     induction' n with n ihn
     Β· exact contDiff_zero.2 continuous_exp
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
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 -/
 import Mathlib.Analysis.Complex.RealDeriv
-import Mathlib.Analysis.Calculus.ContDiff.IsROrC
+import Mathlib.Analysis.Calculus.ContDiff.RCLike
 import Mathlib.Analysis.Calculus.IteratedDeriv.Lemmas
 
 #align_import analysis.special_functions.exp_deriv from "leanprover-community/mathlib"@"6a5c85000ab93fe5dcfdf620676f614ba8e18c26"
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -62,7 +62,7 @@ theorem iter_deriv_exp : βˆ€ n : β„•, deriv^[n] exp = exp
 #align complex.iter_deriv_exp Complex.iter_deriv_exp
 
 theorem contDiff_exp : βˆ€ {n}, ContDiff π•œ n exp := by
-  -- porting note: added `@` due to `βˆ€ {n}` weirdness above
+  -- Porting note: added `@` due to `βˆ€ {n}` weirdness above
   refine' @(contDiff_all_iff_nat.2 fun n => ?_)
   have : ContDiff β„‚ (↑n) exp := by
     induction' n with n ihn
feat: iteratedDeriv_const_{s,}mul, iteratedDeriv_{c,}exp_const_mul (#9767)

Based on @CBirkbeck's work on modular forms.

Diff
@@ -5,6 +5,7 @@ Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 -/
 import Mathlib.Analysis.Complex.RealDeriv
 import Mathlib.Analysis.Calculus.ContDiff.IsROrC
+import Mathlib.Analysis.Calculus.IteratedDeriv.Lemmas
 
 #align_import analysis.special_functions.exp_deriv from "leanprover-community/mathlib"@"6a5c85000ab93fe5dcfdf620676f614ba8e18c26"
 
@@ -25,6 +26,8 @@ open Filter Asymptotics Set Function
 
 open scoped Classical Topology
 
+/-! ## `Complex.exp` -/
+
 namespace Complex
 
 variable {π•œ : Type*} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚]
@@ -174,6 +177,15 @@ theorem ContDiffWithinAt.cexp {n} (hf : ContDiffWithinAt π•œ n f s x) :
 
 end
 
+open Complex in
+@[simp]
+theorem iteratedDeriv_cexp_const_mul (n : β„•) (c : β„‚) :
+    (iteratedDeriv n fun s : β„‚ => exp (c * s)) = fun s => c ^ n * exp (c * s) := by
+  rw [iteratedDeriv_const_mul contDiff_exp, iteratedDeriv_eq_iterate, iter_deriv_exp]
+
+
+/-! ## `Real.exp` -/
+
 namespace Real
 
 variable {x y z : ℝ}
@@ -319,3 +331,9 @@ theorem fderiv_exp (hc : DifferentiableAt ℝ f x) :
 #align fderiv_exp fderiv_exp
 
 end
+
+open Real in
+@[simp]
+theorem iteratedDeriv_exp_const_mul (n : β„•) (c : ℝ) :
+    (iteratedDeriv n fun s => exp (c * s)) = fun s => c ^ n * exp (c * s) := by
+  rw [iteratedDeriv_const_mul contDiff_exp, iteratedDeriv_eq_iterate, iter_deriv_exp]
chore: split Mathlib.Analysis.Calculus.ContDiff.Basic (#8344)

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

Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
 -/
 import Mathlib.Analysis.Complex.RealDeriv
+import Mathlib.Analysis.Calculus.ContDiff.IsROrC
 
 #align_import analysis.special_functions.exp_deriv from "leanprover-community/mathlib"@"6a5c85000ab93fe5dcfdf620676f614ba8e18c26"
 
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
@@ -26,7 +26,7 @@ open scoped Classical Topology
 
 namespace Complex
 
-variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚]
+variable {π•œ : Type*} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚]
 
 /-- The complex exponential is everywhere differentiable, with the derivative `exp x`. -/
 theorem hasDerivAt_exp (x : β„‚) : HasDerivAt exp (exp x) x := by
@@ -81,7 +81,7 @@ end Complex
 
 section
 
-variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {f : π•œ β†’ β„‚} {f' : β„‚} {x : π•œ}
+variable {π•œ : Type*} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {f : π•œ β†’ β„‚} {f' : β„‚} {x : π•œ}
   {s : Set π•œ}
 
 theorem HasStrictDerivAt.cexp (hf : HasStrictDerivAt f f' x) :
@@ -114,7 +114,7 @@ end
 
 section
 
-variable {π•œ : Type _} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {E : Type _}
+variable {π•œ : Type*} [NontriviallyNormedField π•œ] [NormedAlgebra π•œ β„‚] {E : Type*}
   [NormedAddCommGroup E] [NormedSpace π•œ E] {f : E β†’ β„‚} {f' : E β†’L[π•œ] β„‚} {x : E} {s : Set E}
 
 theorem HasStrictFDerivAt.cexp (hf : HasStrictFDerivAt f f' x) :
@@ -251,7 +251,7 @@ section
 function, for standalone use and use with `simp`. -/
 
 
-variable {E : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] {f : E β†’ ℝ} {f' : E β†’L[ℝ] ℝ} {x : E}
+variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] {f : E β†’ ℝ} {f' : E β†’L[ℝ] ℝ} {x : E}
   {s : Set E}
 
 theorem ContDiff.exp {n} (hf : ContDiff ℝ n f) : ContDiff ℝ n fun x => Real.exp (f x) :=
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,14 +2,11 @@
 Copyright (c) 2018 Chris Hughes. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Chris Hughes, Abhimanyu Pallavi Sudhir, Jean Lo, Calle SΓΆnne
-
-! This file was ported from Lean 3 source module analysis.special_functions.exp_deriv
-! leanprover-community/mathlib commit 6a5c85000ab93fe5dcfdf620676f614ba8e18c26
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Complex.RealDeriv
 
+#align_import analysis.special_functions.exp_deriv from "leanprover-community/mathlib"@"6a5c85000ab93fe5dcfdf620676f614ba8e18c26"
+
 /-!
 # Complex and real exponential
 
fix precedence of Nat.iterate (#5589)
Diff
@@ -55,7 +55,7 @@ theorem deriv_exp : deriv exp = exp :=
 #align complex.deriv_exp Complex.deriv_exp
 
 @[simp]
-theorem iter_deriv_exp : βˆ€ n : β„•, (deriv^[n]) exp = exp
+theorem iter_deriv_exp : βˆ€ n : β„•, deriv^[n] exp = exp
   | 0 => rfl
   | n + 1 => by rw [iterate_succ_apply, deriv_exp, iter_deriv_exp n]
 #align complex.iter_deriv_exp Complex.iter_deriv_exp
@@ -205,7 +205,7 @@ theorem deriv_exp : deriv exp = exp :=
 #align real.deriv_exp Real.deriv_exp
 
 @[simp]
-theorem iter_deriv_exp : βˆ€ n : β„•, (deriv^[n]) exp = exp
+theorem iter_deriv_exp : βˆ€ n : β„•, deriv^[n] exp = exp
   | 0 => rfl
   | n + 1 => by rw [iterate_succ_apply, deriv_exp, iter_deriv_exp n]
 #align real.iter_deriv_exp Real.iter_deriv_exp
feat: port Analysis.SpecialFunctions.ExpDeriv (#4651)

This incorporates the changes from https://github.com/leanprover-community/mathlib/pull/19139 which haven't hit mathport yet due to mathport CI failing for a few days. (Hopefully it will succeed on the next run.)

Dependencies 12 + 891

892 files ported (98.7%)
392212 lines ported (98.6%)
Show graph

The unported dependencies are

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