Skip to content

Commit e14415f

Browse files
committed
feat(MeasureTheory): add automatic continuity of measurable multiplicative maps on ℝ
Prove that a Borel-measurable solution of the multiplicative Cauchy functional equation on `ℝ` is continuous: a measurable `f : ℝ → 𝕜` (`RCLike 𝕜`) with `f (x + y) = f x * f y` is automatically continuous. This is the multiplicative companion of the additive automatic-continuity theorem `MeasureTheory.Measure.AddMonoidHom.continuous_of_measurable`. The main results are `continuous_of_measurable_of_mul` (for `f : ℝ → 𝕜`), `continuous_of_measurable_of_mul_units` (for `f : ℝ → 𝕜ˣ`), and `AddChar.continuous_of_measurable` (for a character `ψ : AddChar ℝ 𝕜`). The modulus `t ↦ ‖f t‖` is multiplicative, so `t ↦ Real.log ‖f t‖` is additive and continuous by the additive theorem; the phase is then recovered from the continuous primitive of `f` via the Lebesgue differentiation theorem and a sliding-window identity.
1 parent 8c1ac87 commit e14415f

2 files changed

Lines changed: 156 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5551,6 +5551,7 @@ public import Mathlib.MeasureTheory.Measure.FiniteMeasureExt
55515551
public import Mathlib.MeasureTheory.Measure.FiniteMeasurePi
55525552
public import Mathlib.MeasureTheory.Measure.FiniteMeasureProd
55535553
public import Mathlib.MeasureTheory.Measure.GiryMonad
5554+
public import Mathlib.MeasureTheory.Measure.Haar.AutomaticContinuity
55545555
public import Mathlib.MeasureTheory.Measure.Haar.Basic
55555556
public import Mathlib.MeasureTheory.Measure.Haar.Disintegration
55565557
public import Mathlib.MeasureTheory.Measure.Haar.DistribChar
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
/-
2+
Copyright (c) 2026 Ondřej Čertík. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Ondřej Čertík
5+
-/
6+
module
7+
8+
public import Mathlib.Algebra.Group.AddChar
9+
public import Mathlib.Analysis.RCLike.Basic
10+
public import Mathlib.MeasureTheory.Function.LocallyIntegrable
11+
public import Mathlib.MeasureTheory.Integral.DominatedConvergence
12+
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.LebesgueDifferentiationThm
13+
public import Mathlib.MeasureTheory.Measure.Haar.NormedSpace
14+
15+
/-!
16+
# Automatic continuity of measurable multiplicative maps on `ℝ`
17+
18+
A Borel-measurable solution of the *multiplicative* Cauchy functional equation on `ℝ`, i.e. a
19+
measurable `f : ℝ → 𝕜` (with `RCLike 𝕜`) satisfying `f (x + y) = f x * f y`, is
20+
automatically continuous. This is the multiplicative companion of the additive automatic-continuity
21+
theorem `MeasureTheory.Measure.AddMonoidHom.continuous_of_measurable`.
22+
23+
## Main results
24+
25+
* `AddChar.continuous_of_measurable`: a measurable additive character `ψ : AddChar ℝ 𝕜` is
26+
continuous.
27+
* `continuous_of_measurable_of_mul`: a measurable `f : ℝ → 𝕜` with `f (x + y) = f x * f y` is
28+
continuous (either `f` is identically zero, or it is nowhere zero).
29+
* `continuous_of_measurable_of_mul_units`: the same for a measurable `f : ℝ → 𝕜ˣ` with
30+
`f (x + y) = f x * f y`.
31+
32+
## Implementation notes
33+
34+
If `f 0 = 0` then `f` vanishes identically (since `f x = f x * f 0`) and is continuous, so we may
35+
assume `f` is nowhere zero. The modulus `‖f‖` is multiplicative, so `t ↦ Real.log ‖f t‖` is an
36+
additive measurable map `ℝ → ℝ`, hence continuous by
37+
`MeasureTheory.Measure.AddMonoidHom.continuous_of_measurable`; thus `‖f‖` is continuous and `f` is
38+
locally bounded, so interval integrable. The primitive `F y = ∫ t in 0..y, f t` is continuous, and
39+
the Lebesgue differentiation theorem (`LocallyIntegrable.ae_hasDerivAt_integral`) forces `F a ≠ 0`
40+
for some `a` (otherwise `f = 0` almost everywhere, impossible since `f` never vanishes). The
41+
homomorphism property gives the sliding-window identity
42+
`f s * F a = ∫ t in s..(s + a), f t = F (s + a) - F s`, so `f s = (F (s + a) - F s) / F a` is
43+
continuous in `s`.
44+
45+
These results are the `ℝ`-domain analytic special case of the classical fact that a measurable
46+
homomorphism between locally compact, second-countable groups is continuous.
47+
48+
## Tags
49+
50+
automatic continuity, measurable, multiplicative, Cauchy functional equation
51+
-/
52+
53+
public section
54+
55+
open MeasureTheory
56+
57+
variable {𝕜 : Type*} [RCLike 𝕜] [MeasurableSpace 𝕜] [BorelSpace 𝕜]
58+
59+
/-- Nonvanishing case of `continuous_of_measurable_of_mul`: a Borel-measurable `f : ℝ → 𝕜` with
60+
`f (x + y) = f x * f y` and `f 0 ≠ 0` (equivalently, `f` nowhere zero) is continuous. -/
61+
private theorem continuous_of_measurable_of_mul_aux {f : ℝ → 𝕜} (hmeas : Measurable f)
62+
(hmul : ∀ x y, f (x + y) = f x * f y) (h0 : f 00) : Continuous f := by
63+
-- The hypotheses force `f` to vanish nowhere.
64+
have hne : ∀ x, f x ≠ 0 := by
65+
intro x hx
66+
apply h0
67+
have hfac : f 0 = f x * f (-x) := by rw [← hmul x (-x), add_neg_cancel]
68+
rw [hfac, hx, zero_mul]
69+
have hpos : ∀ t, 0 < ‖f t‖ := fun t ↦ norm_pos_iff.mpr (hne t)
70+
-- The modulus is continuous, via the additive theorem applied to `t ↦ Real.log ‖f t‖`.
71+
have hbadd : ∀ x y, Real.log ‖f (x + y)‖ = Real.log ‖f x‖ + Real.log ‖f y‖ := fun x y ↦ by
72+
rw [hmul, norm_mul, Real.log_mul (hpos x).ne' (hpos y).ne']
73+
have hbmeas : Measurable fun t ↦ Real.log ‖f t‖ :=
74+
Real.measurable_log.comp (continuous_norm.measurable.comp hmeas)
75+
have hbcont : Continuous fun t ↦ Real.log ‖f t‖ :=
76+
Measure.AddMonoidHom.continuous_of_measurable
77+
(AddMonoidHom.mk' (fun t ↦ Real.log ‖f t‖) hbadd) hbmeas
78+
have hnormcont : Continuous fun t ↦ ‖f t‖ :=
79+
(Real.continuous_exp.comp hbcont).congr fun t ↦ Real.exp_log (hpos t)
80+
-- `f` is interval integrable on every interval, dominated by the continuous modulus.
81+
have haesm : AEStronglyMeasurable f volume := hmeas.aestronglyMeasurable
82+
have hii : ∀ a b : ℝ, IntervalIntegrable f volume a b := fun a b ↦ by
83+
rw [intervalIntegrable_iff]
84+
exact (intervalIntegrable_iff.mp (hnormcont.intervalIntegrable a b)).mono'
85+
haesm.restrict (ae_of_all _ fun _ ↦ le_rfl)
86+
-- The primitive of `f` is continuous.
87+
set F : ℝ → 𝕜 := fun y ↦ ∫ t in (0 : ℝ)..y, f t with hFdef
88+
have hFcont : Continuous F := intervalIntegral.continuous_primitive hii 0
89+
-- Some window `[0, a]` has nonzero integral, by the Lebesgue differentiation theorem.
90+
have hExists : ∃ a : ℝ, F a ≠ 0 := by
91+
by_contra! hcon
92+
have hloc : LocallyIntegrable f volume :=
93+
hnormcont.locallyIntegrable.mono haesm (ae_of_all _ fun x ↦ (norm_norm (f x)).ge)
94+
have hzero : ∀ᵐ x : ℝ, f x = 0 := by
95+
have hF0 : F = fun _ ↦ (0 : 𝕜) := funext hcon
96+
filter_upwards [LocallyIntegrable.ae_hasDerivAt_integral hloc] with x hx
97+
have hd := hx 0
98+
rw [← hFdef, hF0] at hd
99+
exact ((hasDerivAt_const x (0 : 𝕜)).unique hd).symm
100+
rw [ae_iff] at hzero
101+
have huniv : {x : ℝ | ¬ f x = 0} = Set.univ := by
102+
ext x; simpa using hne x
103+
rw [huniv, Real.volume_univ] at hzero
104+
exact ENNReal.top_ne_zero hzero
105+
-- The sliding-window identity recovers `f` from the continuous primitive.
106+
obtain ⟨a, ha⟩ := hExists
107+
have hwindow : ∀ s : ℝ, f s = (F (s + a) - F s) / F a := by
108+
intro s
109+
have h2 : (∫ u in (0 : ℝ)..a, f (s + u)) = f s * ∫ u in (0 : ℝ)..a, f u := by
110+
simp_rw [hmul s, intervalIntegral.integral_const_mul]
111+
have hsub : f s * F a = ∫ t in s..(s + a), f t := by
112+
have hFa : F a = ∫ u in (0 : ℝ)..a, f u := rfl
113+
rw [hFa, ← h2, intervalIntegral.integral_comp_add_left f s, add_zero]
114+
have hadj : F (s + a) - F s = ∫ t in s..(s + a), f t := by
115+
have h := intervalIntegral.integral_add_adjacent_intervals (hii 0 s) (hii s (s + a))
116+
have hFsa : F (s + a) = ∫ t in (0 : ℝ)..(s + a), f t := rfl
117+
have hFs : F s = ∫ t in (0 : ℝ)..s, f t := rfl
118+
rw [hFsa, hFs, ← h]; ring
119+
rw [eq_div_iff ha, hsub, hadj]
120+
exact (((hFcont.comp (continuous_id.add continuous_const)).sub hFcont).div_const (F a)).congr
121+
fun s ↦ (hwindow s).symm
122+
123+
/-- **Automatic continuity for the multiplicative Cauchy equation.** A Borel-measurable
124+
`f : ℝ → 𝕜` (`RCLike 𝕜`, e.g. `ℝ` or `ℂ`) with `f (x + y) = f x * f y` is continuous. No
125+
nonvanishing hypothesis is needed: such an `f` is either identically zero or nowhere zero. This is
126+
the multiplicative companion of `MeasureTheory.Measure.AddMonoidHom.continuous_of_measurable`. -/
127+
theorem continuous_of_measurable_of_mul {f : ℝ → 𝕜} (hmeas : Measurable f)
128+
(hmul : ∀ x y, f (x + y) = f x * f y) : Continuous f := by
129+
rcases eq_or_ne (f 0) 0 with h0 | h0
130+
· have hf0 : f = fun _ ↦ (0 : 𝕜) := funext fun x ↦ by
131+
have := hmul x 0; rwa [add_zero, h0, mul_zero] at this
132+
rw [hf0]; exact continuous_const
133+
· exact continuous_of_measurable_of_mul_aux hmeas hmul h0
134+
135+
/-- **Automatic continuity for measurable homomorphisms `(ℝ, +) → 𝕜ˣ`.** A Borel-measurable
136+
`f : ℝ → 𝕜ˣ` (`RCLike 𝕜`) with `f (x + y) = f x * f y` is continuous. This specializes at `𝕜 = ℂ`
137+
to the automatic continuity of measurable group homomorphisms `(ℝ, +) → ℂˣ`. -/
138+
theorem continuous_of_measurable_of_mul_units {f : ℝ → 𝕜ˣ} (hmeas : Measurable f)
139+
(hmul : ∀ x y, f (x + y) = f x * f y) : Continuous f := by
140+
have hval : Measurable fun x ↦ (f x : 𝕜) := (comap_measurable Units.val).comp hmeas
141+
have hmulval : ∀ x y, (f (x + y) : 𝕜) = (f x : 𝕜) * (f y : 𝕜) := by
142+
intro x y; rw [hmul, Units.val_mul]
143+
have hcont : Continuous fun x ↦ (f x : 𝕜) :=
144+
continuous_of_measurable_of_mul hval hmulval
145+
rw [Units.continuous_iff]
146+
exact ⟨hcont, (hcont.inv₀ fun x ↦ (f x).ne_zero).congr
147+
fun x ↦ (Units.val_inv_eq_inv_val (f x)).symm⟩
148+
149+
/-- **Automatic continuity of measurable additive characters on `ℝ`.** A Borel-measurable additive
150+
character `ψ : AddChar ℝ 𝕜` (`RCLike 𝕜`) is continuous. This is the multiplicative companion of
151+
`MeasureTheory.Measure.AddMonoidHom.continuous_of_measurable`; at `𝕜 = ℂ` it gives the automatic
152+
continuity of measurable characters `ℝ → ℂ`. -/
153+
theorem AddChar.continuous_of_measurable (ψ : AddChar ℝ 𝕜) (hmeas : Measurable ψ) :
154+
Continuous ψ :=
155+
continuous_of_measurable_of_mul hmeas ψ.map_add_eq_mul

0 commit comments

Comments
 (0)