Generalize integration_by_parts#1674
Generalize integration_by_parts#1674IshiguroYoshihiro wants to merge 26 commits intomath-comp:masterfrom
Conversation
|
Are not all 4 versions the same, the only difference being whether the minus is inside or outside the integral? |
If you said that these lemmas can be proved with one of them, I think it is no. |
949b179 to
0802b9c
Compare
Indeed |
To give a bit of context, these lemmas have been written this way after having been tested to formalize the Gamma function. Maybe their apparent specialization is the result of practical considerations? @IshiguroYoshihiro can you confirm? (Or am I remembering wrong?) |
Tragicus
left a comment
There was a problem hiding this comment.
Sorry, I am back.
One way to factorize would be to ask for the relevant functions to have constant sign. I was also wondering whether we want to generalize over the interval, instead of [a, +oo[. We would require that the relevant functions are derivable on the interior of the interval and have limits at the boundaries.
@affeldt-aist Some of the following suggestions are quite ugly but save a lot of time, what do you think?
theories/ftc.v
Outdated
| rewrite (@integration_by_partsy_le0_ge0 R (- F)%R G (- f)%R g a (- FGoo))//. | ||
| - rewrite oppeD; last exact: fin_num_adde_defr. | ||
| rewrite -EFinN opprD 2!opprK mulNr. | ||
| by under eq_integral do rewrite mulNr EFinN oppeK. | ||
| - by move=> ?; apply: cvgN; exact: cf. | ||
| - exact: derivable_oy_continuous_bndN. | ||
| - by move=> ? ?; rewrite fctE derive1N ?Ff//; move: Foy => [+ _]; apply. |
There was a problem hiding this comment.
| rewrite (@integration_by_partsy_le0_ge0 R (- F)%R G (- f)%R g a (- FGoo))//. | |
| - rewrite oppeD; last exact: fin_num_adde_defr. | |
| rewrite -EFinN opprD 2!opprK mulNr. | |
| by under eq_integral do rewrite mulNr EFinN oppeK. | |
| - by move=> ?; apply: cvgN; exact: cf. | |
| - exact: derivable_oy_continuous_bndN. | |
| - by move=> ? ?; rewrite fctE derive1N ?Ff//; move: Foy => [+ _]; apply. | |
| rewrite (@integration_by_partsy_le0_ge0 R (- F)%R G (- f)%R g a (- FGoo))//. | |
| - rewrite oppeD; last exact: fin_num_adde_defr. | |
| rewrite -EFinN opprD 2!opprK mulNr. | |
| by under eq_integral do rewrite mulNr EFinN oppeK. | |
| - by move=> ?; apply: cvgN; exact: cf. | |
| - exact: derivable_oy_continuous_bndN. | |
| - by move=> ? ?; rewrite fctE derive1N ?Ff => [//|//|]; apply: Foy.1. |
.6s faster
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
Co-authored-by: Quentin VERMANDE <quentin.vermande@orange.fr>
FYI, here is the PR that formalizes the Gamma function:
This has not been tested yet (by lack of time). :-(
We have merged all of them. Thanks for identifying the performance issues, that helps. |
|
I suggest keeping 4 lemmas as is, and additionally, provide a unified interface lemma that use the constant_sign predicate |
5036126 to
34697b2
Compare
|
looking at the code for a while, I noticed there can be some helper lemmas added: |
|
|
leading to generalization of |
on our side, we were trying to get rid of |
that sounds better |
I have changed my mind to endorse |
t6s
left a comment
There was a problem hiding this comment.
The main lemmas look good.
After trying to remove subset_itvoSo_cSc, this PR will be ready for merging.
|
|
||
| End itv_realDomainType. | ||
|
|
||
| (* generalization of |
There was a problem hiding this comment.
This lemma can be an instance of the monotonicity of the closure operator.
|
|
||
| End integration_by_partsy_ge0. | ||
|
|
||
| Section integration_by_partsy_le0. |
There was a problem hiding this comment.
This section appears to be sharing many things with the previous one.
Maybe merge the two?
|
Even though we are making progress, in the interest of the release, I would like to postpone to the next release (that will happen anyway faster than this one). Thank for your understanding. |
|
IshiguroYoshihiro#69 rebased onto master |
| Let fin_num_intfG (c d : R) : `]c, d] `<=` `]a, +oo[ -> | ||
| \int[mu]_(x in `]c, d]) (f x * G x)%:E \is a fin_num. | ||
| Proof. | ||
| have [dc _|cd cday] := leP d c. | ||
| by rewrite set_itv_ge ?bnd_simp -?leNgt// integral_set0. | ||
| rewrite integral_itv_obnd_cbnd; last exact: measurable_funS mfG. | ||
| apply: integrable_fin_num => //=. | ||
| apply: continuous_compact_integrable; first exact: segment_compact. | ||
| by apply: continuous_subspaceW cfG; exact: subset_itvoSo_cSc. | ||
| Qed. |
There was a problem hiding this comment.
using #1848, subset_itvoSo_cSc can be removed like this:
Let neitv_lt_bndP : forall (R : numFieldType) (i : interval R),
neitv i <-> (i.1 < i.2)%O.
Proof.
move=> ? [] i1 i2/=.
split; first exact: neitv_lt_bnd.
case/(EndlessDenseOrderTheory.itv_bound_half_dense 0%R).
- exact: EndlessDenseOrderTheory.numDomain_is_endless.
- exact: EndlessDenseOrderTheory.numField_is_dense.
move=> /= x /andP[] ? ?.
by apply/set0P; exists x; rewrite /=itv_boundlr; apply/andP; split.
Qed.
Let fin_num_intfG (c d : R) : `]c, d] `<=` `]a, +oo[ ->
\int[mu]_(x in `]c, d]) (f x * G x)%:E \is a fin_num.
Proof.
have [dc _|cd cday] := leP d c.
by rewrite set_itv_ge ?bnd_simp -?leNgt// integral_set0.
rewrite integral_itv_obnd_cbnd; last exact: measurable_funS mfG.
apply: integrable_fin_num => //=.
apply: continuous_compact_integrable; first exact: segment_compact.
apply: continuous_subspaceW cfG.
by move/closure_subset: cday; rewrite !itv_closureE// neitv_lt_bndP/= bnd_simp.
Qed.
There was a problem hiding this comment.
neitv_lt_bndP is not needed, it's already available as neitvP
Motivation for this change
Add a part of generalized version of integration by parts for unbound intervals
`[a, +oo[.This PR is over #1656 and #1662.
I don't sure that I should add 4 more lemmas and complete all variation of integration by parts for unbound intervals.
I think that 8 similar lemmas would be a mess. So, I'd like to somehow make them up into one or two lemmas, but I don't have an idea.
Checklist
CHANGELOG_UNRELEASED.mdReference: How to document
Merge policy
As a rule of thumb:
all compile are preferentially merged into master.
Reminder to reviewers