-
Notifications
You must be signed in to change notification settings - Fork 299
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(analysis/convolution): regularity of convolution for functions depending on a parameter #17626
Conversation
This PR/issue depends on: |
I have some big comments, but we can definitely merge this before you've addressed all the comments, in order to not delay the bump function refactor. But maybe you can give a stab at some of them.
|
Yes, that's exactly the issue: |
It's really unfortunate that we need to do deal with these universe issues if we want to do a |
Here are the changes I've made:
Changes I haven't made:
I'd rather keep the refactor for another PR, so for me this looks good to go. |
I refactor |
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.
LGTM
bors d+
You can choose the order in which you want to merge the two PRs. If unifying the two PRs is nontrivial, I'm happy to quickly review the unification too.
src/analysis/convolution.lean
Outdated
{g : P → G → E'} {s : set P} (h'u : maps_to u a s) {k : set G} | ||
(hk : is_compact k) (hgs : ∀ p, ∀ x, p ∈ s → x ∉ k → g p x = 0) | ||
(hf : locally_integrable f μ) (hg : continuous_on (↿g) (s ×ˢ univ)) : | ||
continuous_on (λ x, (f ⋆[L, μ] g (u x)) (v x)) a := |
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.
I think you can remove u
, and just write f ⋆[L, μ] g x
in the conclusion.
If I then want to prove continuous_on (λ x, (f ⋆[L, μ] g' (u x)) (v x)) a
in an application, I can just set g x y := g' (u x) y
.
Removing u
will also make it a lot easier for the elaborator to unify this lemma with an application, without giving g
or u
explicitly (or via other arguments).
EDIT: Same below. Also, without the u
you don't have to cook up an arbitrary u
in has_compact_support.cont_diff_convolution_right
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.
I am doubtful about that: if I have a lemma on continuity and I need to apply it to a composition, the library note you wrote suggests precisely to have a lemma that generalizes over all parameters because it is much more flexible in this way. It would feel awkward to generalize one variable but not the other one...
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.
For instance, in my application below, if I just use g x
, then since the parameter space is just unit
it means that I will have to take x : unit
and I can't deduce anything out of it. On the other hand, with g (u x)
, I can use as u
any constant map into unit, and in particular I can take x : G
, which is what I need.
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.
g
is the parameter, and you generalize it by making it a binary function and replacing it with g x
.
In your application below, g_{this lemma} x y := g_{lemma below} y
, and there is no issue, and you don't have to cook up a random u
yourself. EDIT: in particular the parameter space is not unit
under my approach, there is no unit
in sight of either lemma.
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.
To be more precise about parameters, here is the way I think about it. We are working with the function
(g, v) \mapsto (f ⋆[L, μ] g) v
(we could also make the function depend on f
or L
, but we're not doing this in the current lemma). If we want to make the most general continuity/differentiability lemma, we are interested in making both g
and v
depend on a new variable x
, so making g
a binary function and v
a unary function (it was a nullary function before) and then we are considering the map x \mapsto (f ⋆[L, μ] g x) (v x)
.
You don't want g (u x)
for the same reason you don't want (v (u x))
.
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.
Thanks for the clarification. I'm convinced!
✌️ sgouezel can now approve this pull request. To approve and merge a pull request, simply reply with |
Thanks! bors merge |
…epending on a parameter (#17626) Show that the convolution of `f` and `g` is smooth when `g` is. A version of this statement is already in mathlib, but in this PR we prove the version where `g` depends on a parameter. Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
bors r- |
Canceled. |
Oh, my bad! |
I'm done with the cleanup. The new changes:
I know it's already delegated, but since the changes are macroscopic, you may want to have a look (or trust me on this one!), so I'm marking this as awaiting-review again. |
This looks a lot better, and thanks for giving me another look after these major changes. bors merge |
…epending on a parameter (#17626) Show that the convolution of `f` and `g` is smooth when `g` is. A version of this statement is already in mathlib, but in this PR we prove the version where `g` depends on a parameter. Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
Pull request successfully merged into master. Build succeeded: |
Show that the convolution of
f
andg
is smooth wheng
is. A version of this statement is already in mathlib, but in this PR we prove the version whereg
depends on a parameter.