analysis.calculus.bump_function_innerMathlib.Analysis.SpecialFunctions.SmoothTransition

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -4,8 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 -/
 import Analysis.Calculus.Deriv.Inv
-import Analysis.Calculus.ExtendDeriv
-import Analysis.Calculus.IteratedDeriv
+import Analysis.Calculus.FDeriv.Extend
+import Analysis.Calculus.IteratedDeriv.Defs
 import Analysis.InnerProductSpace.Calculus
 import Analysis.SpecialFunctions.ExpDeriv
 import MeasureTheory.Integral.SetIntegral
Diff
@@ -142,7 +142,7 @@ theorem fAux_deriv_zero (n : ℕ) : HasDerivAt (fAux n) 0 0 :=
     by
     apply (hasDerivAt_const (0 : ℝ) (0 : ℝ)).HasDerivWithinAt.congr
     · intro y hy
-      simp at hy 
+      simp at hy
       simp [f_aux, hy]
     · simp [f_aux, le_refl]
   have B : HasDerivWithinAt (f_aux n) (0 : ℝ) (Ici 0) 0 :=
@@ -444,13 +444,13 @@ instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [No
       support := fun R hR => by
         apply subset.antisymm
         · intro x hx
-          simp only [mem_support] at hx 
+          simp only [mem_support] at hx
           contrapose! hx
-          simp only [mem_ball_zero_iff, not_lt] at hx 
+          simp only [mem_ball_zero_iff, not_lt] at hx
           apply Real.smoothTransition.zero_of_nonpos
           apply div_nonpos_of_nonpos_of_nonneg <;> linarith
         · intro x hx
-          simp only [mem_ball_zero_iff] at hx 
+          simp only [mem_ball_zero_iff] at hx
           apply (Real.smoothTransition.pos_of_pos _).ne'
           apply div_pos <;> linarith }
   ⟨⟨e⟩⟩
@@ -544,7 +544,7 @@ theorem pos_of_mem_ball (hx : x ∈ ball c f.rOut) : 0 < f x :=
   refine' lt_iff_le_and_ne.2 ⟨f.nonneg, Ne.symm _⟩
   change f.r⁻¹ • (x - c) ∈ support ((someContDiffBumpBase E).toFun (f.R / f.r))
   rw [ContDiffBumpBase.support _ _ f.one_lt_R_div_r]
-  simp only [dist_eq_norm, mem_ball] at hx 
+  simp only [dist_eq_norm, mem_ball] at hx
   simpa only [norm_smul, mem_ball_zero_iff, norm_eq_abs, abs_inv, abs_of_nonneg f.r_pos.le, ←
     div_eq_inv_mul] using (div_lt_div_right f.r_pos).2 hx
 #align cont_diff_bump.pos_of_mem_ball ContDiffBump.pos_of_mem_ball
@@ -553,7 +553,7 @@ theorem pos_of_mem_ball (hx : x ∈ ball c f.rOut) : 0 < f x :=
 #print ContDiffBump.zero_of_le_dist /-
 theorem zero_of_le_dist (hx : f.rOut ≤ dist x c) : f x = 0 :=
   by
-  rw [dist_eq_norm] at hx 
+  rw [dist_eq_norm] at hx
   suffices H : f.r⁻¹ • (x - c) ∉ support ((someContDiffBumpBase E).toFun (f.R / f.r))
   · simpa only [mem_support, Classical.not_not] using H
   rw [ContDiffBumpBase.support _ _ f.one_lt_R_div_r]
@@ -766,7 +766,7 @@ theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l :
     Tendsto (fun i => support fun x => (φ i).normed μ x) l (𝓝 c).smallSets :=
   by
   simp_rw [NormedAddCommGroup.tendsto_nhds_zero, Real.norm_eq_abs,
-    abs_eq_self.mpr (φ _).rOut_pos.le] at hφ 
+    abs_eq_self.mpr (φ _).rOut_pos.le] at hφ
   rw [tendsto_small_sets_iff]
   intro t ht
   rcases metric.mem_nhds_iff.mp ht with ⟨ε, hε, ht⟩
Diff
@@ -124,7 +124,7 @@ theorem f_aux_limit (n : ℕ) :
   by
   have A : tendsto (fun x => (P_aux n).eval x) (𝓝[>] 0) (𝓝 ((P_aux n).eval 0)) :=
     (P_aux n).ContinuousWithinAt
-  have B : tendsto (fun x => exp (-x⁻¹) / x ^ (2 * n)) (𝓝[>] 0) (𝓝 0) :=
+  have B : tendsto (fun x => NormedSpace.exp (-x⁻¹) / x ^ (2 * n)) (𝓝[>] 0) (𝓝 0) :=
     by
     convert (tendsto_pow_mul_exp_neg_at_top_nhds_0 (2 * n)).comp tendsto_inv_zero_atTop
     ext x
@@ -180,8 +180,8 @@ theorem fAux_hasDerivAt (n : ℕ) (x : ℝ) : HasDerivAt (fAux n) (fAux (n + 1)
   · have : f_aux (n + 1) 0 = 0 := by simp [f_aux, le_refl]
     rw [hx, this]
     exact f_aux_deriv_zero n
-  · have : f_aux (n + 1) x = (P_aux (n + 1)).eval x * exp (-x⁻¹) / x ^ (2 * (n + 1)) := by
-      simp [f_aux, not_le_of_gt hx]
+  · have : f_aux (n + 1) x = (P_aux (n + 1)).eval x * NormedSpace.exp (-x⁻¹) / x ^ (2 * (n + 1)) :=
+      by simp [f_aux, not_le_of_gt hx]
     rw [this]
     exact f_aux_deriv_pos n x hx
 #align exp_neg_inv_glue.f_aux_has_deriv_at expNegInvGlue.fAux_hasDerivAt
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 -/
-import Mathbin.Analysis.Calculus.Deriv.Inv
-import Mathbin.Analysis.Calculus.ExtendDeriv
-import Mathbin.Analysis.Calculus.IteratedDeriv
-import Mathbin.Analysis.InnerProductSpace.Calculus
-import Mathbin.Analysis.SpecialFunctions.ExpDeriv
-import Mathbin.MeasureTheory.Integral.SetIntegral
+import Analysis.Calculus.Deriv.Inv
+import Analysis.Calculus.ExtendDeriv
+import Analysis.Calculus.IteratedDeriv
+import Analysis.InnerProductSpace.Calculus
+import Analysis.SpecialFunctions.ExpDeriv
+import MeasureTheory.Integral.SetIntegral
 
 #align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"7e5137f579de09a059a5ce98f364a04e221aabf0"
 
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
-
-! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 7e5137f579de09a059a5ce98f364a04e221aabf0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.Calculus.Deriv.Inv
 import Mathbin.Analysis.Calculus.ExtendDeriv
@@ -15,6 +10,8 @@ import Mathbin.Analysis.InnerProductSpace.Calculus
 import Mathbin.Analysis.SpecialFunctions.ExpDeriv
 import Mathbin.MeasureTheory.Integral.SetIntegral
 
+#align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"7e5137f579de09a059a5ce98f364a04e221aabf0"
+
 /-!
 # Infinitely smooth bump function
 
Diff
@@ -211,15 +211,20 @@ protected theorem contDiff {n} : ContDiff ℝ n expNegInvGlue :=
 #align exp_neg_inv_glue.cont_diff expNegInvGlue.contDiff
 -/
 
+#print expNegInvGlue.zero_of_nonpos /-
 /-- The function `exp_neg_inv_glue` vanishes on `(-∞, 0]`. -/
 theorem zero_of_nonpos {x : ℝ} (hx : x ≤ 0) : expNegInvGlue x = 0 := by simp [expNegInvGlue, hx]
 #align exp_neg_inv_glue.zero_of_nonpos expNegInvGlue.zero_of_nonpos
+-/
 
+#print expNegInvGlue.pos_of_pos /-
 /-- The function `exp_neg_inv_glue` is positive on `(0, +∞)`. -/
 theorem pos_of_pos {x : ℝ} (hx : 0 < x) : 0 < expNegInvGlue x := by
   simp [expNegInvGlue, not_le.2 hx, exp_pos]
 #align exp_neg_inv_glue.pos_of_pos expNegInvGlue.pos_of_pos
+-/
 
+#print expNegInvGlue.nonneg /-
 /-- The function exp_neg_inv_glue` is nonnegative. -/
 theorem nonneg (x : ℝ) : 0 ≤ expNegInvGlue x :=
   by
@@ -227,6 +232,7 @@ theorem nonneg (x : ℝ) : 0 ≤ expNegInvGlue x :=
   · exact ge_of_eq (zero_of_nonpos h)
   · exact le_of_lt (pos_of_pos h)
 #align exp_neg_inv_glue.nonneg expNegInvGlue.nonneg
+-/
 
 end expNegInvGlue
 
@@ -246,18 +252,24 @@ variable {x : ℝ}
 
 open expNegInvGlue
 
+#print Real.smoothTransition.pos_denom /-
 theorem pos_denom (x) : 0 < expNegInvGlue x + expNegInvGlue (1 - x) :=
   (zero_lt_one.lt_or_lt x).elim (fun hx => add_pos_of_pos_of_nonneg (pos_of_pos hx) (nonneg _))
     fun hx => add_pos_of_nonneg_of_pos (nonneg _) (pos_of_pos <| sub_pos.2 hx)
 #align real.smooth_transition.pos_denom Real.smoothTransition.pos_denom
+-/
 
+#print Real.smoothTransition.one_of_one_le /-
 theorem one_of_one_le (h : 1 ≤ x) : smoothTransition x = 1 :=
   (div_eq_one_iff_eq <| (pos_denom x).ne').2 <| by rw [zero_of_nonpos (sub_nonpos.2 h), add_zero]
 #align real.smooth_transition.one_of_one_le Real.smoothTransition.one_of_one_le
+-/
 
+#print Real.smoothTransition.zero_of_nonpos /-
 theorem zero_of_nonpos (h : x ≤ 0) : smoothTransition x = 0 := by
   rw [smooth_transition, zero_of_nonpos h, zero_div]
 #align real.smooth_transition.zero_of_nonpos Real.smoothTransition.zero_of_nonpos
+-/
 
 #print Real.smoothTransition.zero /-
 @[simp]
@@ -287,21 +299,29 @@ protected theorem projIcc :
 #align real.smooth_transition.proj_Icc Real.smoothTransition.projIcc
 -/
 
+#print Real.smoothTransition.le_one /-
 theorem le_one (x : ℝ) : smoothTransition x ≤ 1 :=
   (div_le_one (pos_denom x)).2 <| le_add_of_nonneg_right (nonneg _)
 #align real.smooth_transition.le_one Real.smoothTransition.le_one
+-/
 
+#print Real.smoothTransition.nonneg /-
 theorem nonneg (x : ℝ) : 0 ≤ smoothTransition x :=
   div_nonneg (expNegInvGlue.nonneg _) (pos_denom x).le
 #align real.smooth_transition.nonneg Real.smoothTransition.nonneg
+-/
 
+#print Real.smoothTransition.lt_one_of_lt_one /-
 theorem lt_one_of_lt_one (h : x < 1) : smoothTransition x < 1 :=
   (div_lt_one <| pos_denom x).2 <| lt_add_of_pos_right _ <| pos_of_pos <| sub_pos.2 h
 #align real.smooth_transition.lt_one_of_lt_one Real.smoothTransition.lt_one_of_lt_one
+-/
 
+#print Real.smoothTransition.pos_of_pos /-
 theorem pos_of_pos (h : 0 < x) : 0 < smoothTransition x :=
   div_pos (expNegInvGlue.pos_of_pos h) (pos_denom x)
 #align real.smooth_transition.pos_of_pos Real.smoothTransition.pos_of_pos
+-/
 
 #print Real.smoothTransition.contDiff /-
 protected theorem contDiff {n} : ContDiff ℝ n smoothTransition :=
@@ -442,15 +462,19 @@ instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [No
 
 namespace ContDiffBump
 
+#print ContDiffBump.rOut_pos /-
 theorem rOut_pos {c : E} (f : ContDiffBump c) : 0 < f.rOut :=
   f.rIn_pos.trans f.rIn_lt_rOut
 #align cont_diff_bump.R_pos ContDiffBump.rOut_pos
+-/
 
+#print ContDiffBump.one_lt_rOut_div_rIn /-
 theorem one_lt_rOut_div_rIn {c : E} (f : ContDiffBump c) : 1 < f.rOut / f.R :=
   by
   rw [one_lt_div f.r_pos]
   exact f.r_lt_R
 #align cont_diff_bump.one_lt_R_div_r ContDiffBump.one_lt_rOut_div_rIn
+-/
 
 instance (c : E) : Inhabited (ContDiffBump c) :=
   ⟨⟨1, 2, zero_lt_one, one_lt_two⟩⟩
@@ -469,40 +493,55 @@ def toFun {c : E} (f : ContDiffBump c) : E → ℝ := fun x =>
 instance : CoeFun (ContDiffBump c) fun _ => E → ℝ :=
   ⟨toFun⟩
 
+#print ContDiffBump.apply /-
 protected theorem apply (x : E) :
     f x = (someContDiffBumpBase E).toFun (f.rOut / f.R) (f.R⁻¹ • (x - c)) :=
   rfl
 #align cont_diff_bump.def ContDiffBump.apply
+-/
 
+#print ContDiffBump.sub /-
 protected theorem sub (x : E) : f (c - x) = f (c + x) := by simp [f.def, ContDiffBumpBase.symmetric]
 #align cont_diff_bump.sub ContDiffBump.sub
+-/
 
+#print ContDiffBump.neg /-
 protected theorem neg (f : ContDiffBump (0 : E)) (x : E) : f (-x) = f x := by
   simp_rw [← zero_sub, f.sub, zero_add]
 #align cont_diff_bump.neg ContDiffBump.neg
+-/
 
 open Metric
 
+#print ContDiffBump.one_of_mem_closedBall /-
 theorem one_of_mem_closedBall (hx : x ∈ closedBall c f.R) : f x = 1 :=
   by
   apply ContDiffBumpBase.eq_one _ _ f.one_lt_R_div_r
   simpa only [norm_smul, norm_eq_abs, abs_inv, abs_of_nonneg f.r_pos.le, ← div_eq_inv_mul,
     div_le_one f.r_pos] using mem_closedBall_iff_norm.1 hx
 #align cont_diff_bump.one_of_mem_closed_ball ContDiffBump.one_of_mem_closedBall
+-/
 
+#print ContDiffBump.nonneg /-
 theorem nonneg : 0 ≤ f x :=
   (ContDiffBumpBase.mem_Icc (someContDiffBumpBase E) _ _).1
 #align cont_diff_bump.nonneg ContDiffBump.nonneg
+-/
 
+#print ContDiffBump.nonneg' /-
 /-- A version of `cont_diff_bump.nonneg` with `x` explicit -/
 theorem nonneg' (x : E) : 0 ≤ f x :=
   f.NonNeg
 #align cont_diff_bump.nonneg' ContDiffBump.nonneg'
+-/
 
+#print ContDiffBump.le_one /-
 theorem le_one : f x ≤ 1 :=
   (ContDiffBumpBase.mem_Icc (someContDiffBumpBase E) _ _).2
 #align cont_diff_bump.le_one ContDiffBump.le_one
+-/
 
+#print ContDiffBump.pos_of_mem_ball /-
 theorem pos_of_mem_ball (hx : x ∈ ball c f.rOut) : 0 < f x :=
   by
   refine' lt_iff_le_and_ne.2 ⟨f.nonneg, Ne.symm _⟩
@@ -512,7 +551,9 @@ theorem pos_of_mem_ball (hx : x ∈ ball c f.rOut) : 0 < f x :=
   simpa only [norm_smul, mem_ball_zero_iff, norm_eq_abs, abs_inv, abs_of_nonneg f.r_pos.le, ←
     div_eq_inv_mul] using (div_lt_div_right f.r_pos).2 hx
 #align cont_diff_bump.pos_of_mem_ball ContDiffBump.pos_of_mem_ball
+-/
 
+#print ContDiffBump.zero_of_le_dist /-
 theorem zero_of_le_dist (hx : f.rOut ≤ dist x c) : f x = 0 :=
   by
   rw [dist_eq_norm] at hx 
@@ -522,7 +563,9 @@ theorem zero_of_le_dist (hx : f.rOut ≤ dist x c) : f x = 0 :=
   simp [norm_smul, norm_eq_abs, abs_inv, abs_of_nonneg f.r_pos.le, ← div_eq_inv_mul]
   exact div_le_div_of_le f.r_pos.le hx
 #align cont_diff_bump.zero_of_le_dist ContDiffBump.zero_of_le_dist
+-/
 
+#print ContDiffBump.support_eq /-
 theorem support_eq : support (f : E → ℝ) = Metric.ball c f.rOut :=
   by
   ext x
@@ -531,26 +574,36 @@ theorem support_eq : support (f : E → ℝ) = Metric.ball c f.rOut :=
   · simp only [hx, (f.pos_of_mem_ball hx).ne', Ne.def, not_false_iff]
   · simp only [hx.not_lt, f.zero_of_le_dist hx, Ne.def, eq_self_iff_true, not_true]
 #align cont_diff_bump.support_eq ContDiffBump.support_eq
+-/
 
+#print ContDiffBump.tsupport_eq /-
 theorem tsupport_eq : tsupport f = closedBall c f.rOut := by
   simp_rw [tsupport, f.support_eq, closure_ball _ f.R_pos.ne']
 #align cont_diff_bump.tsupport_eq ContDiffBump.tsupport_eq
+-/
 
+#print ContDiffBump.hasCompactSupport /-
 protected theorem hasCompactSupport [FiniteDimensional ℝ E] : HasCompactSupport f := by
   simp_rw [HasCompactSupport, f.tsupport_eq, is_compact_closed_ball]
 #align cont_diff_bump.has_compact_support ContDiffBump.hasCompactSupport
+-/
 
+#print ContDiffBump.eventuallyEq_one_of_mem_ball /-
 theorem eventuallyEq_one_of_mem_ball (h : x ∈ ball c f.R) : f =ᶠ[𝓝 x] 1 :=
   ((isOpen_lt (continuous_id.dist continuous_const) continuous_const).eventually_mem h).mono
     fun z hz => f.one_of_mem_closedBall (le_of_lt hz)
 #align cont_diff_bump.eventually_eq_one_of_mem_ball ContDiffBump.eventuallyEq_one_of_mem_ball
+-/
 
+#print ContDiffBump.eventuallyEq_one /-
 theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
   f.eventuallyEq_one_of_mem_ball (mem_ball_self f.rIn_pos)
 #align cont_diff_bump.eventually_eq_one ContDiffBump.eventuallyEq_one
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ContDiffAt.contDiffBump /-
 /-- `cont_diff_bump` is `𝒞ⁿ` in all its arguments. -/
 protected theorem ContDiffAt.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBump (c x)} {x : X}
     (hc : ContDiffAt ℝ n c x) (hr : ContDiffAt ℝ n (fun x => (f x).R) x)
@@ -578,12 +631,15 @@ protected theorem ContDiffAt.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBu
       ((((someContDiffBumpBase E).smooth.ContDiffWithinAt A).ContDiffAt B).of_le le_top).comp x _
     exact (hR.div hr (f x).rIn_pos.ne').Prod ((hr.inv (f x).rIn_pos.ne').smul (hg.sub hc))
 #align cont_diff_at.cont_diff_bump ContDiffAt.contDiffBump
+-/
 
+#print ContDiff.contDiffBump /-
 theorem ContDiff.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBump (c x)} (hc : ContDiff ℝ n c)
     (hr : ContDiff ℝ n fun x => (f x).R) (hR : ContDiff ℝ n fun x => (f x).rOut)
     (hg : ContDiff ℝ n g) : ContDiff ℝ n fun x => f x (g x) := by rw [contDiff_iff_contDiffAt] at *;
   exact fun x => (hc x).ContDiffBump (hr x) (hR x) (hg x)
 #align cont_diff.cont_diff_bump ContDiff.contDiffBump
+-/
 
 #print ContDiffBump.contDiff /-
 protected theorem contDiff : ContDiff ℝ n f :=
@@ -619,13 +675,17 @@ protected def normed (μ : Measure E) : E → ℝ := fun x => f x / ∫ x, f x 
 #align cont_diff_bump.normed ContDiffBump.normed
 -/
 
+#print ContDiffBump.normed_def /-
 theorem normed_def {μ : Measure E} (x : E) : f.normed μ x = f x / ∫ x, f x ∂μ :=
   rfl
 #align cont_diff_bump.normed_def ContDiffBump.normed_def
+-/
 
+#print ContDiffBump.nonneg_normed /-
 theorem nonneg_normed (x : E) : 0 ≤ f.normed μ x :=
   div_nonneg f.NonNeg <| integral_nonneg f.nonneg'
 #align cont_diff_bump.nonneg_normed ContDiffBump.nonneg_normed
+-/
 
 #print ContDiffBump.contDiff_normed /-
 theorem contDiff_normed {n : ℕ∞} : ContDiff ℝ n (f.normed μ) :=
@@ -639,13 +699,17 @@ theorem continuous_normed : Continuous (f.normed μ) :=
 #align cont_diff_bump.continuous_normed ContDiffBump.continuous_normed
 -/
 
+#print ContDiffBump.normed_sub /-
 theorem normed_sub (x : E) : f.normed μ (c - x) = f.normed μ (c + x) := by
   simp_rw [f.normed_def, f.sub]
 #align cont_diff_bump.normed_sub ContDiffBump.normed_sub
+-/
 
+#print ContDiffBump.normed_neg /-
 theorem normed_neg (f : ContDiffBump (0 : E)) (x : E) : f.normed μ (-x) = f.normed μ x := by
   simp_rw [f.normed_def, f.neg]
 #align cont_diff_bump.normed_neg ContDiffBump.normed_neg
+-/
 
 variable [BorelSpace E] [FiniteDimensional ℝ E] [IsLocallyFiniteMeasure μ]
 
@@ -663,32 +727,43 @@ protected theorem integrable_normed : Integrable (f.normed μ) μ :=
 
 variable [μ.IsOpenPosMeasure]
 
+#print ContDiffBump.integral_pos /-
 theorem integral_pos : 0 < ∫ x, f x ∂μ :=
   by
   refine' (integral_pos_iff_support_of_nonneg f.nonneg' f.integrable).mpr _
   rw [f.support_eq]
   refine' is_open_ball.measure_pos _ (nonempty_ball.mpr f.R_pos)
 #align cont_diff_bump.integral_pos ContDiffBump.integral_pos
+-/
 
+#print ContDiffBump.integral_normed /-
 theorem integral_normed : ∫ x, f.normed μ x ∂μ = 1 :=
   by
   simp_rw [ContDiffBump.normed, div_eq_mul_inv, mul_comm (f _), ← smul_eq_mul, integral_smul]
   exact inv_mul_cancel f.integral_pos.ne'
 #align cont_diff_bump.integral_normed ContDiffBump.integral_normed
+-/
 
+#print ContDiffBump.support_normed_eq /-
 theorem support_normed_eq : support (f.normed μ) = Metric.ball c f.rOut := by
   simp_rw [ContDiffBump.normed, support_div, f.support_eq, support_const f.integral_pos.ne',
     inter_univ]
 #align cont_diff_bump.support_normed_eq ContDiffBump.support_normed_eq
+-/
 
+#print ContDiffBump.tsupport_normed_eq /-
 theorem tsupport_normed_eq : tsupport (f.normed μ) = Metric.closedBall c f.rOut := by
   simp_rw [tsupport, f.support_normed_eq, closure_ball _ f.R_pos.ne']
 #align cont_diff_bump.tsupport_normed_eq ContDiffBump.tsupport_normed_eq
+-/
 
+#print ContDiffBump.hasCompactSupport_normed /-
 theorem hasCompactSupport_normed : HasCompactSupport (f.normed μ) := by
   simp_rw [HasCompactSupport, f.tsupport_normed_eq, is_compact_closed_ball]
 #align cont_diff_bump.has_compact_support_normed ContDiffBump.hasCompactSupport_normed
+-/
 
+#print ContDiffBump.tendsto_support_normed_smallSets /-
 theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l : Filter ι}
     (hφ : Tendsto (fun i => (φ i).rOut) l (𝓝 0)) :
     Tendsto (fun i => support fun x => (φ i).normed μ x) l (𝓝 c).smallSets :=
@@ -702,6 +777,7 @@ theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l :
   simp_rw [(φ i).support_normed_eq]
   exact ball_subset_ball hi.le
 #align cont_diff_bump.tendsto_support_normed_small_sets ContDiffBump.tendsto_support_normed_smallSets
+-/
 
 variable (μ)
 
Diff
@@ -670,7 +670,7 @@ theorem integral_pos : 0 < ∫ x, f x ∂μ :=
   refine' is_open_ball.measure_pos _ (nonempty_ball.mpr f.R_pos)
 #align cont_diff_bump.integral_pos ContDiffBump.integral_pos
 
-theorem integral_normed : (∫ x, f.normed μ x ∂μ) = 1 :=
+theorem integral_normed : ∫ x, f.normed μ x ∂μ = 1 :=
   by
   simp_rw [ContDiffBump.normed, div_eq_mul_inv, mul_comm (f _), ← smul_eq_mul, integral_smul]
   exact inv_mul_cancel f.integral_pos.ne'
@@ -706,7 +706,7 @@ theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l :
 variable (μ)
 
 #print ContDiffBump.integral_normed_smul /-
-theorem integral_normed_smul [CompleteSpace X] (z : X) : (∫ x, f.normed μ x • z ∂μ) = z := by
+theorem integral_normed_smul [CompleteSpace X] (z : X) : ∫ x, f.normed μ x • z ∂μ = z := by
   simp_rw [integral_smul_const, f.integral_normed, one_smul]
 #align cont_diff_bump.integral_normed_smul ContDiffBump.integral_normed_smul
 -/
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 
 ! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
+! leanprover-community/mathlib commit 7e5137f579de09a059a5ce98f364a04e221aabf0
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -18,6 +18,9 @@ import Mathbin.MeasureTheory.Integral.SetIntegral
 /-!
 # Infinitely smooth bump function
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file we construct several infinitely smooth functions with properties that an analytic
 function cannot have:
 
Diff
@@ -51,6 +51,7 @@ open Polynomial Real Filter Set Function
 
 open scoped Polynomial
 
+#print expNegInvGlue /-
 /-- `exp_neg_inv_glue` is the real function given by `x ↦ exp (-1/x)` for `x > 0` and `0`
 for `x ≤ 0`. It is a basic building block to construct smooth partitions of unity. Its main property
 is that it vanishes for `x ≤ 0`, it is positive for `x > 0`, and the junction between the two
@@ -59,6 +60,7 @@ behaviors is flat enough to retain smoothness. The fact that this function is `C
 def expNegInvGlue (x : ℝ) : ℝ :=
   if x ≤ 0 then 0 else exp (-x⁻¹)
 #align exp_neg_inv_glue expNegInvGlue
+-/
 
 namespace expNegInvGlue
 
@@ -195,6 +197,7 @@ theorem fAux_iteratedDeriv (n : ℕ) : iteratedDeriv n (fAux 0) = fAux n :=
     exact (f_aux_has_deriv_at n x).deriv
 #align exp_neg_inv_glue.f_aux_iterated_deriv expNegInvGlue.fAux_iteratedDeriv
 
+#print expNegInvGlue.contDiff /-
 /-- The function `exp_neg_inv_glue` is smooth. -/
 protected theorem contDiff {n} : ContDiff ℝ n expNegInvGlue :=
   by
@@ -203,6 +206,7 @@ protected theorem contDiff {n} : ContDiff ℝ n expNegInvGlue :=
   rw [f_aux_iterated_deriv m]
   exact fun x => (f_aux_has_deriv_at m x).DifferentiableAt
 #align exp_neg_inv_glue.cont_diff expNegInvGlue.contDiff
+-/
 
 /-- The function `exp_neg_inv_glue` vanishes on `(-∞, 0]`. -/
 theorem zero_of_nonpos {x : ℝ} (hx : x ≤ 0) : expNegInvGlue x = 0 := by simp [expNegInvGlue, hx]
@@ -223,11 +227,13 @@ theorem nonneg (x : ℝ) : 0 ≤ expNegInvGlue x :=
 
 end expNegInvGlue
 
+#print Real.smoothTransition /-
 /-- An infinitely smooth function `f : ℝ → ℝ` such that `f x = 0` for `x ≤ 0`,
 `f x = 1` for `1 ≤ x`, and `0 < f x < 1` for `0 < x < 1`. -/
 def Real.smoothTransition (x : ℝ) : ℝ :=
   expNegInvGlue x / (expNegInvGlue x + expNegInvGlue (1 - x))
 #align real.smooth_transition Real.smoothTransition
+-/
 
 namespace Real
 
@@ -250,16 +256,21 @@ theorem zero_of_nonpos (h : x ≤ 0) : smoothTransition x = 0 := by
   rw [smooth_transition, zero_of_nonpos h, zero_div]
 #align real.smooth_transition.zero_of_nonpos Real.smoothTransition.zero_of_nonpos
 
+#print Real.smoothTransition.zero /-
 @[simp]
 protected theorem zero : smoothTransition 0 = 0 :=
   zero_of_nonpos le_rfl
 #align real.smooth_transition.zero Real.smoothTransition.zero
+-/
 
+#print Real.smoothTransition.one /-
 @[simp]
 protected theorem one : smoothTransition 1 = 1 :=
   one_of_one_le le_rfl
 #align real.smooth_transition.one Real.smoothTransition.one
+-/
 
+#print Real.smoothTransition.projIcc /-
 /-- Since `real.smooth_transition` is constant on $(-∞, 0]$ and $[1, ∞)$, applying it to the
 projection of `x : ℝ` to $[0, 1]$ gives the same result as applying it to `x`. -/
 @[simp]
@@ -271,6 +282,7 @@ protected theorem projIcc :
   · rw [smooth_transition.zero, zero_of_nonpos hx.le]
   · rw [smooth_transition.one, one_of_one_le hx.le]
 #align real.smooth_transition.proj_Icc Real.smoothTransition.projIcc
+-/
 
 theorem le_one (x : ℝ) : smoothTransition x ≤ 1 :=
   (div_le_one (pos_denom x)).2 <| le_add_of_nonneg_right (nonneg _)
@@ -288,23 +300,31 @@ theorem pos_of_pos (h : 0 < x) : 0 < smoothTransition x :=
   div_pos (expNegInvGlue.pos_of_pos h) (pos_denom x)
 #align real.smooth_transition.pos_of_pos Real.smoothTransition.pos_of_pos
 
+#print Real.smoothTransition.contDiff /-
 protected theorem contDiff {n} : ContDiff ℝ n smoothTransition :=
   expNegInvGlue.contDiff.div
     (expNegInvGlue.contDiff.add <| expNegInvGlue.contDiff.comp <| contDiff_const.sub contDiff_id)
     fun x => (pos_denom x).ne'
 #align real.smooth_transition.cont_diff Real.smoothTransition.contDiff
+-/
 
+#print Real.smoothTransition.contDiffAt /-
 protected theorem contDiffAt {x n} : ContDiffAt ℝ n smoothTransition x :=
   smoothTransition.contDiff.ContDiffAt
 #align real.smooth_transition.cont_diff_at Real.smoothTransition.contDiffAt
+-/
 
+#print Real.smoothTransition.continuous /-
 protected theorem continuous : Continuous smoothTransition :=
   (@smoothTransition.contDiff 0).Continuous
 #align real.smooth_transition.continuous Real.smoothTransition.continuous
+-/
 
+#print Real.smoothTransition.continuousAt /-
 protected theorem continuousAt : ContinuousAt smoothTransition x :=
   smoothTransition.continuous.ContinuousAt
 #align real.smooth_transition.continuous_at Real.smoothTransition.continuousAt
+-/
 
 end SmoothTransition
 
@@ -312,6 +332,7 @@ end Real
 
 variable {E X : Type _}
 
+#print ContDiffBump /-
 /-- `f : cont_diff_bump c`, where `c` is a point in a normed vector space, is a
 bundled smooth function such that
 
@@ -323,11 +344,13 @@ The structure `cont_diff_bump` contains the data required to construct the funct
 real numbers `r`, `R`, and proofs of `0 < r < R`. The function itself is available through
 `coe_fn` when the space is nice enough, i.e., satisfies the `has_cont_diff_bump` typeclass. -/
 structure ContDiffBump (c : E) where
-  (R r : ℝ)
-  r_pos : 0 < r
-  r_lt_r : r < R
+  (R rOut : ℝ)
+  rIn_pos : 0 < r
+  rIn_lt_rOut : r < R
 #align cont_diff_bump ContDiffBump
+-/
 
+#print ContDiffBumpBase /-
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- The base function from which one will construct a family of bump functions. One could
 add more properties if they are useful and satisfied in the examples of inner product spaces
@@ -341,21 +364,27 @@ structure ContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ
   eq_one : ∀ (R : ℝ) (hR : 1 < R) (x : E) (hx : ‖x‖ ≤ 1), to_fun R x = 1
   support : ∀ (R : ℝ) (hR : 1 < R), support (to_fun R) = Metric.ball (0 : E) R
 #align cont_diff_bump_base ContDiffBumpBase
+-/
 
+#print HasContDiffBump /-
 /-- A class registering that a real vector space admits bump functions. This will be instantiated
 first for inner product spaces, and then for finite-dimensional normed spaces.
 We use a specific class instead of `nonempty (cont_diff_bump_base E)` for performance reasons. -/
 class HasContDiffBump (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E] : Prop where
   out : Nonempty (ContDiffBumpBase E)
 #align has_cont_diff_bump HasContDiffBump
+-/
 
+#print someContDiffBumpBase /-
 /-- In a space with `C^∞` bump functions, register some function that will be used as a basis
 to construct bump functions of arbitrary size around any point. -/
 def someContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E]
     [hb : HasContDiffBump E] : ContDiffBumpBase E :=
   Nonempty.some hb.out
 #align some_cont_diff_bump_base someContDiffBumpBase
+-/
 
+#print hasContDiffBump_of_innerProductSpace /-
 /-- Any inner product space has smooth bump functions. -/
 instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [NormedAddCommGroup E]
     [InnerProductSpace ℝ E] : HasContDiffBump E :=
@@ -406,22 +435,19 @@ instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [No
           apply div_pos <;> linarith }
   ⟨⟨e⟩⟩
 #align has_cont_diff_bump_of_inner_product_space hasContDiffBump_of_innerProductSpace
+-/
 
 namespace ContDiffBump
 
-/- warning: cont_diff_bump.R_pos clashes with cont_diff_bump.r_pos -> ContDiffBump.r_pos
-Case conversion may be inaccurate. Consider using '#align cont_diff_bump.R_pos ContDiffBump.r_posₓ'. -/
-#print ContDiffBump.r_pos /-
-theorem r_pos {c : E} (f : ContDiffBump c) : 0 < f.r :=
-  f.r_pos.trans f.r_lt_r
-#align cont_diff_bump.R_pos ContDiffBump.r_pos
--/
+theorem rOut_pos {c : E} (f : ContDiffBump c) : 0 < f.rOut :=
+  f.rIn_pos.trans f.rIn_lt_rOut
+#align cont_diff_bump.R_pos ContDiffBump.rOut_pos
 
-theorem one_lt_r_div_r {c : E} (f : ContDiffBump c) : 1 < f.r / f.R :=
+theorem one_lt_rOut_div_rIn {c : E} (f : ContDiffBump c) : 1 < f.rOut / f.R :=
   by
   rw [one_lt_div f.r_pos]
   exact f.r_lt_R
-#align cont_diff_bump.one_lt_R_div_r ContDiffBump.one_lt_r_div_r
+#align cont_diff_bump.one_lt_R_div_r ContDiffBump.one_lt_rOut_div_rIn
 
 instance (c : E) : Inhabited (ContDiffBump c) :=
   ⟨⟨1, 2, zero_lt_one, one_lt_two⟩⟩
@@ -429,19 +455,21 @@ instance (c : E) : Inhabited (ContDiffBump c) :=
 variable [NormedAddCommGroup E] [NormedSpace ℝ E] [NormedAddCommGroup X] [NormedSpace ℝ X]
   [HasContDiffBump E] {c : E} (f : ContDiffBump c) {x : E} {n : ℕ∞}
 
+#print ContDiffBump.toFun /-
 /-- The function defined by `f : cont_diff_bump c`. Use automatic coercion to
 function instead. -/
 def toFun {c : E} (f : ContDiffBump c) : E → ℝ := fun x =>
-  (someContDiffBumpBase E).toFun (f.r / f.R) (f.R⁻¹ • (x - c))
+  (someContDiffBumpBase E).toFun (f.rOut / f.R) (f.R⁻¹ • (x - c))
 #align cont_diff_bump.to_fun ContDiffBump.toFun
+-/
 
 instance : CoeFun (ContDiffBump c) fun _ => E → ℝ :=
   ⟨toFun⟩
 
-protected theorem def (x : E) :
-    f x = (someContDiffBumpBase E).toFun (f.r / f.R) (f.R⁻¹ • (x - c)) :=
+protected theorem apply (x : E) :
+    f x = (someContDiffBumpBase E).toFun (f.rOut / f.R) (f.R⁻¹ • (x - c)) :=
   rfl
-#align cont_diff_bump.def ContDiffBump.def
+#align cont_diff_bump.def ContDiffBump.apply
 
 protected theorem sub (x : E) : f (c - x) = f (c + x) := by simp [f.def, ContDiffBumpBase.symmetric]
 #align cont_diff_bump.sub ContDiffBump.sub
@@ -472,7 +500,7 @@ theorem le_one : f x ≤ 1 :=
   (ContDiffBumpBase.mem_Icc (someContDiffBumpBase E) _ _).2
 #align cont_diff_bump.le_one ContDiffBump.le_one
 
-theorem pos_of_mem_ball (hx : x ∈ ball c f.r) : 0 < f x :=
+theorem pos_of_mem_ball (hx : x ∈ ball c f.rOut) : 0 < f x :=
   by
   refine' lt_iff_le_and_ne.2 ⟨f.nonneg, Ne.symm _⟩
   change f.r⁻¹ • (x - c) ∈ support ((someContDiffBumpBase E).toFun (f.R / f.r))
@@ -482,7 +510,7 @@ theorem pos_of_mem_ball (hx : x ∈ ball c f.r) : 0 < f x :=
     div_eq_inv_mul] using (div_lt_div_right f.r_pos).2 hx
 #align cont_diff_bump.pos_of_mem_ball ContDiffBump.pos_of_mem_ball
 
-theorem zero_of_le_dist (hx : f.r ≤ dist x c) : f x = 0 :=
+theorem zero_of_le_dist (hx : f.rOut ≤ dist x c) : f x = 0 :=
   by
   rw [dist_eq_norm] at hx 
   suffices H : f.r⁻¹ • (x - c) ∉ support ((someContDiffBumpBase E).toFun (f.R / f.r))
@@ -492,7 +520,7 @@ theorem zero_of_le_dist (hx : f.r ≤ dist x c) : f x = 0 :=
   exact div_le_div_of_le f.r_pos.le hx
 #align cont_diff_bump.zero_of_le_dist ContDiffBump.zero_of_le_dist
 
-theorem support_eq : support (f : E → ℝ) = Metric.ball c f.r :=
+theorem support_eq : support (f : E → ℝ) = Metric.ball c f.rOut :=
   by
   ext x
   suffices f x ≠ 0 ↔ dist x c < f.R by simpa [mem_support]
@@ -501,7 +529,7 @@ theorem support_eq : support (f : E → ℝ) = Metric.ball c f.r :=
   · simp only [hx.not_lt, f.zero_of_le_dist hx, Ne.def, eq_self_iff_true, not_true]
 #align cont_diff_bump.support_eq ContDiffBump.support_eq
 
-theorem tsupport_eq : tsupport f = closedBall c f.r := by
+theorem tsupport_eq : tsupport f = closedBall c f.rOut := by
   simp_rw [tsupport, f.support_eq, closure_ball _ f.R_pos.ne']
 #align cont_diff_bump.tsupport_eq ContDiffBump.tsupport_eq
 
@@ -515,7 +543,7 @@ theorem eventuallyEq_one_of_mem_ball (h : x ∈ ball c f.R) : f =ᶠ[𝓝 x] 1 :
 #align cont_diff_bump.eventually_eq_one_of_mem_ball ContDiffBump.eventuallyEq_one_of_mem_ball
 
 theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
-  f.eventuallyEq_one_of_mem_ball (mem_ball_self f.r_pos)
+  f.eventuallyEq_one_of_mem_ball (mem_ball_self f.rIn_pos)
 #align cont_diff_bump.eventually_eq_one ContDiffBump.eventuallyEq_one
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -523,13 +551,13 @@ theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
 /-- `cont_diff_bump` is `𝒞ⁿ` in all its arguments. -/
 protected theorem ContDiffAt.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBump (c x)} {x : X}
     (hc : ContDiffAt ℝ n c x) (hr : ContDiffAt ℝ n (fun x => (f x).R) x)
-    (hR : ContDiffAt ℝ n (fun x => (f x).r) x) (hg : ContDiffAt ℝ n g x) :
+    (hR : ContDiffAt ℝ n (fun x => (f x).rOut) x) (hg : ContDiffAt ℝ n g x) :
     ContDiffAt ℝ n (fun x => f x (g x)) x :=
   by
   rcases eq_or_ne (g x) (c x) with (hx | hx)
   · have : (fun x => f x (g x)) =ᶠ[𝓝 x] fun x => 1 :=
       by
-      have : dist (g x) (c x) < (f x).R := by simp_rw [hx, dist_self, (f x).r_pos]
+      have : dist (g x) (c x) < (f x).R := by simp_rw [hx, dist_self, (f x).rIn_pos]
       have :=
         ContinuousAt.eventually_lt (hg.continuous_at.dist hc.continuous_at) hr.continuous_at this
       exact eventually_of_mem this fun x hx => (f x).one_of_mem_closedBall (mem_set_of_eq.mp hx).le
@@ -537,46 +565,56 @@ protected theorem ContDiffAt.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBu
   · change
       ContDiffAt ℝ n
         (uncurry (someContDiffBumpBase E).toFun ∘ fun x : X =>
-          ((f x).r / (f x).R, (f x).R⁻¹ • (g x - c x)))
+          ((f x).rOut / (f x).R, (f x).R⁻¹ • (g x - c x)))
         x
-    have A : ((f x).r / (f x).R, (f x).R⁻¹ • (g x - c x)) ∈ Ioi (1 : ℝ) ×ˢ (univ : Set E) := by
-      simpa only [prod_mk_mem_set_prod_eq, mem_univ, and_true_iff] using (f x).one_lt_r_div_r
-    have B : Ioi (1 : ℝ) ×ˢ (univ : Set E) ∈ 𝓝 ((f x).r / (f x).R, (f x).R⁻¹ • (g x - c x)) :=
+    have A : ((f x).rOut / (f x).R, (f x).R⁻¹ • (g x - c x)) ∈ Ioi (1 : ℝ) ×ˢ (univ : Set E) := by
+      simpa only [prod_mk_mem_set_prod_eq, mem_univ, and_true_iff] using (f x).one_lt_rOut_div_rIn
+    have B : Ioi (1 : ℝ) ×ˢ (univ : Set E) ∈ 𝓝 ((f x).rOut / (f x).R, (f x).R⁻¹ • (g x - c x)) :=
       (is_open_Ioi.prod isOpen_univ).mem_nhds A
     apply
       ((((someContDiffBumpBase E).smooth.ContDiffWithinAt A).ContDiffAt B).of_le le_top).comp x _
-    exact (hR.div hr (f x).r_pos.ne').Prod ((hr.inv (f x).r_pos.ne').smul (hg.sub hc))
+    exact (hR.div hr (f x).rIn_pos.ne').Prod ((hr.inv (f x).rIn_pos.ne').smul (hg.sub hc))
 #align cont_diff_at.cont_diff_bump ContDiffAt.contDiffBump
 
 theorem ContDiff.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBump (c x)} (hc : ContDiff ℝ n c)
-    (hr : ContDiff ℝ n fun x => (f x).R) (hR : ContDiff ℝ n fun x => (f x).r)
+    (hr : ContDiff ℝ n fun x => (f x).R) (hR : ContDiff ℝ n fun x => (f x).rOut)
     (hg : ContDiff ℝ n g) : ContDiff ℝ n fun x => f x (g x) := by rw [contDiff_iff_contDiffAt] at *;
   exact fun x => (hc x).ContDiffBump (hr x) (hR x) (hg x)
 #align cont_diff.cont_diff_bump ContDiff.contDiffBump
 
+#print ContDiffBump.contDiff /-
 protected theorem contDiff : ContDiff ℝ n f :=
   contDiff_const.ContDiffBump contDiff_const contDiff_const contDiff_id
 #align cont_diff_bump.cont_diff ContDiffBump.contDiff
+-/
 
+#print ContDiffBump.contDiffAt /-
 protected theorem contDiffAt : ContDiffAt ℝ n f x :=
   f.ContDiff.ContDiffAt
 #align cont_diff_bump.cont_diff_at ContDiffBump.contDiffAt
+-/
 
+#print ContDiffBump.contDiffWithinAt /-
 protected theorem contDiffWithinAt {s : Set E} : ContDiffWithinAt ℝ n f s x :=
   f.ContDiffAt.ContDiffWithinAt
 #align cont_diff_bump.cont_diff_within_at ContDiffBump.contDiffWithinAt
+-/
 
+#print ContDiffBump.continuous /-
 protected theorem continuous : Continuous f :=
   contDiff_zero.mp f.ContDiff
 #align cont_diff_bump.continuous ContDiffBump.continuous
+-/
 
 open MeasureTheory
 
 variable [MeasurableSpace E] {μ : Measure E}
 
+#print ContDiffBump.normed /-
 /-- A bump function normed so that `∫ x, f.normed μ x ∂μ = 1`. -/
 protected def normed (μ : Measure E) : E → ℝ := fun x => f x / ∫ x, f x ∂μ
 #align cont_diff_bump.normed ContDiffBump.normed
+-/
 
 theorem normed_def {μ : Measure E} (x : E) : f.normed μ x = f x / ∫ x, f x ∂μ :=
   rfl
@@ -586,13 +624,17 @@ theorem nonneg_normed (x : E) : 0 ≤ f.normed μ x :=
   div_nonneg f.NonNeg <| integral_nonneg f.nonneg'
 #align cont_diff_bump.nonneg_normed ContDiffBump.nonneg_normed
 
+#print ContDiffBump.contDiff_normed /-
 theorem contDiff_normed {n : ℕ∞} : ContDiff ℝ n (f.normed μ) :=
   f.ContDiff.div_const _
 #align cont_diff_bump.cont_diff_normed ContDiffBump.contDiff_normed
+-/
 
+#print ContDiffBump.continuous_normed /-
 theorem continuous_normed : Continuous (f.normed μ) :=
   f.Continuous.div_const _
 #align cont_diff_bump.continuous_normed ContDiffBump.continuous_normed
+-/
 
 theorem normed_sub (x : E) : f.normed μ (c - x) = f.normed μ (c + x) := by
   simp_rw [f.normed_def, f.sub]
@@ -604,13 +646,17 @@ theorem normed_neg (f : ContDiffBump (0 : E)) (x : E) : f.normed μ (-x) = f.nor
 
 variable [BorelSpace E] [FiniteDimensional ℝ E] [IsLocallyFiniteMeasure μ]
 
+#print ContDiffBump.integrable /-
 protected theorem integrable : Integrable f μ :=
   f.Continuous.integrable_of_hasCompactSupport f.HasCompactSupport
 #align cont_diff_bump.integrable ContDiffBump.integrable
+-/
 
+#print ContDiffBump.integrable_normed /-
 protected theorem integrable_normed : Integrable (f.normed μ) μ :=
   f.Integrable.div_const _
 #align cont_diff_bump.integrable_normed ContDiffBump.integrable_normed
+-/
 
 variable [μ.IsOpenPosMeasure]
 
@@ -627,12 +673,12 @@ theorem integral_normed : (∫ x, f.normed μ x ∂μ) = 1 :=
   exact inv_mul_cancel f.integral_pos.ne'
 #align cont_diff_bump.integral_normed ContDiffBump.integral_normed
 
-theorem support_normed_eq : support (f.normed μ) = Metric.ball c f.r := by
+theorem support_normed_eq : support (f.normed μ) = Metric.ball c f.rOut := by
   simp_rw [ContDiffBump.normed, support_div, f.support_eq, support_const f.integral_pos.ne',
     inter_univ]
 #align cont_diff_bump.support_normed_eq ContDiffBump.support_normed_eq
 
-theorem tsupport_normed_eq : tsupport (f.normed μ) = Metric.closedBall c f.r := by
+theorem tsupport_normed_eq : tsupport (f.normed μ) = Metric.closedBall c f.rOut := by
   simp_rw [tsupport, f.support_normed_eq, closure_ball _ f.R_pos.ne']
 #align cont_diff_bump.tsupport_normed_eq ContDiffBump.tsupport_normed_eq
 
@@ -641,11 +687,11 @@ theorem hasCompactSupport_normed : HasCompactSupport (f.normed μ) := by
 #align cont_diff_bump.has_compact_support_normed ContDiffBump.hasCompactSupport_normed
 
 theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l : Filter ι}
-    (hφ : Tendsto (fun i => (φ i).r) l (𝓝 0)) :
+    (hφ : Tendsto (fun i => (φ i).rOut) l (𝓝 0)) :
     Tendsto (fun i => support fun x => (φ i).normed μ x) l (𝓝 c).smallSets :=
   by
   simp_rw [NormedAddCommGroup.tendsto_nhds_zero, Real.norm_eq_abs,
-    abs_eq_self.mpr (φ _).r_pos.le] at hφ 
+    abs_eq_self.mpr (φ _).rOut_pos.le] at hφ 
   rw [tendsto_small_sets_iff]
   intro t ht
   rcases metric.mem_nhds_iff.mp ht with ⟨ε, hε, ht⟩
@@ -656,9 +702,11 @@ theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l :
 
 variable (μ)
 
+#print ContDiffBump.integral_normed_smul /-
 theorem integral_normed_smul [CompleteSpace X] (z : X) : (∫ x, f.normed μ x • z ∂μ) = z := by
   simp_rw [integral_smul_const, f.integral_normed, one_smul]
 #align cont_diff_bump.integral_normed_smul ContDiffBump.integral_normed_smul
+-/
 
 end ContDiffBump
 
Diff
@@ -93,7 +93,7 @@ theorem f_aux_deriv (n : ℕ) (x : ℝ) (hx : x ≠ 0) :
   by
   simp only [P_aux, eval_add, eval_sub, eval_mul, eval_pow, eval_X, eval_C, eval_one]
   convert
-    (((P_aux n).HasDerivAt x).mul ((has_deriv_at_exp _).comp x (hasDerivAt_inv hx).neg)).div
+    (((P_aux n).HasDerivAt x).mul ((hasDerivAt_exp _).comp x (hasDerivAt_inv hx).neg)).div
       (hasDerivAt_pow (2 * n) x) (pow_ne_zero _ hx) using
     1
   rw [div_eq_div_iff]
Diff
@@ -92,7 +92,8 @@ theorem f_aux_deriv (n : ℕ) (x : ℝ) (hx : x ≠ 0) :
       ((pAux (n + 1)).eval x * exp (-x⁻¹) / x ^ (2 * (n + 1))) x :=
   by
   simp only [P_aux, eval_add, eval_sub, eval_mul, eval_pow, eval_X, eval_C, eval_one]
-  convert(((P_aux n).HasDerivAt x).mul ((has_deriv_at_exp _).comp x (hasDerivAt_inv hx).neg)).div
+  convert
+    (((P_aux n).HasDerivAt x).mul ((has_deriv_at_exp _).comp x (hasDerivAt_inv hx).neg)).div
       (hasDerivAt_pow (2 * n) x) (pow_ne_zero _ hx) using
     1
   rw [div_eq_div_iff]
@@ -109,7 +110,7 @@ theorem fAux_deriv_pos (n : ℕ) (x : ℝ) (hx : 0 < x) :
     HasDerivAt (fAux n) ((pAux (n + 1)).eval x * exp (-x⁻¹) / x ^ (2 * (n + 1))) x :=
   by
   apply (f_aux_deriv n x (ne_of_gt hx)).congr_of_eventuallyEq
-  filter_upwards [lt_mem_nhds hx]with _ hy
+  filter_upwards [lt_mem_nhds hx] with _ hy
   simp [f_aux, hy.not_le]
 #align exp_neg_inv_glue.f_aux_deriv_pos expNegInvGlue.fAux_deriv_pos
 
@@ -123,7 +124,7 @@ theorem f_aux_limit (n : ℕ) :
     (P_aux n).ContinuousWithinAt
   have B : tendsto (fun x => exp (-x⁻¹) / x ^ (2 * n)) (𝓝[>] 0) (𝓝 0) :=
     by
-    convert(tendsto_pow_mul_exp_neg_at_top_nhds_0 (2 * n)).comp tendsto_inv_zero_atTop
+    convert (tendsto_pow_mul_exp_neg_at_top_nhds_0 (2 * n)).comp tendsto_inv_zero_atTop
     ext x
     field_simp
   convert A.mul B <;> simp [mul_div_assoc]
@@ -172,7 +173,7 @@ theorem fAux_hasDerivAt (n : ℕ) (x : ℝ) : HasDerivAt (fAux n) (fAux (n + 1)
   · have : f_aux (n + 1) x = 0 := by simp [f_aux, le_of_lt hx]
     rw [this]
     apply (hasDerivAt_const x (0 : ℝ)).congr_of_eventuallyEq
-    filter_upwards [gt_mem_nhds hx]with _ hy
+    filter_upwards [gt_mem_nhds hx] with _ hy
     simp [f_aux, hy.le]
   · have : f_aux (n + 1) 0 = 0 := by simp [f_aux, le_refl]
     rw [hx, this]
@@ -382,7 +383,7 @@ instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [No
               apply (tendsto_order.1 A).1
               apply (one_lt_div (sub_pos.2 hR)).2
               simp only [norm_zero, tsub_zero, sub_lt_self_iff, zero_lt_one]
-            filter_upwards [this]with q hq
+            filter_upwards [this] with q hq
             exact Real.smoothTransition.one_of_one_le hq.le
           exact cont_diff_at_const.congr_of_eventually_eq this
         · refine' real.smooth_transition.cont_diff_at.comp _ _
@@ -601,7 +602,7 @@ theorem normed_neg (f : ContDiffBump (0 : E)) (x : E) : f.normed μ (-x) = f.nor
   simp_rw [f.normed_def, f.neg]
 #align cont_diff_bump.normed_neg ContDiffBump.normed_neg
 
-variable [BorelSpace E] [FiniteDimensional ℝ E] [LocallyFiniteMeasure μ]
+variable [BorelSpace E] [FiniteDimensional ℝ E] [IsLocallyFiniteMeasure μ]
 
 protected theorem integrable : Integrable f μ :=
   f.Continuous.integrable_of_hasCompactSupport f.HasCompactSupport
@@ -611,7 +612,7 @@ protected theorem integrable_normed : Integrable (f.normed μ) μ :=
   f.Integrable.div_const _
 #align cont_diff_bump.integrable_normed ContDiffBump.integrable_normed
 
-variable [μ.OpenPosMeasure]
+variable [μ.IsOpenPosMeasure]
 
 theorem integral_pos : 0 < ∫ x, f x ∂μ :=
   by
Diff
@@ -139,7 +139,7 @@ theorem fAux_deriv_zero (n : ℕ) : HasDerivAt (fAux n) 0 0 :=
     by
     apply (hasDerivAt_const (0 : ℝ) (0 : ℝ)).HasDerivWithinAt.congr
     · intro y hy
-      simp at hy
+      simp at hy 
       simp [f_aux, hy]
     · simp [f_aux, le_refl]
   have B : HasDerivWithinAt (f_aux n) (0 : ℝ) (Ici 0) 0 :=
@@ -394,13 +394,13 @@ instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [No
       support := fun R hR => by
         apply subset.antisymm
         · intro x hx
-          simp only [mem_support] at hx
+          simp only [mem_support] at hx 
           contrapose! hx
-          simp only [mem_ball_zero_iff, not_lt] at hx
+          simp only [mem_ball_zero_iff, not_lt] at hx 
           apply Real.smoothTransition.zero_of_nonpos
           apply div_nonpos_of_nonpos_of_nonneg <;> linarith
         · intro x hx
-          simp only [mem_ball_zero_iff] at hx
+          simp only [mem_ball_zero_iff] at hx 
           apply (Real.smoothTransition.pos_of_pos _).ne'
           apply div_pos <;> linarith }
   ⟨⟨e⟩⟩
@@ -476,14 +476,14 @@ theorem pos_of_mem_ball (hx : x ∈ ball c f.r) : 0 < f x :=
   refine' lt_iff_le_and_ne.2 ⟨f.nonneg, Ne.symm _⟩
   change f.r⁻¹ • (x - c) ∈ support ((someContDiffBumpBase E).toFun (f.R / f.r))
   rw [ContDiffBumpBase.support _ _ f.one_lt_R_div_r]
-  simp only [dist_eq_norm, mem_ball] at hx
+  simp only [dist_eq_norm, mem_ball] at hx 
   simpa only [norm_smul, mem_ball_zero_iff, norm_eq_abs, abs_inv, abs_of_nonneg f.r_pos.le, ←
     div_eq_inv_mul] using (div_lt_div_right f.r_pos).2 hx
 #align cont_diff_bump.pos_of_mem_ball ContDiffBump.pos_of_mem_ball
 
 theorem zero_of_le_dist (hx : f.r ≤ dist x c) : f x = 0 :=
   by
-  rw [dist_eq_norm] at hx
+  rw [dist_eq_norm] at hx 
   suffices H : f.r⁻¹ • (x - c) ∉ support ((someContDiffBumpBase E).toFun (f.R / f.r))
   · simpa only [mem_support, Classical.not_not] using H
   rw [ContDiffBumpBase.support _ _ f.one_lt_R_div_r]
@@ -644,7 +644,7 @@ theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l :
     Tendsto (fun i => support fun x => (φ i).normed μ x) l (𝓝 c).smallSets :=
   by
   simp_rw [NormedAddCommGroup.tendsto_nhds_zero, Real.norm_eq_abs,
-    abs_eq_self.mpr (φ _).r_pos.le] at hφ
+    abs_eq_self.mpr (φ _).r_pos.le] at hφ 
   rw [tendsto_small_sets_iff]
   intro t ht
   rcases metric.mem_nhds_iff.mp ht with ⟨ε, hε, ht⟩
Diff
@@ -45,11 +45,11 @@ function cannot have:
 
 noncomputable section
 
-open Classical Topology
+open scoped Classical Topology
 
 open Polynomial Real Filter Set Function
 
-open Polynomial
+open scoped Polynomial
 
 /-- `exp_neg_inv_glue` is the real function given by `x ↦ exp (-1/x)` for `x > 0` and `0`
 for `x ≤ 0`. It is a basic building block to construct smooth partitions of unity. Its main property
Diff
@@ -96,13 +96,10 @@ theorem f_aux_deriv (n : ℕ) (x : ℝ) (hx : x ≠ 0) :
       (hasDerivAt_pow (2 * n) x) (pow_ne_zero _ hx) using
     1
   rw [div_eq_div_iff]
-  · have := pow_ne_zero 2 hx
-    field_simp only
+  · have := pow_ne_zero 2 hx; field_simp only
     cases n
-    · simp only [MulZeroClass.mul_zero, Nat.cast_zero, mul_one]
-      ring
-    · rw [(id rfl : 2 * n.succ - 1 = 2 * n + 1)]
-      ring
+    · simp only [MulZeroClass.mul_zero, Nat.cast_zero, mul_one]; ring
+    · rw [(id rfl : 2 * n.succ - 1 = 2 * n + 1)]; ring
   all_goals apply_rules [pow_ne_zero]
 #align exp_neg_inv_glue.f_aux_deriv expNegInvGlue.f_aux_deriv
 
@@ -552,9 +549,7 @@ protected theorem ContDiffAt.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBu
 
 theorem ContDiff.contDiffBump {c g : X → E} {f : ∀ x, ContDiffBump (c x)} (hc : ContDiff ℝ n c)
     (hr : ContDiff ℝ n fun x => (f x).R) (hR : ContDiff ℝ n fun x => (f x).r)
-    (hg : ContDiff ℝ n g) : ContDiff ℝ n fun x => f x (g x) :=
-  by
-  rw [contDiff_iff_contDiffAt] at *
+    (hg : ContDiff ℝ n g) : ContDiff ℝ n fun x => f x (g x) := by rw [contDiff_iff_contDiffAt] at *;
   exact fun x => (hc x).ContDiffBump (hr x) (hR x) (hg x)
 #align cont_diff.cont_diff_bump ContDiff.contDiffBump
 
Diff
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 
 ! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
+! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
+import Mathbin.Analysis.Calculus.Deriv.Inv
 import Mathbin.Analysis.Calculus.ExtendDeriv
 import Mathbin.Analysis.Calculus.IteratedDeriv
 import Mathbin.Analysis.InnerProductSpace.Calculus
@@ -261,6 +262,18 @@ protected theorem one : smoothTransition 1 = 1 :=
   one_of_one_le le_rfl
 #align real.smooth_transition.one Real.smoothTransition.one
 
+/-- Since `real.smooth_transition` is constant on $(-∞, 0]$ and $[1, ∞)$, applying it to the
+projection of `x : ℝ` to $[0, 1]$ gives the same result as applying it to `x`. -/
+@[simp]
+protected theorem projIcc :
+    smoothTransition (projIcc (0 : ℝ) 1 zero_le_one x) = smoothTransition x :=
+  by
+  refine'
+    congr_fun (Icc_extend_eq_self zero_le_one smooth_transition (fun x hx => _) fun x hx => _) x
+  · rw [smooth_transition.zero, zero_of_nonpos hx.le]
+  · rw [smooth_transition.one, one_of_one_le hx.le]
+#align real.smooth_transition.proj_Icc Real.smoothTransition.projIcc
+
 theorem le_one (x : ℝ) : smoothTransition x ≤ 1 :=
   (div_le_one (pos_denom x)).2 <| le_add_of_nonneg_right (nonneg _)
 #align real.smooth_transition.le_one Real.smoothTransition.le_one
@@ -291,6 +304,10 @@ protected theorem continuous : Continuous smoothTransition :=
   (@smoothTransition.contDiff 0).Continuous
 #align real.smooth_transition.continuous Real.smoothTransition.continuous
 
+protected theorem continuousAt : ContinuousAt smoothTransition x :=
+  smoothTransition.continuous.ContinuousAt
+#align real.smooth_transition.continuous_at Real.smoothTransition.continuousAt
+
 end SmoothTransition
 
 end Real
Diff
@@ -4,12 +4,14 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 
 ! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
+! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
+import Mathbin.Analysis.Calculus.ExtendDeriv
 import Mathbin.Analysis.Calculus.IteratedDeriv
 import Mathbin.Analysis.InnerProductSpace.Calculus
+import Mathbin.Analysis.SpecialFunctions.ExpDeriv
 import Mathbin.MeasureTheory.Integral.SetIntegral
 
 /-!
Diff
@@ -597,7 +597,7 @@ protected theorem integrable_normed : Integrable (f.normed μ) μ :=
   f.Integrable.div_const _
 #align cont_diff_bump.integrable_normed ContDiffBump.integrable_normed
 
-variable [μ.IsOpenPosMeasure]
+variable [μ.OpenPosMeasure]
 
 theorem integral_pos : 0 < ∫ x, f x ∂μ :=
   by
Diff
@@ -587,7 +587,7 @@ theorem normed_neg (f : ContDiffBump (0 : E)) (x : E) : f.normed μ (-x) = f.nor
   simp_rw [f.normed_def, f.neg]
 #align cont_diff_bump.normed_neg ContDiffBump.normed_neg
 
-variable [BorelSpace E] [FiniteDimensional ℝ E] [IsLocallyFiniteMeasure μ]
+variable [BorelSpace E] [FiniteDimensional ℝ E] [LocallyFiniteMeasure μ]
 
 protected theorem integrable : Integrable f μ :=
   f.Continuous.integrable_of_hasCompactSupport f.HasCompactSupport
Diff
@@ -590,12 +590,12 @@ theorem normed_neg (f : ContDiffBump (0 : E)) (x : E) : f.normed μ (-x) = f.nor
 variable [BorelSpace E] [FiniteDimensional ℝ E] [IsLocallyFiniteMeasure μ]
 
 protected theorem integrable : Integrable f μ :=
-  f.Continuous.integrableOfHasCompactSupport f.HasCompactSupport
+  f.Continuous.integrable_of_hasCompactSupport f.HasCompactSupport
 #align cont_diff_bump.integrable ContDiffBump.integrable
 
-protected theorem integrableNormed : Integrable (f.normed μ) μ :=
+protected theorem integrable_normed : Integrable (f.normed μ) μ :=
   f.Integrable.div_const _
-#align cont_diff_bump.integrable_normed ContDiffBump.integrableNormed
+#align cont_diff_bump.integrable_normed ContDiffBump.integrable_normed
 
 variable [μ.IsOpenPosMeasure]
 
Diff
@@ -4,13 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 
 ! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
+! leanprover-community/mathlib commit 2c1d8ca2812b64f88992a5294ea3dba144755cd1
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.Calculus.IteratedDeriv
-import Mathbin.Analysis.InnerProductSpace.EuclideanDist
-import Mathbin.MeasureTheory.Function.LocallyIntegrable
+import Mathbin.Analysis.InnerProductSpace.Calculus
 import Mathbin.MeasureTheory.Integral.SetIntegral
 
 /-!
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Floris van Doorn
 
 ! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 8c8c544bf24ced19b1e76c34bb3262bdae620f82
+! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -341,7 +341,7 @@ def someContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E]
 #align some_cont_diff_bump_base someContDiffBumpBase
 
 /-- Any inner product space has smooth bump functions. -/
-instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _)
+instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _) [NormedAddCommGroup E]
     [InnerProductSpace ℝ E] : HasContDiffBump E :=
   let e : ContDiffBumpBase E :=
     { toFun := fun R x => Real.smoothTransition ((R - ‖x‖) / (R - 1))
@@ -372,7 +372,7 @@ instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _)
           exact cont_diff_at_const.congr_of_eventually_eq this
         · refine' real.smooth_transition.cont_diff_at.comp _ _
           refine' ContDiffAt.div _ _ (sub_pos.2 hR).ne'
-          · exact cont_diff_at_fst.sub (cont_diff_at_snd.norm hx)
+          · exact cont_diff_at_fst.sub (cont_diff_at_snd.norm ℝ hx)
           · exact cont_diff_at_fst.sub contDiffAt_const
       eq_one := fun R hR x hx =>
         Real.smoothTransition.one_of_one_le <| (one_le_div (sub_pos.2 hR)).2 (sub_le_sub_left hx _)
Diff
@@ -90,8 +90,7 @@ theorem f_aux_deriv (n : ℕ) (x : ℝ) (hx : x ≠ 0) :
       ((pAux (n + 1)).eval x * exp (-x⁻¹) / x ^ (2 * (n + 1))) x :=
   by
   simp only [P_aux, eval_add, eval_sub, eval_mul, eval_pow, eval_X, eval_C, eval_one]
-  convert
-    (((P_aux n).HasDerivAt x).mul ((has_deriv_at_exp _).comp x (hasDerivAt_inv hx).neg)).div
+  convert(((P_aux n).HasDerivAt x).mul ((has_deriv_at_exp _).comp x (hasDerivAt_inv hx).neg)).div
       (hasDerivAt_pow (2 * n) x) (pow_ne_zero _ hx) using
     1
   rw [div_eq_div_iff]
@@ -125,7 +124,7 @@ theorem f_aux_limit (n : ℕ) :
     (P_aux n).ContinuousWithinAt
   have B : tendsto (fun x => exp (-x⁻¹) / x ^ (2 * n)) (𝓝[>] 0) (𝓝 0) :=
     by
-    convert (tendsto_pow_mul_exp_neg_at_top_nhds_0 (2 * n)).comp tendsto_inv_zero_atTop
+    convert(tendsto_pow_mul_exp_neg_at_top_nhds_0 (2 * n)).comp tendsto_inv_zero_atTop
     ext x
     field_simp
   convert A.mul B <;> simp [mul_div_assoc]
Diff
@@ -342,8 +342,8 @@ def someContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E]
 #align some_cont_diff_bump_base someContDiffBumpBase
 
 /-- Any inner product space has smooth bump functions. -/
-instance (priority := 100) hasContDiffBumpOfInnerProductSpace (E : Type _) [InnerProductSpace ℝ E] :
-    HasContDiffBump E :=
+instance (priority := 100) hasContDiffBump_of_innerProductSpace (E : Type _)
+    [InnerProductSpace ℝ E] : HasContDiffBump E :=
   let e : ContDiffBumpBase E :=
     { toFun := fun R x => Real.smoothTransition ((R - ‖x‖) / (R - 1))
       mem_Icc := fun R x => ⟨Real.smoothTransition.nonneg _, Real.smoothTransition.le_one _⟩
@@ -390,7 +390,7 @@ instance (priority := 100) hasContDiffBumpOfInnerProductSpace (E : Type _) [Inne
           apply (Real.smoothTransition.pos_of_pos _).ne'
           apply div_pos <;> linarith }
   ⟨⟨e⟩⟩
-#align has_cont_diff_bump_of_inner_product_space hasContDiffBumpOfInnerProductSpace
+#align has_cont_diff_bump_of_inner_product_space hasContDiffBump_of_innerProductSpace
 
 namespace ContDiffBump
 
Diff
@@ -98,7 +98,7 @@ theorem f_aux_deriv (n : ℕ) (x : ℝ) (hx : x ≠ 0) :
   · have := pow_ne_zero 2 hx
     field_simp only
     cases n
-    · simp only [mul_zero, Nat.cast_zero, mul_one]
+    · simp only [MulZeroClass.mul_zero, Nat.cast_zero, mul_one]
       ring
     · rw [(id rfl : 2 * n.succ - 1 = 2 * n + 1)]
       ring
Diff
@@ -65,7 +65,7 @@ derivatives for `x > 0`. The `n`-th derivative is of the form `P_aux n (x) exp(-
 where `P_aux n` is computed inductively. -/
 noncomputable def pAux : ℕ → ℝ[X]
   | 0 => 1
-  | n + 1 => x ^ 2 * (P_aux n).derivative + (1 - c ↑(2 * n) * x) * P_aux n
+  | n + 1 => X ^ 2 * (P_aux n).derivative + (1 - C ↑(2 * n) * X) * P_aux n
 #align exp_neg_inv_glue.P_aux expNegInvGlue.pAux
 
 /-- Formula for the `n`-th derivative of `exp_neg_inv_glue`, as an auxiliary function `f_aux`. -/

Changes in mathlib4

mathlib3
mathlib4
chore: replace set_integral with setIntegral (#12215)

Done with a global search and replace, and then (to fix the #align lines), replace (#align \S*)setIntegral with $1set_integral.

Diff
@@ -110,9 +110,9 @@ theorem integral_normed_smul {X} [NormedAddCommGroup X] [NormedSpace ℝ X]
 
 theorem measure_closedBall_le_integral : (μ (closedBall c f.rIn)).toReal ≤ ∫ x, f x ∂μ := by calc
   (μ (closedBall c f.rIn)).toReal = ∫ x in closedBall c f.rIn, 1 ∂μ := by simp
-  _ = ∫ x in closedBall c f.rIn, f x ∂μ := set_integral_congr measurableSet_closedBall
+  _ = ∫ x in closedBall c f.rIn, f x ∂μ := setIntegral_congr measurableSet_closedBall
         (fun x hx ↦ (one_of_mem_closedBall f hx).symm)
-  _ ≤ ∫ x, f x ∂μ := set_integral_le_integral f.integrable (eventually_of_forall (fun x ↦ f.nonneg))
+  _ ≤ ∫ x, f x ∂μ := setIntegral_le_integral f.integrable (eventually_of_forall (fun x ↦ f.nonneg))
 
 theorem normed_le_div_measure_closedBall_rIn (x : E) :
     f.normed μ x ≤ 1 / (μ (closedBall c f.rIn)).toReal := by
@@ -124,11 +124,11 @@ theorem normed_le_div_measure_closedBall_rIn (x : E) :
 
 theorem integral_le_measure_closedBall : ∫ x, f x ∂μ ≤ (μ (closedBall c f.rOut)).toReal := by calc
   ∫ x, f x ∂μ = ∫ x in closedBall c f.rOut, f x ∂μ := by
-    apply (set_integral_eq_integral_of_forall_compl_eq_zero (fun x hx ↦ ?_)).symm
+    apply (setIntegral_eq_integral_of_forall_compl_eq_zero (fun x hx ↦ ?_)).symm
     apply f.zero_of_le_dist (le_of_lt _)
     simpa using hx
   _ ≤ ∫ x in closedBall c f.rOut, 1 ∂μ := by
-    apply set_integral_mono f.integrable.integrableOn _ (fun x ↦ f.le_one)
+    apply setIntegral_mono f.integrable.integrableOn _ (fun x ↦ f.le_one)
     simp [measure_closedBall_lt_top]
   _ = (μ (closedBall c f.rOut)).toReal := by simp
 
chore: superfluous parentheses (#12116)

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

Diff
@@ -110,7 +110,7 @@ theorem integral_normed_smul {X} [NormedAddCommGroup X] [NormedSpace ℝ X]
 
 theorem measure_closedBall_le_integral : (μ (closedBall c f.rIn)).toReal ≤ ∫ x, f x ∂μ := by calc
   (μ (closedBall c f.rIn)).toReal = ∫ x in closedBall c f.rIn, 1 ∂μ := by simp
-  _ = ∫ x in closedBall c f.rIn, f x ∂μ := set_integral_congr (measurableSet_closedBall)
+  _ = ∫ x in closedBall c f.rIn, f x ∂μ := set_integral_congr measurableSet_closedBall
         (fun x hx ↦ (one_of_mem_closedBall f hx).symm)
   _ ≤ ∫ x, f x ∂μ := set_integral_le_integral f.integrable (eventually_of_forall (fun x ↦ f.nonneg))
 
chore: classify porting notes referring to missing linters (#12098)

Reference the newly created issues #12094 and #12096, as well as the pre-existing #5171. Change all references to #10927 to #5171. Some of these changes were not labelled as "porting note"; change this for good measure.

Diff
@@ -82,7 +82,7 @@ add more properties if they are useful and satisfied in the examples of inner pr
 and finite dimensional vector spaces, notably derivative norm control in terms of `R - 1`.
 
 TODO: do we ever need `f x = 1 ↔ ‖x‖ ≤ 1`? -/
--- Porting note: was @[nolint has_nonempty_instance]
+-- Porting note(#5171): linter not yet ported; was @[nolint has_nonempty_instance]
 structure ContDiffBumpBase (E : Type*) [NormedAddCommGroup E] [NormedSpace ℝ E] where
   toFun : ℝ → E → ℝ
   mem_Icc : ∀ (R : ℝ) (x : E), toFun R x ∈ Icc (0 : ℝ) 1
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -51,7 +51,7 @@ noncomputable def ContDiffBumpBase.ofInnerProductSpace : ContDiffBumpBase E wher
     sub_le_sub_left hx _
   support R hR := by
     ext x
-    rw [mem_support, Ne.def, smoothTransition.zero_iff_nonpos, not_le, mem_ball_zero_iff]
+    rw [mem_support, Ne, smoothTransition.zero_iff_nonpos, not_le, mem_ball_zero_iff]
     simp [div_pos_iff, sq_lt_sq, abs_of_pos (one_pos.trans hR), hR, hR.not_lt]
 
 /-- Any inner product space has smooth bump functions. -/
chore: classify new theorem / theorem porting notes (#11432)

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

  • "added theorem"
  • "added theorems"
  • "new theorem"
  • "new theorems"
  • "added lemma"
  • "new lemma"
  • "new lemmas"
Diff
@@ -164,7 +164,7 @@ theorem one_of_one_le (h : 1 ≤ x) : smoothTransition x = 1 :=
   (div_eq_one_iff_eq <| (pos_denom x).ne').2 <| by rw [zero_of_nonpos (sub_nonpos.2 h), add_zero]
 #align real.smooth_transition.one_of_one_le Real.smoothTransition.one_of_one_le
 
-@[simp] -- Porting note: new theorem
+@[simp] -- Porting note (#10756): new theorem
 nonrec theorem zero_iff_nonpos : smoothTransition x = 0 ↔ x ≤ 0 := by
   simp only [smoothTransition, _root_.div_eq_zero_iff, (pos_denom x).ne', zero_iff_nonpos, or_false]
 
chore: classify new lemma porting notes (#11217)

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

  • "new lemma"
  • "added lemma"
Diff
@@ -46,7 +46,7 @@ namespace expNegInvGlue
 theorem zero_of_nonpos {x : ℝ} (hx : x ≤ 0) : expNegInvGlue x = 0 := by simp [expNegInvGlue, hx]
 #align exp_neg_inv_glue.zero_of_nonpos expNegInvGlue.zero_of_nonpos
 
-@[simp] -- Porting note: new lemma
+@[simp] -- Porting note (#10756): new lemma
 protected theorem zero : expNegInvGlue 0 = 0 := zero_of_nonpos le_rfl
 
 /-- The function `expNegInvGlue` is positive on `(0, +∞)`. -/
@@ -61,7 +61,7 @@ theorem nonneg (x : ℝ) : 0 ≤ expNegInvGlue x := by
   | inr h => exact le_of_lt (pos_of_pos h)
 #align exp_neg_inv_glue.nonneg expNegInvGlue.nonneg
 
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
 @[simp] theorem zero_iff_nonpos {x : ℝ} : expNegInvGlue x = 0 ↔ x ≤ 0 :=
   ⟨fun h ↦ not_lt.mp fun h' ↦ (pos_of_pos h').ne' h, zero_of_nonpos⟩
 
chore: classify new lemma porting notes (#11217)

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

  • "new lemma"
  • "added lemma"
Diff
@@ -198,7 +198,7 @@ theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
   f.eventuallyEq_one_of_mem_ball (mem_ball_self f.rIn_pos)
 #align cont_diff_bump.eventually_eq_one ContDiffBump.eventuallyEq_one
 
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
 /-- `ContDiffBump` is `𝒞ⁿ` in all its arguments. -/
 protected theorem _root_.ContDiffWithinAt.contDiffBump {c g : X → E} {s : Set X}
     {f : ∀ x, ContDiffBump (c x)} {x : X} (hc : ContDiffWithinAt ℝ n c s x)
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -46,7 +46,7 @@ namespace expNegInvGlue
 theorem zero_of_nonpos {x : ℝ} (hx : x ≤ 0) : expNegInvGlue x = 0 := by simp [expNegInvGlue, hx]
 #align exp_neg_inv_glue.zero_of_nonpos expNegInvGlue.zero_of_nonpos
 
-@[simp] -- porting note: new lemma
+@[simp] -- Porting note: new lemma
 protected theorem zero : expNegInvGlue 0 = 0 := zero_of_nonpos le_rfl
 
 /-- The function `expNegInvGlue` is positive on `(0, +∞)`. -/
@@ -61,7 +61,7 @@ theorem nonneg (x : ℝ) : 0 ≤ expNegInvGlue x := by
   | inr h => exact le_of_lt (pos_of_pos h)
 #align exp_neg_inv_glue.nonneg expNegInvGlue.nonneg
 
--- porting note: new lemma
+-- Porting note: new lemma
 @[simp] theorem zero_iff_nonpos {x : ℝ} : expNegInvGlue x = 0 ↔ x ≤ 0 :=
   ⟨fun h ↦ not_lt.mp fun h' ↦ (pos_of_pos h').ne' h, zero_of_nonpos⟩
 
@@ -164,7 +164,7 @@ theorem one_of_one_le (h : 1 ≤ x) : smoothTransition x = 1 :=
   (div_eq_one_iff_eq <| (pos_denom x).ne').2 <| by rw [zero_of_nonpos (sub_nonpos.2 h), add_zero]
 #align real.smooth_transition.one_of_one_le Real.smoothTransition.one_of_one_le
 
-@[simp] -- porting note: new theorem
+@[simp] -- Porting note: new theorem
 nonrec theorem zero_iff_nonpos : smoothTransition x = 0 ↔ x ≤ 0 := by
   simp only [smoothTransition, _root_.div_eq_zero_iff, (pos_denom x).ne', zero_iff_nonpos, or_false]
 
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -25,7 +25,7 @@ open scoped Topology
 
 variable (E : Type*) [NormedAddCommGroup E] [InnerProductSpace ℝ E]
 
--- porting note: this definition was hidden inside the next instance.
+-- Porting note: this definition was hidden inside the next instance.
 /-- A base bump function in an inner product space. This construction works in any space with a
 norm smooth away from zero but we do not have a typeclass for this. -/
 noncomputable def ContDiffBumpBase.ofInnerProductSpace : ContDiffBumpBase E where
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -82,7 +82,7 @@ add more properties if they are useful and satisfied in the examples of inner pr
 and finite dimensional vector spaces, notably derivative norm control in terms of `R - 1`.
 
 TODO: do we ever need `f x = 1 ↔ ‖x‖ ≤ 1`? -/
--- porting note: was @[nolint has_nonempty_instance]
+-- Porting note: was @[nolint has_nonempty_instance]
 structure ContDiffBumpBase (E : Type*) [NormedAddCommGroup E] [NormedSpace ℝ E] where
   toFun : ℝ → E → ℝ
   mem_Icc : ∀ (R : ℝ) (x : E), toFun R x ∈ Icc (0 : ℝ) 1
@@ -198,7 +198,7 @@ theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
   f.eventuallyEq_one_of_mem_ball (mem_ball_self f.rIn_pos)
 #align cont_diff_bump.eventually_eq_one ContDiffBump.eventuallyEq_one
 
--- porting note: new lemma
+-- Porting note: new lemma
 /-- `ContDiffBump` is `𝒞ⁿ` in all its arguments. -/
 protected theorem _root_.ContDiffWithinAt.contDiffBump {c g : X → E} {s : Set X}
     {f : ∀ x, ContDiffBump (c x)} {x : X} (hc : ContDiffWithinAt ℝ n c s x)
chore: reduce imports (#9830)

This uses the improved shake script from #9772 to reduce imports across mathlib. The corresponding noshake.json file has been added to #9772.

Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -5,8 +5,6 @@ Authors: Sébastien Gouëzel, Yury Kudryashov
 -/
 import Mathlib.Analysis.Calculus.Deriv.Inv
 import Mathlib.Analysis.Calculus.Deriv.Polynomial
-import Mathlib.Analysis.Calculus.FDeriv.Extend
-import Mathlib.Analysis.Calculus.IteratedDeriv.Defs
 import Mathlib.Analysis.SpecialFunctions.ExpDeriv
 import Mathlib.Analysis.SpecialFunctions.PolynomialExp
 
feat: add lemmas about iteratedDerivWithin (#9679)

Mostly based on @CBirkbeck's work on modular forms.

Diff
@@ -6,7 +6,7 @@ Authors: Sébastien Gouëzel, Yury Kudryashov
 import Mathlib.Analysis.Calculus.Deriv.Inv
 import Mathlib.Analysis.Calculus.Deriv.Polynomial
 import Mathlib.Analysis.Calculus.FDeriv.Extend
-import Mathlib.Analysis.Calculus.IteratedDeriv
+import Mathlib.Analysis.Calculus.IteratedDeriv.Defs
 import Mathlib.Analysis.SpecialFunctions.ExpDeriv
 import Mathlib.Analysis.SpecialFunctions.PolynomialExp
 
chore(Analysis,Geometry): remove almost all autoImplicit (#9691)

After this PR, no file in Geometry uses autoImplicit, and in Analysis it's scoped to six declarations.

Diff
@@ -25,8 +25,6 @@ cannot have:
   by `expNegInvGlue x / (expNegInvGlue x + expNegInvGlue (1 - x))`;
 -/
 
-set_option autoImplicit true
-
 noncomputable section
 
 open scoped Classical Topology
@@ -66,7 +64,7 @@ theorem nonneg (x : ℝ) : 0 ≤ expNegInvGlue x := by
 #align exp_neg_inv_glue.nonneg expNegInvGlue.nonneg
 
 -- porting note: new lemma
-@[simp] theorem zero_iff_nonpos : expNegInvGlue x = 0 ↔ x ≤ 0 :=
+@[simp] theorem zero_iff_nonpos {x : ℝ} : expNegInvGlue x = 0 ↔ x ≤ 0 :=
   ⟨fun h ↦ not_lt.mp fun h' ↦ (pos_of_pos h').ne' h, zero_of_nonpos⟩
 
 /-!
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -27,7 +27,6 @@ cannot have:
 
 set_option autoImplicit true
 
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
 noncomputable section
 
 open scoped Classical Topology
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -132,8 +132,6 @@ theorem integral_le_measure_closedBall : ∫ x, f x ∂μ ≤ (μ (closedBall c
     simp [measure_closedBall_lt_top]
   _ = (μ (closedBall c f.rOut)).toReal := by simp
 
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
-
 theorem measure_closedBall_div_le_integral [IsAddHaarMeasure μ] (K : ℝ) (h : f.rOut ≤ K * f.rIn) :
     (μ (closedBall c f.rOut)).toReal / K ^ finrank ℝ E ≤ ∫ x, f x ∂μ := by
   have K_pos : 0 < K := by
chore: move Analysis/ContDiff to Analysis/ContDiff/Basic to make room for splitting (#8337)

No changes to content, or splitting, just a rename so there is room for more files.

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

Diff
@@ -3,7 +3,7 @@ Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Yury Kudryashov
 -/
-import Mathlib.Analysis.Calculus.ContDiff
+import Mathlib.Analysis.Calculus.ContDiff.Basic
 import Mathlib.Analysis.NormedSpace.FiniteDimension
 
 #align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
chore: remove trailing space in backticks (#7617)

This will improve spaces in the mathlib4 docs.

Diff
@@ -40,7 +40,7 @@ open scoped Polynomial
 for `x ≤ 0`. It is a basic building block to construct smooth partitions of unity. Its main property
 is that it vanishes for `x ≤ 0`, it is positive for `x > 0`, and the junction between the two
 behaviors is flat enough to retain smoothness. The fact that this function is `C^∞` is proved in
-`expNegInvGlue.contDiff `. -/
+`expNegInvGlue.contDiff`. -/
 def expNegInvGlue (x : ℝ) : ℝ :=
   if x ≤ 0 then 0 else exp (-x⁻¹)
 #align exp_neg_inv_glue expNegInvGlue
fix: disable autoImplicit globally (#6528)

Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.

The intent of this PR is to make autoImplicit opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true in the few files that rely on it.

That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.

I claim that many of the uses of autoImplicit in these files are accidental; situations such as:

  • Assuming variables are in scope, but pasting the lemma in the wrong section
  • Pasting in a lemma from a scratch file without checking to see if the variable names are consistent with the rest of the file
  • Making a copy-paste error between lemmas and forgetting to add an explicit arguments.

Having set_option autoImplicit false as the default prevents these types of mistake being made in the 90% of files where autoImplicits are not used at all, and causes them to be caught by CI during review.

I think there were various points during the port where we encouraged porters to delete the universes u v lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.

A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18 as the no:dontcare:yes vote ratio.

While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true has been placed locally within a section, rather than at the top of the file.

Diff
@@ -25,6 +25,8 @@ cannot have:
   by `expNegInvGlue x / (expNegInvGlue x + expNegInvGlue (1 - x))`;
 -/
 
+set_option autoImplicit true
+
 local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
 noncomputable section
 
@@ -231,4 +233,3 @@ protected theorem continuousAt : ContinuousAt smoothTransition x :=
 end smoothTransition
 
 end Real
-
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -23,7 +23,7 @@ open scoped Topology
 
 namespace ContDiffBump
 
-variable {E : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] [HasContDiffBump E]
+variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [HasContDiffBump E]
   [MeasurableSpace E] {c : E} (f : ContDiffBump c) {x : E} {n : ℕ∞} {μ : Measure E}
 
 /-- A bump function normed so that `∫ x, f.normed μ x ∂μ = 1`. -/
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -23,7 +23,7 @@ smooth function, bump function, inner product space
 open Function Real
 open scoped Topology
 
-variable (E : Type _) [NormedAddCommGroup E] [InnerProductSpace ℝ E]
+variable (E : Type*) [NormedAddCommGroup E] [InnerProductSpace ℝ E]
 
 -- porting note: this definition was hidden inside the next instance.
 /-- A base bump function in an inner product space. This construction works in any space with a
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -37,10 +37,10 @@ such that
 
 - `ContDiffBump (c : E)`: a structure holding data needed to construct
   an infinitely smooth bump function.
-- `ContDiffBumpBase (E : Type _)`: a family of infinitely smooth bump functions
+- `ContDiffBumpBase (E : Type*)`: a family of infinitely smooth bump functions
   that can be used to construct coercion of a `ContDiffBump (c : E)`
   to a function.
-- `HasContDiffBump (E : Type _)`: a typeclass saying that `E` has a `ContDiffBumpBase`.
+- `HasContDiffBump (E : Type*)`: a typeclass saying that `E` has a `ContDiffBumpBase`.
   Two instances of this typeclass (for inner product spaces and for finite dimensional spaces)
   are provided elsewhere.
 
@@ -53,7 +53,7 @@ noncomputable section
 open Function Set Filter
 open scoped Topology Filter
 
-variable {E X : Type _}
+variable {E X : Type*}
 
 /-- `f : ContDiffBump c`, where `c` is a point in a normed vector space, is a
 bundled smooth function such that
@@ -83,7 +83,7 @@ and finite dimensional vector spaces, notably derivative norm control in terms o
 
 TODO: do we ever need `f x = 1 ↔ ‖x‖ ≤ 1`? -/
 -- porting note: was @[nolint has_nonempty_instance]
-structure ContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E] where
+structure ContDiffBumpBase (E : Type*) [NormedAddCommGroup E] [NormedSpace ℝ E] where
   toFun : ℝ → E → ℝ
   mem_Icc : ∀ (R : ℝ) (x : E), toFun R x ∈ Icc (0 : ℝ) 1
   symmetric : ∀ (R : ℝ) (x : E), toFun R (-x) = toFun R x
@@ -95,13 +95,13 @@ structure ContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ
 /-- A class registering that a real vector space admits bump functions. This will be instantiated
 first for inner product spaces, and then for finite-dimensional normed spaces.
 We use a specific class instead of `Nonempty (ContDiffBumpBase E)` for performance reasons. -/
-class HasContDiffBump (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E] : Prop where
+class HasContDiffBump (E : Type*) [NormedAddCommGroup E] [NormedSpace ℝ E] : Prop where
   out : Nonempty (ContDiffBumpBase E)
 #align has_cont_diff_bump HasContDiffBump
 
 /-- In a space with `C^∞` bump functions, register some function that will be used as a basis
 to construct bump functions of arbitrary size around any point. -/
-def someContDiffBumpBase (E : Type _) [NormedAddCommGroup E] [NormedSpace ℝ E]
+def someContDiffBumpBase (E : Type*) [NormedAddCommGroup E] [NormedSpace ℝ E]
     [hb : HasContDiffBump E] : ContDiffBumpBase E :=
   Nonempty.some hb.out
 #align some_cont_diff_bump_base someContDiffBumpBase
chore: regularize HPow.hPow porting notes (#6465)
Diff
@@ -25,7 +25,7 @@ cannot have:
   by `expNegInvGlue x / (expNegInvGlue x + expNegInvGlue (1 - x))`;
 -/
 
-local macro_rules | `($x ^ $y)   => `(HPow.hPow $x $y) -- Porting note: See issue #2220
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
 noncomputable section
 
 open scoped Classical Topology
chore: regularize HPow.hPow porting notes (#6465)
Diff
@@ -132,7 +132,7 @@ theorem integral_le_measure_closedBall : ∫ x, f x ∂μ ≤ (μ (closedBall c
     simp [measure_closedBall_lt_top]
   _ = (μ (closedBall c f.rOut)).toReal := by simp
 
-local macro_rules | `($x ^ $y)   => `(HPow.hPow $x $y) -- Porting note: See Lean 4 issue #2220
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
 
 theorem measure_closedBall_div_le_integral [IsAddHaarMeasure μ] (K : ℝ) (h : f.rOut ≤ K * f.rIn) :
     (μ (closedBall c f.rOut)).toReal / K ^ finrank ℝ E ≤ ∫ x, f x ∂μ := by
feat: The convolution of a locally integrable function f with a sequence of bump functions converges ae to f (#6102)
Diff
@@ -5,6 +5,7 @@ Authors: Floris van Doorn
 -/
 import Mathlib.Analysis.Calculus.BumpFunction.Basic
 import Mathlib.MeasureTheory.Integral.SetIntegral
+import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar
 
 #align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
 
@@ -17,7 +18,7 @@ In this file we define `ContDiffBump.normed f μ` to be the bump function `f` no
 
 noncomputable section
 
-open Function Filter Set Metric MeasureTheory
+open Function Filter Set Metric MeasureTheory FiniteDimensional Measure
 open scoped Topology
 
 namespace ContDiffBump
@@ -107,4 +108,58 @@ theorem integral_normed_smul {X} [NormedAddCommGroup X] [NormedSpace ℝ X]
   simp_rw [integral_smul_const, f.integral_normed (μ := μ), one_smul]
 #align cont_diff_bump.integral_normed_smul ContDiffBump.integral_normed_smul
 
+theorem measure_closedBall_le_integral : (μ (closedBall c f.rIn)).toReal ≤ ∫ x, f x ∂μ := by calc
+  (μ (closedBall c f.rIn)).toReal = ∫ x in closedBall c f.rIn, 1 ∂μ := by simp
+  _ = ∫ x in closedBall c f.rIn, f x ∂μ := set_integral_congr (measurableSet_closedBall)
+        (fun x hx ↦ (one_of_mem_closedBall f hx).symm)
+  _ ≤ ∫ x, f x ∂μ := set_integral_le_integral f.integrable (eventually_of_forall (fun x ↦ f.nonneg))
+
+theorem normed_le_div_measure_closedBall_rIn (x : E) :
+    f.normed μ x ≤ 1 / (μ (closedBall c f.rIn)).toReal := by
+  rw [normed_def]
+  gcongr
+  · exact ENNReal.toReal_pos (measure_closedBall_pos _ _ f.rIn_pos).ne' measure_closedBall_lt_top.ne
+  · exact f.le_one
+  · exact f.measure_closedBall_le_integral μ
+
+theorem integral_le_measure_closedBall : ∫ x, f x ∂μ ≤ (μ (closedBall c f.rOut)).toReal := by calc
+  ∫ x, f x ∂μ = ∫ x in closedBall c f.rOut, f x ∂μ := by
+    apply (set_integral_eq_integral_of_forall_compl_eq_zero (fun x hx ↦ ?_)).symm
+    apply f.zero_of_le_dist (le_of_lt _)
+    simpa using hx
+  _ ≤ ∫ x in closedBall c f.rOut, 1 ∂μ := by
+    apply set_integral_mono f.integrable.integrableOn _ (fun x ↦ f.le_one)
+    simp [measure_closedBall_lt_top]
+  _ = (μ (closedBall c f.rOut)).toReal := by simp
+
+local macro_rules | `($x ^ $y)   => `(HPow.hPow $x $y) -- Porting note: See Lean 4 issue #2220
+
+theorem measure_closedBall_div_le_integral [IsAddHaarMeasure μ] (K : ℝ) (h : f.rOut ≤ K * f.rIn) :
+    (μ (closedBall c f.rOut)).toReal / K ^ finrank ℝ E ≤ ∫ x, f x ∂μ := by
+  have K_pos : 0 < K := by
+    simpa [f.rIn_pos, not_lt.2 f.rIn_pos.le] using mul_pos_iff.1 (f.rOut_pos.trans_le h)
+  apply le_trans _ (f.measure_closedBall_le_integral μ)
+  rw [div_le_iff (pow_pos K_pos _), addHaar_closedBall' _ _ f.rIn_pos.le,
+    addHaar_closedBall' _ _ f.rOut_pos.le, ENNReal.toReal_mul, ENNReal.toReal_mul,
+    ENNReal.toReal_ofReal (pow_nonneg f.rOut_pos.le _),
+    ENNReal.toReal_ofReal (pow_nonneg f.rIn_pos.le _), mul_assoc, mul_comm _ (K ^ _), ← mul_assoc,
+    ← mul_pow, mul_comm _ K]
+  gcongr
+  exact f.rOut_pos.le
+
+theorem normed_le_div_measure_closedBall_rOut [IsAddHaarMeasure μ] (K : ℝ) (h : f.rOut ≤ K * f.rIn)
+    (x : E) :
+    f.normed μ x ≤ K ^ finrank ℝ E / (μ (closedBall c f.rOut)).toReal := by
+  have K_pos : 0 < K := by
+    simpa [f.rIn_pos, not_lt.2 f.rIn_pos.le] using mul_pos_iff.1 (f.rOut_pos.trans_le h)
+  have : f x / ∫ y, f y ∂μ ≤ 1 / ∫ y, f y ∂μ := by
+    gcongr
+    · exact f.integral_pos.le
+    · exact f.le_one
+  apply this.trans
+  rw [div_le_div_iff f.integral_pos, one_mul, ← div_le_iff' (pow_pos K_pos _)]
+  · exact f.measure_closedBall_div_le_integral μ K h
+  · exact ENNReal.toReal_pos (measure_closedBall_pos _ _ f.rOut_pos).ne'
+      measure_closedBall_lt_top.ne
+
 end ContDiffBump
chore(Deriv): rename some files (#6167)

Move some files to Analysis/Calculus/FDeriv

Diff
@@ -5,7 +5,7 @@ Authors: Sébastien Gouëzel, Yury Kudryashov
 -/
 import Mathlib.Analysis.Calculus.Deriv.Inv
 import Mathlib.Analysis.Calculus.Deriv.Polynomial
-import Mathlib.Analysis.Calculus.ExtendDeriv
+import Mathlib.Analysis.Calculus.FDeriv.Extend
 import Mathlib.Analysis.Calculus.IteratedDeriv
 import Mathlib.Analysis.SpecialFunctions.ExpDeriv
 import Mathlib.Analysis.SpecialFunctions.PolynomialExp
refactor: split Analysis.Calculus.LocalExtr (#5944)

Also make f/f' arguments implicit in all versions of Rolle's Theorem.

Fixes #4830

API changes

  • exists_Ioo_extr_on_Icc:
    • generalize from functions f : ℝ → ℝ to functions from a conditionally complete linear order to a linear order.
    • make f implicit;
  • exists_local_extr_Ioo:
    • rename to exists_isLocalExtr_Ioo;
    • generalize as above;
    • make f implicit;
  • exists_isExtrOn_Ioo_of_tendsto, exists_isLocalExtr_Ioo_of_tendsto: new lemmas extracted from the proof of exists_hasDerivAt_eq_zero';
  • exists_hasDerivAt_eq_zero, exists_hasDerivAt_eq_zero': make f and f' implicit;
  • exists_deriv_eq_zero, exists_deriv_eq_zero': make f implicit.
Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Yury Kudryashov
 -/
 import Mathlib.Analysis.Calculus.Deriv.Inv
+import Mathlib.Analysis.Calculus.Deriv.Polynomial
 import Mathlib.Analysis.Calculus.ExtendDeriv
 import Mathlib.Analysis.Calculus.IteratedDeriv
 import Mathlib.Analysis.SpecialFunctions.ExpDeriv
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Calculus.Deriv.Inv
 import Mathlib.Analysis.Calculus.ExtendDeriv
@@ -14,6 +9,8 @@ import Mathlib.Analysis.Calculus.IteratedDeriv
 import Mathlib.Analysis.SpecialFunctions.ExpDeriv
 import Mathlib.Analysis.SpecialFunctions.PolynomialExp
 
+#align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
+
 /-!
 # Infinitely smooth transition function
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Floris van Doorn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Floris van Doorn
-
-! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Calculus.BumpFunction.Basic
 import Mathlib.MeasureTheory.Integral.SetIntegral
 
+#align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
+
 /-!
 # Normed bump function
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,13 @@
 Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Calculus.BumpFunction.Basic
 import Mathlib.Analysis.InnerProductSpace.Calculus
 import Mathlib.Analysis.SpecialFunctions.SmoothTransition
+
+#align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
+
 /-!
 # Smooth bump functions in inner product spaces
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Sébastien Gouëzel, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.calculus.bump_function_inner
-! leanprover-community/mathlib commit 3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Calculus.ContDiff
 import Mathlib.Analysis.NormedSpace.FiniteDimension
 
+#align_import analysis.calculus.bump_function_inner from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
+
 /-!
 # Infinitely smooth "bump" functions
 
refactor: split BumpFunctionInner (#5940)

Fixes #4755

refactor: split BumpFunctionInner (#5940)

Fixes #4755

refactor: split BumpFunctionInner (#5940)

Fixes #4755

refactor: split BumpFunctionInner (#5940)

Fixes #4755

chore: remove superfluous parentheses around integrals (#5591)
Diff
@@ -527,7 +527,7 @@ theorem integral_pos : 0 < ∫ x, f x ∂μ := by
   exact measure_ball_pos μ c f.rOut_pos
 #align cont_diff_bump.integral_pos ContDiffBump.integral_pos
 
-theorem integral_normed : (∫ x, f.normed μ x ∂μ) = 1 := by
+theorem integral_normed : ∫ x, f.normed μ x ∂μ = 1 := by
   simp_rw [ContDiffBump.normed, div_eq_mul_inv, mul_comm (f _), ← smul_eq_mul, integral_smul]
   exact inv_mul_cancel f.integral_pos.ne'
 #align cont_diff_bump.integral_normed ContDiffBump.integral_normed
@@ -558,7 +558,7 @@ theorem tendsto_support_normed_smallSets {ι} {φ : ι → ContDiffBump c} {l :
 
 variable (μ)
 
-theorem integral_normed_smul [CompleteSpace X] (z : X) : (∫ x, f.normed μ x • z ∂μ) = z := by
+theorem integral_normed_smul [CompleteSpace X] (z : X) : ∫ x, f.normed μ x • z ∂μ = z := by
   simp_rw [integral_smul_const, f.integral_normed (μ := μ), one_smul]
 #align cont_diff_bump.integral_normed_smul ContDiffBump.integral_normed_smul
 
feat: port Analysis.Calculus.BumpFunctionInner (#4745)

Dependencies 12 + 1024

1025 files ported (98.8%)
465174 lines ported (98.8%)
Show graph

The unported dependencies are

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