-
Notifications
You must be signed in to change notification settings - Fork 366
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: Lipschitz extensions of maps into l^infty #5107
Conversation
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.
Thank you for working on this! Looks very good! I have a few minor comments. I'll checkout the branch and have a look at the main proof later tonight.
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.
Some potential golfs/refactors:
exact lp.norm_apply_le_norm top_ne_zero (f a₀) i | ||
-- Construct witness by bundling the function with its certificate of membership in ℓ^∞ | ||
let f_ext' : α → ℓ^∞(ι) := fun i ↦ ⟨swap g i, hf_extb i⟩ | ||
refine ⟨f_ext', ?_, ?_⟩ |
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.
If you write refine' ⟨fun i ↦ ⟨swap g i, _⟩, _, _⟩
, then you can move hf_extb
as an extra goal from the refine.
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 like the other two refactors, but I think that it is clearer if we explicitly name our witness and show how it is constructed. I think it would take longer for someone to go through the proof if they have to make the realization themself that swap g i is the desired extension. One sticking point in the proof for us was also this translation back and forth between functions from alpha to iota to R and functions from alpha to l^infty(iota, R). Here it is clear that we get from a function from alpha to iota to R to one from alpha to l^infty(iota, R) by bundling it with a certificate that it is bound. If we instead leave it as inferred and it pops up as an extra goal I think that is more confusing. Also, with no explicit mention of f_ext the term hf_extb ("hypothesis that f_ext is bounded") would have to be changed and given that I cannot think of a meaningful way to name it I think that that is strong evidence that the way the proof is structured now is fairly natural.
However, I am very new and if I've completely misunderstood this suggestion or there is a general consensus on this type of issue I'm certainly open to the change.
Now that we have replaced all mentions of f_ext with swap g i, I do think we should replace f_ext' with f_ext.
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.
You wouldn't have to choose a new name for hf_extb
, since it would just become an extra goal:
refine' ⟨fun i ↦ ⟨swap g i, _⟩, _, _⟩
. apply LipschitzWith.uniformly_bounded (swap g) hgl a₀
use ‖f a₀‖
rintro - ⟨i, rfl⟩
simp_rw [←hgeq i ha₀_in_s]
exact lp.norm_apply_le_norm top_ne_zero (f a₀) i
· rw [LipschitzWith.coordinate]
exact hgl
· intro a hyp
ext i
exact (hgeq i) hyp
But I do see what you're saying about how it's nice to make it clear what the extension is, and I'm fine with keeping the current proof structure. I do like renaming f_ext'
to f_ext
, and using refine'
rather than refine
:
let f_ext : α → ℓ^∞(ι) := fun i ↦ ⟨swap g i, hf_extb i⟩
refine' ⟨f_ext, _, _⟩
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.
Ah I see! Thanks for all the helpful comments!
toms golf Co-authored-by: Thomas Browning <[email protected]>
Co-authored-by: Thomas Browning <[email protected]>
bors merge |
A function `f : α → ℓ^∞(ι, ℝ)` which is `K`-Lipschitz on a subset `s` admits a `K`-Lipschitz extension to the whole space. Co-authored-by: Ian Bunner <[email protected]> Co-authored-by: Chris Camano <[email protected]>
Pull request successfully merged into master. Build succeeded! The publicly hosted instance of bors-ng is deprecated and will go away soon. If you want to self-host your own instance, instructions are here. If you want to switch to GitHub's built-in merge queue, visit their help page. |
A function `f : α → ℓ^∞(ι, ℝ)` which is `K`-Lipschitz on a subset `s` admits a `K`-Lipschitz extension to the whole space. Co-authored-by: Ian Bunner <[email protected]> Co-authored-by: Chris Camano <[email protected]>
A function `f : α → ℓ^∞(ι, ℝ)` which is `K`-Lipschitz on a subset `s` admits a `K`-Lipschitz extension to the whole space. Co-authored-by: Ian Bunner <[email protected]> Co-authored-by: Chris Camano <[email protected]>
A function `f : α → ℓ^∞(ι, ℝ)` which is `K`-Lipschitz on a subset `s` admits a `K`-Lipschitz extension to the whole space. Co-authored-by: Ian Bunner <[email protected]> Co-authored-by: Chris Camano <[email protected]>
A function
f : α → ℓ^∞(ι, ℝ)
which isK
-Lipschitz on a subsets
admits aK
-Lipschitz extension to the whole space.Co-authored-by: Ian Bunner [email protected]