This repository has been archived by the owner on Jul 24, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 295
feat(analysis/cauchy_equation): Add Cauchy's Functional Equation #12933
Closed
Closed
Changes from all commits
Commits
Show all changes
61 commits
Select commit
Hold shift + click to select a range
63139ef
testing
MantasBaksys b675fb1
update
MantasBaksys 8ceb0a4
reduce imports
YaelDillies bebb1aa
steinhaus to prove
MantasBaksys c6dd872
blueprint
MantasBaksys 0a7f643
update
MantasBaksys 0d9d525
Merge remote-tracking branch 'origin/master' into Cauchy's-Functional…
MantasBaksys e2aba3c
finish steinhaus_theorem
MantasBaksys 28c3450
update and add variants
MantasBaksys c49f525
update
MantasBaksys 44409e5
fix line length
MantasBaksys 128c15c
remove overhead + add steinhaus_theorem
MantasBaksys 207fbe9
bring back cauchy
MantasBaksys 158c04b
replace occurences
MantasBaksys 7d6de09
fix typos
MantasBaksys 1257029
Merge branch 'mantas-small-lemma' into mantas-steinhaus-theorem
MantasBaksys e5d8c67
update proofs and statements
MantasBaksys b82bf8f
fix dependency
MantasBaksys 1593475
Merge remote-tracking branch 'origin/master' into mantas-small-lemma
MantasBaksys 29475c1
segment into lemmas + golf
MantasBaksys d4693d1
Merge branch 'mantas-small-lemma' into mantas-steinhaus-theorem
MantasBaksys d9c3d89
fix lint
MantasBaksys 64c8e5c
Merge branch 'mantas-small-lemma' into mantas-steinhaus-theorem
MantasBaksys 17940fc
truly fix lint
MantasBaksys 5cd4d99
fix errors
MantasBaksys 635b89a
Merge branch 'mantas-steinhaus-theorem' into Cauchy's-Functional-Equa…
MantasBaksys 50b9884
make compile
MantasBaksys b01c2c0
Merge branch 'mantas-small-lemma' into mantas-steinhaus-theorem
MantasBaksys e378c79
minor cleanup + compile
MantasBaksys e669d36
delete impostor file
MantasBaksys 5852e7c
make compile + update
MantasBaksys 2996a0e
add missing opposite API
MantasBaksys e9cddf7
make compile
MantasBaksys 3eb1278
Merge branch 'mantas-small-lemma' into mantas-steinhaus-theorem
MantasBaksys e251bac
Merge branch 'mantas-steinhaus-theorem' into Cauchy's-Functional-Equa…
MantasBaksys 0eed615
update docstring
MantasBaksys 146f534
blueprint with many errors
MantasBaksys 8b7883c
start changing
MantasBaksys 917db82
add api lemma
MantasBaksys 005050d
use is_linear_map
MantasBaksys ac9635e
minor changes
MantasBaksys cbd54fc
add new changes
MantasBaksys 2d15269
Merge remote-tracking branch 'origin/master' into mantas-montone_on-l…
MantasBaksys 4172650
Merge branch 'mantas-montone_on-lemmas' into Cauchy's-Functional-Equa…
MantasBaksys 76e576a
add monotone version
MantasBaksys fdf75cb
cleanup
MantasBaksys 5a8e738
Merge remote-tracking branch 'origin/master' into Cauchy's-Functional…
YaelDillies 991838c
bump and golf
YaelDillies ba4c4d3
golf further
YaelDillies 122c3b9
Merge remote-tracking branch 'origin/master' into Cauchy's-Functional…
YaelDillies b5bc505
bu
YaelDillies b23ea5c
Merge remote-tracking branch 'origin/master' into Cauchy's-Functional…
YaelDillies 47cdea2
bump, golf
YaelDillies 5328524
kill continuous.is_linear_real
YaelDillies 43948c7
Merge remote-tracking branch 'origin/master' into Cauchy's-Functional…
YaelDillies eb6b1e8
bump
YaelDillies 1e0e02b
more bump
YaelDillies 92817ed
Merge remote-tracking branch 'origin/master' into Cauchy's-Functional…
YaelDillies c17cdc9
move is_open_pos_measure.to_ae_ne_bot
YaelDillies 6b4eb9d
fix build, generalise more
YaelDillies a937abb
move ae_ne_bot.to_ne_zero
YaelDillies File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
/- | ||
Copyright (c) 2022 Mantas Bakšys. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Mantas Bakšys | ||
-/ | ||
import measure_theory.measure.lebesgue.eq_haar | ||
|
||
/-! | ||
# Cauchy's Functional Equation | ||
|
||
This file contains the classical results about the Cauchy's functional equation | ||
`f (x + y) = f x + f y` for functions `f : ℝ → ℝ`. In this file, we prove that the solutions to this | ||
equation are linear up to the case when `f` is a Lebesgue measurable functions, while also deducing | ||
intermediate well-known variants. | ||
-/ | ||
|
||
open add_monoid_hom measure_theory measure_theory.measure metric nnreal set | ||
open_locale pointwise topology | ||
|
||
section seminormed_group | ||
open topological_space | ||
variables {G H : Type*} [seminormed_add_group G] [topological_add_group G] [is_R_or_C H] {s : set G} | ||
|
||
lemma add_monoid_hom.continuous_of_bounded_nhds_zero (f : G →+ H) (hs : s ∈ 𝓝 (0 : G)) | ||
(hbounded : bounded (f '' s)) : continuous f := | ||
begin | ||
obtain ⟨δ, hδ, hUε⟩ := metric.mem_nhds_iff.mp hs, | ||
obtain ⟨C, hC⟩ := (bounded_iff_subset_ball 0).1 (hbounded.mono $ image_subset f hUε), | ||
refine continuous_of_continuous_at_zero _ (continuous_at_iff.2 $ λ ε (hε : _ < _), _), | ||
simp only [gt_iff_lt, dist_zero_right, _root_.map_zero, exists_prop], | ||
obtain ⟨n, hn⟩ := exists_nat_gt (C / ε), | ||
obtain hC₀ | hC₀ := le_or_lt C 0, | ||
{ refine ⟨δ, hδ, λ x hxδ, _⟩, | ||
rwa [eq_of_dist_eq_zero (dist_nonneg.antisymm' $ (mem_closed_ball.1 $ hC $ mem_image_of_mem f $ | ||
mem_ball_zero_iff.2 hxδ).trans hC₀), norm_zero] }, | ||
have hnpos : 0 < (n : ℝ) := (div_pos hC₀ hε).trans hn, | ||
refine ⟨δ / n, div_pos hδ hnpos, λ x hxδ, _⟩, | ||
have h2 : f (n • x) = n • f x := map_nsmul f _ _, | ||
have hn' : (n : H) ≠ 0 := nat.cast_ne_zero.2 (by { rintro rfl, simpa using hnpos }), | ||
simp_rw [nsmul_eq_mul, mul_comm (n : H), ←div_eq_iff hn'] at h2, | ||
replace hxδ : ‖n • x‖ < δ, | ||
{ refine (norm_nsmul_le _ _).trans_lt _, | ||
simpa only [norm_mul, real.norm_coe_nat, lt_div_iff hnpos, mul_comm] using hxδ }, | ||
rw [←h2, norm_div, is_R_or_C.norm_nat_cast, div_lt_iff' hnpos, ←mem_ball_zero_iff], | ||
rw div_lt_iff hε at hn, | ||
exact hC.trans (closed_ball_subset_ball hn) (mem_image_of_mem _ $ mem_ball_zero_iff.2 hxδ), | ||
end | ||
|
||
end seminormed_group | ||
|
||
variables {ι : Type*} [fintype ι] {s : set ℝ} {a : ℝ} | ||
|
||
local notation `ℝⁿ` := ι → ℝ | ||
|
||
lemma add_monoid_hom.measurable_of_continuous (f : ℝ →+ ℝ) (h : measurable f) : continuous f := | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Name says |
||
let ⟨s, hs, hbdd⟩ := h.exists_nhds_zero_bounded f in f.continuous_of_bounded_nhds_zero hs hbdd | ||
|
||
-- do we want this one and where would it go? | ||
lemma is_linear_map_iff_apply_eq_apply_one_mul {M : Type*} [comm_semiring M] (f : M →+ M) : | ||
is_linear_map M f ↔ ∀ x : M, f x = f 1 * x := | ||
begin | ||
refine ⟨λ h x, _, λ h, ⟨map_add f, λ c x, _⟩⟩, | ||
{ convert h.2 x 1 using 1, | ||
{ simp only [algebra.id.smul_eq_mul, mul_one] }, | ||
{ simp only [mul_comm, algebra.id.smul_eq_mul] }}, | ||
{ rw [smul_eq_mul, smul_eq_mul, h (c * x), h x, ←mul_assoc, mul_comm _ c, mul_assoc] } | ||
end | ||
|
||
lemma is_linear_rat (f : ℝ →+ ℝ) (q : ℚ) : f q = f 1 * q := | ||
begin | ||
have := map_rat_cast_smul f ℚ ℚ q (1 : ℝ), | ||
simpa [mul_comm] using this, | ||
end | ||
|
||
lemma additive_is_bounded_of_bounded_on_interval (f : ℝ →+ ℝ) (hs : s ∈ 𝓝 a) | ||
(h : bounded (f '' s)) : ∃ V, V ∈ 𝓝 (0 : ℝ) ∧ bounded (f '' V) := | ||
begin | ||
rcases metric.mem_nhds_iff.mp hs with ⟨δ, hδ, hδa⟩, | ||
refine ⟨ball 0 δ, ball_mem_nhds 0 hδ, _⟩, | ||
rw bounded_iff_forall_norm_le, | ||
simp only [mem_image, mem_ball_zero_iff, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂], | ||
obtain ⟨M, hM⟩ := bounded_iff_forall_norm_le.1 h, | ||
simp only [mem_image, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂] at hM, | ||
refine ⟨M + M, λ x hxδ, (norm_le_add_norm_add _ $ f a).trans $ add_le_add _ $ hM _ $ hδa _⟩, | ||
{ rw ←map_add f, | ||
refine hM _ (hδa _), | ||
simp only [mem_ball], | ||
convert hxδ, | ||
rw [←dist_zero_right, ←dist_add_right x 0 a, zero_add] }, | ||
{ simpa [mem_ball, dist_self] } | ||
end | ||
|
||
-- to generalize | ||
lemma add_monoid_hom.continuous_at_iff_continuous_at_zero (f : ℝ →+ ℝ) : | ||
continuous_at f a ↔ continuous_at f 0 := | ||
begin | ||
refine ⟨λ ha, continuous_at_iff.2 $ λ ε hε, Exists₂.imp (λ δ hδ, _) (continuous_at_iff.1 ha ε hε), | ||
λ h, (continuous_of_continuous_at_zero f h).continuous_at⟩, | ||
refine λ hδf y hyδ, _, | ||
replace hyδ : dist (y + a) a < δ, | ||
{ convert hyδ using 1, | ||
simp only [dist_eq_norm, sub_zero, add_sub_cancel] }, | ||
convert hδf hyδ using 1, | ||
simp only [dist_eq_norm, map_sub, _root_.map_add, _root_.map_zero, sub_zero, add_sub_cancel], | ||
end | ||
|
||
lemma continuous.is_linear_real (f : ℝ →+ ℝ) (h : continuous f) : is_linear_map ℝ f := | ||
(f.to_real_linear_map h).to_linear_map.is_linear | ||
|
||
lemma is_linear_map_real_of_bounded_nhds (f : ℝ →+ ℝ) (hs : s ∈ 𝓝 a) (hf : bounded (f '' s)) : | ||
is_linear_map ℝ f := | ||
let ⟨V, hV0, hVb⟩ := additive_is_bounded_of_bounded_on_interval f hs hf in | ||
(f.continuous_of_bounded_nhds_zero hV0 hVb).is_linear_real f | ||
|
||
lemma monotone_on.is_linear_map_real (f : ℝ →+ ℝ) (hs : s ∈ 𝓝 a) (hf : monotone_on f s) : | ||
is_linear_map ℝ f := | ||
begin | ||
obtain ⟨t, ht, h⟩ := metric.mem_nhds_iff.mp hs, | ||
refine is_linear_map_real_of_bounded_nhds f (closed_ball_mem_nhds a $ half_pos ht) _, | ||
replace h := (closed_ball_subset_ball $ half_lt_self ht).trans h, | ||
rw real.closed_ball_eq_Icc at ⊢ h, | ||
have ha : a - t / 2 ≤ a + t / 2 := by linarith, | ||
refine bounded_of_bdd_above_of_bdd_below (hf.map_bdd_above h _) (hf.map_bdd_below h _), | ||
{ refine ⟨a + t / 2, _, h $ right_mem_Icc.2 ha⟩, | ||
rw upper_bounds_Icc ha, | ||
exact left_mem_Ici }, | ||
{ refine ⟨a - t / 2, _, h $ left_mem_Icc.2 ha⟩, | ||
rw lower_bounds_Icc ha, | ||
exact right_mem_Iic } | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2329,6 +2329,8 @@ by rw [← empty_mem_iff_bot, mem_ae_iff, compl_empty, measure_univ_eq_zero] | |
@[simp] lemma ae_ne_bot : μ.ae.ne_bot ↔ μ ≠ 0 := | ||
ne_bot_iff.trans (not_congr ae_eq_bot) | ||
|
||
instance ae_ne_bot.to_ne_zero [μ.ae.ne_bot] : ne_zero μ := ⟨ae_ne_bot.1 ‹_›⟩ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We have |
||
|
||
@[simp] lemma ae_zero {m0 : measurable_space α} : (0 : measure α).ae = ⊥ := ae_eq_bot.2 rfl | ||
|
||
@[mono] lemma ae_mono (h : μ ≤ ν) : μ.ae ≤ ν.ae := h.absolutely_continuous.ae_le | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't
[is_R_or_C H]
too strong? Is it true for any normed space over rationals?