Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit ce107da

Browse files
feat(analysis/special_functions/integrals): integrating linear combinations of functions (#6597)
Together with #6357, this PR makes it possible to compute integrals of the form `∫ x in a..b, c * f x + d * g x` by `simp` (where `c` and `d` are constants and `f` and `g` are functions that are `interval_integrable` on `interval a b`. Notably, this allows us to compute the integrals of polynomials by `norm_num`. Here's an example, followed by an example of a more random linear combination of `interval_integrable` functions: ``` import analysis.special_functions.integrals open interval_integral real open_locale real example : ∫ x:ℝ in 0..2, 6*x^5 + 3*x^4 + x^3 - 2*x^2 + x - 7 = 1048 / 15 := by norm_num example : ∫ x:ℝ in 0..1, exp x + 9 * x^8 + x^3 - x/2 + (1 + x^2)⁻¹ = exp 1 + π/4 := by norm_num ```
1 parent 590f43d commit ce107da

File tree

2 files changed

+74
-12
lines changed

2 files changed

+74
-12
lines changed

src/analysis/special_functions/integrals.lean

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ import measure_theory.interval_integral
1111
This file contains proofs of the integrals of various simple functions, including `pow`, `exp`,
1212
`inv`/`one_div`, `sin`, `cos`, and `λ x, 1 / (1 + x^2)`.
1313
14-
With these lemmas, many simple integrals can be computed by `simp` or `norm_num`. Scroll to the
15-
bottom of the file for examples.
14+
With these lemmas, many simple integrals can be computed by `simp` or `norm_num`.
1615
17-
This file is incomplete; we are working on expanding it.
16+
This file is still being developed.
1817
-/
1918

2019
open real set interval_integral
2120
variables {a b : ℝ}
2221

2322
namespace interval_integral
24-
variable {f : ℝ → ℝ}
23+
open measure_theory
24+
variables {f : ℝ → ℝ} {μ ν : measure ℝ} [locally_finite_measure μ]
2525

2626
@[simp]
2727
lemma integral_const_mul (c : ℝ) : ∫ x in a..b, c * f x = c * ∫ x in a..b, f x :=
@@ -35,6 +35,67 @@ by simp only [mul_comm, integral_const_mul]
3535
lemma integral_div (c : ℝ) : ∫ x in a..b, f x / c = (∫ x in a..b, f x) / c :=
3636
integral_mul_const c⁻¹
3737

38+
@[simp]
39+
lemma interval_integrable_pow (n : ℕ) : interval_integrable (λ x, x^n) μ a b :=
40+
(continuous_pow n).interval_integrable a b
41+
42+
@[simp]
43+
lemma interval_integrable_id : interval_integrable (λ x, x) μ a b :=
44+
continuous_id.interval_integrable a b
45+
46+
@[simp]
47+
lemma interval_integrable_const (c : ℝ) : interval_integrable (λ x, c) μ a b :=
48+
continuous_const.interval_integrable a b
49+
50+
@[simp]
51+
lemma interval_integrable.const_mul (c : ℝ) (h : interval_integrable f ν a b) :
52+
interval_integrable (λ x, c * f x) ν a b :=
53+
by convert h.smul c
54+
55+
@[simp]
56+
lemma interval_integrable.mul_const (c : ℝ) (h : interval_integrable f ν a b) :
57+
interval_integrable (λ x, f x * c) ν a b :=
58+
by simp only [mul_comm, interval_integrable.const_mul c h]
59+
60+
@[simp]
61+
lemma interval_integrable.div (c : ℝ) (h : interval_integrable f ν a b) :
62+
interval_integrable (λ x, f x / c) ν a b :=
63+
interval_integrable.mul_const c⁻¹ h
64+
65+
lemma interval_integrable_one_div (h : ∀ x : ℝ, x ∈ interval a b → f x ≠ 0)
66+
(hf : continuous_on f (interval a b)) :
67+
interval_integrable (λ x, 1 / f x) μ a b :=
68+
(continuous_on_const.div hf h).interval_integrable
69+
70+
@[simp]
71+
lemma interval_integrable_inv (h : ∀ x : ℝ, x ∈ interval a b → f x ≠ 0)
72+
(hf : continuous_on f (interval a b)) :
73+
interval_integrable (λ x, (f x)⁻¹) μ a b :=
74+
by simpa only [one_div] using interval_integrable_one_div h hf
75+
76+
@[simp]
77+
lemma interval_integrable_exp : interval_integrable exp μ a b :=
78+
continuous_exp.interval_integrable a b
79+
80+
@[simp]
81+
lemma interval_integrable_sin : interval_integrable sin μ a b :=
82+
continuous_sin.interval_integrable a b
83+
84+
@[simp]
85+
lemma interval_integrable_cos : interval_integrable cos μ a b :=
86+
continuous_cos.interval_integrable a b
87+
88+
lemma interval_integrable_one_div_one_add_sq : interval_integrable (λ x:ℝ, 1 / (1 + x^2)) μ a b :=
89+
begin
90+
refine (continuous_const.div _ (λ x, _)).interval_integrable a b,
91+
{ continuity },
92+
{ nlinarith },
93+
end
94+
95+
@[simp]
96+
lemma interval_integrable_inv_one_add_sq : interval_integrable (λ x:ℝ, (1 + x^2)⁻¹) μ a b :=
97+
by simpa only [one_div] using interval_integrable_one_div_one_add_sq
98+
3899
end interval_integral
39100

40101
@[simp]
@@ -98,8 +159,9 @@ by rw integral_deriv_eq_sub'; norm_num [continuous_on_cos]
98159
lemma integral_inv_one_add_sq : ∫ x : ℝ in a..b, (1 + x^2)⁻¹ = arctan b - arctan a :=
99160
begin
100161
simp only [← one_div],
101-
refine integral_deriv_eq_sub' _ _ _ (continuous_const.div _ (λ x, _)).continuous_on;
102-
norm_num,
162+
refine integral_deriv_eq_sub' _ _ _ (continuous_const.div _ (λ x, _)).continuous_on,
163+
{ norm_num },
164+
{ norm_num },
103165
{ continuity },
104166
{ nlinarith },
105167
end

src/measure_theory/interval_integral.lean

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,12 @@ lemma smul [normed_field 𝕜] [normed_space 𝕜 E] {f : α → E} {a b : α} {
186186
interval_integrable (r • f) μ a b :=
187187
⟨h.1.smul r, h.2.smul r⟩
188188

189-
lemma add [second_countable_topology E] (hf : interval_integrable f μ a b)
190-
(hg : interval_integrable g μ a b) : interval_integrable (f + g) μ a b :=
189+
@[simp] lemma add [second_countable_topology E] (hf : interval_integrable f μ a b)
190+
(hg : interval_integrable g μ a b) : interval_integrable (λ x, f x + g x) μ a b :=
191191
⟨hf.1.add hg.1, hf.2.add hg.2
192192

193-
lemma sub [second_countable_topology E] (hf : interval_integrable f μ a b)
194-
(hg : interval_integrable g μ a b) : interval_integrable (f - g) μ a b :=
193+
@[simp] lemma sub [second_countable_topology E] (hf : interval_integrable f μ a b)
194+
(hg : interval_integrable g μ a b) : interval_integrable (λ x, f x - g x) μ a b :=
195195
⟨hf.1.sub hg.1, hf.2.sub hg.2
196196

197197
end interval_integrable
@@ -339,14 +339,14 @@ lemma norm_integral_le_of_norm_le_const {a b C : ℝ} {f : ℝ → E}
339339
∥∫ x in a..b, f x∥ ≤ C * abs (b - a) :=
340340
norm_integral_le_of_norm_le_const_ae $ eventually_of_forall h
341341

342-
lemma integral_add (hf : interval_integrable f μ a b) (hg : interval_integrable g μ a b) :
342+
@[simp] lemma integral_add (hf : interval_integrable f μ a b) (hg : interval_integrable g μ a b) :
343343
∫ x in a..b, f x + g x ∂μ = ∫ x in a..b, f x ∂μ + ∫ x in a..b, g x ∂μ :=
344344
by { simp only [interval_integral, integral_add hf.1 hg.1, integral_add hf.2 hg.2], abel }
345345

346346
@[simp] lemma integral_neg : ∫ x in a..b, -f x ∂μ = -∫ x in a..b, f x ∂μ :=
347347
by { simp only [interval_integral, integral_neg], abel }
348348

349-
lemma integral_sub (hf : interval_integrable f μ a b) (hg : interval_integrable g μ a b) :
349+
@[simp] lemma integral_sub (hf : interval_integrable f μ a b) (hg : interval_integrable g μ a b) :
350350
∫ x in a..b, f x - g x ∂μ = ∫ x in a..b, f x ∂μ - ∫ x in a..b, g x ∂μ :=
351351
by simpa only [sub_eq_add_neg] using (integral_add hf hg.neg).trans (congr_arg _ integral_neg)
352352

0 commit comments

Comments
 (0)