analysis.special_functions.exp
β·
Mathlib.Analysis.SpecialFunctions.Exp
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
This only moves the very basic lemmas for now.
This should be very easy to forward-port:
A few downstream proofs need some small help with unification, as while the old normed_space
argument was found by unification, the new has_bounded_smul
has to be found by typeclass search.
@@ -48,8 +48,8 @@ begin
have h_sq : β z, βzβ β€ 1 β βexp (x + z) - exp xβ β€ βzβ * βexp xβ + βexp xβ * βzβ ^ 2,
{ intros z hz,
have : βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2, from exp_bound_sq x z hz,
- rw [β sub_le_iff_le_add', β norm_smul z],
- exact (norm_sub_norm_le _ _).trans this, },
+ rw [β sub_le_iff_le_add', β norm_smul z (_ : β)],
+ exact (norm_sub_norm_le _ _).trans this },
calc βexp y - exp xβ = βexp (x + (y - x)) - exp xβ : by nth_rewrite 0 hy_eq
... β€ βy - xβ * βexp xβ + βexp xβ * βy - xβ ^ 2 : h_sq (y - x) (hyx.le.trans hr_le)
... β€ βy - xβ * βexp xβ + βexp xβ * (r * βy - xβ) :
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -274,8 +274,8 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
eventually_at_top.1
((tendsto_pow_const_div_const_pow_of_one_lt n (one_lt_exp_iff.2 zero_lt_one)).Eventually
(gt_mem_nhds this))
- simp only [β exp_nat_mul, mul_one, div_lt_iff, exp_pos, β div_eq_inv_mul] at hN
- refine' β¨N, trivial, fun x hx => _β©; rw [Set.mem_Ioi] at hx
+ simp only [β exp_nat_mul, mul_one, div_lt_iff, exp_pos, β div_eq_inv_mul] at hN
+ refine' β¨N, trivial, fun x hx => _β©; rw [Set.mem_Ioi] at hx
have hxβ : 0 < x := N.cast_nonneg.trans_lt hx
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -219,24 +219,24 @@ theorem tendsto_exp_atTop : Tendsto exp atTop atTop :=
#align real.tendsto_exp_at_top Real.tendsto_exp_atTop
-/
-#print Real.tendsto_exp_neg_atTop_nhds_0 /-
+#print Real.tendsto_exp_neg_atTop_nhds_zero /-
/-- The real exponential function tends to `0` at `-β` or, equivalently, `exp(-x)` tends to `0`
at `+β` -/
-theorem tendsto_exp_neg_atTop_nhds_0 : Tendsto (fun x => exp (-x)) atTop (π 0) :=
+theorem tendsto_exp_neg_atTop_nhds_zero : Tendsto (fun x => exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp tendsto_exp_atTop).congr fun x => (exp_neg x).symm
-#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0
+#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_zero
-/
-#print Real.tendsto_exp_nhds_0_nhds_1 /-
+#print Real.tendsto_exp_nhds_zero_nhds_one /-
/-- The real exponential function tends to `1` at `0`. -/
-theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) := by convert continuous_exp.tendsto 0;
- simp
-#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1
+theorem tendsto_exp_nhds_zero_nhds_one : Tendsto exp (π 0) (π 1) := by
+ convert continuous_exp.tendsto 0; simp
+#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_zero_nhds_one
-/
#print Real.tendsto_exp_atBot /-
theorem tendsto_exp_atBot : Tendsto exp atBot (π 0) :=
- (tendsto_exp_neg_atTop_nhds_0.comp tendsto_neg_atBot_atTop).congr fun x =>
+ (tendsto_exp_neg_atTop_nhds_zero.comp tendsto_neg_atBot_atTop).congr fun x =>
congr_arg exp <| neg_neg x
#align real.tendsto_exp_at_bot Real.tendsto_exp_atBot
-/
@@ -289,13 +289,13 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
-/
-#print Real.tendsto_pow_mul_exp_neg_atTop_nhds_0 /-
+#print Real.tendsto_pow_mul_exp_neg_atTop_nhds_zero /-
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
-theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
+theorem tendsto_pow_mul_exp_neg_atTop_nhds_zero (n : β) :
Tendsto (fun x => x ^ n * exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp (tendsto_exp_div_pow_atTop n)).congr fun x => by
rw [comp_app, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, NormedSpace.exp_neg]
-#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0
+#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_zero
-/
#print Real.tendsto_mul_exp_add_div_pow_atTop /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -279,7 +279,7 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
have hxβ : 0 < x := N.cast_nonneg.trans_lt hx
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
- x ^ n β€ βxββ ^ n := pow_le_pow_of_le_left hxβ.le (Nat.le_ceil _) _
+ x ^ n β€ βxββ ^ n := pow_le_pow_left hxβ.le (Nat.le_ceil _) _
_ β€ NormedSpace.exp βxββ / (NormedSpace.exp 1 * C) := (hN _ (Nat.lt_ceil.2 hx).le).le
_ β€ NormedSpace.exp (x + 1) / (NormedSpace.exp 1 * C) :=
(div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -510,13 +510,13 @@ end Real
namespace Complex
-#print Complex.comap_exp_comap_abs_atTop /-
-theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
+#print Complex.comap_exp_cobounded /-
+theorem comap_exp_cobounded : comap exp (comap abs atTop) = comap re atTop :=
calc
comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
simp only [comap_comap, (Β· β Β·), abs_exp]
_ = comap re atTop := by rw [Real.comap_exp_atTop]
-#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTop
+#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_cobounded
-/
#print Complex.comap_exp_nhds_zero /-
@@ -546,7 +546,7 @@ theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β}
#print Complex.tendsto_exp_comap_re_atTop /-
/-- `complex.abs (complex.exp z) β β` as `complex.re z β β`. TODO: use `bornology.cobounded`. -/
theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
- comap_exp_comap_abs_atTop βΈ tendsto_comap
+ comap_exp_cobounded βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -38,7 +38,8 @@ variable {z y x : β}
theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 :=
calc
- βexp (x + z) - exp x - z * exp xβ = βexp x * (exp z - 1 - z)β := by congr; rw [exp_add]; ring
+ βexp (x + z) - exp x - z * exp xβ = βexp x * (exp z - 1 - z)β := by congr;
+ rw [NormedSpace.exp_add]; ring
_ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
@@ -54,18 +55,27 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
by
rw [pow_two]
exact mul_le_mul hyx.le le_rfl (norm_nonneg _) hr_nonneg
- have h_sq : β z, βzβ β€ 1 β βexp (x + z) - exp xβ β€ βzβ * βexp xβ + βexp xβ * βzβ ^ 2 :=
+ have h_sq :
+ β z,
+ βzβ β€ 1 β
+ βNormedSpace.exp (x + z) - NormedSpace.exp xβ β€
+ βzβ * βNormedSpace.exp xβ + βNormedSpace.exp xβ * βzβ ^ 2 :=
by
intro z hz
- have : βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 := exp_bound_sq x z hz
+ have :
+ βNormedSpace.exp (x + z) - NormedSpace.exp x - z β’ NormedSpace.exp xβ β€
+ βNormedSpace.exp xβ * βzβ ^ 2 :=
+ exp_bound_sq x z hz
rw [β sub_le_iff_le_add', β norm_smul z (_ : β)]
exact (norm_sub_norm_le _ _).trans this
calc
- βexp y - exp xβ = βexp (x + (y - x)) - exp xβ := by nth_rw 1 [hy_eq]
- _ β€ βy - xβ * βexp xβ + βexp xβ * βy - xβ ^ 2 := (h_sq (y - x) (hyx.le.trans hr_le))
- _ β€ βy - xβ * βexp xβ + βexp xβ * (r * βy - xβ) :=
+ βNormedSpace.exp y - NormedSpace.exp xβ = βNormedSpace.exp (x + (y - x)) - NormedSpace.exp xβ :=
+ by nth_rw 1 [hy_eq]
+ _ β€ βy - xβ * βNormedSpace.exp xβ + βNormedSpace.exp xβ * βy - xβ ^ 2 :=
+ (h_sq (y - x) (hyx.le.trans hr_le))
+ _ β€ βy - xβ * βNormedSpace.exp xβ + βNormedSpace.exp xβ * (r * βy - xβ) :=
(add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _)
- _ = (1 + r) * βexp xβ * βy - xβ := by ring
+ _ = (1 + r) * βNormedSpace.exp xβ * βy - xβ := by ring
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
-/
@@ -193,7 +203,7 @@ variable {Ξ± : Type _} {x y z : β} {l : Filter Ξ±}
#print Real.exp_half /-
theorem exp_half (x : β) : exp (x / 2) = sqrt (exp x) := by
- rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β exp_add, add_halves] <;> exact (exp_pos _).le
+ rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β NormedSpace.exp_add, add_halves] <;> exact (exp_pos _).le
#align real.exp_half Real.exp_half
-/
@@ -203,7 +213,8 @@ theorem tendsto_exp_atTop : Tendsto exp atTop atTop :=
by
have A : tendsto (fun x : β => x + 1) at_top at_top :=
tendsto_at_top_add_const_right at_top 1 tendsto_id
- have B : βαΆ x in at_top, x + 1 β€ exp x := eventually_at_top.2 β¨0, fun x hx => add_one_le_exp xβ©
+ have B : βαΆ x in at_top, x + 1 β€ NormedSpace.exp x :=
+ eventually_at_top.2 β¨0, fun x hx => add_one_le_exp xβ©
exact tendsto_at_top_mono' at_top B A
#align real.tendsto_exp_at_top Real.tendsto_exp_atTop
-/
@@ -258,8 +269,8 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
by
refine' (at_top_basis_Ioi.tendsto_iff (at_top_basis' 1)).2 fun C hCβ => _
have hCβ : 0 < C := zero_lt_one.trans_le hCβ
- have : 0 < (exp 1 * C)β»ΒΉ := inv_pos.2 (mul_pos (exp_pos _) hCβ)
- obtain β¨N, hNβ© : β N, β k β₯ N, (βk ^ n : β) / exp 1 ^ k < (exp 1 * C)β»ΒΉ :=
+ have : 0 < (NormedSpace.exp 1 * C)β»ΒΉ := inv_pos.2 (mul_pos (exp_pos _) hCβ)
+ obtain β¨N, hNβ© : β N, β k β₯ N, (βk ^ n : β) / NormedSpace.exp 1 ^ k < (NormedSpace.exp 1 * C)β»ΒΉ :=
eventually_at_top.1
((tendsto_pow_const_div_const_pow_of_one_lt n (one_lt_exp_iff.2 zero_lt_one)).Eventually
(gt_mem_nhds this))
@@ -269,11 +280,12 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
x ^ n β€ βxββ ^ n := pow_le_pow_of_le_left hxβ.le (Nat.le_ceil _) _
- _ β€ exp βxββ / (exp 1 * C) := (hN _ (Nat.lt_ceil.2 hx).le).le
- _ β€ exp (x + 1) / (exp 1 * C) :=
+ _ β€ NormedSpace.exp βxββ / (NormedSpace.exp 1 * C) := (hN _ (Nat.lt_ceil.2 hx).le).le
+ _ β€ NormedSpace.exp (x + 1) / (NormedSpace.exp 1 * C) :=
(div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
(exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
- _ = exp x / C := by rw [add_comm, exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
+ _ = NormedSpace.exp x / C := by
+ rw [add_comm, NormedSpace.exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
-/
@@ -282,7 +294,7 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
Tendsto (fun x => x ^ n * exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp (tendsto_exp_div_pow_atTop n)).congr fun x => by
- rw [comp_app, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, exp_neg]
+ rw [comp_app, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, NormedSpace.exp_neg]
#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0
-/
@@ -308,7 +320,7 @@ theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
Tendsto (fun x => x ^ n / (b * exp x + c)) atTop (π 0) :=
by
- have H : β d e, 0 < d β tendsto (fun x : β => x ^ n / (d * exp x + e)) at_top (π 0) :=
+ have H : β d e, 0 < d β tendsto (fun x : β => x ^ n / (d * NormedSpace.exp x + e)) at_top (π 0) :=
by
intro b' c' h
convert (tendsto_mul_exp_add_div_pow_at_top b' c' n h).inv_tendsto_atTop
@@ -319,7 +331,7 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
Β· convert (H (-b) (-c) (neg_pos.mpr h)).neg
Β· ext x
field_simp
- rw [β neg_add (b * exp x) c, neg_div_neg_eq]
+ rw [β neg_add (b * NormedSpace.exp x) c, neg_div_neg_eq]
Β· exact neg_zero.symm
#align real.tendsto_div_pow_mul_exp_add_at_top Real.tendsto_div_pow_mul_exp_add_atTop
-/
@@ -460,7 +472,7 @@ theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
@[simp]
theorem isLittleO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =o[l] fun x => exp (f x)) β Tendsto f l atTop := by
- simp only [β exp_zero, is_o_exp_comp_exp_comp, sub_zero]
+ simp only [β NormedSpace.exp_zero, is_o_exp_comp_exp_comp, sub_zero]
#align real.is_o_one_exp_comp Real.isLittleO_one_exp_comp
-/
@@ -470,7 +482,8 @@ from below under `f`. -/
@[simp]
theorem isBigO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =O[l] fun x => exp (f x)) β IsBoundedUnder (Β· β₯ Β·) l f := by
- simp only [β exp_zero, is_O_exp_comp_exp_comp, Pi.sub_def, zero_sub, is_bounded_under_le_neg]
+ simp only [β NormedSpace.exp_zero, is_O_exp_comp_exp_comp, Pi.sub_def, zero_sub,
+ is_bounded_under_le_neg]
#align real.is_O_one_exp_comp Real.isBigO_one_exp_comp
-/
@@ -489,7 +502,7 @@ theorem isBigO_exp_comp_one {f : Ξ± β β} :
@[simp]
theorem isTheta_exp_comp_one {f : Ξ± β β} :
(fun x => exp (f x)) =Ξ[l] (fun x => 1 : Ξ± β β) β IsBoundedUnder (Β· β€ Β·) l fun x => |f x| := by
- simp only [β exp_zero, is_Theta_exp_comp_exp_comp, sub_zero]
+ simp only [β NormedSpace.exp_zero, is_Theta_exp_comp_exp_comp, sub_zero]
#align real.is_Theta_exp_comp_one Real.isTheta_exp_comp_one
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ 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.Asymptotics.Theta
-import Mathbin.Analysis.Complex.Basic
-import Mathbin.Analysis.SpecificLimits.Normed
+import Analysis.Asymptotics.Theta
+import Analysis.Complex.Basic
+import Analysis.SpecificLimits.Normed
#align_import analysis.special_functions.exp from "leanprover-community/mathlib"@"ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
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
-! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Asymptotics.Theta
import Mathbin.Analysis.Complex.Basic
import Mathbin.Analysis.SpecificLimits.Normed
+#align_import analysis.special_functions.exp from "leanprover-community/mathlib"@"ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112"
+
/-!
# Complex and real exponential
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -37,6 +37,7 @@ namespace Complex
variable {z y x : β}
+#print Complex.exp_bound_sq /-
theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 :=
calc
@@ -45,7 +46,9 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
#align complex.exp_bound_sq Complex.exp_bound_sq
+-/
+#print Complex.locally_lipschitz_exp /-
theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1) (x y : β)
(hyx : βy - xβ < r) : βexp y - exp xβ β€ (1 + r) * βexp xβ * βy - xβ :=
by
@@ -67,17 +70,22 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
(add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _)
_ = (1 + r) * βexp xβ * βy - xβ := by ring
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
+-/
+#print Complex.continuous_exp /-
@[continuity]
theorem continuous_exp : Continuous exp :=
continuous_iff_continuousAt.mpr fun x =>
continuousAt_of_locally_lipschitz zero_lt_one (2 * βexp xβ)
(locally_lipschitz_exp zero_le_one le_rfl x)
#align complex.continuous_exp Complex.continuous_exp
+-/
+#print Complex.continuousOn_exp /-
theorem continuousOn_exp {s : Set β} : ContinuousOn exp s :=
continuous_exp.ContinuousOn
#align complex.continuous_on_exp Complex.continuousOn_exp
+-/
end Complex
@@ -87,29 +95,39 @@ variable {Ξ± : Type _}
open Complex
+#print Filter.Tendsto.cexp /-
theorem Filter.Tendsto.cexp {l : Filter Ξ±} {f : Ξ± β β} {z : β} (hf : Tendsto f l (π z)) :
Tendsto (fun x => exp (f x)) l (π (exp z)) :=
(continuous_exp.Tendsto _).comp hf
#align filter.tendsto.cexp Filter.Tendsto.cexp
+-/
variable [TopologicalSpace Ξ±] {f : Ξ± β β} {s : Set Ξ±} {x : Ξ±}
+#print ContinuousWithinAt.cexp /-
theorem ContinuousWithinAt.cexp (h : ContinuousWithinAt f s x) :
ContinuousWithinAt (fun y => exp (f y)) s x :=
h.cexp
#align continuous_within_at.cexp ContinuousWithinAt.cexp
+-/
+#print ContinuousAt.cexp /-
theorem ContinuousAt.cexp (h : ContinuousAt f x) : ContinuousAt (fun y => exp (f y)) x :=
h.cexp
#align continuous_at.cexp ContinuousAt.cexp
+-/
+#print ContinuousOn.cexp /-
theorem ContinuousOn.cexp (h : ContinuousOn f s) : ContinuousOn (fun y => exp (f y)) s :=
fun x hx => (h x hx).cexp
#align continuous_on.cexp ContinuousOn.cexp
+-/
+#print Continuous.cexp /-
theorem Continuous.cexp (h : Continuous f) : Continuous fun y => exp (f y) :=
continuous_iff_continuousAt.2 fun x => h.ContinuousAt.cexp
#align continuous.cexp Continuous.cexp
+-/
end ComplexContinuousExpComp
@@ -176,9 +194,11 @@ namespace Real
variable {Ξ± : Type _} {x y z : β} {l : Filter Ξ±}
+#print Real.exp_half /-
theorem exp_half (x : β) : exp (x / 2) = sqrt (exp x) := by
rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β exp_add, add_halves] <;> exact (exp_pos _).le
#align real.exp_half Real.exp_half
+-/
#print Real.tendsto_exp_atTop /-
/-- The real exponential function tends to `+β` at `+β`. -/
@@ -191,38 +211,51 @@ theorem tendsto_exp_atTop : Tendsto exp atTop atTop :=
#align real.tendsto_exp_at_top Real.tendsto_exp_atTop
-/
+#print Real.tendsto_exp_neg_atTop_nhds_0 /-
/-- The real exponential function tends to `0` at `-β` or, equivalently, `exp(-x)` tends to `0`
at `+β` -/
theorem tendsto_exp_neg_atTop_nhds_0 : Tendsto (fun x => exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp tendsto_exp_atTop).congr fun x => (exp_neg x).symm
#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0
+-/
+#print Real.tendsto_exp_nhds_0_nhds_1 /-
/-- The real exponential function tends to `1` at `0`. -/
theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) := by convert continuous_exp.tendsto 0;
simp
#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1
+-/
+#print Real.tendsto_exp_atBot /-
theorem tendsto_exp_atBot : Tendsto exp atBot (π 0) :=
(tendsto_exp_neg_atTop_nhds_0.comp tendsto_neg_atBot_atTop).congr fun x =>
congr_arg exp <| neg_neg x
#align real.tendsto_exp_at_bot Real.tendsto_exp_atBot
+-/
+#print Real.tendsto_exp_atBot_nhdsWithin /-
theorem tendsto_exp_atBot_nhdsWithin : Tendsto exp atBot (π[>] 0) :=
tendsto_inf.2 β¨tendsto_exp_atBot, tendsto_principal.2 <| eventually_of_forall exp_posβ©
#align real.tendsto_exp_at_bot_nhds_within Real.tendsto_exp_atBot_nhdsWithin
+-/
+#print Real.isBoundedUnder_ge_exp_comp /-
@[simp]
theorem isBoundedUnder_ge_exp_comp (l : Filter Ξ±) (f : Ξ± β β) :
IsBoundedUnder (Β· β₯ Β·) l fun x => exp (f x) :=
isBoundedUnder_of β¨0, fun x => (exp_pos _).leβ©
#align real.is_bounded_under_ge_exp_comp Real.isBoundedUnder_ge_exp_comp
+-/
+#print Real.isBoundedUnder_le_exp_comp /-
@[simp]
theorem isBoundedUnder_le_exp_comp {f : Ξ± β β} :
(IsBoundedUnder (Β· β€ Β·) l fun x => exp (f x)) β IsBoundedUnder (Β· β€ Β·) l f :=
exp_monotone.isBoundedUnder_le_comp tendsto_exp_atTop
#align real.is_bounded_under_le_exp_comp Real.isBoundedUnder_le_exp_comp
+-/
+#print Real.tendsto_exp_div_pow_atTop /-
/-- The function `exp(x)/x^n` tends to `+β` at `+β`, for any natural number `n` -/
theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) atTop atTop :=
by
@@ -245,14 +278,18 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
(exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
_ = exp x / C := by rw [add_comm, exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
+-/
+#print Real.tendsto_pow_mul_exp_neg_atTop_nhds_0 /-
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
Tendsto (fun x => x ^ n * exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp (tendsto_exp_div_pow_atTop n)).congr fun x => by
rw [comp_app, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, exp_neg]
#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0
+-/
+#print Real.tendsto_mul_exp_add_div_pow_atTop /-
/-- The function `(b * exp x + c) / (x ^ n)` tends to `+β` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is positive. -/
theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
@@ -266,7 +303,9 @@ theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
((tendsto_exp_div_pow_at_top n).const_mul_atTop hb).atTop_add
(tendsto_const_nhds.div_at_top (tendsto_pow_at_top hn))
#align real.tendsto_mul_exp_add_div_pow_at_top Real.tendsto_mul_exp_add_div_pow_atTop
+-/
+#print Real.tendsto_div_pow_mul_exp_add_atTop /-
/-- The function `(x ^ n) / (b * exp x + c)` tends to `0` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is nonzero. -/
theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
@@ -286,7 +325,9 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
rw [β neg_add (b * exp x) c, neg_div_neg_eq]
Β· exact neg_zero.symm
#align real.tendsto_div_pow_mul_exp_add_at_top Real.tendsto_div_pow_mul_exp_add_atTop
+-/
+#print Real.expOrderIso /-
/-- `real.exp` as an order isomorphism between `β` and `(0, +β)`. -/
def expOrderIso : β βo Ioi (0 : β) :=
StrictMono.orderIsoOfSurjective _ (exp_strictMono.codRestrict exp_pos) <|
@@ -294,21 +335,28 @@ def expOrderIso : β βo Ioi (0 : β) :=
(by simp only [tendsto_Ioi_at_top, Subtype.coe_mk, tendsto_exp_at_top])
(by simp [tendsto_exp_at_bot_nhds_within])
#align real.exp_order_iso Real.expOrderIso
+-/
+#print Real.coe_expOrderIso_apply /-
@[simp]
theorem coe_expOrderIso_apply (x : β) : (expOrderIso x : β) = exp x :=
rfl
#align real.coe_exp_order_iso_apply Real.coe_expOrderIso_apply
+-/
+#print Real.coe_comp_expOrderIso /-
@[simp]
theorem coe_comp_expOrderIso : coe β expOrderIso = exp :=
rfl
#align real.coe_comp_exp_order_iso Real.coe_comp_expOrderIso
+-/
+#print Real.range_exp /-
@[simp]
theorem range_exp : range exp = Ioi 0 := by
rw [β coe_comp_exp_order_iso, range_comp, exp_order_iso.range_eq, image_univ, Subtype.range_coe]
#align real.range_exp Real.range_exp
+-/
#print Real.map_exp_atTop /-
@[simp]
@@ -339,44 +387,59 @@ theorem tendsto_comp_exp_atTop {f : β β Ξ±} :
#align real.tendsto_comp_exp_at_top Real.tendsto_comp_exp_atTop
-/
+#print Real.map_exp_atBot /-
@[simp]
theorem map_exp_atBot : map exp atBot = π[>] 0 := by
rw [β coe_comp_exp_order_iso, β Filter.map_map, exp_order_iso.map_at_bot, β map_coe_Ioi_atBot]
#align real.map_exp_at_bot Real.map_exp_atBot
+-/
+#print Real.comap_exp_nhdsWithin_Ioi_zero /-
@[simp]
theorem comap_exp_nhdsWithin_Ioi_zero : comap exp (π[>] 0) = atBot := by
rw [β map_exp_at_bot, comap_map exp_injective]
#align real.comap_exp_nhds_within_Ioi_zero Real.comap_exp_nhdsWithin_Ioi_zero
+-/
+#print Real.tendsto_comp_exp_atBot /-
theorem tendsto_comp_exp_atBot {f : β β Ξ±} :
Tendsto (fun x => f (exp x)) atBot l β Tendsto f (π[>] 0) l := by
rw [β map_exp_at_bot, tendsto_map'_iff]
#align real.tendsto_comp_exp_at_bot Real.tendsto_comp_exp_atBot
+-/
+#print Real.comap_exp_nhds_zero /-
@[simp]
theorem comap_exp_nhds_zero : comap exp (π 0) = atBot :=
(comap_nhdsWithin_range exp 0).symm.trans <| by simp
#align real.comap_exp_nhds_zero Real.comap_exp_nhds_zero
+-/
+#print Real.tendsto_exp_comp_nhds_zero /-
@[simp]
theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto f l atBot := by
rw [β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
+-/
+#print Real.isLittleO_pow_exp_atTop /-
theorem isLittleO_pow_exp_atTop {n : β} : (fun x => x ^ n) =o[atTop] Real.exp := by
simpa [is_o_iff_tendsto fun x hx => ((exp_pos x).ne' hx).elim] using
tendsto_div_pow_mul_exp_add_at_top 1 0 n zero_ne_one
#align real.is_o_pow_exp_at_top Real.isLittleO_pow_exp_atTop
+-/
+#print Real.isBigO_exp_comp_exp_comp /-
@[simp]
theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =O[l] fun x => exp (g x)) β IsBoundedUnder (Β· β€ Β·) l (f - g) :=
Iff.trans (isBigO_iff_isBoundedUnder_le_div <| eventually_of_forall fun x => exp_ne_zero _) <| by
simp only [norm_eq_abs, abs_exp, β exp_sub, is_bounded_under_le_exp_comp, Pi.sub_def]
#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_comp
+-/
+#print Real.isTheta_exp_comp_exp_comp /-
@[simp]
theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =Ξ[l] fun x => exp (g x)) β
@@ -385,20 +448,26 @@ theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
simp only [is_bounded_under_le_abs, β is_bounded_under_le_neg, neg_sub, is_Theta,
is_O_exp_comp_exp_comp, Pi.sub_def]
#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_comp
+-/
+#print Real.isLittleO_exp_comp_exp_comp /-
@[simp]
theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =o[l] fun x => exp (g x)) β Tendsto (fun x => g x - f x) l atTop := by
simp only [is_o_iff_tendsto, exp_ne_zero, β exp_sub, β tendsto_neg_at_top_iff, false_imp_iff,
imp_true_iff, tendsto_exp_comp_nhds_zero, neg_sub]
#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_comp
+-/
+#print Real.isLittleO_one_exp_comp /-
@[simp]
theorem isLittleO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =o[l] fun x => exp (f x)) β Tendsto f l atTop := by
simp only [β exp_zero, is_o_exp_comp_exp_comp, sub_zero]
#align real.is_o_one_exp_comp Real.isLittleO_one_exp_comp
+-/
+#print Real.isBigO_one_exp_comp /-
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
@[simp]
@@ -406,14 +475,18 @@ theorem isBigO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =O[l] fun x => exp (f x)) β IsBoundedUnder (Β· β₯ Β·) l f := by
simp only [β exp_zero, is_O_exp_comp_exp_comp, Pi.sub_def, zero_sub, is_bounded_under_le_neg]
#align real.is_O_one_exp_comp Real.isBigO_one_exp_comp
+-/
+#print Real.isBigO_exp_comp_one /-
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
theorem isBigO_exp_comp_one {f : Ξ± β β} :
(fun x => exp (f x)) =O[l] (fun x => 1 : Ξ± β β) β IsBoundedUnder (Β· β€ Β·) l f := by
simp only [is_O_one_iff, norm_eq_abs, abs_exp, is_bounded_under_le_exp_comp]
#align real.is_O_exp_comp_one Real.isBigO_exp_comp_one
+-/
+#print Real.isTheta_exp_comp_one /-
/-- `real.exp (f x)` is bounded away from zero and infinity along a filter `l` if and only if
`|f x|` is bounded from above along this filter. -/
@[simp]
@@ -421,49 +494,64 @@ theorem isTheta_exp_comp_one {f : Ξ± β β} :
(fun x => exp (f x)) =Ξ[l] (fun x => 1 : Ξ± β β) β IsBoundedUnder (Β· β€ Β·) l fun x => |f x| := by
simp only [β exp_zero, is_Theta_exp_comp_exp_comp, sub_zero]
#align real.is_Theta_exp_comp_one Real.isTheta_exp_comp_one
+-/
end Real
namespace Complex
+#print Complex.comap_exp_comap_abs_atTop /-
theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
calc
comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
simp only [comap_comap, (Β· β Β·), abs_exp]
_ = comap re atTop := by rw [Real.comap_exp_atTop]
#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTop
+-/
+#print Complex.comap_exp_nhds_zero /-
theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
calc
comap exp (π 0) = comap re (comap Real.exp (π 0)) := by
simp only [comap_comap, β comap_abs_nhds_zero, (Β· β Β·), abs_exp]
_ = comap re atBot := by rw [Real.comap_exp_nhds_zero]
#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zero
+-/
+#print Complex.comap_exp_nhdsWithin_zero /-
theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot :=
by
have : exp β»ΒΉ' {0}αΆ = univ := eq_univ_of_forall exp_ne_zero
simp [nhdsWithin, comap_exp_nhds_zero, this]
#align complex.comap_exp_nhds_within_zero Complex.comap_exp_nhdsWithin_zero
+-/
+#print Complex.tendsto_exp_nhds_zero_iff /-
theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto (fun x => re (f x)) l atBot := by
rw [β tendsto_comap_iff, comap_exp_nhds_zero, tendsto_comap_iff]
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
+-/
+#print Complex.tendsto_exp_comap_re_atTop /-
/-- `complex.abs (complex.exp z) β β` as `complex.re z β β`. TODO: use `bornology.cobounded`. -/
theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
comap_exp_comap_abs_atTop βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
+-/
+#print Complex.tendsto_exp_comap_re_atBot /-
/-- `complex.exp z β 0` as `complex.re z β -β`.-/
theorem tendsto_exp_comap_re_atBot : Tendsto exp (comap re atBot) (π 0) :=
comap_exp_nhds_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot Complex.tendsto_exp_comap_re_atBot
+-/
+#print Complex.tendsto_exp_comap_re_atBot_nhdsWithin /-
theorem tendsto_exp_comap_re_atBot_nhdsWithin : Tendsto exp (comap re atBot) (π[β ] 0) :=
comap_exp_nhdsWithin_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot_nhds_within Complex.tendsto_exp_comap_re_atBot_nhdsWithin
+-/
end Complex
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -44,7 +44,6 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
_ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
-
#align complex.exp_bound_sq Complex.exp_bound_sq
theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1) (x y : β)
@@ -67,7 +66,6 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
_ β€ βy - xβ * βexp xβ + βexp xβ * (r * βy - xβ) :=
(add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _)
_ = (1 + r) * βexp xβ * βy - xβ := by ring
-
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
@[continuity]
@@ -246,7 +244,6 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
(div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
(exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
_ = exp x / C := by rw [add_comm, exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
-
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
@@ -434,7 +431,6 @@ theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop
comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
simp only [comap_comap, (Β· β Β·), abs_exp]
_ = comap re atTop := by rw [Real.comap_exp_atTop]
-
#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTop
theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
@@ -442,7 +438,6 @@ theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
comap exp (π 0) = comap re (comap Real.exp (π 0)) := by
simp only [comap_comap, β comap_abs_nhds_zero, (Β· β Β·), abs_exp]
_ = comap re atBot := by rw [Real.comap_exp_nhds_zero]
-
#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zero
theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -278,12 +278,12 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
have H : β d e, 0 < d β tendsto (fun x : β => x ^ n / (d * exp x + e)) at_top (π 0) :=
by
intro b' c' h
- convert(tendsto_mul_exp_add_div_pow_at_top b' c' n h).inv_tendsto_atTop
+ convert (tendsto_mul_exp_add_div_pow_at_top b' c' n h).inv_tendsto_atTop
ext x
simpa only [Pi.inv_apply] using (inv_div _ _).symm
cases lt_or_gt_of_ne hb
Β· exact H b c h
- Β· convert(H (-b) (-c) (neg_pos.mpr h)).neg
+ Β· convert (H (-b) (-c) (neg_pos.mpr h)).neg
Β· ext x
field_simp
rw [β neg_add (b * exp x) c, neg_div_neg_eq]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -40,7 +40,7 @@ variable {z y x : β}
theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 :=
calc
- βexp (x + z) - exp x - z * exp xβ = βexp x * (exp z - 1 - z)β := by congr ; rw [exp_add]; ring
+ βexp (x + z) - exp x - z * exp xβ = βexp x * (exp z - 1 - z)β := by congr; rw [exp_add]; ring
_ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
@@ -235,8 +235,8 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
eventually_at_top.1
((tendsto_pow_const_div_const_pow_of_one_lt n (one_lt_exp_iff.2 zero_lt_one)).Eventually
(gt_mem_nhds this))
- simp only [β exp_nat_mul, mul_one, div_lt_iff, exp_pos, β div_eq_inv_mul] at hN
- refine' β¨N, trivial, fun x hx => _β©; rw [Set.mem_Ioi] at hx
+ simp only [β exp_nat_mul, mul_one, div_lt_iff, exp_pos, β div_eq_inv_mul] at hN
+ refine' β¨N, trivial, fun x hx => _β©; rw [Set.mem_Ioi] at hx
have hxβ : 0 < x := N.cast_nonneg.trans_lt hx
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,7 +31,7 @@ noncomputable section
open Finset Filter Metric Asymptotics Set Function
-open Classical Topology
+open scoped Classical Topology
namespace Complex
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -37,12 +37,6 @@ namespace Complex
variable {z y x : β}
-/- warning: complex.exp_bound_sq -> Complex.exp_bound_sq is a dubious translation:
-lean 3 declaration is
- forall (x : Complex) (z : Complex), (LE.le.{0} Real Real.hasLe (Norm.norm.{0} Complex Complex.hasNorm z) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) (Complex.exp (HAdd.hAdd.{0, 0, 0} Complex Complex Complex (instHAdd.{0} Complex Complex.hasAdd) x z)) (Complex.exp x)) (SMul.smul.{0, 0} Complex Complex (Mul.toSMul.{0} Complex Complex.hasMul) z (Complex.exp x)))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Norm.norm.{0} Complex Complex.hasNorm (Complex.exp x)) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{0} Complex Complex.hasNorm z) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))
-but is expected to have type
- forall (x : Complex) (z : Complex), (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} Complex Complex.instNormComplex z) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) (Complex.exp (HAdd.hAdd.{0, 0, 0} Complex Complex Complex (instHAdd.{0} Complex Complex.instAddComplex) x z)) (Complex.exp x)) (HSMul.hSMul.{0, 0, 0} Complex Complex Complex (instHSMul.{0, 0} Complex Complex (Algebra.toSMul.{0, 0} Complex Complex Complex.instCommSemiringComplex Complex.instSemiringComplex (NormedAlgebra.toAlgebra.{0, 0} Complex Complex Complex.instNormedFieldComplex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex))) (NormedAlgebra.id.{0} Complex Complex.instNormedFieldComplex)))) z (Complex.exp x)))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Norm.norm.{0} Complex Complex.instNormComplex (Complex.exp x)) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{0} Complex Complex.instNormComplex z) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
-Case conversion may be inaccurate. Consider using '#align complex.exp_bound_sq Complex.exp_bound_sqβ'. -/
theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 :=
calc
@@ -53,12 +47,6 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
#align complex.exp_bound_sq Complex.exp_bound_sq
-/- warning: complex.locally_lipschitz_exp -> Complex.locally_lipschitz_exp is a dubious translation:
-lean 3 declaration is
- forall {r : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) r) -> (LE.le.{0} Real Real.hasLe r (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (forall (x : Complex) (y : Complex), (LT.lt.{0} Real Real.hasLt (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) y x)) r) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) (Complex.exp y) (Complex.exp x))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) r) (Norm.norm.{0} Complex Complex.hasNorm (Complex.exp x))) (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) y x)))))
-but is expected to have type
- forall {r : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) r) -> (LE.le.{0} Real Real.instLEReal r (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (forall (x : Complex) (y : Complex), (LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) y x)) r) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) (Complex.exp y) (Complex.exp x))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) r) (Norm.norm.{0} Complex Complex.instNormComplex (Complex.exp x))) (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) y x)))))
-Case conversion may be inaccurate. Consider using '#align complex.locally_lipschitz_exp Complex.locally_lipschitz_expβ'. -/
theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1) (x y : β)
(hyx : βy - xβ < r) : βexp y - exp xβ β€ (1 + r) * βexp xβ * βy - xβ :=
by
@@ -82,12 +70,6 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
-/- warning: complex.continuous_exp -> Complex.continuous_exp is a dubious translation:
-lean 3 declaration is
- Continuous.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) Complex.exp
-but is expected to have type
- Continuous.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) Complex.exp
-Case conversion may be inaccurate. Consider using '#align complex.continuous_exp Complex.continuous_expβ'. -/
@[continuity]
theorem continuous_exp : Continuous exp :=
continuous_iff_continuousAt.mpr fun x =>
@@ -95,12 +77,6 @@ theorem continuous_exp : Continuous exp :=
(locally_lipschitz_exp zero_le_one le_rfl x)
#align complex.continuous_exp Complex.continuous_exp
-/- warning: complex.continuous_on_exp -> Complex.continuousOn_exp is a dubious translation:
-lean 3 declaration is
- forall {s : Set.{0} Complex}, ContinuousOn.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) Complex.exp s
-but is expected to have type
- forall {s : Set.{0} Complex}, ContinuousOn.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) Complex.exp s
-Case conversion may be inaccurate. Consider using '#align complex.continuous_on_exp Complex.continuousOn_expβ'. -/
theorem continuousOn_exp {s : Set β} : ContinuousOn exp s :=
continuous_exp.ContinuousOn
#align complex.continuous_on_exp Complex.continuousOn_exp
@@ -113,12 +89,6 @@ variable {Ξ± : Type _}
open Complex
-/- warning: filter.tendsto.cexp -> Filter.Tendsto.cexp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex} {z : Complex}, (Filter.Tendsto.{u1, 0} Ξ± Complex f l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) z)) -> (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (Complex.exp z)))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex} {z : Complex}, (Filter.Tendsto.{u1, 0} Ξ± Complex f l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) z)) -> (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (Complex.exp z)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.cexp Filter.Tendsto.cexpβ'. -/
theorem Filter.Tendsto.cexp {l : Filter Ξ±} {f : Ξ± β β} {z : β} (hf : Tendsto f l (π z)) :
Tendsto (fun x => exp (f x)) l (π (exp z)) :=
(continuous_exp.Tendsto _).comp hf
@@ -126,43 +96,19 @@ theorem Filter.Tendsto.cexp {l : Filter Ξ±} {f : Ξ± β β} {z : β} (hf : Ten
variable [TopologicalSpace Ξ±] {f : Ξ± β β} {s : Set Ξ±} {x : Ξ±}
-/- warning: continuous_within_at.cexp -> ContinuousWithinAt.cexp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±} {x : Ξ±}, (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f s x) -> (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)) s x)
-but is expected to have type
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±} {x : Ξ±}, (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f s x) -> (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)) s x)
-Case conversion may be inaccurate. Consider using '#align continuous_within_at.cexp ContinuousWithinAt.cexpβ'. -/
theorem ContinuousWithinAt.cexp (h : ContinuousWithinAt f s x) :
ContinuousWithinAt (fun y => exp (f y)) s x :=
h.cexp
#align continuous_within_at.cexp ContinuousWithinAt.cexp
-/- warning: continuous_at.cexp -> ContinuousAt.cexp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {x : Ξ±}, (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f x) -> (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)) x)
-but is expected to have type
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {x : Ξ±}, (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f x) -> (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)) x)
-Case conversion may be inaccurate. Consider using '#align continuous_at.cexp ContinuousAt.cexpβ'. -/
theorem ContinuousAt.cexp (h : ContinuousAt f x) : ContinuousAt (fun y => exp (f y)) x :=
h.cexp
#align continuous_at.cexp ContinuousAt.cexp
-/- warning: continuous_on.cexp -> ContinuousOn.cexp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±}, (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f s) -> (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)) s)
-but is expected to have type
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±}, (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f s) -> (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)) s)
-Case conversion may be inaccurate. Consider using '#align continuous_on.cexp ContinuousOn.cexpβ'. -/
theorem ContinuousOn.cexp (h : ContinuousOn f s) : ContinuousOn (fun y => exp (f y)) s :=
fun x hx => (h x hx).cexp
#align continuous_on.cexp ContinuousOn.cexp
-/- warning: continuous.cexp -> Continuous.cexp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex}, (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f) -> (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)))
-but is expected to have type
- forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex}, (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f) -> (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)))
-Case conversion may be inaccurate. Consider using '#align continuous.cexp Continuous.cexpβ'. -/
theorem Continuous.cexp (h : Continuous f) : Continuous fun y => exp (f y) :=
continuous_iff_continuousAt.2 fun x => h.ContinuousAt.cexp
#align continuous.cexp Continuous.cexp
@@ -232,12 +178,6 @@ namespace Real
variable {Ξ± : Type _} {x y z : β} {l : Filter Ξ±}
-/- warning: real.exp_half -> Real.exp_half is a dubious translation:
-lean 3 declaration is
- forall (x : Real), Eq.{1} Real (Real.exp (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) x (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne)))))) (Real.sqrt (Real.exp x))
-but is expected to have type
- forall (x : Real), Eq.{1} Real (Real.exp (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) x (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))))) (Real.sqrt (Real.exp x))
-Case conversion may be inaccurate. Consider using '#align real.exp_half Real.exp_halfβ'. -/
theorem exp_half (x : β) : exp (x / 2) = sqrt (exp x) := by
rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β exp_add, add_halves] <;> exact (exp_pos _).le
#align real.exp_half Real.exp_half
@@ -253,80 +193,38 @@ theorem tendsto_exp_atTop : Tendsto exp atTop atTop :=
#align real.tendsto_exp_at_top Real.tendsto_exp_atTop
-/
-/- warning: real.tendsto_exp_neg_at_top_nhds_0 -> Real.tendsto_exp_neg_atTop_nhds_0 is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => Real.exp (Neg.neg.{0} Real Real.hasNeg x)) (Filter.atTop.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => Real.exp (Neg.neg.{0} Real Real.instNegReal x)) (Filter.atTop.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0β'. -/
/-- The real exponential function tends to `0` at `-β` or, equivalently, `exp(-x)` tends to `0`
at `+β` -/
theorem tendsto_exp_neg_atTop_nhds_0 : Tendsto (fun x => exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp tendsto_exp_atTop).congr fun x => (exp_neg x).symm
#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0
-/- warning: real.tendsto_exp_nhds_0_nhds_1 -> Real.tendsto_exp_nhds_0_nhds_1 is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
-but is expected to have type
- Filter.Tendsto.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1β'. -/
/-- The real exponential function tends to `1` at `0`. -/
theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) := by convert continuous_exp.tendsto 0;
simp
#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1
-/- warning: real.tendsto_exp_at_bot -> Real.tendsto_exp_atBot is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_at_bot Real.tendsto_exp_atBotβ'. -/
theorem tendsto_exp_atBot : Tendsto exp atBot (π 0) :=
(tendsto_exp_neg_atTop_nhds_0.comp tendsto_neg_atBot_atTop).congr fun x =>
congr_arg exp <| neg_neg x
#align real.tendsto_exp_at_bot Real.tendsto_exp_atBot
-/- warning: real.tendsto_exp_at_bot_nhds_within -> Real.tendsto_exp_atBot_nhdsWithin is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.preorder) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
-but is expected to have type
- Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.instPreorderReal) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_at_bot_nhds_within Real.tendsto_exp_atBot_nhdsWithinβ'. -/
theorem tendsto_exp_atBot_nhdsWithin : Tendsto exp atBot (π[>] 0) :=
tendsto_inf.2 β¨tendsto_exp_atBot, tendsto_principal.2 <| eventually_of_forall exp_posβ©
#align real.tendsto_exp_at_bot_nhds_within Real.tendsto_exp_atBot_nhdsWithin
-/- warning: real.is_bounded_under_ge_exp_comp -> Real.isBoundedUnder_ge_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} (l : Filter.{u1} Ξ±) (f : Ξ± -> Real), Filter.IsBoundedUnder.{0, u1} Real Ξ± (GE.ge.{0} Real Real.hasLe) l (fun (x : Ξ±) => Real.exp (f x))
-but is expected to have type
- forall {Ξ± : Type.{u1}} (l : Filter.{u1} Ξ±) (f : Ξ± -> Real), Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1807 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1809 : Real) => GE.ge.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1807 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1809) l (fun (x : Ξ±) => Real.exp (f x))
-Case conversion may be inaccurate. Consider using '#align real.is_bounded_under_ge_exp_comp Real.isBoundedUnder_ge_exp_compβ'. -/
@[simp]
theorem isBoundedUnder_ge_exp_comp (l : Filter Ξ±) (f : Ξ± β β) :
IsBoundedUnder (Β· β₯ Β·) l fun x => exp (f x) :=
isBoundedUnder_of β¨0, fun x => (exp_pos _).leβ©
#align real.is_bounded_under_ge_exp_comp Real.isBoundedUnder_ge_exp_comp
-/- warning: real.is_bounded_under_le_exp_comp -> Real.isBoundedUnder_le_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l f)
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1869 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1871 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1869 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1871) l (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1894 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1896 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1894 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1896) l f)
-Case conversion may be inaccurate. Consider using '#align real.is_bounded_under_le_exp_comp Real.isBoundedUnder_le_exp_compβ'. -/
@[simp]
theorem isBoundedUnder_le_exp_comp {f : Ξ± β β} :
(IsBoundedUnder (Β· β€ Β·) l fun x => exp (f x)) β IsBoundedUnder (Β· β€ Β·) l f :=
exp_monotone.isBoundedUnder_le_comp tendsto_exp_atTop
#align real.is_bounded_under_le_exp_comp Real.isBoundedUnder_le_exp_comp
-/- warning: real.tendsto_exp_div_pow_at_top -> Real.tendsto_exp_div_pow_atTop is a dubious translation:
-lean 3 declaration is
- forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Real.exp x) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n)) (Filter.atTop.{0} Real Real.preorder) (Filter.atTop.{0} Real Real.preorder)
-but is expected to have type
- forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Real.exp x) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n)) (Filter.atTop.{0} Real Real.instPreorderReal) (Filter.atTop.{0} Real Real.instPreorderReal)
-Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTopβ'. -/
/-- The function `exp(x)/x^n` tends to `+β` at `+β`, for any natural number `n` -/
theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) atTop atTop :=
by
@@ -351,12 +249,6 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
-/- warning: real.tendsto_pow_mul_exp_neg_at_top_nhds_0 -> Real.tendsto_pow_mul_exp_neg_atTop_nhds_0 is a dubious translation:
-lean 3 declaration is
- forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n) (Real.exp (Neg.neg.{0} Real Real.hasNeg x))) (Filter.atTop.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n) (Real.exp (Neg.neg.{0} Real Real.instNegReal x))) (Filter.atTop.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0β'. -/
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
Tendsto (fun x => x ^ n * exp (-x)) atTop (π 0) :=
@@ -364,12 +256,6 @@ theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
rw [comp_app, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, exp_neg]
#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0
-/- warning: real.tendsto_mul_exp_add_div_pow_at_top -> Real.tendsto_mul_exp_add_div_pow_atTop is a dubious translation:
-lean 3 declaration is
- forall (b : Real) (c : Real) (n : Nat), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) b (Real.exp x)) c) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n)) (Filter.atTop.{0} Real Real.preorder) (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- forall (b : Real) (c : Real) (n : Nat), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) b (Real.exp x)) c) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n)) (Filter.atTop.{0} Real Real.instPreorderReal) (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_mul_exp_add_div_pow_at_top Real.tendsto_mul_exp_add_div_pow_atTopβ'. -/
/-- The function `(b * exp x + c) / (x ^ n)` tends to `+β` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is positive. -/
theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
@@ -384,12 +270,6 @@ theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
(tendsto_const_nhds.div_at_top (tendsto_pow_at_top hn))
#align real.tendsto_mul_exp_add_div_pow_at_top Real.tendsto_mul_exp_add_div_pow_atTop
-/- warning: real.tendsto_div_pow_mul_exp_add_at_top -> Real.tendsto_div_pow_mul_exp_add_atTop is a dubious translation:
-lean 3 declaration is
- forall (b : Real) (c : Real) (n : Nat), (Ne.{1} Real (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) b (Real.exp x)) c)) (Filter.atTop.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
-but is expected to have type
- forall (b : Real) (c : Real) (n : Nat), (Ne.{1} Real (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) b (Real.exp x)) c)) (Filter.atTop.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_div_pow_mul_exp_add_at_top Real.tendsto_div_pow_mul_exp_add_atTopβ'. -/
/-- The function `(x ^ n) / (b * exp x + c)` tends to `0` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is nonzero. -/
theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
@@ -410,12 +290,6 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
Β· exact neg_zero.symm
#align real.tendsto_div_pow_mul_exp_add_at_top Real.tendsto_div_pow_mul_exp_add_atTop
-/- warning: real.exp_order_iso -> Real.expOrderIso is a dubious translation:
-lean 3 declaration is
- OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))
-but is expected to have type
- OrderIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) Real.instLEReal (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))))
-Case conversion may be inaccurate. Consider using '#align real.exp_order_iso Real.expOrderIsoβ'. -/
/-- `real.exp` as an order isomorphism between `β` and `(0, +β)`. -/
def expOrderIso : β βo Ioi (0 : β) :=
StrictMono.orderIsoOfSurjective _ (exp_strictMono.codRestrict exp_pos) <|
@@ -424,34 +298,16 @@ def expOrderIso : β βo Ioi (0 : β) :=
(by simp [tendsto_exp_at_bot_nhds_within])
#align real.exp_order_iso Real.expOrderIso
-/- warning: real.coe_exp_order_iso_apply -> Real.coe_expOrderIso_apply is a dubious translation:
-lean 3 declaration is
- forall (x : Real), Eq.{1} Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (HasLiftT.mk.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (CoeTCβ.coe.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeBase.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeSubtype.{1} Real (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))))) (coeFn.{1, 1} (OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))) (fun (_x : RelIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) => Real -> (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (RelIso.hasCoeToFun.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) Real.expOrderIso x)) (Real.exp x)
-but is expected to have type
- forall (x : Real), Eq.{1} Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) Real.expOrderIso x)) (Real.exp x)
-Case conversion may be inaccurate. Consider using '#align real.coe_exp_order_iso_apply Real.coe_expOrderIso_applyβ'. -/
@[simp]
theorem coe_expOrderIso_apply (x : β) : (expOrderIso x : β) = exp x :=
rfl
#align real.coe_exp_order_iso_apply Real.coe_expOrderIso_apply
-/- warning: real.coe_comp_exp_order_iso -> Real.coe_comp_expOrderIso is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (HasLiftT.mk.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (CoeTCβ.coe.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeBase.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeSubtype.{1} Real (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))))) (coeFn.{1, 1} (OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))) (fun (_x : RelIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) => Real -> (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (RelIso.hasCoeToFun.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) Real.expOrderIso)) Real.exp
-but is expected to have type
- Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) Real.expOrderIso)) Real.exp
-Case conversion may be inaccurate. Consider using '#align real.coe_comp_exp_order_iso Real.coe_comp_expOrderIsoβ'. -/
@[simp]
theorem coe_comp_expOrderIso : coe β expOrderIso = exp :=
rfl
#align real.coe_comp_exp_order_iso Real.coe_comp_expOrderIso
-/- warning: real.range_exp -> Real.range_exp is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Set.{0} Real) (Set.range.{0, 1} Real Real Real.exp) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- Eq.{1} (Set.{0} Real) (Set.range.{0, 1} Real Real Real.exp) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align real.range_exp Real.range_expβ'. -/
@[simp]
theorem range_exp : range exp = Ioi 0 := by
rw [β coe_comp_exp_order_iso, range_comp, exp_order_iso.range_eq, image_univ, Subtype.range_coe]
@@ -486,79 +342,37 @@ theorem tendsto_comp_exp_atTop {f : β β Ξ±} :
#align real.tendsto_comp_exp_at_top Real.tendsto_comp_exp_atTop
-/
-/- warning: real.map_exp_at_bot -> Real.map_exp_atBot is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Filter.{0} Real) (Filter.map.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.preorder)) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
-but is expected to have type
- Eq.{1} (Filter.{0} Real) (Filter.map.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.instPreorderReal)) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
-Case conversion may be inaccurate. Consider using '#align real.map_exp_at_bot Real.map_exp_atBotβ'. -/
@[simp]
theorem map_exp_atBot : map exp atBot = π[>] 0 := by
rw [β coe_comp_exp_order_iso, β Filter.map_map, exp_order_iso.map_at_bot, β map_coe_Ioi_atBot]
#align real.map_exp_at_bot Real.map_exp_atBot
-/- warning: real.comap_exp_nhds_within_Ioi_zero -> Real.comap_exp_nhdsWithin_Ioi_zero is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (Filter.atBot.{0} Real Real.preorder)
-but is expected to have type
- Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) (Filter.atBot.{0} Real Real.instPreorderReal)
-Case conversion may be inaccurate. Consider using '#align real.comap_exp_nhds_within_Ioi_zero Real.comap_exp_nhdsWithin_Ioi_zeroβ'. -/
@[simp]
theorem comap_exp_nhdsWithin_Ioi_zero : comap exp (π[>] 0) = atBot := by
rw [β map_exp_at_bot, comap_map exp_injective]
#align real.comap_exp_nhds_within_Ioi_zero Real.comap_exp_nhdsWithin_Ioi_zero
-/- warning: real.tendsto_comp_exp_at_bot -> Real.tendsto_comp_exp_atBot is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Real -> Ξ±}, Iff (Filter.Tendsto.{0, u1} Real Ξ± (fun (x : Real) => f (Real.exp x)) (Filter.atBot.{0} Real Real.preorder) l) (Filter.Tendsto.{0, u1} Real Ξ± f (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) l)
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Real -> Ξ±}, Iff (Filter.Tendsto.{0, u1} Real Ξ± (fun (x : Real) => f (Real.exp x)) (Filter.atBot.{0} Real Real.instPreorderReal) l) (Filter.Tendsto.{0, u1} Real Ξ± f (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) l)
-Case conversion may be inaccurate. Consider using '#align real.tendsto_comp_exp_at_bot Real.tendsto_comp_exp_atBotβ'. -/
theorem tendsto_comp_exp_atBot {f : β β Ξ±} :
Tendsto (fun x => f (exp x)) atBot l β Tendsto f (π[>] 0) l := by
rw [β map_exp_at_bot, tendsto_map'_iff]
#align real.tendsto_comp_exp_at_bot Real.tendsto_comp_exp_atBot
-/- warning: real.comap_exp_nhds_zero -> Real.comap_exp_nhds_zero is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Filter.atBot.{0} Real Real.preorder)
-but is expected to have type
- Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Filter.atBot.{0} Real Real.instPreorderReal)
-Case conversion may be inaccurate. Consider using '#align real.comap_exp_nhds_zero Real.comap_exp_nhds_zeroβ'. -/
@[simp]
theorem comap_exp_nhds_zero : comap exp (π 0) = atBot :=
(comap_nhdsWithin_range exp 0).symm.trans <| by simp
#align real.comap_exp_nhds_zero Real.comap_exp_nhds_zero
-/- warning: real.tendsto_exp_comp_nhds_zero -> Real.tendsto_exp_comp_nhds_zero is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Real.exp (f x)) l (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atBot.{0} Real Real.preorder))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Real.exp (f x)) l (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atBot.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zeroβ'. -/
@[simp]
theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto f l atBot := by
rw [β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
-/- warning: real.is_o_pow_exp_at_top -> Real.isLittleO_pow_exp_atTop is a dubious translation:
-lean 3 declaration is
- forall {n : Nat}, Asymptotics.IsLittleO.{0, 0, 0} Real Real Real Real.hasNorm Real.hasNorm (Filter.atTop.{0} Real Real.preorder) (fun (x : Real) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n) Real.exp
-but is expected to have type
- forall {n : Nat}, Asymptotics.IsLittleO.{0, 0, 0} Real Real Real Real.norm Real.norm (Filter.atTop.{0} Real Real.instPreorderReal) (fun (x : Real) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n) Real.exp
-Case conversion may be inaccurate. Consider using '#align real.is_o_pow_exp_at_top Real.isLittleO_pow_exp_atTopβ'. -/
theorem isLittleO_pow_exp_atTop {n : β} : (fun x => x ^ n) =o[atTop] Real.exp := by
simpa [is_o_iff_tendsto fun x hx => ((exp_pos x).ne' hx).elim] using
tendsto_div_pow_mul_exp_add_at_top 1 0 n zero_ne_one
#align real.is_o_pow_exp_at_top Real.isLittleO_pow_exp_atTop
-/- warning: real.is_O_exp_comp_exp_comp -> Real.isBigO_exp_comp_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.hasSub))) f g))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3755 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3757 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3755 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3757) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.instSubReal))) f g))
-Case conversion may be inaccurate. Consider using '#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_compβ'. -/
@[simp]
theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =O[l] fun x => exp (g x)) β IsBoundedUnder (Β· β€ Β·) l (f - g) :=
@@ -566,12 +380,6 @@ theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
simp only [norm_eq_abs, abs_exp, β exp_sub, is_bounded_under_le_exp_comp, Pi.sub_def]
#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_comp
-/- warning: real.is_Theta_exp_comp_exp_comp -> Real.isTheta_exp_comp_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (f x) (g x))))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3854 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3856 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3854 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3856) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (f x) (g x))))
-Case conversion may be inaccurate. Consider using '#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_compβ'. -/
@[simp]
theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =Ξ[l] fun x => exp (g x)) β
@@ -581,12 +389,6 @@ theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
is_O_exp_comp_exp_comp, Pi.sub_def]
#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_comp
-/- warning: real.is_o_exp_comp_exp_comp -> Real.isLittleO_exp_comp_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (g x) (f x)) l (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (g x) (f x)) l (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_compβ'. -/
@[simp]
theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =o[l] fun x => exp (g x)) β Tendsto (fun x => g x - f x) l atTop := by
@@ -594,24 +396,12 @@ theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
imp_true_iff, tendsto_exp_comp_nhds_zero, neg_sub]
#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_comp
-/- warning: real.is_o_one_exp_comp -> Real.isLittleO_one_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (fun (x : Ξ±) => Real.exp (f x))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (fun (x : Ξ±) => Real.exp (f x))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align real.is_o_one_exp_comp Real.isLittleO_one_exp_compβ'. -/
@[simp]
theorem isLittleO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =o[l] fun x => exp (f x)) β Tendsto f l atTop := by
simp only [β exp_zero, is_o_exp_comp_exp_comp, sub_zero]
#align real.is_o_one_exp_comp Real.isLittleO_one_exp_comp
-/- warning: real.is_O_one_exp_comp -> Real.isBigO_one_exp_comp is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (GE.ge.{0} Real Real.hasLe) l f)
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4068 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4070 : Real) => GE.ge.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4068 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4070) l f)
-Case conversion may be inaccurate. Consider using '#align real.is_O_one_exp_comp Real.isBigO_one_exp_compβ'. -/
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
@[simp]
@@ -620,12 +410,6 @@ theorem isBigO_one_exp_comp {f : Ξ± β β} :
simp only [β exp_zero, is_O_exp_comp_exp_comp, Pi.sub_def, zero_sub, is_bounded_under_le_neg]
#align real.is_O_one_exp_comp Real.isBigO_one_exp_comp
-/- warning: real.is_O_exp_comp_one -> Real.isBigO_exp_comp_one is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l f)
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4144 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4146 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4144 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4146) l f)
-Case conversion may be inaccurate. Consider using '#align real.is_O_exp_comp_one Real.isBigO_exp_comp_oneβ'. -/
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
theorem isBigO_exp_comp_one {f : Ξ± β β} :
@@ -633,12 +417,6 @@ theorem isBigO_exp_comp_one {f : Ξ± β β} :
simp only [is_O_one_iff, norm_eq_abs, abs_exp, is_bounded_under_le_exp_comp]
#align real.is_O_exp_comp_one Real.isBigO_exp_comp_one
-/- warning: real.is_Theta_exp_comp_one -> Real.isTheta_exp_comp_one is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (f x)))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4220 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4222 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4220 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4222) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (f x)))
-Case conversion may be inaccurate. Consider using '#align real.is_Theta_exp_comp_one Real.isTheta_exp_comp_oneβ'. -/
/-- `real.exp (f x)` is bounded away from zero and infinity along a filter `l` if and only if
`|f x|` is bounded from above along this filter. -/
@[simp]
@@ -651,12 +429,6 @@ end Real
namespace Complex
-/- warning: complex.comap_exp_comap_abs_at_top -> Complex.comap_exp_comap_abs_atTop is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real (coeFn.{1, 1} (AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) (fun (f : AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) => Complex -> Real) (AbsoluteValue.hasCoeToFun.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) Complex.abs) (Filter.atTop.{0} Real Real.preorder))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real (FunLike.coe.{1, 1, 1} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex (fun (f : Complex) => (fun (x._@.Mathlib.Algebra.Order.Hom.Basic._hyg.99 : Complex) => Real) f) (SubadditiveHomClass.toFunLike.{0, 0, 0} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex Real (Distrib.toAdd.{0} Complex (NonUnitalNonAssocSemiring.toDistrib.{0} Complex (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Complex (Semiring.toNonAssocSemiring.{0} Complex Complex.instSemiringComplex)))) (Distrib.toAdd.{0} Real (NonUnitalNonAssocSemiring.toDistrib.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring))))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (AbsoluteValue.subadditiveHomClass.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring)) Complex.abs) (Filter.atTop.{0} Real Real.instPreorderReal))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTopβ'. -/
theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
calc
comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
@@ -665,12 +437,6 @@ theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop
#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTop
-/- warning: complex.comap_exp_nhds_zero -> Complex.comap_exp_nhds_zero is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder))
-but is expected to have type
- Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zeroβ'. -/
theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
calc
comap exp (π 0) = comap re (comap Real.exp (π 0)) := by
@@ -679,57 +445,27 @@ theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zero
-/- warning: complex.comap_exp_nhds_within_zero -> Complex.comap_exp_nhdsWithin_zero is a dubious translation:
-lean 3 declaration is
- Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.booleanAlgebra.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.hasSingleton.{0} Complex) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder))
-but is expected to have type
- Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.instBooleanAlgebraSet.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.instSingletonSet.{0} Complex) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align complex.comap_exp_nhds_within_zero Complex.comap_exp_nhdsWithin_zeroβ'. -/
theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot :=
by
have : exp β»ΒΉ' {0}αΆ = univ := eq_univ_of_forall exp_ne_zero
simp [nhdsWithin, comap_exp_nhds_zero, this]
#align complex.comap_exp_nhds_within_zero Complex.comap_exp_nhdsWithin_zero
-/- warning: complex.tendsto_exp_nhds_zero_iff -> Complex.tendsto_exp_nhds_zero_iff is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex}, Iff (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Complex.re (f x)) l (Filter.atBot.{0} Real Real.preorder))
-but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex}, Iff (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Complex.re (f x)) l (Filter.atBot.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iffβ'. -/
theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto (fun x => re (f x)) l atBot := by
rw [β tendsto_comap_iff, comap_exp_nhds_zero, tendsto_comap_iff]
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
-/- warning: complex.tendsto_exp_comap_re_at_top -> Complex.tendsto_exp_comap_re_atTop is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.preorder)) (Filter.comap.{0, 0} Complex Real (coeFn.{1, 1} (AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) (fun (f : AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) => Complex -> Real) (AbsoluteValue.hasCoeToFun.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) Complex.abs) (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.instPreorderReal)) (Filter.comap.{0, 0} Complex Real (FunLike.coe.{1, 1, 1} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex (fun (f : Complex) => (fun (x._@.Mathlib.Algebra.Order.Hom.Basic._hyg.99 : Complex) => Real) f) (SubadditiveHomClass.toFunLike.{0, 0, 0} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex Real (Distrib.toAdd.{0} Complex (NonUnitalNonAssocSemiring.toDistrib.{0} Complex (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Complex (Semiring.toNonAssocSemiring.{0} Complex Complex.instSemiringComplex)))) (Distrib.toAdd.{0} Real (NonUnitalNonAssocSemiring.toDistrib.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring))))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (AbsoluteValue.subadditiveHomClass.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring)) Complex.abs) (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTopβ'. -/
/-- `complex.abs (complex.exp z) β β` as `complex.re z β β`. TODO: use `bornology.cobounded`. -/
theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
comap_exp_comap_abs_atTop βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
-/- warning: complex.tendsto_exp_comap_re_at_bot -> Complex.tendsto_exp_comap_re_atBot is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder)) (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))
-but is expected to have type
- Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal)) (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))
-Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_comap_re_at_bot Complex.tendsto_exp_comap_re_atBotβ'. -/
/-- `complex.exp z β 0` as `complex.re z β -β`.-/
theorem tendsto_exp_comap_re_atBot : Tendsto exp (comap re atBot) (π 0) :=
comap_exp_nhds_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot Complex.tendsto_exp_comap_re_atBot
-/- warning: complex.tendsto_exp_comap_re_at_bot_nhds_within -> Complex.tendsto_exp_comap_re_atBot_nhdsWithin is a dubious translation:
-lean 3 declaration is
- Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder)) (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.booleanAlgebra.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.hasSingleton.{0} Complex) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))))
-but is expected to have type
- Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal)) (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.instBooleanAlgebraSet.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.instSingletonSet.{0} Complex) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))))
-Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_comap_re_at_bot_nhds_within Complex.tendsto_exp_comap_re_atBot_nhdsWithinβ'. -/
theorem tendsto_exp_comap_re_atBot_nhdsWithin : Tendsto exp (comap re atBot) (π[β ] 0) :=
comap_exp_nhdsWithin_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot_nhds_within Complex.tendsto_exp_comap_re_atBot_nhdsWithin
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -46,11 +46,7 @@ Case conversion may be inaccurate. Consider using '#align complex.exp_bound_sq C
theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 :=
calc
- βexp (x + z) - exp x - z * exp xβ = βexp x * (exp z - 1 - z)β :=
- by
- congr
- rw [exp_add]
- ring
+ βexp (x + z) - exp x - z * exp xβ = βexp x * (exp z - 1 - z)β := by congr ; rw [exp_add]; ring
_ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
@@ -276,9 +272,7 @@ but is expected to have type
Filter.Tendsto.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1β'. -/
/-- The real exponential function tends to `1` at `0`. -/
-theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) :=
- by
- convert continuous_exp.tendsto 0
+theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) := by convert continuous_exp.tendsto 0;
simp
#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1
@@ -344,8 +338,7 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
((tendsto_pow_const_div_const_pow_of_one_lt n (one_lt_exp_iff.2 zero_lt_one)).Eventually
(gt_mem_nhds this))
simp only [β exp_nat_mul, mul_one, div_lt_iff, exp_pos, β div_eq_inv_mul] at hN
- refine' β¨N, trivial, fun x hx => _β©
- rw [Set.mem_Ioi] at hx
+ refine' β¨N, trivial, fun x hx => _β©; rw [Set.mem_Ioi] at hx
have hxβ : 0 < x := N.cast_nonneg.trans_lt hx
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -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
-! leanprover-community/mathlib commit 2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe
+! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -75,7 +75,7 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
by
intro z hz
have : βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 := exp_bound_sq x z hz
- rw [β sub_le_iff_le_add', β norm_smul z]
+ rw [β sub_le_iff_le_add', β norm_smul z (_ : β)]
exact (norm_sub_norm_le _ _).trans this
calc
βexp y - exp xβ = βexp (x + (y - x)) - exp xβ := by nth_rw 1 [hy_eq]
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -435,7 +435,7 @@ def expOrderIso : β βo Ioi (0 : β) :=
lean 3 declaration is
forall (x : Real), Eq.{1} Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (HasLiftT.mk.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (CoeTCβ.coe.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeBase.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeSubtype.{1} Real (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))))) (coeFn.{1, 1} (OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))) (fun (_x : RelIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) => Real -> (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (RelIso.hasCoeToFun.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) Real.expOrderIso x)) (Real.exp x)
but is expected to have type
- forall (x : Real), Eq.{1} Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) Real.expOrderIso x)) (Real.exp x)
+ forall (x : Real), Eq.{1} Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) Real.expOrderIso x)) (Real.exp x)
Case conversion may be inaccurate. Consider using '#align real.coe_exp_order_iso_apply Real.coe_expOrderIso_applyβ'. -/
@[simp]
theorem coe_expOrderIso_apply (x : β) : (expOrderIso x : β) = exp x :=
@@ -446,7 +446,7 @@ theorem coe_expOrderIso_apply (x : β) : (expOrderIso x : β) = exp x :=
lean 3 declaration is
Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (HasLiftT.mk.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (CoeTCβ.coe.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeBase.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeSubtype.{1} Real (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))))) (coeFn.{1, 1} (OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))) (fun (_x : RelIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) => Real -> (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (RelIso.hasCoeToFun.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) Real.expOrderIso)) Real.exp
but is expected to have type
- Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) Real.expOrderIso)) Real.exp
+ Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) Real.expOrderIso)) Real.exp
Case conversion may be inaccurate. Consider using '#align real.coe_comp_exp_order_iso Real.coe_comp_expOrderIsoβ'. -/
@[simp]
theorem coe_comp_expOrderIso : coe β expOrderIso = exp :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -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
-! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
+! leanprover-community/mathlib commit 2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.Analysis.SpecificLimits.Normed
/-!
# 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 continuity of `complex.exp` and `real.exp`. We also prove a few facts about
limits of `real.exp` at infinity.
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -561,7 +561,7 @@ theorem isLittleO_pow_exp_atTop {n : β} : (fun x => x ^ n) =o[atTop] Real.exp
lean 3 declaration is
forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.hasSub))) f g))
but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3651 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3653 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3651 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3653) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.instSubReal))) f g))
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3755 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3757 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3755 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3757) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.instSubReal))) f g))
Case conversion may be inaccurate. Consider using '#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_compβ'. -/
@[simp]
theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
@@ -574,7 +574,7 @@ theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
lean 3 declaration is
forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (f x) (g x))))
but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3750 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3752 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3750 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3752) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (f x) (g x))))
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3854 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3856 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3854 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3856) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (f x) (g x))))
Case conversion may be inaccurate. Consider using '#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_compβ'. -/
@[simp]
theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
@@ -614,7 +614,7 @@ theorem isLittleO_one_exp_comp {f : Ξ± β β} :
lean 3 declaration is
forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (GE.ge.{0} Real Real.hasLe) l f)
but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3964 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3966 : Real) => GE.ge.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3964 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3966) l f)
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4068 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4070 : Real) => GE.ge.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4068 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4070) l f)
Case conversion may be inaccurate. Consider using '#align real.is_O_one_exp_comp Real.isBigO_one_exp_compβ'. -/
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
@@ -628,7 +628,7 @@ theorem isBigO_one_exp_comp {f : Ξ± β β} :
lean 3 declaration is
forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l f)
but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4040 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4042 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4040 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4042) l f)
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4144 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4146 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4144 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4146) l f)
Case conversion may be inaccurate. Consider using '#align real.is_O_exp_comp_one Real.isBigO_exp_comp_oneβ'. -/
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
@@ -641,7 +641,7 @@ theorem isBigO_exp_comp_one {f : Ξ± β β} :
lean 3 declaration is
forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (f x)))
but is expected to have type
- forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4116 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4118 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4116 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4118) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (f x)))
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4220 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4222 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4220 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4222) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (f x)))
Case conversion may be inaccurate. Consider using '#align real.is_Theta_exp_comp_one Real.isTheta_exp_comp_oneβ'. -/
/-- `real.exp (f x)` is bounded away from zero and infinity along a filter `l` if and only if
`|f x|` is bounded from above along this filter. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -34,6 +34,12 @@ namespace Complex
variable {z y x : β}
+/- warning: complex.exp_bound_sq -> Complex.exp_bound_sq is a dubious translation:
+lean 3 declaration is
+ forall (x : Complex) (z : Complex), (LE.le.{0} Real Real.hasLe (Norm.norm.{0} Complex Complex.hasNorm z) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) (Complex.exp (HAdd.hAdd.{0, 0, 0} Complex Complex Complex (instHAdd.{0} Complex Complex.hasAdd) x z)) (Complex.exp x)) (SMul.smul.{0, 0} Complex Complex (Mul.toSMul.{0} Complex Complex.hasMul) z (Complex.exp x)))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Norm.norm.{0} Complex Complex.hasNorm (Complex.exp x)) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{0} Complex Complex.hasNorm z) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))
+but is expected to have type
+ forall (x : Complex) (z : Complex), (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} Complex Complex.instNormComplex z) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) (Complex.exp (HAdd.hAdd.{0, 0, 0} Complex Complex Complex (instHAdd.{0} Complex Complex.instAddComplex) x z)) (Complex.exp x)) (HSMul.hSMul.{0, 0, 0} Complex Complex Complex (instHSMul.{0, 0} Complex Complex (Algebra.toSMul.{0, 0} Complex Complex Complex.instCommSemiringComplex Complex.instSemiringComplex (NormedAlgebra.toAlgebra.{0, 0} Complex Complex Complex.instNormedFieldComplex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex))) (NormedAlgebra.id.{0} Complex Complex.instNormedFieldComplex)))) z (Complex.exp x)))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Norm.norm.{0} Complex Complex.instNormComplex (Complex.exp x)) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{0} Complex Complex.instNormComplex z) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
+Case conversion may be inaccurate. Consider using '#align complex.exp_bound_sq Complex.exp_bound_sqβ'. -/
theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
βexp (x + z) - exp x - z β’ exp xβ β€ βexp xβ * βzβ ^ 2 :=
calc
@@ -48,6 +54,12 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
#align complex.exp_bound_sq Complex.exp_bound_sq
+/- warning: complex.locally_lipschitz_exp -> Complex.locally_lipschitz_exp is a dubious translation:
+lean 3 declaration is
+ forall {r : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) r) -> (LE.le.{0} Real Real.hasLe r (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (forall (x : Complex) (y : Complex), (LT.lt.{0} Real Real.hasLt (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) y x)) r) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) (Complex.exp y) (Complex.exp x))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) r) (Norm.norm.{0} Complex Complex.hasNorm (Complex.exp x))) (Norm.norm.{0} Complex Complex.hasNorm (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.hasSub) y x)))))
+but is expected to have type
+ forall {r : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) r) -> (LE.le.{0} Real Real.instLEReal r (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (forall (x : Complex) (y : Complex), (LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) y x)) r) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) (Complex.exp y) (Complex.exp x))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) r) (Norm.norm.{0} Complex Complex.instNormComplex (Complex.exp x))) (Norm.norm.{0} Complex Complex.instNormComplex (HSub.hSub.{0, 0, 0} Complex Complex Complex (instHSub.{0} Complex Complex.instSubComplex) y x)))))
+Case conversion may be inaccurate. Consider using '#align complex.locally_lipschitz_exp Complex.locally_lipschitz_expβ'. -/
theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1) (x y : β)
(hyx : βy - xβ < r) : βexp y - exp xβ β€ (1 + r) * βexp xβ * βy - xβ :=
by
@@ -71,6 +83,12 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
+/- warning: complex.continuous_exp -> Complex.continuous_exp is a dubious translation:
+lean 3 declaration is
+ Continuous.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) Complex.exp
+but is expected to have type
+ Continuous.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) Complex.exp
+Case conversion may be inaccurate. Consider using '#align complex.continuous_exp Complex.continuous_expβ'. -/
@[continuity]
theorem continuous_exp : Continuous exp :=
continuous_iff_continuousAt.mpr fun x =>
@@ -78,6 +96,12 @@ theorem continuous_exp : Continuous exp :=
(locally_lipschitz_exp zero_le_one le_rfl x)
#align complex.continuous_exp Complex.continuous_exp
+/- warning: complex.continuous_on_exp -> Complex.continuousOn_exp is a dubious translation:
+lean 3 declaration is
+ forall {s : Set.{0} Complex}, ContinuousOn.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) Complex.exp s
+but is expected to have type
+ forall {s : Set.{0} Complex}, ContinuousOn.{0, 0} Complex Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) Complex.exp s
+Case conversion may be inaccurate. Consider using '#align complex.continuous_on_exp Complex.continuousOn_expβ'. -/
theorem continuousOn_exp {s : Set β} : ContinuousOn exp s :=
continuous_exp.ContinuousOn
#align complex.continuous_on_exp Complex.continuousOn_exp
@@ -90,6 +114,12 @@ variable {Ξ± : Type _}
open Complex
+/- warning: filter.tendsto.cexp -> Filter.Tendsto.cexp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex} {z : Complex}, (Filter.Tendsto.{u1, 0} Ξ± Complex f l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) z)) -> (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (Complex.exp z)))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex} {z : Complex}, (Filter.Tendsto.{u1, 0} Ξ± Complex f l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) z)) -> (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (Complex.exp z)))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto.cexp Filter.Tendsto.cexpβ'. -/
theorem Filter.Tendsto.cexp {l : Filter Ξ±} {f : Ξ± β β} {z : β} (hf : Tendsto f l (π z)) :
Tendsto (fun x => exp (f x)) l (π (exp z)) :=
(continuous_exp.Tendsto _).comp hf
@@ -97,19 +127,43 @@ theorem Filter.Tendsto.cexp {l : Filter Ξ±} {f : Ξ± β β} {z : β} (hf : Ten
variable [TopologicalSpace Ξ±] {f : Ξ± β β} {s : Set Ξ±} {x : Ξ±}
+/- warning: continuous_within_at.cexp -> ContinuousWithinAt.cexp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±} {x : Ξ±}, (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f s x) -> (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)) s x)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±} {x : Ξ±}, (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f s x) -> (ContinuousWithinAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)) s x)
+Case conversion may be inaccurate. Consider using '#align continuous_within_at.cexp ContinuousWithinAt.cexpβ'. -/
theorem ContinuousWithinAt.cexp (h : ContinuousWithinAt f s x) :
ContinuousWithinAt (fun y => exp (f y)) s x :=
h.cexp
#align continuous_within_at.cexp ContinuousWithinAt.cexp
+/- warning: continuous_at.cexp -> ContinuousAt.cexp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {x : Ξ±}, (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f x) -> (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)) x)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {x : Ξ±}, (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f x) -> (ContinuousAt.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)) x)
+Case conversion may be inaccurate. Consider using '#align continuous_at.cexp ContinuousAt.cexpβ'. -/
theorem ContinuousAt.cexp (h : ContinuousAt f x) : ContinuousAt (fun y => exp (f y)) x :=
h.cexp
#align continuous_at.cexp ContinuousAt.cexp
+/- warning: continuous_on.cexp -> ContinuousOn.cexp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±}, (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f s) -> (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)) s)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex} {s : Set.{u1} Ξ±}, (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f s) -> (ContinuousOn.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)) s)
+Case conversion may be inaccurate. Consider using '#align continuous_on.cexp ContinuousOn.cexpβ'. -/
theorem ContinuousOn.cexp (h : ContinuousOn f s) : ContinuousOn (fun y => exp (f y)) s :=
fun x hx => (h x hx).cexp
#align continuous_on.cexp ContinuousOn.cexp
+/- warning: continuous.cexp -> Continuous.cexp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex}, (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) f) -> (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (fun (y : Ξ±) => Complex.exp (f y)))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} Ξ±] {f : Ξ± -> Complex}, (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) f) -> (Continuous.{u1, 0} Ξ± Complex _inst_1 (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (fun (y : Ξ±) => Complex.exp (f y)))
+Case conversion may be inaccurate. Consider using '#align continuous.cexp Continuous.cexpβ'. -/
theorem Continuous.cexp (h : Continuous f) : Continuous fun y => exp (f y) :=
continuous_iff_continuousAt.2 fun x => h.ContinuousAt.cexp
#align continuous.cexp Continuous.cexp
@@ -118,14 +172,18 @@ end ComplexContinuousExpComp
namespace Real
+#print Real.continuous_exp /-
@[continuity]
theorem continuous_exp : Continuous exp :=
Complex.continuous_re.comp Complex.continuous_ofReal.cexp
#align real.continuous_exp Real.continuous_exp
+-/
+#print Real.continuousOn_exp /-
theorem continuousOn_exp {s : Set β} : ContinuousOn exp s :=
continuous_exp.ContinuousOn
#align real.continuous_on_exp Real.continuousOn_exp
+-/
end Real
@@ -135,29 +193,39 @@ variable {Ξ± : Type _}
open Real
+#print Filter.Tendsto.exp /-
theorem Filter.Tendsto.exp {l : Filter Ξ±} {f : Ξ± β β} {z : β} (hf : Tendsto f l (π z)) :
Tendsto (fun x => exp (f x)) l (π (exp z)) :=
(continuous_exp.Tendsto _).comp hf
#align filter.tendsto.exp Filter.Tendsto.exp
+-/
variable [TopologicalSpace Ξ±] {f : Ξ± β β} {s : Set Ξ±} {x : Ξ±}
+#print ContinuousWithinAt.exp /-
theorem ContinuousWithinAt.exp (h : ContinuousWithinAt f s x) :
ContinuousWithinAt (fun y => exp (f y)) s x :=
h.exp
#align continuous_within_at.exp ContinuousWithinAt.exp
+-/
+#print ContinuousAt.exp /-
theorem ContinuousAt.exp (h : ContinuousAt f x) : ContinuousAt (fun y => exp (f y)) x :=
h.exp
#align continuous_at.exp ContinuousAt.exp
+-/
+#print ContinuousOn.exp /-
theorem ContinuousOn.exp (h : ContinuousOn f s) : ContinuousOn (fun y => exp (f y)) s := fun x hx =>
(h x hx).exp
#align continuous_on.exp ContinuousOn.exp
+-/
+#print Continuous.exp /-
theorem Continuous.exp (h : Continuous f) : Continuous fun y => exp (f y) :=
continuous_iff_continuousAt.2 fun x => h.ContinuousAt.exp
#align continuous.exp Continuous.exp
+-/
end RealContinuousExpComp
@@ -165,10 +233,17 @@ namespace Real
variable {Ξ± : Type _} {x y z : β} {l : Filter Ξ±}
+/- warning: real.exp_half -> Real.exp_half is a dubious translation:
+lean 3 declaration is
+ forall (x : Real), Eq.{1} Real (Real.exp (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) x (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne)))))) (Real.sqrt (Real.exp x))
+but is expected to have type
+ forall (x : Real), Eq.{1} Real (Real.exp (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) x (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))))) (Real.sqrt (Real.exp x))
+Case conversion may be inaccurate. Consider using '#align real.exp_half Real.exp_halfβ'. -/
theorem exp_half (x : β) : exp (x / 2) = sqrt (exp x) := by
rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β exp_add, add_halves] <;> exact (exp_pos _).le
#align real.exp_half Real.exp_half
+#print Real.tendsto_exp_atTop /-
/-- The real exponential function tends to `+β` at `+β`. -/
theorem tendsto_exp_atTop : Tendsto exp atTop atTop :=
by
@@ -177,13 +252,26 @@ theorem tendsto_exp_atTop : Tendsto exp atTop atTop :=
have B : βαΆ x in at_top, x + 1 β€ exp x := eventually_at_top.2 β¨0, fun x hx => add_one_le_exp xβ©
exact tendsto_at_top_mono' at_top B A
#align real.tendsto_exp_at_top Real.tendsto_exp_atTop
+-/
+/- warning: real.tendsto_exp_neg_at_top_nhds_0 -> Real.tendsto_exp_neg_atTop_nhds_0 is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => Real.exp (Neg.neg.{0} Real Real.hasNeg x)) (Filter.atTop.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => Real.exp (Neg.neg.{0} Real Real.instNegReal x)) (Filter.atTop.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0β'. -/
/-- The real exponential function tends to `0` at `-β` or, equivalently, `exp(-x)` tends to `0`
at `+β` -/
theorem tendsto_exp_neg_atTop_nhds_0 : Tendsto (fun x => exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp tendsto_exp_atTop).congr fun x => (exp_neg x).symm
#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0
+/- warning: real.tendsto_exp_nhds_0_nhds_1 -> Real.tendsto_exp_nhds_0_nhds_1 is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1β'. -/
/-- The real exponential function tends to `1` at `0`. -/
theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) :=
by
@@ -191,27 +279,57 @@ theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) :=
simp
#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1
+/- warning: real.tendsto_exp_at_bot -> Real.tendsto_exp_atBot is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_at_bot Real.tendsto_exp_atBotβ'. -/
theorem tendsto_exp_atBot : Tendsto exp atBot (π 0) :=
(tendsto_exp_neg_atTop_nhds_0.comp tendsto_neg_atBot_atTop).congr fun x =>
congr_arg exp <| neg_neg x
#align real.tendsto_exp_at_bot Real.tendsto_exp_atBot
+/- warning: real.tendsto_exp_at_bot_nhds_within -> Real.tendsto_exp_atBot_nhdsWithin is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.preorder) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.instPreorderReal) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_at_bot_nhds_within Real.tendsto_exp_atBot_nhdsWithinβ'. -/
theorem tendsto_exp_atBot_nhdsWithin : Tendsto exp atBot (π[>] 0) :=
tendsto_inf.2 β¨tendsto_exp_atBot, tendsto_principal.2 <| eventually_of_forall exp_posβ©
#align real.tendsto_exp_at_bot_nhds_within Real.tendsto_exp_atBot_nhdsWithin
+/- warning: real.is_bounded_under_ge_exp_comp -> Real.isBoundedUnder_ge_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} (l : Filter.{u1} Ξ±) (f : Ξ± -> Real), Filter.IsBoundedUnder.{0, u1} Real Ξ± (GE.ge.{0} Real Real.hasLe) l (fun (x : Ξ±) => Real.exp (f x))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} (l : Filter.{u1} Ξ±) (f : Ξ± -> Real), Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1807 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1809 : Real) => GE.ge.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1807 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1809) l (fun (x : Ξ±) => Real.exp (f x))
+Case conversion may be inaccurate. Consider using '#align real.is_bounded_under_ge_exp_comp Real.isBoundedUnder_ge_exp_compβ'. -/
@[simp]
theorem isBoundedUnder_ge_exp_comp (l : Filter Ξ±) (f : Ξ± β β) :
IsBoundedUnder (Β· β₯ Β·) l fun x => exp (f x) :=
isBoundedUnder_of β¨0, fun x => (exp_pos _).leβ©
#align real.is_bounded_under_ge_exp_comp Real.isBoundedUnder_ge_exp_comp
+/- warning: real.is_bounded_under_le_exp_comp -> Real.isBoundedUnder_le_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l f)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1869 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1871 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1869 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1871) l (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1894 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1896 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1894 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.1896) l f)
+Case conversion may be inaccurate. Consider using '#align real.is_bounded_under_le_exp_comp Real.isBoundedUnder_le_exp_compβ'. -/
@[simp]
theorem isBoundedUnder_le_exp_comp {f : Ξ± β β} :
(IsBoundedUnder (Β· β€ Β·) l fun x => exp (f x)) β IsBoundedUnder (Β· β€ Β·) l f :=
exp_monotone.isBoundedUnder_le_comp tendsto_exp_atTop
#align real.is_bounded_under_le_exp_comp Real.isBoundedUnder_le_exp_comp
+/- warning: real.tendsto_exp_div_pow_at_top -> Real.tendsto_exp_div_pow_atTop is a dubious translation:
+lean 3 declaration is
+ forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Real.exp x) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n)) (Filter.atTop.{0} Real Real.preorder) (Filter.atTop.{0} Real Real.preorder)
+but is expected to have type
+ forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Real.exp x) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n)) (Filter.atTop.{0} Real Real.instPreorderReal) (Filter.atTop.{0} Real Real.instPreorderReal)
+Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTopβ'. -/
/-- The function `exp(x)/x^n` tends to `+β` at `+β`, for any natural number `n` -/
theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) atTop atTop :=
by
@@ -237,6 +355,12 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
+/- warning: real.tendsto_pow_mul_exp_neg_at_top_nhds_0 -> Real.tendsto_pow_mul_exp_neg_atTop_nhds_0 is a dubious translation:
+lean 3 declaration is
+ forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n) (Real.exp (Neg.neg.{0} Real Real.hasNeg x))) (Filter.atTop.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ forall (n : Nat), Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n) (Real.exp (Neg.neg.{0} Real Real.instNegReal x))) (Filter.atTop.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0β'. -/
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
Tendsto (fun x => x ^ n * exp (-x)) atTop (π 0) :=
@@ -244,6 +368,12 @@ theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
rw [comp_app, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, exp_neg]
#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0
+/- warning: real.tendsto_mul_exp_add_div_pow_at_top -> Real.tendsto_mul_exp_add_div_pow_atTop is a dubious translation:
+lean 3 declaration is
+ forall (b : Real) (c : Real) (n : Nat), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) b (Real.exp x)) c) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n)) (Filter.atTop.{0} Real Real.preorder) (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ forall (b : Real) (c : Real) (n : Nat), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) b (Real.exp x)) c) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n)) (Filter.atTop.{0} Real Real.instPreorderReal) (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_mul_exp_add_div_pow_at_top Real.tendsto_mul_exp_add_div_pow_atTopβ'. -/
/-- The function `(b * exp x + c) / (x ^ n)` tends to `+β` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is positive. -/
theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
@@ -258,6 +388,12 @@ theorem tendsto_mul_exp_add_div_pow_atTop (b c : β) (n : β) (hb : 0 < b) :
(tendsto_const_nhds.div_at_top (tendsto_pow_at_top hn))
#align real.tendsto_mul_exp_add_div_pow_at_top Real.tendsto_mul_exp_add_div_pow_atTop
+/- warning: real.tendsto_div_pow_mul_exp_add_at_top -> Real.tendsto_div_pow_mul_exp_add_atTop is a dubious translation:
+lean 3 declaration is
+ forall (b : Real) (c : Real) (n : Nat), (Ne.{1} Real (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) b (Real.exp x)) c)) (Filter.atTop.{0} Real Real.preorder) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
+but is expected to have type
+ forall (b : Real) (c : Real) (n : Nat), (Ne.{1} Real (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) b) -> (Filter.Tendsto.{0, 0} Real Real (fun (x : Real) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) b (Real.exp x)) c)) (Filter.atTop.{0} Real Real.instPreorderReal) (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_div_pow_mul_exp_add_at_top Real.tendsto_div_pow_mul_exp_add_atTopβ'. -/
/-- The function `(x ^ n) / (b * exp x + c)` tends to `0` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is nonzero. -/
theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
@@ -278,6 +414,12 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
Β· exact neg_zero.symm
#align real.tendsto_div_pow_mul_exp_add_at_top Real.tendsto_div_pow_mul_exp_add_atTop
+/- warning: real.exp_order_iso -> Real.expOrderIso is a dubious translation:
+lean 3 declaration is
+ OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))
+but is expected to have type
+ OrderIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) Real.instLEReal (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))))
+Case conversion may be inaccurate. Consider using '#align real.exp_order_iso Real.expOrderIsoβ'. -/
/-- `real.exp` as an order isomorphism between `β` and `(0, +β)`. -/
def expOrderIso : β βo Ioi (0 : β) :=
StrictMono.orderIsoOfSurjective _ (exp_strictMono.codRestrict exp_pos) <|
@@ -286,73 +428,141 @@ def expOrderIso : β βo Ioi (0 : β) :=
(by simp [tendsto_exp_at_bot_nhds_within])
#align real.exp_order_iso Real.expOrderIso
+/- warning: real.coe_exp_order_iso_apply -> Real.coe_expOrderIso_apply is a dubious translation:
+lean 3 declaration is
+ forall (x : Real), Eq.{1} Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (HasLiftT.mk.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (CoeTCβ.coe.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeBase.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeSubtype.{1} Real (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))))) (coeFn.{1, 1} (OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))) (fun (_x : RelIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) => Real -> (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (RelIso.hasCoeToFun.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) Real.expOrderIso x)) (Real.exp x)
+but is expected to have type
+ forall (x : Real), Eq.{1} Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) Real.expOrderIso x)) (Real.exp x)
+Case conversion may be inaccurate. Consider using '#align real.coe_exp_order_iso_apply Real.coe_expOrderIso_applyβ'. -/
@[simp]
theorem coe_expOrderIso_apply (x : β) : (expOrderIso x : β) = exp x :=
rfl
#align real.coe_exp_order_iso_apply Real.coe_expOrderIso_apply
+/- warning: real.coe_comp_exp_order_iso -> Real.coe_comp_expOrderIso is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (HasLiftT.mk.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (CoeTCβ.coe.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeBase.{1, 1} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real (coeSubtype.{1} Real (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))))) (coeFn.{1, 1} (OrderIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) Real.hasLe (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))))) (fun (_x : RelIso.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) => Real -> (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (RelIso.hasCoeToFun.{0, 0} Real (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (LE.le.{0} Real Real.hasLe) (LE.le.{0} (coeSort.{1, 2} (Set.{0} Real) Type (Set.hasCoeToSort.{0} Real) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Subtype.hasLe.{0} Real Real.hasLe (fun (x : Real) => Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) x (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))))) Real.expOrderIso)) Real.exp
+but is expected to have type
+ Eq.{1} (Real -> Real) (Function.comp.{1, 1, 1} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) Real (Subtype.val.{1} Real (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) (FunLike.coe.{1, 1, 1} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (fun (_x : Real) => Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (RelHomClass.toFunLike.{0, 0, 0} (RelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{0, 0} Real (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Real) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) => LE.le.{0} (Set.Elem.{0} Real (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Subtype.le.{0} Real Real.instLEReal (fun (x : Real) => Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) x (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) Real.expOrderIso)) Real.exp
+Case conversion may be inaccurate. Consider using '#align real.coe_comp_exp_order_iso Real.coe_comp_expOrderIsoβ'. -/
@[simp]
theorem coe_comp_expOrderIso : coe β expOrderIso = exp :=
rfl
#align real.coe_comp_exp_order_iso Real.coe_comp_expOrderIso
+/- warning: real.range_exp -> Real.range_exp is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Set.{0} Real) (Set.range.{0, 1} Real Real Real.exp) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ Eq.{1} (Set.{0} Real) (Set.range.{0, 1} Real Real Real.exp) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align real.range_exp Real.range_expβ'. -/
@[simp]
theorem range_exp : range exp = Ioi 0 := by
rw [β coe_comp_exp_order_iso, range_comp, exp_order_iso.range_eq, image_univ, Subtype.range_coe]
#align real.range_exp Real.range_exp
+#print Real.map_exp_atTop /-
@[simp]
theorem map_exp_atTop : map exp atTop = atTop := by
rw [β coe_comp_exp_order_iso, β Filter.map_map, OrderIso.map_atTop, map_coe_Ioi_at_top]
#align real.map_exp_at_top Real.map_exp_atTop
+-/
+#print Real.comap_exp_atTop /-
@[simp]
theorem comap_exp_atTop : comap exp atTop = atTop := by
rw [β map_exp_at_top, comap_map exp_injective, map_exp_at_top]
#align real.comap_exp_at_top Real.comap_exp_atTop
+-/
+#print Real.tendsto_exp_comp_atTop /-
@[simp]
theorem tendsto_exp_comp_atTop {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l atTop β Tendsto f l atTop := by
rw [β tendsto_comap_iff, comap_exp_at_top]
#align real.tendsto_exp_comp_at_top Real.tendsto_exp_comp_atTop
+-/
+#print Real.tendsto_comp_exp_atTop /-
theorem tendsto_comp_exp_atTop {f : β β Ξ±} :
Tendsto (fun x => f (exp x)) atTop l β Tendsto f atTop l := by
rw [β tendsto_map'_iff, map_exp_at_top]
#align real.tendsto_comp_exp_at_top Real.tendsto_comp_exp_atTop
+-/
+/- warning: real.map_exp_at_bot -> Real.map_exp_atBot is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Filter.{0} Real) (Filter.map.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.preorder)) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
+but is expected to have type
+ Eq.{1} (Filter.{0} Real) (Filter.map.{0, 0} Real Real Real.exp (Filter.atBot.{0} Real Real.instPreorderReal)) (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
+Case conversion may be inaccurate. Consider using '#align real.map_exp_at_bot Real.map_exp_atBotβ'. -/
@[simp]
theorem map_exp_atBot : map exp atBot = π[>] 0 := by
rw [β coe_comp_exp_order_iso, β Filter.map_map, exp_order_iso.map_at_bot, β map_coe_Ioi_atBot]
#align real.map_exp_at_bot Real.map_exp_atBot
+/- warning: real.comap_exp_nhds_within_Ioi_zero -> Real.comap_exp_nhdsWithin_Ioi_zero is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))) (Filter.atBot.{0} Real Real.preorder)
+but is expected to have type
+ Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))) (Filter.atBot.{0} Real Real.instPreorderReal)
+Case conversion may be inaccurate. Consider using '#align real.comap_exp_nhds_within_Ioi_zero Real.comap_exp_nhdsWithin_Ioi_zeroβ'. -/
@[simp]
theorem comap_exp_nhdsWithin_Ioi_zero : comap exp (π[>] 0) = atBot := by
rw [β map_exp_at_bot, comap_map exp_injective]
#align real.comap_exp_nhds_within_Ioi_zero Real.comap_exp_nhdsWithin_Ioi_zero
+/- warning: real.tendsto_comp_exp_at_bot -> Real.tendsto_comp_exp_atBot is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Real -> Ξ±}, Iff (Filter.Tendsto.{0, u1} Real Ξ± (fun (x : Real) => f (Real.exp x)) (Filter.atBot.{0} Real Real.preorder) l) (Filter.Tendsto.{0, u1} Real Ξ± f (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) l)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Real -> Ξ±}, Iff (Filter.Tendsto.{0, u1} Real Ξ± (fun (x : Real) => f (Real.exp x)) (Filter.atBot.{0} Real Real.instPreorderReal) l) (Filter.Tendsto.{0, u1} Real Ξ± f (nhdsWithin.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) l)
+Case conversion may be inaccurate. Consider using '#align real.tendsto_comp_exp_at_bot Real.tendsto_comp_exp_atBotβ'. -/
theorem tendsto_comp_exp_atBot {f : β β Ξ±} :
Tendsto (fun x => f (exp x)) atBot l β Tendsto f (π[>] 0) l := by
rw [β map_exp_at_bot, tendsto_map'_iff]
#align real.tendsto_comp_exp_at_bot Real.tendsto_comp_exp_atBot
+/- warning: real.comap_exp_nhds_zero -> Real.comap_exp_nhds_zero is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Filter.atBot.{0} Real Real.preorder)
+but is expected to have type
+ Eq.{1} (Filter.{0} Real) (Filter.comap.{0, 0} Real Real Real.exp (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Filter.atBot.{0} Real Real.instPreorderReal)
+Case conversion may be inaccurate. Consider using '#align real.comap_exp_nhds_zero Real.comap_exp_nhds_zeroβ'. -/
@[simp]
theorem comap_exp_nhds_zero : comap exp (π 0) = atBot :=
(comap_nhdsWithin_range exp 0).symm.trans <| by simp
#align real.comap_exp_nhds_zero Real.comap_exp_nhds_zero
+/- warning: real.tendsto_exp_comp_nhds_zero -> Real.tendsto_exp_comp_nhds_zero is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Real.exp (f x)) l (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atBot.{0} Real Real.preorder))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Real.exp (f x)) l (nhds.{0} Real (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atBot.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zeroβ'. -/
@[simp]
theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto f l atBot := by
rw [β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
+/- warning: real.is_o_pow_exp_at_top -> Real.isLittleO_pow_exp_atTop is a dubious translation:
+lean 3 declaration is
+ forall {n : Nat}, Asymptotics.IsLittleO.{0, 0, 0} Real Real Real Real.hasNorm Real.hasNorm (Filter.atTop.{0} Real Real.preorder) (fun (x : Real) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) x n) Real.exp
+but is expected to have type
+ forall {n : Nat}, Asymptotics.IsLittleO.{0, 0, 0} Real Real Real Real.norm Real.norm (Filter.atTop.{0} Real Real.instPreorderReal) (fun (x : Real) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) x n) Real.exp
+Case conversion may be inaccurate. Consider using '#align real.is_o_pow_exp_at_top Real.isLittleO_pow_exp_atTopβ'. -/
theorem isLittleO_pow_exp_atTop {n : β} : (fun x => x ^ n) =o[atTop] Real.exp := by
simpa [is_o_iff_tendsto fun x hx => ((exp_pos x).ne' hx).elim] using
tendsto_div_pow_mul_exp_add_at_top 1 0 n zero_ne_one
#align real.is_o_pow_exp_at_top Real.isLittleO_pow_exp_atTop
+/- warning: real.is_O_exp_comp_exp_comp -> Real.isBigO_exp_comp_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.hasSub))) f g))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3651 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3653 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3651 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3653) l (HSub.hSub.{u1, u1, u1} (Ξ± -> Real) (Ξ± -> Real) (Ξ± -> Real) (instHSub.{u1} (Ξ± -> Real) (Pi.instSub.{u1, 0} Ξ± (fun (αΎ° : Ξ±) => Real) (fun (i : Ξ±) => Real.instSubReal))) f g))
+Case conversion may be inaccurate. Consider using '#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_compβ'. -/
@[simp]
theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =O[l] fun x => exp (g x)) β IsBoundedUnder (Β· β€ Β·) l (f - g) :=
@@ -360,6 +570,12 @@ theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
simp only [norm_eq_abs, abs_exp, β exp_sub, is_bounded_under_le_exp_comp, Pi.sub_def]
#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_comp
+/- warning: real.is_Theta_exp_comp_exp_comp -> Real.isTheta_exp_comp_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (f x) (g x))))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3750 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3752 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3750 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3752) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (f x) (g x))))
+Case conversion may be inaccurate. Consider using '#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_compβ'. -/
@[simp]
theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =Ξ[l] fun x => exp (g x)) β
@@ -369,6 +585,12 @@ theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
is_O_exp_comp_exp_comp, Pi.sub_def]
#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_comp
+/- warning: real.is_o_exp_comp_exp_comp -> Real.isLittleO_exp_comp_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (g x) (f x)) l (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real} {g : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => Real.exp (g x))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (g x) (f x)) l (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_compβ'. -/
@[simp]
theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =o[l] fun x => exp (g x)) β Tendsto (fun x => g x - f x) l atTop := by
@@ -376,12 +598,24 @@ theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
imp_true_iff, tendsto_exp_comp_nhds_zero, neg_sub]
#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_comp
+/- warning: real.is_o_one_exp_comp -> Real.isLittleO_one_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (fun (x : Ξ±) => Real.exp (f x))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (fun (x : Ξ±) => Real.exp (f x))) (Filter.Tendsto.{u1, 0} Ξ± Real f l (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align real.is_o_one_exp_comp Real.isLittleO_one_exp_compβ'. -/
@[simp]
theorem isLittleO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =o[l] fun x => exp (f x)) β Tendsto f l atTop := by
simp only [β exp_zero, is_o_exp_comp_exp_comp, sub_zero]
#align real.is_o_one_exp_comp Real.isLittleO_one_exp_comp
+/- warning: real.is_O_one_exp_comp -> Real.isBigO_one_exp_comp is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (GE.ge.{0} Real Real.hasLe) l f)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (fun (x : Ξ±) => Real.exp (f x))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3964 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3966 : Real) => GE.ge.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3964 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.3966) l f)
+Case conversion may be inaccurate. Consider using '#align real.is_O_one_exp_comp Real.isBigO_one_exp_compβ'. -/
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
@[simp]
@@ -390,6 +624,12 @@ theorem isBigO_one_exp_comp {f : Ξ± β β} :
simp only [β exp_zero, is_O_exp_comp_exp_comp, Pi.sub_def, zero_sub, is_bounded_under_le_neg]
#align real.is_O_one_exp_comp Real.isBigO_one_exp_comp
+/- warning: real.is_O_exp_comp_one -> Real.isBigO_exp_comp_one is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l f)
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4040 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4042 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4040 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4042) l f)
+Case conversion may be inaccurate. Consider using '#align real.is_O_exp_comp_one Real.isBigO_exp_comp_oneβ'. -/
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
theorem isBigO_exp_comp_one {f : Ξ± β β} :
@@ -397,6 +637,12 @@ theorem isBigO_exp_comp_one {f : Ξ± β β} :
simp only [is_O_one_iff, norm_eq_abs, abs_exp, is_bounded_under_le_exp_comp]
#align real.is_O_exp_comp_one Real.isBigO_exp_comp_one
+/- warning: real.is_Theta_exp_comp_one -> Real.isTheta_exp_comp_one is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.hasNorm Real.hasNorm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (LE.le.{0} Real Real.hasLe) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (f x)))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Real}, Iff (Asymptotics.IsTheta.{u1, 0, 0} Ξ± Real Real Real.norm Real.norm l (fun (x : Ξ±) => Real.exp (f x)) (fun (x : Ξ±) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Filter.IsBoundedUnder.{0, u1} Real Ξ± (fun (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4116 : Real) (x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4118 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4116 x._@.Mathlib.Analysis.SpecialFunctions.Exp._hyg.4118) l (fun (x : Ξ±) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (f x)))
+Case conversion may be inaccurate. Consider using '#align real.is_Theta_exp_comp_one Real.isTheta_exp_comp_oneβ'. -/
/-- `real.exp (f x)` is bounded away from zero and infinity along a filter `l` if and only if
`|f x|` is bounded from above along this filter. -/
@[simp]
@@ -409,6 +655,12 @@ end Real
namespace Complex
+/- warning: complex.comap_exp_comap_abs_at_top -> Complex.comap_exp_comap_abs_atTop is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real (coeFn.{1, 1} (AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) (fun (f : AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) => Complex -> Real) (AbsoluteValue.hasCoeToFun.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) Complex.abs) (Filter.atTop.{0} Real Real.preorder))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real (FunLike.coe.{1, 1, 1} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex (fun (f : Complex) => (fun (x._@.Mathlib.Algebra.Order.Hom.Basic._hyg.99 : Complex) => Real) f) (SubadditiveHomClass.toFunLike.{0, 0, 0} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex Real (Distrib.toAdd.{0} Complex (NonUnitalNonAssocSemiring.toDistrib.{0} Complex (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Complex (Semiring.toNonAssocSemiring.{0} Complex Complex.instSemiringComplex)))) (Distrib.toAdd.{0} Real (NonUnitalNonAssocSemiring.toDistrib.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring))))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (AbsoluteValue.subadditiveHomClass.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring)) Complex.abs) (Filter.atTop.{0} Real Real.instPreorderReal))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTopβ'. -/
theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
calc
comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
@@ -417,6 +669,12 @@ theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop
#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTop
+/- warning: complex.comap_exp_nhds_zero -> Complex.comap_exp_nhds_zero is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder))
+but is expected to have type
+ Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zeroβ'. -/
theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
calc
comap exp (π 0) = comap re (comap Real.exp (π 0)) := by
@@ -425,27 +683,57 @@ theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zero
+/- warning: complex.comap_exp_nhds_within_zero -> Complex.comap_exp_nhdsWithin_zero is a dubious translation:
+lean 3 declaration is
+ Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.booleanAlgebra.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.hasSingleton.{0} Complex) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder))
+but is expected to have type
+ Eq.{1} (Filter.{0} Complex) (Filter.comap.{0, 0} Complex Complex Complex.exp (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.instBooleanAlgebraSet.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.instSingletonSet.{0} Complex) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))))) (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align complex.comap_exp_nhds_within_zero Complex.comap_exp_nhdsWithin_zeroβ'. -/
theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot :=
by
have : exp β»ΒΉ' {0}αΆ = univ := eq_univ_of_forall exp_ne_zero
simp [nhdsWithin, comap_exp_nhds_zero, this]
#align complex.comap_exp_nhds_within_zero Complex.comap_exp_nhdsWithin_zero
+/- warning: complex.tendsto_exp_nhds_zero_iff -> Complex.tendsto_exp_nhds_zero_iff is a dubious translation:
+lean 3 declaration is
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex}, Iff (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Complex.re (f x)) l (Filter.atBot.{0} Real Real.preorder))
+but is expected to have type
+ forall {Ξ± : Type.{u1}} {l : Filter.{u1} Ξ±} {f : Ξ± -> Complex}, Iff (Filter.Tendsto.{u1, 0} Ξ± Complex (fun (x : Ξ±) => Complex.exp (f x)) l (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))) (Filter.Tendsto.{u1, 0} Ξ± Real (fun (x : Ξ±) => Complex.re (f x)) l (Filter.atBot.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iffβ'. -/
theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto (fun x => re (f x)) l atBot := by
rw [β tendsto_comap_iff, comap_exp_nhds_zero, tendsto_comap_iff]
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
+/- warning: complex.tendsto_exp_comap_re_at_top -> Complex.tendsto_exp_comap_re_atTop is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.preorder)) (Filter.comap.{0, 0} Complex Real (coeFn.{1, 1} (AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) (fun (f : AbsoluteValue.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) => Complex -> Real) (AbsoluteValue.hasCoeToFun.{0, 0} Complex Real (Ring.toSemiring.{0} Complex Complex.ring) Real.orderedSemiring) Complex.abs) (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atTop.{0} Real Real.instPreorderReal)) (Filter.comap.{0, 0} Complex Real (FunLike.coe.{1, 1, 1} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex (fun (f : Complex) => (fun (x._@.Mathlib.Algebra.Order.Hom.Basic._hyg.99 : Complex) => Real) f) (SubadditiveHomClass.toFunLike.{0, 0, 0} (AbsoluteValue.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring) Complex Real (Distrib.toAdd.{0} Complex (NonUnitalNonAssocSemiring.toDistrib.{0} Complex (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Complex (Semiring.toNonAssocSemiring.{0} Complex Complex.instSemiringComplex)))) (Distrib.toAdd.{0} Real (NonUnitalNonAssocSemiring.toDistrib.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring))))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (AbsoluteValue.subadditiveHomClass.{0, 0} Complex Real Complex.instSemiringComplex Real.orderedSemiring)) Complex.abs) (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTopβ'. -/
/-- `complex.abs (complex.exp z) β β` as `complex.re z β β`. TODO: use `bornology.cobounded`. -/
theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
comap_exp_comap_abs_atTop βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
+/- warning: complex.tendsto_exp_comap_re_at_bot -> Complex.tendsto_exp_comap_re_atBot is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder)) (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal)) (nhds.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))
+Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_comap_re_at_bot Complex.tendsto_exp_comap_re_atBotβ'. -/
/-- `complex.exp z β 0` as `complex.re z β -β`.-/
theorem tendsto_exp_comap_re_atBot : Tendsto exp (comap re atBot) (π 0) :=
comap_exp_nhds_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot Complex.tendsto_exp_comap_re_atBot
+/- warning: complex.tendsto_exp_comap_re_at_bot_nhds_within -> Complex.tendsto_exp_comap_re_atBot_nhdsWithin is a dubious translation:
+lean 3 declaration is
+ Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.preorder)) (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSemiNormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.normedField)))))) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.booleanAlgebra.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.hasSingleton.{0} Complex) (OfNat.ofNat.{0} Complex 0 (OfNat.mk.{0} Complex 0 (Zero.zero.{0} Complex Complex.hasZero))))))
+but is expected to have type
+ Filter.Tendsto.{0, 0} Complex Complex Complex.exp (Filter.comap.{0, 0} Complex Real Complex.re (Filter.atBot.{0} Real Real.instPreorderReal)) (nhdsWithin.{0} Complex (UniformSpace.toTopologicalSpace.{0} Complex (PseudoMetricSpace.toUniformSpace.{0} Complex (SeminormedRing.toPseudoMetricSpace.{0} Complex (SeminormedCommRing.toSeminormedRing.{0} Complex (NormedCommRing.toSeminormedCommRing.{0} Complex (NormedField.toNormedCommRing.{0} Complex Complex.instNormedFieldComplex)))))) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)) (HasCompl.compl.{0} (Set.{0} Complex) (BooleanAlgebra.toHasCompl.{0} (Set.{0} Complex) (Set.instBooleanAlgebraSet.{0} Complex)) (Singleton.singleton.{0, 0} Complex (Set.{0} Complex) (Set.instSingletonSet.{0} Complex) (OfNat.ofNat.{0} Complex 0 (Zero.toOfNat0.{0} Complex Complex.instZeroComplex)))))
+Case conversion may be inaccurate. Consider using '#align complex.tendsto_exp_comap_re_at_bot_nhds_within Complex.tendsto_exp_comap_re_atBot_nhdsWithinβ'. -/
theorem tendsto_exp_comap_re_atBot_nhdsWithin : Tendsto exp (comap re atBot) (π[β ] 0) :=
comap_exp_nhdsWithin_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot_nhds_within Complex.tendsto_exp_comap_re_atBot_nhdsWithin
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ad820c4997738e2f542f8a20f32911f52020e26
@@ -120,7 +120,7 @@ namespace Real
@[continuity]
theorem continuous_exp : Continuous exp :=
- Complex.continuous_re.comp Complex.continuous_of_real.cexp
+ Complex.continuous_re.comp Complex.continuous_ofReal.cexp
#align real.continuous_exp Real.continuous_exp
theorem continuousOn_exp {s : Set β} : ContinuousOn exp s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -4,14 +4,13 @@ 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
-! 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.Asymptotics.Theta
import Mathbin.Analysis.Complex.Basic
import Mathbin.Analysis.SpecificLimits.Normed
-import Mathbin.Data.Complex.Exponential
/-!
# Complex and real exponential
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -349,17 +349,17 @@ theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
rw [β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
-theorem isOCat_pow_exp_atTop {n : β} : (fun x => x ^ n) =o[atTop] Real.exp := by
+theorem isLittleO_pow_exp_atTop {n : β} : (fun x => x ^ n) =o[atTop] Real.exp := by
simpa [is_o_iff_tendsto fun x hx => ((exp_pos x).ne' hx).elim] using
tendsto_div_pow_mul_exp_add_at_top 1 0 n zero_ne_one
-#align real.is_o_pow_exp_at_top Real.isOCat_pow_exp_atTop
+#align real.is_o_pow_exp_at_top Real.isLittleO_pow_exp_atTop
@[simp]
-theorem isO_exp_comp_exp_comp {f g : Ξ± β β} :
+theorem isBigO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =O[l] fun x => exp (g x)) β IsBoundedUnder (Β· β€ Β·) l (f - g) :=
- Iff.trans (isO_iff_isBoundedUnder_le_div <| eventually_of_forall fun x => exp_ne_zero _) <| by
+ Iff.trans (isBigO_iff_isBoundedUnder_le_div <| eventually_of_forall fun x => exp_ne_zero _) <| by
simp only [norm_eq_abs, abs_exp, β exp_sub, is_bounded_under_le_exp_comp, Pi.sub_def]
-#align real.is_O_exp_comp_exp_comp Real.isO_exp_comp_exp_comp
+#align real.is_O_exp_comp_exp_comp Real.isBigO_exp_comp_exp_comp
@[simp]
theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
@@ -371,32 +371,32 @@ theorem isTheta_exp_comp_exp_comp {f g : Ξ± β β} :
#align real.is_Theta_exp_comp_exp_comp Real.isTheta_exp_comp_exp_comp
@[simp]
-theorem isOCat_exp_comp_exp_comp {f g : Ξ± β β} :
+theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
((fun x => exp (f x)) =o[l] fun x => exp (g x)) β Tendsto (fun x => g x - f x) l atTop := by
simp only [is_o_iff_tendsto, exp_ne_zero, β exp_sub, β tendsto_neg_at_top_iff, false_imp_iff,
imp_true_iff, tendsto_exp_comp_nhds_zero, neg_sub]
-#align real.is_o_exp_comp_exp_comp Real.isOCat_exp_comp_exp_comp
+#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_comp
@[simp]
-theorem isOCat_one_exp_comp {f : Ξ± β β} :
+theorem isLittleO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =o[l] fun x => exp (f x)) β Tendsto f l atTop := by
simp only [β exp_zero, is_o_exp_comp_exp_comp, sub_zero]
-#align real.is_o_one_exp_comp Real.isOCat_one_exp_comp
+#align real.is_o_one_exp_comp Real.isLittleO_one_exp_comp
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
@[simp]
-theorem isO_one_exp_comp {f : Ξ± β β} :
+theorem isBigO_one_exp_comp {f : Ξ± β β} :
((fun x => 1 : Ξ± β β) =O[l] fun x => exp (f x)) β IsBoundedUnder (Β· β₯ Β·) l f := by
simp only [β exp_zero, is_O_exp_comp_exp_comp, Pi.sub_def, zero_sub, is_bounded_under_le_neg]
-#align real.is_O_one_exp_comp Real.isO_one_exp_comp
+#align real.is_O_one_exp_comp Real.isBigO_one_exp_comp
/-- `real.exp (f x)` is bounded away from zero along a filter if and only if this filter is bounded
from below under `f`. -/
-theorem isO_exp_comp_one {f : Ξ± β β} :
+theorem isBigO_exp_comp_one {f : Ξ± β β} :
(fun x => exp (f x)) =O[l] (fun x => 1 : Ξ± β β) β IsBoundedUnder (Β· β€ Β·) l f := by
simp only [is_O_one_iff, norm_eq_abs, abs_exp, is_bounded_under_le_exp_comp]
-#align real.is_O_exp_comp_one Real.isO_exp_comp_one
+#align real.is_O_exp_comp_one Real.isBigO_exp_comp_one
/-- `real.exp (f x)` is bounded away from zero and infinity along a filter `l` if and only if
`|f x|` is bounded from above along this filter. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -267,12 +267,12 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
have H : β d e, 0 < d β tendsto (fun x : β => x ^ n / (d * exp x + e)) at_top (π 0) :=
by
intro b' c' h
- convert (tendsto_mul_exp_add_div_pow_at_top b' c' n h).inv_tendsto_atTop
+ convert(tendsto_mul_exp_add_div_pow_at_top b' c' n h).inv_tendsto_atTop
ext x
simpa only [Pi.inv_apply] using (inv_div _ _).symm
cases lt_or_gt_of_ne hb
Β· exact H b c h
- Β· convert (H (-b) (-c) (neg_pos.mpr h)).neg
+ Β· convert(H (-b) (-c) (neg_pos.mpr h)).neg
Β· ext x
field_simp
rw [β neg_add (b * exp x) c, neg_div_neg_eq]
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -410,10 +410,9 @@ end Real
namespace Complex
-theorem comap_exp_comap_abs_atTop :
- comap exp (comap Complex.AbsTheory.Complex.abs atTop) = comap re atTop :=
+theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
calc
- comap exp (comap Complex.AbsTheory.Complex.abs atTop) = comap re (comap Real.exp atTop) := by
+ comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
simp only [comap_comap, (Β· β Β·), abs_exp]
_ = comap re atTop := by rw [Real.comap_exp_atTop]
@@ -439,8 +438,7 @@ theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β}
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
/-- `complex.abs (complex.exp z) β β` as `complex.re z β β`. TODO: use `bornology.cobounded`. -/
-theorem tendsto_exp_comap_re_atTop :
- Tendsto exp (comap re atTop) (comap Complex.AbsTheory.Complex.abs atTop) :=
+theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
comap_exp_comap_abs_atTop βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
mathlib commit https://github.com/leanprover-community/mathlib/commit/ddec54a71a0dd025c05445d467f1a2b7d586a3ba
@@ -410,9 +410,10 @@ end Real
namespace Complex
-theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
+theorem comap_exp_comap_abs_atTop :
+ comap exp (comap Complex.AbsTheory.Complex.abs atTop) = comap re atTop :=
calc
- comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
+ comap exp (comap Complex.AbsTheory.Complex.abs atTop) = comap re (comap Real.exp atTop) := by
simp only [comap_comap, (Β· β Β·), abs_exp]
_ = comap re atTop := by rw [Real.comap_exp_atTop]
@@ -438,7 +439,8 @@ theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β}
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
/-- `complex.abs (complex.exp z) β β` as `complex.re z β β`. TODO: use `bornology.cobounded`. -/
-theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
+theorem tendsto_exp_comap_re_atTop :
+ Tendsto exp (comap re atTop) (comap Complex.AbsTheory.Complex.abs atTop) :=
comap_exp_comap_abs_atTop βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -43,7 +43,7 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
congr
rw [exp_add]
ring
- _ = βexp xβ * βexp z - 1 - zβ := norm_mul _ _
+ _ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
@@ -65,9 +65,9 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
exact (norm_sub_norm_le _ _).trans this
calc
βexp y - exp xβ = βexp (x + (y - x)) - exp xβ := by nth_rw 1 [hy_eq]
- _ β€ βy - xβ * βexp xβ + βexp xβ * βy - xβ ^ 2 := h_sq (y - x) (hyx.le.trans hr_le)
+ _ β€ βy - xβ * βexp xβ + βexp xβ * βy - xβ ^ 2 := (h_sq (y - x) (hyx.le.trans hr_le))
_ β€ βy - xβ * βexp xβ + βexp xβ * (r * βy - xβ) :=
- add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _
+ (add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _)
_ = (1 + r) * βexp xβ * βy - xβ := by ring
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
@@ -232,8 +232,8 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
x ^ n β€ βxββ ^ n := pow_le_pow_of_le_left hxβ.le (Nat.le_ceil _) _
_ β€ exp βxββ / (exp 1 * C) := (hN _ (Nat.lt_ceil.2 hx).le).le
_ β€ exp (x + 1) / (exp 1 * C) :=
- div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
- (exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le)
+ (div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
+ (exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
_ = exp x / C := by rw [add_comm, exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -188,14 +188,14 @@ at `+β` -/
theorem tendsto_exp_neg_atTop_nhds_zero : Tendsto (fun x => exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp tendsto_exp_atTop).congr fun x => (exp_neg x).symm
#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_zero
-@[deprecated] alias tendsto_exp_neg_atTop_nhds_0 := tendsto_exp_neg_atTop_nhds_zero
+@[deprecated] alias tendsto_exp_neg_atTop_nhds_0 := tendsto_exp_neg_atTop_nhds_zero -- 2024-01-31
/-- The real exponential function tends to `1` at `0`. -/
theorem tendsto_exp_nhds_zero_nhds_one : Tendsto exp (π 0) (π 1) := by
convert continuous_exp.tendsto 0
simp
#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_zero_nhds_one
-@[deprecated] alias tendsto_exp_nhds_0_nhds_1 := tendsto_exp_nhds_zero_nhds_one
+@[deprecated] alias tendsto_exp_nhds_0_nhds_1 := tendsto_exp_nhds_zero_nhds_one -- 2024-01-31
theorem tendsto_exp_atBot : Tendsto exp atBot (π 0) :=
(tendsto_exp_neg_atTop_nhds_zero.comp tendsto_neg_atBot_atTop).congr fun x =>
@@ -245,7 +245,8 @@ theorem tendsto_pow_mul_exp_neg_atTop_nhds_zero (n : β) :
(tendsto_inv_atTop_zero.comp (tendsto_exp_div_pow_atTop n)).congr fun x => by
rw [comp_apply, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, exp_neg]
#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_zero
-@[deprecated] alias tendsto_pow_mul_exp_neg_atTop_nhds_0 := tendsto_pow_mul_exp_neg_atTop_nhds_zero
+@[deprecated] -- 2024-01-31
+alias tendsto_pow_mul_exp_neg_atTop_nhds_0 := tendsto_pow_mul_exp_neg_atTop_nhds_zero
/-- The function `(b * exp x + c) / (x ^ n)` tends to `+β` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is positive. -/
@@ -38,7 +38,7 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
congr
rw [exp_add]
ring
- _ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
+ _ = βexp xβ * βexp z - 1 - zβ := norm_mul _ _
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
#align complex.exp_bound_sq Complex.exp_bound_sq
@@ -56,7 +56,7 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
exact (norm_sub_norm_le _ _).trans this
calc
βexp y - exp xβ = βexp (x + (y - x)) - exp xβ := by nth_rw 1 [hy_eq]
- _ β€ βy - xβ * βexp xβ + βexp xβ * βy - xβ ^ 2 := (h_sq (y - x) (hyx.le.trans hr_le))
+ _ β€ βy - xβ * βexp xβ + βexp xβ * βy - xβ ^ 2 := h_sq (y - x) (hyx.le.trans hr_le)
_ β€ βy - xβ * βexp xβ + βexp xβ * (r * βy - xβ) :=
(add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _)
_ = (1 + r) * βexp xβ * βy - xβ := by ring
This adds the notation βr
for Real.sqrt r
. The precedence is such that βxβ»ΒΉ
is parsed as β(xβ»ΒΉ)
; not because this is particularly desirable, but because it's the default and the choice doesn't really matter.
This is extracted from #7907, which adds a more general nth root typeclass.
The idea is to perform all the boring substitutions downstream quickly, so that we can play around with custom elaborators with a much slower rate of code-rot.
This PR also won't rot as quickly, as it does not forbid writing x.sqrt
as that PR does.
While perhaps claiming β
for Real.sqrt
is greedy; it:
NNReal.sqrt
and Nat.sqrt
sqrt
on Float
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -171,7 +171,7 @@ namespace Real
variable {Ξ± : Type*} {x y z : β} {l : Filter Ξ±}
-theorem exp_half (x : β) : exp (x / 2) = sqrt (exp x) := by
+theorem exp_half (x : β) : exp (x / 2) = β(exp x) := by
rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β exp_add, add_halves] <;> exact (exp_pos _).le
#align real.exp_half Real.exp_half
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -475,7 +475,7 @@ theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (cobounded β
comap_exp_cobounded βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
-/-- `Complex.exp z β 0` as `Complex.re z β -β`.-/
+/-- `Complex.exp z β 0` as `Complex.re z β -β`. -/
theorem tendsto_exp_comap_re_atBot : Tendsto exp (comap re atBot) (π 0) :=
comap_exp_nhds_zero βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_bot Complex.tendsto_exp_comap_re_atBot
Summability of n β¦ 1 / |n + a| ^ s
and n β¦ n ^ k exp (-r * n)
@@ -433,6 +433,12 @@ lemma summable_exp_nat_mul_iff {a : β} :
lemma summable_exp_neg_nat : Summable fun n : β β¦ exp (-n) := by
simpa only [mul_neg_one] using summable_exp_nat_mul_iff.mpr neg_one_lt_zero
+lemma summable_pow_mul_exp_neg_nat_mul (k : β) {r : β} (hr : 0 < r) :
+ Summable fun n : β β¦ n ^ k * exp (-r * n) := by
+ simp_rw [mul_comm (-r), exp_nat_mul]
+ apply summable_pow_mul_geometric_of_norm_lt_one
+ rwa [norm_of_nonneg (exp_nonneg _), exp_lt_one_iff, neg_lt_zero]
+
end Real
namespace Complex
@@ -392,7 +392,7 @@ theorem isLittleO_exp_comp_exp_comp {f g : Ξ± β β} :
imp_true_iff, tendsto_exp_comp_nhds_zero, neg_sub]
#align real.is_o_exp_comp_exp_comp Real.isLittleO_exp_comp_exp_comp
--- Porting note: @[simp] can prove: by simp only [@Asymptotics.isLittleO_one_left_iff,
+-- Porting note (#10618): @[simp] can prove: by simp only [@Asymptotics.isLittleO_one_left_iff,
-- Real.norm_eq_abs, Real.abs_exp, @Real.tendsto_exp_comp_atTop]
theorem isLittleO_one_exp_comp {f : Ξ± β β} :
((fun _ => 1 : Ξ± β β) =o[l] fun x => exp (f x)) β Tendsto f l atTop := by
@@ -353,12 +353,12 @@ theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
theorem openEmbedding_exp : OpenEmbedding exp :=
isOpen_Ioi.openEmbedding_subtype_val.comp expOrderIso.toHomeomorph.openEmbedding
--- Porting note: new lemma;
+-- Porting note (#10756): new lemma;
-- Porting note (#11215): TODO: backport & make `@[simp]`
theorem map_exp_nhds (x : β) : map exp (π x) = π (exp x) :=
openEmbedding_exp.map_nhds_eq x
--- Porting note: new lemma;
+-- Porting note (#10756): new lemma;
-- Porting note (#11215): TODO: backport & make `@[simp]`
theorem comap_exp_nhds_exp (x : β) : comap exp (π (exp x)) = π x :=
(openEmbedding_exp.nhds_eq_comap x).symm
Ξ»
by fun
(#11301)
Per the style guidelines, Ξ»
is disallowed in mathlib.
This is close to exhaustive; I left some tactic code alone when it seemed to me that tactic could be upstreamed soon.
Notes
=>
to β¦
.Mathlib/Order/SupClosed
.Ξ» x,
, which I also replaced.@@ -68,7 +68,7 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
theorem continuous_exp : Continuous exp :=
continuous_iff_continuousAt.mpr fun x =>
continuousAt_of_locally_lipschitz zero_lt_one (2 * βexp xβ)
- (Ξ» y => by
+ (fun y β¦ by
convert locally_lipschitz_exp zero_le_one le_rfl x y using 2
congr
ring)
@@ -349,7 +349,7 @@ theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
simp_rw [β comp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
theorem openEmbedding_exp : OpenEmbedding exp :=
isOpen_Ioi.openEmbedding_subtype_val.comp expOrderIso.toHomeomorph.openEmbedding
@@ -353,11 +353,13 @@ theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
theorem openEmbedding_exp : OpenEmbedding exp :=
isOpen_Ioi.openEmbedding_subtype_val.comp expOrderIso.toHomeomorph.openEmbedding
--- Porting note: new lemma; TODO: backport & make `@[simp]`
+-- Porting note: new lemma;
+-- Porting note (#11215): TODO: backport & make `@[simp]`
theorem map_exp_nhds (x : β) : map exp (π x) = π (exp x) :=
openEmbedding_exp.map_nhds_eq x
--- Porting note: new lemma; TODO: backport & make `@[simp]`
+-- Porting note: new lemma;
+-- Porting note (#11215): TODO: backport & make `@[simp]`
theorem comap_exp_nhds_exp (x : β) : comap exp (π (exp x)) = π x :=
(openEmbedding_exp.nhds_eq_comap x).symm
/
lemmas (#10634)
The new names and argument orders match the corresponding *
lemmas, which I already took care of in a previous PR.
From LeanAPAP
@@ -235,9 +235,7 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
calc
x ^ n β€ βxββ ^ n := mod_cast pow_le_pow_left hxβ.le (Nat.le_ceil _) _
_ β€ exp βxββ / (exp 1 * C) := mod_cast (hN _ (Nat.lt_ceil.2 hx).le).le
- _ β€ exp (x + 1) / (exp 1 * C) :=
- (div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
- (exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
+ _ β€ exp (x + 1) / (exp 1 * C) := by gcongr; exact (Nat.ceil_lt_add_one hxβ.le).le
_ = exp x / C := by rw [add_comm, exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
@@ -99,15 +99,18 @@ theorem ContinuousWithinAt.cexp (h : ContinuousWithinAt f s x) :
h.cexp
#align continuous_within_at.cexp ContinuousWithinAt.cexp
+@[fun_prop]
nonrec
theorem ContinuousAt.cexp (h : ContinuousAt f x) : ContinuousAt (fun y => exp (f y)) x :=
h.cexp
#align continuous_at.cexp ContinuousAt.cexp
+@[fun_prop]
theorem ContinuousOn.cexp (h : ContinuousOn f s) : ContinuousOn (fun y => exp (f y)) s :=
fun x hx => (h x hx).cexp
#align continuous_on.cexp ContinuousOn.cexp
+@[fun_prop]
theorem Continuous.cexp (h : Continuous f) : Continuous fun y => exp (f y) :=
continuous_iff_continuousAt.2 fun _ => h.continuousAt.cexp
#align continuous.cexp Continuous.cexp
@@ -146,15 +149,18 @@ theorem ContinuousWithinAt.exp (h : ContinuousWithinAt f s x) :
h.exp
#align continuous_within_at.exp ContinuousWithinAt.exp
+@[fun_prop]
nonrec
theorem ContinuousAt.exp (h : ContinuousAt f x) : ContinuousAt (fun y => exp (f y)) x :=
h.exp
#align continuous_at.exp ContinuousAt.exp
+@[fun_prop]
theorem ContinuousOn.exp (h : ContinuousOn f s) : ContinuousOn (fun y => exp (f y)) s := fun x hx =>
(h x hx).exp
#align continuous_on.exp ContinuousOn.exp
+@[fun_prop]
theorem Continuous.exp (h : Continuous f) : Continuous fun y => exp (f y) :=
continuous_iff_continuousAt.2 fun _ => h.continuousAt.exp
#align continuous.exp Continuous.exp
@@ -179,18 +179,20 @@ theorem tendsto_exp_atTop : Tendsto exp atTop atTop := by
/-- The real exponential function tends to `0` at `-β` or, equivalently, `exp(-x)` tends to `0`
at `+β` -/
-theorem tendsto_exp_neg_atTop_nhds_0 : Tendsto (fun x => exp (-x)) atTop (π 0) :=
+theorem tendsto_exp_neg_atTop_nhds_zero : Tendsto (fun x => exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp tendsto_exp_atTop).congr fun x => (exp_neg x).symm
-#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_0
+#align real.tendsto_exp_neg_at_top_nhds_0 Real.tendsto_exp_neg_atTop_nhds_zero
+@[deprecated] alias tendsto_exp_neg_atTop_nhds_0 := tendsto_exp_neg_atTop_nhds_zero
/-- The real exponential function tends to `1` at `0`. -/
-theorem tendsto_exp_nhds_0_nhds_1 : Tendsto exp (π 0) (π 1) := by
+theorem tendsto_exp_nhds_zero_nhds_one : Tendsto exp (π 0) (π 1) := by
convert continuous_exp.tendsto 0
simp
-#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_0_nhds_1
+#align real.tendsto_exp_nhds_0_nhds_1 Real.tendsto_exp_nhds_zero_nhds_one
+@[deprecated] alias tendsto_exp_nhds_0_nhds_1 := tendsto_exp_nhds_zero_nhds_one
theorem tendsto_exp_atBot : Tendsto exp atBot (π 0) :=
- (tendsto_exp_neg_atTop_nhds_0.comp tendsto_neg_atBot_atTop).congr fun x =>
+ (tendsto_exp_neg_atTop_nhds_zero.comp tendsto_neg_atBot_atTop).congr fun x =>
congr_arg exp <| neg_neg x
#align real.tendsto_exp_at_bot Real.tendsto_exp_atBot
@@ -234,11 +236,12 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
-theorem tendsto_pow_mul_exp_neg_atTop_nhds_0 (n : β) :
+theorem tendsto_pow_mul_exp_neg_atTop_nhds_zero (n : β) :
Tendsto (fun x => x ^ n * exp (-x)) atTop (π 0) :=
(tendsto_inv_atTop_zero.comp (tendsto_exp_div_pow_atTop n)).congr fun x => by
rw [comp_apply, inv_eq_one_div, div_div_eq_mul_div, one_mul, div_eq_mul_inv, exp_neg]
-#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_0
+#align real.tendsto_pow_mul_exp_neg_at_top_nhds_0 Real.tendsto_pow_mul_exp_neg_atTop_nhds_zero
+@[deprecated] alias tendsto_pow_mul_exp_neg_atTop_nhds_0 := tendsto_pow_mul_exp_neg_atTop_nhds_zero
/-- The function `(b * exp x + c) / (x ^ n)` tends to `+β` at `+β`, for any natural number
`n` and any real numbers `b` and `c` such that `b` is positive. -/
@@ -418,7 +421,7 @@ set_option linter.uppercaseLean3 false in
lemma summable_exp_nat_mul_iff {a : β} :
Summable (fun n : β β¦ exp (n * a)) β a < 0 := by
- simp only [exp_nat_mul, summable_geometric_iff_norm_lt_1, norm_of_nonneg (exp_nonneg _),
+ simp only [exp_nat_mul, summable_geometric_iff_norm_lt_one, norm_of_nonneg (exp_nonneg _),
exp_lt_one_iff]
lemma summable_exp_neg_nat : Summable fun n : β β¦ exp (-n) := by
Add a more general version of the Jacobi theta function with a second variable, and prove the transformation law for this more general function rather than just for the one-variable version. Preparatory to functional equations for Dirichlet L-functions.
@@ -416,6 +416,14 @@ theorem isTheta_exp_comp_one {f : Ξ± β β} :
set_option linter.uppercaseLean3 false in
#align real.is_Theta_exp_comp_one Real.isTheta_exp_comp_one
+lemma summable_exp_nat_mul_iff {a : β} :
+ Summable (fun n : β β¦ exp (n * a)) β a < 0 := by
+ simp only [exp_nat_mul, summable_geometric_iff_norm_lt_1, norm_of_nonneg (exp_nonneg _),
+ exp_lt_one_iff]
+
+lemma summable_exp_neg_nat : Summable fun n : β β¦ exp (-n) := by
+ simpa only [mul_neg_one] using summable_exp_nat_mul_iff.mpr neg_one_lt_zero
+
end Real
namespace Complex
The names for lemmas about monotonicity of (a ^ Β·)
and (Β· ^ n)
were a mess. This PR tidies up everything related by following the naming convention for (a * Β·)
and (Β· * b)
. Namely, (a ^ Β·)
is pow_right
and (Β· ^ n)
is pow_left
in lemma names. All lemma renames follow the corresponding multiplication lemma names closely.
Algebra.GroupPower.Order
pow_mono
β pow_right_mono
pow_le_pow
β pow_le_pow_right
pow_le_pow_of_le_left
β pow_le_pow_left
pow_lt_pow_of_lt_left
β pow_lt_pow_left
strictMonoOn_pow
β pow_left_strictMonoOn
pow_strictMono_right
β pow_right_strictMono
pow_lt_pow
β pow_lt_pow_right
pow_lt_pow_iff
β pow_lt_pow_iff_right
pow_le_pow_iff
β pow_le_pow_iff_right
self_lt_pow
β lt_self_pow
strictAnti_pow
β pow_right_strictAnti
pow_lt_pow_iff_of_lt_one
β pow_lt_pow_iff_right_of_lt_one
pow_lt_pow_of_lt_one
β pow_lt_pow_right_of_lt_one
lt_of_pow_lt_pow
β lt_of_pow_lt_pow_left
le_of_pow_le_pow
β le_of_pow_le_pow_left
pow_lt_powβ
β pow_lt_pow_rightβ
Algebra.GroupPower.CovariantClass
pow_le_pow_of_le_left'
β pow_le_pow_left'
nsmul_le_nsmul_of_le_right
β nsmul_le_nsmul_right
pow_lt_pow'
β pow_lt_pow_right'
nsmul_lt_nsmul
β nsmul_lt_nsmul_left
pow_strictMono_left
β pow_right_strictMono'
nsmul_strictMono_right
β nsmul_left_strictMono
StrictMono.pow_right'
β StrictMono.pow_const
StrictMono.nsmul_left
β StrictMono.const_nsmul
pow_strictMono_right'
β pow_left_strictMono
nsmul_strictMono_left
β nsmul_right_strictMono
Monotone.pow_right
β Monotone.pow_const
Monotone.nsmul_left
β Monotone.const_nsmul
lt_of_pow_lt_pow'
β lt_of_pow_lt_pow_left'
lt_of_nsmul_lt_nsmul
β lt_of_nsmul_lt_nsmul_right
pow_le_pow'
β pow_le_pow_right'
nsmul_le_nsmul
β nsmul_le_nsmul_left
pow_le_pow_of_le_one'
β pow_le_pow_right_of_le_one'
nsmul_le_nsmul_of_nonpos
β nsmul_le_nsmul_left_of_nonpos
le_of_pow_le_pow'
β le_of_pow_le_pow_left'
le_of_nsmul_le_nsmul'
β le_of_nsmul_le_nsmul_right'
pow_le_pow_iff'
β pow_le_pow_iff_right'
nsmul_le_nsmul_iff
β nsmul_le_nsmul_iff_left
pow_lt_pow_iff'
β pow_lt_pow_iff_right'
nsmul_lt_nsmul_iff
β nsmul_lt_nsmul_iff_left
Data.Nat.Pow
Nat.pow_lt_pow_of_lt_left
β Nat.pow_lt_pow_left
Nat.pow_le_iff_le_left
β Nat.pow_le_pow_iff_left
Nat.pow_lt_iff_lt_left
β Nat.pow_lt_pow_iff_left
pow_le_pow_iff_left
pow_lt_pow_iff_left
pow_right_injective
pow_right_inj
Nat.pow_le_pow_left
to have the correct name since Nat.pow_le_pow_of_le_left
is in Std.Nat.pow_le_pow_right
to have the correct name since Nat.pow_le_pow_of_le_right
is in Std.self_le_pow
was a duplicate of le_self_pow
.Nat.pow_lt_pow_of_lt_right
is defeq to pow_lt_pow_right
.Nat.pow_right_strictMono
is defeq to pow_right_strictMono
.Nat.pow_le_iff_le_right
is defeq to pow_le_pow_iff_right
.Nat.pow_lt_iff_lt_right
is defeq to pow_lt_pow_iff_right
.0 < n
or 1 β€ n
to n β 0
.Nat
lemmas have been protected
.@@ -225,7 +225,7 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
have hxβ : 0 < x := (Nat.cast_nonneg N).trans_lt hx
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
- x ^ n β€ βxββ ^ n := mod_cast pow_le_pow_of_le_left hxβ.le (Nat.le_ceil _) _
+ x ^ n β€ βxββ ^ n := mod_cast pow_le_pow_left hxβ.le (Nat.le_ceil _) _
_ β€ exp βxββ / (exp 1 * C) := mod_cast (hN _ (Nat.lt_ceil.2 hx).le).le
_ β€ exp (x + 1) / (exp 1 * C) :=
(div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
@@ -307,12 +307,12 @@ theorem comap_exp_atTop : comap exp atTop = atTop := by
@[simp]
theorem tendsto_exp_comp_atTop {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l atTop β Tendsto f l atTop := by
- simp_rw [βcomp_apply (f := exp), β tendsto_comap_iff, comap_exp_atTop]
+ simp_rw [β comp_apply (f := exp), β tendsto_comap_iff, comap_exp_atTop]
#align real.tendsto_exp_comp_at_top Real.tendsto_exp_comp_atTop
theorem tendsto_comp_exp_atTop {f : β β Ξ±} :
Tendsto (fun x => f (exp x)) atTop l β Tendsto f atTop l := by
- simp_rw [βcomp_apply (g := exp), β tendsto_map'_iff, map_exp_atTop]
+ simp_rw [β comp_apply (g := exp), β tendsto_map'_iff, map_exp_atTop]
#align real.tendsto_comp_exp_at_top Real.tendsto_comp_exp_atTop
@[simp]
@@ -339,7 +339,7 @@ theorem comap_exp_nhds_zero : comap exp (π 0) = atBot :=
@[simp]
theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto f l atBot := by
- simp_rw [βcomp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero]
+ simp_rw [β comp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
-- Porting note: new lemma
@@ -443,7 +443,7 @@ theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot :=
theorem tendsto_exp_nhds_zero_iff {Ξ± : Type*} {l : Filter Ξ±} {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto (fun x => re (f x)) l atBot := by
- simp_rw [βcomp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero, tendsto_comap_iff]
+ simp_rw [β comp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero, tendsto_comap_iff]
rfl
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
@@ -23,9 +23,9 @@ exp
noncomputable section
-open Finset Filter Metric Asymptotics Set Function
+open Finset Filter Metric Asymptotics Set Function Bornology
-open Classical Topology
+open scoped Classical Topology
namespace Complex
@@ -420,20 +420,20 @@ end Real
namespace Complex
-theorem comap_exp_comap_abs_atTop : comap exp (comap abs atTop) = comap re atTop :=
+@[simp]
+theorem comap_exp_cobounded : comap exp (cobounded β) = comap re atTop :=
calc
- comap exp (comap abs atTop) = comap re (comap Real.exp atTop) := by
- simp only [comap_comap, (Β· β Β·), abs_exp]
+ comap exp (cobounded β) = comap re (comap Real.exp atTop) := by
+ simp only [β comap_norm_atTop, Complex.norm_eq_abs, comap_comap, (Β· β Β·), abs_exp]
_ = comap re atTop := by rw [Real.comap_exp_atTop]
+#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_cobounded
-#align complex.comap_exp_comap_abs_at_top Complex.comap_exp_comap_abs_atTop
-
+@[simp]
theorem comap_exp_nhds_zero : comap exp (π 0) = comap re atBot :=
calc
comap exp (π 0) = comap re (comap Real.exp (π 0)) := by
simp only [comap_comap, β comap_abs_nhds_zero, (Β· β Β·), abs_exp]
_ = comap re atBot := by rw [Real.comap_exp_nhds_zero]
-
#align complex.comap_exp_nhds_zero Complex.comap_exp_nhds_zero
theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot := by
@@ -447,9 +447,9 @@ theorem tendsto_exp_nhds_zero_iff {Ξ± : Type*} {l : Filter Ξ±} {f : Ξ± β β}
rfl
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
-/-- `Complex.abs (Complex.exp z) β β` as `Complex.re z β β`. TODO: use `Bornology.cobounded`. -/
-theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
- comap_exp_comap_abs_atTop βΈ tendsto_comap
+/-- `Complex.abs (Complex.exp z) β β` as `Complex.re z β β`. -/
+theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (cobounded β) :=
+ comap_exp_cobounded βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
/-- `Complex.exp z β 0` as `Complex.re z β -β`.-/
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>
@@ -225,8 +225,8 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
have hxβ : 0 < x := (Nat.cast_nonneg N).trans_lt hx
rw [Set.mem_Ici, le_div_iff (pow_pos hxβ _), β le_div_iff' hCβ]
calc
- x ^ n β€ βxββ ^ n := by exact_mod_cast pow_le_pow_of_le_left hxβ.le (Nat.le_ceil _) _
- _ β€ exp βxββ / (exp 1 * C) := by exact_mod_cast (hN _ (Nat.lt_ceil.2 hx).le).le
+ x ^ n β€ βxββ ^ n := mod_cast pow_le_pow_of_le_left hxβ.le (Nat.le_ceil _) _
+ _ β€ exp βxββ / (exp 1 * C) := mod_cast (hN _ (Nat.lt_ceil.2 hx).le).le
_ β€ exp (x + 1) / (exp 1 * C) :=
(div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
(exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -259,12 +259,12 @@ theorem tendsto_div_pow_mul_exp_add_atTop (b c : β) (n : β) (hb : 0 β b) :
Tendsto (fun x => x ^ n / (b * exp x + c)) atTop (π 0) := by
have H : β d e, 0 < d β Tendsto (fun x : β => x ^ n / (d * exp x + e)) atTop (π 0) := by
intro b' c' h
- convert(tendsto_mul_exp_add_div_pow_atTop b' c' n h).inv_tendsto_atTop using 1
+ convert (tendsto_mul_exp_add_div_pow_atTop b' c' n h).inv_tendsto_atTop using 1
ext x
simp
cases' lt_or_gt_of_ne hb with h h
Β· exact H b c h
- Β· convert(H (-b) (-c) (neg_pos.mpr h)).neg using 1
+ Β· convert (H (-b) (-c) (neg_pos.mpr h)).neg using 1
Β· ext x
field_simp
rw [β neg_add (b * exp x) c, neg_div_neg_eq]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -82,7 +82,7 @@ end Complex
section ComplexContinuousExpComp
-variable {Ξ± : Type _}
+variable {Ξ± : Type*}
open Complex
@@ -129,7 +129,7 @@ end Real
section RealContinuousExpComp
-variable {Ξ± : Type _}
+variable {Ξ± : Type*}
open Real
@@ -163,7 +163,7 @@ end RealContinuousExpComp
namespace Real
-variable {Ξ± : Type _} {x y z : β} {l : Filter Ξ±}
+variable {Ξ± : Type*} {x y z : β} {l : Filter Ξ±}
theorem exp_half (x : β) : exp (x / 2) = sqrt (exp x) := by
rw [eq_comm, sqrt_eq_iff_sq_eq, sq, β exp_add, add_halves] <;> exact (exp_pos _).le
@@ -441,7 +441,7 @@ theorem comap_exp_nhdsWithin_zero : comap exp (π[β ] 0) = comap re atBot :=
simp [nhdsWithin, comap_exp_nhds_zero, this]
#align complex.comap_exp_nhds_within_zero Complex.comap_exp_nhdsWithin_zero
-theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β} :
+theorem tendsto_exp_nhds_zero_iff {Ξ± : Type*} {l : Filter Ξ±} {f : Ξ± β β} :
Tendsto (fun x => exp (f x)) l (π 0) β Tendsto (fun x => re (f x)) l atBot := by
simp_rw [βcomp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero, tendsto_comap_iff]
rfl
@@ -207,7 +207,7 @@ theorem isBoundedUnder_ge_exp_comp (l : Filter Ξ±) (f : Ξ± β β) :
@[simp]
theorem isBoundedUnder_le_exp_comp {f : Ξ± β β} :
(IsBoundedUnder (Β· β€ Β·) l fun x => exp (f x)) β IsBoundedUnder (Β· β€ Β·) l f :=
- exp_monotone.isBoundedUnder_le_comp tendsto_exp_atTop
+ exp_monotone.isBoundedUnder_le_comp_iff tendsto_exp_atTop
#align real.is_bounded_under_le_exp_comp Real.isBoundedUnder_le_exp_comp
/-- The function `exp(x)/x^n` tends to `+β` at `+β`, for any natural number `n` -/
@@ -2,16 +2,13 @@
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
-! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Asymptotics.Theta
import Mathlib.Analysis.Complex.Basic
import Mathlib.Analysis.SpecificLimits.Normed
+#align_import analysis.special_functions.exp from "leanprover-community/mathlib"@"ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112"
+
/-!
# Complex and real exponential
fix-comments.py
on all files.@@ -450,7 +450,7 @@ theorem tendsto_exp_nhds_zero_iff {Ξ± : Type _} {l : Filter Ξ±} {f : Ξ± β β}
rfl
#align complex.tendsto_exp_nhds_zero_iff Complex.tendsto_exp_nhds_zero_iff
-/-- `Complex.abs (complex.exp z) β β` as `Complex.re z β β`. TODO: use `Bornology.cobounded`. -/
+/-- `Complex.abs (Complex.exp z) β β` as `Complex.re z β β`. TODO: use `Bornology.cobounded`. -/
theorem tendsto_exp_comap_re_atTop : Tendsto exp (comap re atTop) (comap abs atTop) :=
comap_exp_comap_abs_atTop βΈ tendsto_comap
#align complex.tendsto_exp_comap_re_at_top Complex.tendsto_exp_comap_re_atTop
Both the new file and the other fixes are done in the same PR, since according to the description of leanprover-community/mathlib#19053 "this should be very easy to forward-port".
@@ -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
-! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
+! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -44,7 +44,6 @@ theorem exp_bound_sq (x z : β) (hz : βzβ β€ 1) :
_ = βexp xβ * βexp z - 1 - zβ := (norm_mul _ _)
_ β€ βexp xβ * βzβ ^ 2 :=
mul_le_mul_of_nonneg_left (abs_exp_sub_one_sub_id_le hz) (norm_nonneg _)
-
#align complex.exp_bound_sq Complex.exp_bound_sq
theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1) (x y : β)
@@ -64,7 +63,6 @@ theorem locally_lipschitz_exp {r : β} (hr_nonneg : 0 β€ r) (hr_le : r β€ 1)
_ β€ βy - xβ * βexp xβ + βexp xβ * (r * βy - xβ) :=
(add_le_add_left (mul_le_mul le_rfl hyx_sq_le (sq_nonneg _) (norm_nonneg _)) _)
_ = (1 + r) * βexp xβ * βy - xβ := by ring
-
#align complex.locally_lipschitz_exp Complex.locally_lipschitz_exp
-- Porting note: proof by term mode `locally_lipschitz_exp zero_le_one le_rfl x`
@@ -236,7 +234,6 @@ theorem tendsto_exp_div_pow_atTop (n : β) : Tendsto (fun x => exp x / x ^ n) a
(div_le_div_of_le (mul_pos (exp_pos _) hCβ).le
(exp_le_exp.2 <| (Nat.ceil_lt_add_one hxβ.le).le))
_ = exp x / C := by rw [add_comm, exp_add, mul_div_mul_left _ _ (exp_pos _).ne']
-
#align real.tendsto_exp_div_pow_at_top Real.tendsto_exp_div_pow_atTop
/-- The function `x^n * exp(-x)` tends to `0` at `+β`, for any natural number `n`. -/
@@ -348,6 +348,18 @@ theorem tendsto_exp_comp_nhds_zero {f : Ξ± β β} :
simp_rw [βcomp_apply (f := exp), β tendsto_comap_iff, comap_exp_nhds_zero]
#align real.tendsto_exp_comp_nhds_zero Real.tendsto_exp_comp_nhds_zero
+-- Porting note: new lemma
+theorem openEmbedding_exp : OpenEmbedding exp :=
+ isOpen_Ioi.openEmbedding_subtype_val.comp expOrderIso.toHomeomorph.openEmbedding
+
+-- Porting note: new lemma; TODO: backport & make `@[simp]`
+theorem map_exp_nhds (x : β) : map exp (π x) = π (exp x) :=
+ openEmbedding_exp.map_nhds_eq x
+
+-- Porting note: new lemma; TODO: backport & make `@[simp]`
+theorem comap_exp_nhds_exp (x : β) : comap exp (π (exp x)) = π x :=
+ (openEmbedding_exp.nhds_eq_comap x).symm
+
theorem isLittleO_pow_exp_atTop {n : β} : (fun x : β => x ^ n) =o[atTop] Real.exp := by
simpa [isLittleO_iff_tendsto fun x hx => ((exp_pos x).ne' hx).elim] using
tendsto_div_pow_mul_exp_add_atTop 1 0 n zero_ne_one
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file