Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat(measure_theory/{lp_space,set_integral}): extend linear map lemmas from R to is_R_or_C #8210

Closed
wants to merge 41 commits into from
Closed
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
be00f14
extend integral comp lemmas
RemyDegenne Jul 6, 2021
5495f8e
add space
RemyDegenne Jul 6, 2021
c354445
undo accidental deletion of integral_apply
RemyDegenne Jul 6, 2021
81dd754
fix
RemyDegenne Jul 6, 2021
fd532ea
Update docstring
RemyDegenne Jul 6, 2021
603a922
use nondiscrete_normed_field
RemyDegenne Jul 6, 2021
9aca324
Merge branch 'integral_comp' of github.com:leanprover-community/mathl…
RemyDegenne Jul 6, 2021
30dddea
use semi_normed_space
RemyDegenne Jul 6, 2021
e8f80d2
use semi_normed_space
RemyDegenne Jul 6, 2021
897f5b7
Revert "use semi_normed_space"
RemyDegenne Jul 6, 2021
67e010f
add one semi_
RemyDegenne Jul 6, 2021
c6f7218
use more semi_normed_space
RemyDegenne Jul 6, 2021
3abe826
use semi_normed_group
RemyDegenne Jul 6, 2021
5cefb13
distinguish normed and semi_normed in lp_space
RemyDegenne Jul 6, 2021
af62add
prove completeness of Lp with only semi_
RemyDegenne Jul 6, 2021
4756a3a
prove completeness of Lp with only semi_
RemyDegenne Jul 6, 2021
5bce86a
add many semi_ and pseudo_ in bounded.lean
RemyDegenne Jul 6, 2021
da9fc10
add semi_ to lp_space lemmas about bounded
RemyDegenne Jul 6, 2021
4d16fed
add some semi_ in compact.lean
RemyDegenne Jul 6, 2021
e6a45f5
more semi_ in lp_space
RemyDegenne Jul 6, 2021
b66ca78
fix
RemyDegenne Jul 6, 2021
5300fa3
fix lint
RemyDegenne Jul 6, 2021
0ef8151
Merge branch 'integral_comp' of https://github.com/leanprover-communi…
RemyDegenne Jul 7, 2021
9acee35
undo indicator_function
RemyDegenne Jul 7, 2021
1920f24
undo bochner_integration
RemyDegenne Jul 7, 2021
619507e
undo borel_space
RemyDegenne Jul 7, 2021
7dd7bf6
undo l1_space
RemyDegenne Jul 7, 2021
073c244
undo set_integral
RemyDegenne Jul 7, 2021
46f2a02
undo simple_func_dense
RemyDegenne Jul 7, 2021
9e40657
undo bounded and compact
RemyDegenne Jul 7, 2021
6722134
undo gromov_hausdorff
RemyDegenne Jul 7, 2021
762c3cd
fake commit
RemyDegenne Jul 7, 2021
a01130f
fake commit
RemyDegenne Jul 7, 2021
f31481c
Merge remote-tracking branch 'origin/master' into integral_comp
RemyDegenne Jul 7, 2021
d76e2c3
remove semi_ in lp_space
RemyDegenne Jul 7, 2021
533290e
remove primes in lp_space
RemyDegenne Jul 7, 2021
2185b53
more undo in lp_space
RemyDegenne Jul 7, 2021
5103d1b
undo
RemyDegenne Jul 7, 2021
bb533c9
undo bounded
RemyDegenne Jul 7, 2021
56372a4
add references in docstring
RemyDegenne Jul 7, 2021
d418652
Update src/measure_theory/lp_space.lean
RemyDegenne Jul 11, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions src/analysis/calculus/parametric_integral.lean
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ begin
refine ⟨hF'_int, _⟩,
simp_rw has_deriv_at_iff_has_fderiv_at at h_diff ⊢,
rwa continuous_linear_map.integral_comp_comm _ hF'_int at key,
all_goals { apply_instance, },
end

/-- Derivative under integral of `x ↦ ∫ F x a` at a given point `x₀ : ℝ`, assuming
Expand Down
43 changes: 23 additions & 20 deletions src/measure_theory/lp_space.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1540,19 +1540,23 @@ lemma continuous_comp_Lp [fact (1 ≤ p)] (hg : lipschitz_with c g) (g0 : g 0 =
end lipschitz_with

namespace continuous_linear_map
variables [normed_space E] [normed_space F]
variables {𝕜 : Type*} [nondiscrete_normed_field 𝕜] [normed_space 𝕜 E] [normed_space 𝕜 F]

/-- Composing `f : Lp ` with `L : E →L[] F`. -/
def comp_Lp (L : E →L[] F) (f : Lp E p μ) : Lp F p μ :=
/-- Composing `f : Lp ` with `L : E →L[𝕜] F`. -/
def comp_Lp (L : E →L[𝕜] F) (f : Lp E p μ) : Lp F p μ :=
L.lipschitz.comp_Lp (map_zero L) f

lemma coe_fn_comp_Lp (L : E →L[] F) (f : Lp E p μ) :
lemma coe_fn_comp_Lp (L : E →L[𝕜] F) (f : Lp E p μ) :
∀ᵐ a ∂μ, (L.comp_Lp f) a = L (f a) :=
lipschitz_with.coe_fn_comp_Lp _ _ _

variables (μ p)
/-- Composing `f : Lp E p μ` with `L : E →L[ℝ] F`, seen as a `ℝ`-linear map on `Lp E p μ`. -/
def comp_Lpₗ (L : E →L[ℝ] F) : (Lp E p μ) →ₗ[ℝ] (Lp F p μ) :=
lemma norm_comp_Lp_le (L : E →L[𝕜] F) (f : Lp E p μ) : ∥L.comp_Lp f∥ ≤ ∥L∥ * ∥f∥ :=
lipschitz_with.norm_comp_Lp_le _ _ _

variables (μ p) [measurable_space 𝕜] [opens_measurable_space 𝕜]

/-- Composing `f : Lp E p μ` with `L : E →L[𝕜] F`, seen as a `𝕜`-linear map on `Lp E p μ`. -/
def comp_Lpₗ (L : E →L[𝕜] F) : (Lp E p μ) →ₗ[𝕜] (Lp F p μ) :=
{ to_fun := λ f, L.comp_Lp f,
map_add' := begin
intros f g,
Expand All @@ -1571,18 +1575,17 @@ def comp_Lpₗ (L : E →L[ℝ] F) : (Lp E p μ) →ₗ[ℝ] (Lp F p μ) :=
simp only [ha1, ha2, ha3, ha4, map_smul, pi.smul_apply],
end }

variables {μ p}
lemma norm_comp_Lp_le (L : E →L[ℝ] F) (f : Lp E p μ) : ∥L.comp_Lp f∥ ≤ ∥L∥ * ∥f∥ :=
lipschitz_with.norm_comp_Lp_le _ _ _

variables (μ p)

/-- Composing `f : Lp E p μ` with `L : E →L[ℝ] F`, seen as a continuous `ℝ`-linear map on
`Lp E p μ`. -/
def comp_LpL [fact (1 ≤ p)] (L : E →L[ℝ] F) : (Lp E p μ) →L[ℝ] (Lp F p μ) :=
/-- Composing `f : Lp E p μ` with `L : E →L[𝕜] F`, seen as a continuous `𝕜`-linear map on
`Lp E p μ`. See also the similar
* `linear_map.comp_left` for functions,
* `continuous_linear_map.comp_left_continuous` for continuous functions,
* `continuous_linear_map.comp_left_continuous_bounded` for bounded continuous functions,
* `continuous_linear_map.comp_left_continuous_compact` for continuous functions on compact spaces.
-/
def comp_LpL [fact (1 ≤ p)] (L : E →L[𝕜] F) : (Lp E p μ) →L[𝕜] (Lp F p μ) :=
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Constructions like this are often hard to find in mathlib, because you don't think about them until you need them. While you're working here, would you mind adding a cross-reference to the similar constructions continuous_linear_map.comp_left_continuous, continuous_linear_map.comp_left_continuous_bounded, just to increase visibility?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!
Doing so, I realized that I did not know what comp_LpL was. It was in the same section as a lemma I wanted to generalize, so it got the same treatment, but I did not even read it.

linear_map.mk_continuous (L.comp_Lpₗ p μ) ∥L∥ L.norm_comp_Lp_le

lemma norm_compLpL_le [fact (1 ≤ p)] (L : E →L[] F) :
lemma norm_compLpL_le [fact (1 ≤ p)] (L : E →L[𝕜] F) :
∥L.comp_LpL p μ∥ ≤ ∥L∥ :=
linear_map.mk_continuous_norm_le _ (norm_nonneg _) _

Expand Down Expand Up @@ -1924,7 +1927,7 @@ begin
have h : ∀ᵐ x ∂μ, ∃ l : E,
at_top.tendsto (λ n, ∑ i in finset.range n, (f (i + 1) x - f i x)) (𝓝 l),
{ refine h_summable.mono (λ x hx, _),
let hx_sum := (summable.has_sum_iff_tendsto_nat hx).mp hx.has_sum,
let hx_sum := has_sum.tendsto_sum_nat hx.has_sum,
RemyDegenne marked this conversation as resolved.
Show resolved Hide resolved
exact ⟨∑' i, (f (i + 1) x - f i x), hx_sum⟩, },
refine h.mono (λ x hx, _),
cases hx with l hx,
Expand Down Expand Up @@ -2048,8 +2051,8 @@ namespace bounded_continuous_function

open_locale bounded_continuous_function
variables [borel_space E] [second_countable_topology E]
variables [topological_space α] [borel_space α]
variables [finite_measure μ]
[topological_space α] [borel_space α]
[finite_measure μ]

/-- A bounded continuous function is in `Lp`. -/
lemma mem_Lp (f : α →ᵇ E) :
Expand Down
63 changes: 35 additions & 28 deletions src/measure_theory/set_integral.lean
Original file line number Diff line number Diff line change
Expand Up @@ -457,9 +457,9 @@ the composition, as we are dealing with classes of functions, but it has already
as `continuous_linear_map.comp_Lp`. We take advantage of this construction here.
-/

variables {μ : measure α} [normed_space E]
variables [normed_group F] [normed_space F]
variables {p : ennreal}
variables {μ : measure α} {𝕜 : Type*} [is_R_or_C 𝕜] [normed_space 𝕜 E]
[normed_group F] [normed_space 𝕜 F]
{p : ennreal}

local attribute [instance] fact_one_le_one_ennreal

Expand All @@ -468,28 +468,27 @@ namespace continuous_linear_map
variables [measurable_space F] [borel_space F]

variables [second_countable_topology F] [complete_space F]
[borel_space E] [second_countable_topology E]
[borel_space E] [second_countable_topology E] [normed_space ℝ F]

lemma integral_comp_Lp (L : E →L[] F) (φ : Lp E p μ) :
lemma integral_comp_Lp (L : E →L[𝕜] F) (φ : Lp E p μ) :
∫ a, (L.comp_Lp φ) a ∂μ = ∫ a, L (φ a) ∂μ :=
integral_congr_ae $ coe_fn_comp_Lp _ _

lemma continuous_integral_comp_L1 (L : E →L[] F) :
lemma continuous_integral_comp_L1 [measurable_space 𝕜] [opens_measurable_space 𝕜] (L : E →L[𝕜] F) :
continuous (λ (φ : α →₁[μ] E), ∫ (a : α), L (φ a) ∂μ) :=
begin
rw ← funext L.integral_comp_Lp,
exact continuous_integral.comp (L.comp_LpL 1 μ).continuous
end
by { rw ← funext L.integral_comp_Lp, exact continuous_integral.comp (L.comp_LpL 1 μ).continuous, }

variables [complete_space E]
variables [complete_space E] [measurable_space 𝕜] [opens_measurable_space 𝕜]
[normed_space ℝ E] [is_scalar_tower ℝ 𝕜 E] [is_scalar_tower ℝ 𝕜 F]

lemma integral_comp_comm (L : E →L[] F) {φ : α → E} (φ_int : integrable φ μ) :
lemma integral_comp_comm (L : E →L[𝕜] F) {φ : α → E} (φ_int : integrable φ μ) :
∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ) :=
begin
apply integrable.induction (λ φ, ∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ)),
{ intros e s s_meas s_finite,
rw [integral_indicator_const e s_meas, continuous_linear_map.map_smul,
← integral_indicator_const (L e) s_meas],
rw [integral_indicator_const e s_meas, ← @smul_one_smul E ℝ 𝕜 _ _ _ _ _ (μ s).to_real e,
continuous_linear_map.map_smul, @smul_one_smul F ℝ 𝕜 _ _ _ _ _ (μ s).to_real (L e),
← integral_indicator_const (L e) s_meas],
congr' 1 with a,
rw set.indicator_comp_of_zero L.map_zero },
{ intros f g H f_int g_int hf hg,
Expand All @@ -508,7 +507,7 @@ lemma integral_apply {H : Type*} [normed_group H] [normed_space ℝ H]
(∫ a, φ a ∂μ) v = ∫ a, φ a v ∂μ :=
((continuous_linear_map.apply ℝ E v).integral_comp_comm φ_int).symm

lemma integral_comp_comm' (L : E →L[] F) {K} (hL : antilipschitz_with K L) (φ : α → E) :
lemma integral_comp_comm' (L : E →L[𝕜] F) {K} (hL : antilipschitz_with K L) (φ : α → E) :
∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ) :=
begin
by_cases h : integrable φ μ,
Expand All @@ -518,33 +517,41 @@ begin
simp [integral_undef, h, this]
end

lemma integral_comp_L1_comm (L : E →L[] F) (φ : α →₁[μ] E) : ∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ) :=
lemma integral_comp_L1_comm (L : E →L[𝕜] F) (φ : α →₁[μ] E) : ∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ) :=
L.integral_comp_comm (L1.integrable_coe_fn φ)

end continuous_linear_map

namespace linear_isometry

variables [measurable_space F] [borel_space F] [complete_space E]
[second_countable_topology F] [complete_space F]
[borel_space E] [second_countable_topology E]
variables [measurable_space F] [borel_space F] [second_countable_topology F] [complete_space F]
[normed_space ℝ F] [is_scalar_tower ℝ 𝕜 F]
[borel_space E] [second_countable_topology E] [complete_space E] [normed_space ℝ E]
[is_scalar_tower ℝ 𝕜 E]
[measurable_space 𝕜] [opens_measurable_space 𝕜]

lemma integral_comp_comm (L : E →ₗᵢ[ℝ] F) (φ : α → E) :
∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ) :=
lemma integral_comp_comm (L : E →ₗᵢ[𝕜] F) (φ : α → E) : ∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ) :=
L.to_continuous_linear_map.integral_comp_comm' L.antilipschitz _

end linear_isometry

variables [borel_space E] [second_countable_topology E] [complete_space E]
variables [borel_space E] [second_countable_topology E] [complete_space E] [normed_space ℝ E]
[measurable_space F] [borel_space F] [second_countable_topology F] [complete_space F]
[normed_space ℝ F]
[measurable_space 𝕜] [borel_space 𝕜]

@[norm_cast] lemma integral_of_real {f : α → ℝ} : ∫ a, (f a : 𝕜) ∂μ = ↑∫ a, f a ∂μ :=
(@is_R_or_C.of_real_li 𝕜 _).integral_comp_comm f

lemma integral_re {f : α → 𝕜} (hf : integrable f μ) :
∫ a, is_R_or_C.re (f a) ∂μ = is_R_or_C.re ∫ a, f a ∂μ :=
(@is_R_or_C.re_clm 𝕜 _).integral_comp_comm hf

@[norm_cast] lemma integral_of_real {𝕜 : Type*} [is_R_or_C 𝕜] [measurable_space 𝕜] [borel_space 𝕜]
{f : α → ℝ} :
∫ a, (f a : 𝕜) ∂μ = ↑∫ a, f a ∂μ :=
linear_isometry.integral_comp_comm (@is_R_or_C.of_real_li 𝕜 _) f
lemma integral_im {f : α → 𝕜} (hf : integrable f μ) :
∫ a, is_R_or_C.im (f a) ∂μ = is_R_or_C.im ∫ a, f a ∂μ :=
(@is_R_or_C.im_clm 𝕜 _).integral_comp_comm hf

lemma integral_conj {𝕜 : Type*} [is_R_or_C 𝕜] [measurable_space 𝕜] [borel_space 𝕜] {f : α → 𝕜} :
∫ a, is_R_or_C.conj (f a) ∂μ = is_R_or_C.conj ∫ a, f a ∂μ :=
lemma integral_conj {f : α → 𝕜} : ∫ a, is_R_or_C.conj (f a) ∂μ = is_R_or_C.conj ∫ a, f a ∂μ :=
(@is_R_or_C.conj_lie 𝕜 _).to_linear_isometry.integral_comp_comm f

lemma fst_integral {f : α → E × F} (hf : integrable f μ) :
Expand Down