Skip to content

Commit 002a665

Browse files
committed
Merge branch 'master' into D-Thomine/null_measurable_things
2 parents 657be82 + 4ac22c7 commit 002a665

37 files changed

Lines changed: 1446 additions & 195 deletions

File tree

.github/actions/get-mathlib-ci/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ inputs:
1010
# Default pinned commit used by workflows unless they explicitly override.
1111
# Update this ref as needed to pick up changes to mathlib-ci scripts
1212
# This is also updated automatically by .github/workflows/update_dependencies.yml
13-
default: 57c68e7faac5aea96e58a94ca4a334a1999f0d31
13+
default: 7b1f509a52f9a9b56cbe46eb06885aef458fd5bb
1414
path:
1515
description: Checkout destination path.
1616
required: false

Mathlib.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2113,6 +2113,7 @@ public import Mathlib.Analysis.LocallyConvex.WithSeminorms
21132113
public import Mathlib.Analysis.Matrix.Hermitian
21142114
public import Mathlib.Analysis.Matrix.HermitianFunctionalCalculus
21152115
public import Mathlib.Analysis.Matrix.LDL
2116+
public import Mathlib.Analysis.Matrix.MeasurableSpace
21162117
public import Mathlib.Analysis.Matrix.Normed
21172118
public import Mathlib.Analysis.Matrix.Order
21182119
public import Mathlib.Analysis.Matrix.PosDef
@@ -2361,6 +2362,7 @@ public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpo
23612362
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.ConjSqrt
23622363
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.IntegralRepresentation
23632364
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.Isometric
2365+
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.Measurable
23642366
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.Order
23652367
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.RingInverseOrder
23662368
public import Mathlib.Analysis.SpecialFunctions.Elliptic.Weierstrass
@@ -7650,6 +7652,7 @@ public import Mathlib.Topology.Algebra.Constructions
76507652
public import Mathlib.Topology.Algebra.Constructions.DomMulAct
76517653
public import Mathlib.Topology.Algebra.ContinuousAffineEquiv
76527654
public import Mathlib.Topology.Algebra.ContinuousAffineMap
7655+
public import Mathlib.Topology.Algebra.ContinuousAffineMap.Topology
76537656
public import Mathlib.Topology.Algebra.ContinuousMonoidHom
76547657
public import Mathlib.Topology.Algebra.Equicontinuity
76557658
public import Mathlib.Topology.Algebra.Field
@@ -7711,6 +7714,7 @@ public import Mathlib.Topology.Algebra.Module.ClosedSubmodule
77117714
public import Mathlib.Topology.Algebra.Module.Compact
77127715
public import Mathlib.Topology.Algebra.Module.Complement
77137716
public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Basic
7717+
public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Extend
77147718
public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Idempotent
77157719
public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Invertible
77167720
public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.PiProd

Mathlib/Algebra/BigOperators/NatAntidiagonal.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ This file contains theorems relevant to big operators over `Finset.NatAntidiagon
1616

1717
public section
1818

19-
variable {M N : Type*} [CommMonoid M] [AddCommMonoid N]
19+
variable {M : Type*} [CommMonoid M]
2020

2121
namespace Finset
2222

Mathlib/Algebra/Group/Subgroup/Actions.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ variable {G α β : Type*} [Group G]
2727
section MulAction
2828
variable [MulAction G α] {S : Subgroup G}
2929

30+
/-- This shortcut instance provides a speedup. -/
31+
@[to_additive /-- This shortcut instance provides a speedup. -/]
32+
instance : MulAction S α := inferInstance
33+
3034
@[to_additive] lemma smul_def (g : S) (m : α) : g • m = (g : G) • m := rfl
3135

3236
@[to_additive (attr := simp)]

Mathlib/Algebra/Group/Subgroup/Finite.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ theorem card_le_card_group [Finite G] : Nat.card H ≤ Nat.card G :=
158158
theorem card_le_of_le {H K : Subgroup G} [Finite K] (h : H ≤ K) : Nat.card H ≤ Nat.card K :=
159159
Nat.card_le_card_of_injective _ (Subgroup.inclusion_injective h)
160160

161+
@[to_additive]
162+
theorem card_lt_of_lt {H K : Subgroup G} [Finite K] (h : H < K) : Nat.card H < Nat.card K :=
163+
(Set.toFinite _).card_lt_card h
164+
161165
@[to_additive]
162166
theorem card_map_of_injective {H : Type*} [Group H] {K : Subgroup G} {f : G →* H}
163167
(hf : Function.Injective f) :

Mathlib/Algebra/Polynomial/Roots.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,16 @@ theorem finite_setOfPred_isRoot {p : R[X]} (hp : p ≠ 0) : Set.Finite { x | IsR
144144

145145
@[deprecated (since := "2026-07-09")] alias finite_setOf_isRoot := finite_setOfPred_isRoot
146146

147+
/-- Nonzero polynomials have no roots away from a finite set. -/
148+
lemma eventually_cofinite_not_isRoot {p : R[X]} (hp : p ≠ 0) :
149+
∀ᶠ x in Filter.cofinite, ¬p.IsRoot x :=
150+
(finite_setOfPred_isRoot hp).compl_mem_cofinite
151+
152+
/-- Nonzero polynomials are nonzero away from a finite set. -/
153+
lemma eventually_eval_ne_zero_cofinite {p : R[X]} (hp : p ≠ 0) :
154+
∀ᶠ x in Filter.cofinite, p.eval x ≠ 0 :=
155+
eventually_cofinite_not_isRoot hp
156+
147157
theorem eq_zero_of_infinite_isRoot (p : R[X]) (h : Set.Infinite { x | IsRoot p x }) : p = 0 :=
148158
not_imp_comm.mp finite_setOfPred_isRoot h
149159

Mathlib/Analysis/Calculus/Deriv/Basic.lean

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,46 @@ theorem Filter.EventuallyEq.nhdsNE_deriv (h : f₁ =ᶠ[𝓝[≠] x] f) : deriv
658658
filter_upwards [h] with y hy
659659
apply Filter.EventuallyEq.deriv hy
660660

661+
/--
662+
If two functions agree on a codiscrete subset of `s`, then so do their derivatives within any
663+
subset `t` of `s`.
664+
-/
665+
theorem Filter.EventuallyEq.codiscreteWithin_derivWithin'
666+
(h : f₁ =ᶠ[codiscreteWithin s] f) (ht : t ⊆ s) :
667+
derivWithin f₁ t =ᶠ[codiscreteWithin s] derivWithin f t := by
668+
filter_upwards [h.codiscreteWithin_fderivWithin' (𝕜 := 𝕜) ht] with y hy
669+
simp [derivWithin, hy]
670+
671+
/--
672+
If two functions agree on a codiscrete subset of `s`, then so do their derivatives within `s`.
673+
-/
674+
theorem Filter.EventuallyEq.codiscreteWithin_derivWithin
675+
(h : f₁ =ᶠ[codiscreteWithin s] f) :
676+
derivWithin f₁ s =ᶠ[codiscreteWithin s] derivWithin f s :=
677+
h.codiscreteWithin_derivWithin' Subset.rfl
678+
679+
/--
680+
If two functions agree on a codiscrete subset of an open set `s`, then so do their derivatives.
681+
-/
682+
theorem Filter.EventuallyEq.codiscreteWithin_deriv (h : f₁ =ᶠ[codiscreteWithin s] f)
683+
(hs : IsOpen s) :
684+
deriv f₁ =ᶠ[codiscreteWithin s] deriv f := by
685+
filter_upwards [h.codiscreteWithin_fderiv (𝕜 := 𝕜) hs] with y hy
686+
simp_rw [deriv, hy]
687+
688+
/-- If two functions agree on a codiscrete subset of `𝕜`, then so do their derivatives within
689+
any subset `s` of `𝕜`. -/
690+
theorem Filter.EventuallyEq.codiscrete_derivWithin
691+
(h : f₁ =ᶠ[codiscrete 𝕜] f) :
692+
derivWithin f₁ s =ᶠ[codiscrete 𝕜] derivWithin f s :=
693+
h.codiscreteWithin_derivWithin' <| subset_univ _
694+
695+
/-- If two functions agree on a codiscrete subset of `𝕜`, then so do their derivatives. -/
696+
theorem Filter.EventuallyEq.codiscrete_deriv
697+
(h : f₁ =ᶠ[codiscrete 𝕜] f) :
698+
deriv f₁ =ᶠ[codiscrete 𝕜] deriv f :=
699+
h.codiscreteWithin_deriv isOpen_univ
700+
661701
end congr
662702

663703
section id

Mathlib/Analysis/Calculus/FDeriv/Congr.lean

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,47 @@ theorem Filter.EventuallyEq.fderiv_eq (h : f₁ =ᶠ[𝓝 x] f) : fderiv 𝕜 f
261261
protected theorem Filter.EventuallyEq.fderiv (h : f₁ =ᶠ[𝓝 x] f) : fderiv 𝕜 f₁ =ᶠ[𝓝 x] fderiv 𝕜 f :=
262262
h.eventuallyEq_nhds.mono fun _ h => h.fderiv_eq
263263

264+
/-- If two functions agree on a codiscrete subset of `s`, then so do their derivatives within
265+
any subset `t` of `s`. -/
266+
theorem Filter.EventuallyEq.codiscreteWithin_fderivWithin'
267+
(h : f₁ =ᶠ[codiscreteWithin s] f) (ht : t ⊆ s) :
268+
fderivWithin 𝕜 f₁ t =ᶠ[codiscreteWithin s] fderivWithin 𝕜 f t := by
269+
filter_upwards [h, self_mem_codiscreteWithin s] with x hx hxs
270+
have hsx : f₁ =ᶠ[𝓝[s] x] f := by
271+
rw [← insert_sdiff_self_of_mem hxs, nhdsWithin_insert, EventuallyEq,
272+
eventually_sup, eventually_pure]
273+
exact ⟨hx, eventuallyEq_codiscreteWithin_iff_forall_eventuallyEq_nhdsWithin.1 h x hxs⟩
274+
exact (hsx.filter_mono <| nhdsWithin_mono x ht).fderivWithin_eq hx
275+
276+
/-- If two functions agree on a codiscrete subset of `s`, then so do their derivatives
277+
within `s`. -/
278+
theorem Filter.EventuallyEq.codiscreteWithin_fderivWithin
279+
(h : f₁ =ᶠ[codiscreteWithin s] f) :
280+
fderivWithin 𝕜 f₁ s =ᶠ[codiscreteWithin s] fderivWithin 𝕜 f s :=
281+
h.codiscreteWithin_fderivWithin' Subset.rfl
282+
283+
/-- If two functions agree on a codiscrete subset of an open set `s`, then so do their
284+
derivatives. -/
285+
theorem Filter.EventuallyEq.codiscreteWithin_fderiv
286+
(h : f₁ =ᶠ[codiscreteWithin s] f) (hs : IsOpen s) :
287+
fderiv 𝕜 f₁ =ᶠ[codiscreteWithin s] fderiv 𝕜 f := by
288+
filter_upwards [h.codiscreteWithin_fderivWithin (𝕜 := 𝕜), self_mem_codiscreteWithin s]
289+
intro x hx hxs
290+
simp_all [fderivWithin_of_isOpen]
291+
292+
/-- If two functions agree on a codiscrete subset of `E`, then so do their derivatives within
293+
any subset `s` of `E`. -/
294+
theorem Filter.EventuallyEq.codiscrete_fderivWithin
295+
(h : f₁ =ᶠ[codiscrete E] f) :
296+
fderivWithin 𝕜 f₁ s =ᶠ[codiscrete E] fderivWithin 𝕜 f s :=
297+
h.codiscreteWithin_fderivWithin' <| subset_univ _
298+
299+
/-- If two functions agree on a codiscrete subset of `E`, then so do their derivatives. -/
300+
theorem Filter.EventuallyEq.codiscrete_fderiv
301+
(h : f₁ =ᶠ[codiscrete E] f) :
302+
fderiv 𝕜 f₁ =ᶠ[codiscrete E] fderiv 𝕜 f :=
303+
h.codiscreteWithin_fderiv isOpen_univ
304+
264305
end congr
265306

266307
end

Mathlib/Analysis/Complex/JensenFormula.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ theorem MeromorphicOn.circleAverage_log_norm {c : ℂ} {R : ℝ} {f : ℂ →
368368
rw [circleAverage_congr_codiscreteWithin (f₂ := 0) _ hR]
369369
· simp only [circleAverage, mul_inv_rev, Pi.zero_apply, intervalIntegral.integral_zero,
370370
smul_eq_mul, mul_zero]
371-
apply Filter.codiscreteWithin_mono (U := CB) sphere_subset_closedBall
371+
apply Filter.codiscreteWithin_mono (s := CB) sphere_subset_closedBall
372372
filter_upwards [this] with z hz
373373
simp_all
374374

Mathlib/Analysis/Distribution/TemperateGrowth.lean

Lines changed: 66 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -302,15 +302,6 @@ lemma _root_.ContinuousLinearEquiv.hasTemperateGrowth (f : E ≃L[ℝ] F) :
302302
Function.HasTemperateGrowth f :=
303303
f.toContinuousLinearMap.hasTemperateGrowth
304304

305-
@[fun_prop]
306-
theorem Complex.hasTemperateGrowth_ofReal : Complex.ofReal.HasTemperateGrowth :=
307-
(Complex.ofRealCLM).hasTemperateGrowth
308-
309-
variable (𝕜) in
310-
@[fun_prop]
311-
theorem RCLike.hasTemperateGrowth_ofReal [RCLike 𝕜] : (RCLike.ofReal (K := 𝕜)).HasTemperateGrowth :=
312-
(RCLike.ofRealCLM (K := 𝕜)).hasTemperateGrowth
313-
314305
variable [NormedAddCommGroup H] [InnerProductSpace ℝ H]
315306

316307
@[fun_prop]
@@ -412,6 +403,72 @@ theorem hasTemperateGrowth_one_add_norm_sq_rpow (r : ℝ) :
412403

413404
end Function
414405

406+
section Real
407+
408+
@[fun_prop]
409+
theorem Real.hasTemperateGrowth_sin :
410+
Real.sin.HasTemperateGrowth := by
411+
refine ⟨Real.contDiff_sin, fun n ↦ ⟨0, 1, fun x ↦ ?_⟩⟩
412+
simpa [norm_iteratedFDeriv_eq_norm_iteratedDeriv] using Real.abs_iteratedDeriv_sin_le_one n x
413+
414+
@[fun_prop]
415+
theorem Real.hasTemperateGrowth_cos :
416+
Real.cos.HasTemperateGrowth := by
417+
refine ⟨Real.contDiff_cos, fun n ↦ ⟨0, 1, fun x ↦ ?_⟩⟩
418+
simpa [norm_iteratedFDeriv_eq_norm_iteratedDeriv] using Real.abs_iteratedDeriv_cos_le_one n x
419+
420+
end Real
421+
422+
section Complex
423+
424+
@[fun_prop]
425+
theorem Complex.hasTemperateGrowth_ofReal : Complex.ofReal.HasTemperateGrowth :=
426+
Complex.ofRealCLM.hasTemperateGrowth
427+
428+
@[deprecated (since := "2026-08-18")] alias Function.Complex.hasTemperateGrowth_ofReal :=
429+
Complex.hasTemperateGrowth_ofReal
430+
431+
@[fun_prop]
432+
theorem Complex.hasTemperateGrowth_re : Complex.re.HasTemperateGrowth :=
433+
Complex.reCLM.hasTemperateGrowth
434+
435+
@[fun_prop]
436+
theorem Complex.hasTemperateGrowth_im : Complex.im.HasTemperateGrowth :=
437+
Complex.imCLM.hasTemperateGrowth
438+
439+
/-- The function `x ↦ exp (x * I)` has temperate growth. -/
440+
@[fun_prop]
441+
theorem Complex.hasTemperateGrowth_exp_mul_I :
442+
(fun x : ℝ ↦ Complex.exp (x * Complex.I)).HasTemperateGrowth := by
443+
simp only [Complex.exp_ofReal_mul_I]
444+
fun_prop
445+
446+
end Complex
447+
448+
section RCLike
449+
450+
variable [RCLike 𝕜]
451+
452+
variable (𝕜) in
453+
@[fun_prop]
454+
theorem RCLike.hasTemperateGrowth_ofReal : (RCLike.ofReal (K := 𝕜)).HasTemperateGrowth :=
455+
(RCLike.ofRealCLM (K := 𝕜)).hasTemperateGrowth
456+
457+
@[deprecated (since := "2026-08-18")] alias Function.RCLike.hasTemperateGrowth_ofReal :=
458+
RCLike.hasTemperateGrowth_ofReal
459+
460+
variable (𝕜) in
461+
@[fun_prop]
462+
theorem RCLike.hasTemperateGrowth_re : (RCLike.re : 𝕜 → ℝ).HasTemperateGrowth :=
463+
(RCLike.reCLM (K := 𝕜)).hasTemperateGrowth
464+
465+
variable (𝕜) in
466+
@[fun_prop]
467+
theorem RCLike.hasTemperateGrowth_im : (RCLike.im : 𝕜 → ℝ).HasTemperateGrowth :=
468+
(RCLike.imCLM (K := 𝕜)).hasTemperateGrowth
469+
470+
end RCLike
471+
415472
namespace MeasureTheory.Measure
416473

417474
variable [NormedAddCommGroup E] [MeasurableSpace E]

0 commit comments

Comments
 (0)