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(order/complete_lattice): add equiv.supr_congr and equiv.supr_comp lemmas #15852

Closed
wants to merge 4 commits into from

Conversation

j-loreaux
Copy link
Collaborator

@j-loreaux j-loreaux commented Aug 4, 2022

Adds these lemmas as easy consequences of the function.surjective versions in order to aid in discovery.


Open in Gitpod

@j-loreaux j-loreaux added awaiting-review The author would like community review of the PR awaiting-CI The author would like to see what CI has to say before doing more work. labels Aug 4, 2022
@github-actions github-actions bot removed the awaiting-CI The author would like to see what CI has to say before doing more work. label Aug 4, 2022
@j-loreaux j-loreaux added the t-order Order hierarchy label Aug 4, 2022
Comment on lines 485 to 500
lemma equiv.csupr {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_above (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨆ i, f i) = ⨆ i, g i :=
begin
casesI is_empty_or_nonempty ι,
{ haveI : is_empty ι' := (equiv.is_empty_congr e).mp h, simp only [supr, range_eq_empty] },
{ haveI : nonempty ι' := (equiv.nonempty_congr e).mp h,
have hg : bdd_above (range g),
{ obtain ⟨M, hM⟩ := hf, use M, rintros - ⟨i, rfl⟩, refine hM ⟨(e.symm i), _⟩,
simpa only [equiv.apply_symm_apply] using hfg (e.symm i), },
refine le_antisymm (csupr_le (λ i, (hfg i).symm ▸ le_csupr hg (e i))) (csupr_le (λ i, _)),
simpa only [equiv.apply_symm_apply, hfg (e.symm i)] using le_csupr hf (e.symm i) },
end

lemma equiv.cinfi {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_below (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨅ i, f i) = ⨅ i, g i :=
@equiv.csupr αᵒᵈ _ _ _ e _ hf _ hfg
Copy link
Member

Choose a reason for hiding this comment

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

Isn't this a weaker version of function.surjective.supr_congr?

Copy link
Member

Choose a reason for hiding this comment

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

Yes, it is:

Suggested change
lemma equiv.csupr {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_above (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨆ i, f i) = ⨆ i, g i :=
begin
casesI is_empty_or_nonempty ι,
{ haveI : is_empty ι' := (equiv.is_empty_congr e).mp h, simp only [supr, range_eq_empty] },
{ haveI : nonempty ι' := (equiv.nonempty_congr e).mp h,
have hg : bdd_above (range g),
{ obtain ⟨M, hM⟩ := hf, use M, rintros - ⟨i, rfl⟩, refine hM ⟨(e.symm i), _⟩,
simpa only [equiv.apply_symm_apply] using hfg (e.symm i), },
refine le_antisymm (csupr_le (λ i, (hfg i).symm ▸ le_csupr hg (e i))) (csupr_le (λ i, _)),
simpa only [equiv.apply_symm_apply, hfg (e.symm i)] using le_csupr hf (e.symm i) },
end
lemma equiv.cinfi {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_below (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨅ i, f i) = ⨅ i, g i :=
@equiv.csupr αᵒᵈ _ _ _ e _ hf _ hfg
lemma equiv.csupr {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_above (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨆ i, f i) = ⨆ i, g i :=
e.surjective.supr_congr _ $ λ i, (hfg i).symm
lemma equiv.cinfi {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_below (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨅ i, f i) = ⨅ i, g i :=
@equiv.csupr αᵒᵈ _ _ _ e _ hf _ hfg

Copy link
Member

@eric-wieser eric-wieser left a comment

Choose a reason for hiding this comment

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

It's maybe worth adding an equiv.supr_congr wrapper for e.surjective.supr_congr just to aid with discoverability, but it wouldn't go in this file.

Comment on lines 485 to 500
lemma equiv.csupr {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_above (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨆ i, f i) = ⨆ i, g i :=
begin
casesI is_empty_or_nonempty ι,
{ haveI : is_empty ι' := (equiv.is_empty_congr e).mp h, simp only [supr, range_eq_empty] },
{ haveI : nonempty ι' := (equiv.nonempty_congr e).mp h,
have hg : bdd_above (range g),
{ obtain ⟨M, hM⟩ := hf, use M, rintros - ⟨i, rfl⟩, refine hM ⟨(e.symm i), _⟩,
simpa only [equiv.apply_symm_apply] using hfg (e.symm i), },
refine le_antisymm (csupr_le (λ i, (hfg i).symm ▸ le_csupr hg (e i))) (csupr_le (λ i, _)),
simpa only [equiv.apply_symm_apply, hfg (e.symm i)] using le_csupr hf (e.symm i) },
end

lemma equiv.cinfi {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_below (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨅ i, f i) = ⨅ i, g i :=
@equiv.csupr αᵒᵈ _ _ _ e _ hf _ hfg
Copy link
Member

Choose a reason for hiding this comment

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

Yes, it is:

Suggested change
lemma equiv.csupr {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_above (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨆ i, f i) = ⨆ i, g i :=
begin
casesI is_empty_or_nonempty ι,
{ haveI : is_empty ι' := (equiv.is_empty_congr e).mp h, simp only [supr, range_eq_empty] },
{ haveI : nonempty ι' := (equiv.nonempty_congr e).mp h,
have hg : bdd_above (range g),
{ obtain ⟨M, hM⟩ := hf, use M, rintros - ⟨i, rfl⟩, refine hM ⟨(e.symm i), _⟩,
simpa only [equiv.apply_symm_apply] using hfg (e.symm i), },
refine le_antisymm (csupr_le (λ i, (hfg i).symm ▸ le_csupr hg (e i))) (csupr_le (λ i, _)),
simpa only [equiv.apply_symm_apply, hfg (e.symm i)] using le_csupr hf (e.symm i) },
end
lemma equiv.cinfi {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_below (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨅ i, f i) = ⨅ i, g i :=
@equiv.csupr αᵒᵈ _ _ _ e _ hf _ hfg
lemma equiv.csupr {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_above (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨆ i, f i) = ⨆ i, g i :=
e.surjective.supr_congr _ $ λ i, (hfg i).symm
lemma equiv.cinfi {ι ι' : Type*} (e : ι ≃ ι') {f : ι → α} (hf : bdd_below (range f)) {g : ι' → α}
(hfg : ∀ i, f i = g (e i)) : (⨅ i, f i) = ⨅ i, g i :=
@equiv.csupr αᵒᵈ _ _ _ e _ hf _ hfg

@eric-wieser eric-wieser added awaiting-author A reviewer has asked the author a question or requested changes and removed awaiting-review The author would like community review of the PR labels Aug 5, 2022
@j-loreaux j-loreaux added awaiting-review The author would like community review of the PR awaiting-CI The author would like to see what CI has to say before doing more work. and removed awaiting-author A reviewer has asked the author a question or requested changes labels Aug 5, 2022
@j-loreaux
Copy link
Collaborator Author

j-loreaux commented Aug 5, 2022

I've placed these immediately after function.surjective.supr_congr in order/complete_lattice and protected them since there is a supr_congr in the root namespace. I also protected function.surjective.infi_congr because it was not protected before.

Copy link
Member

@eric-wieser eric-wieser left a comment

Choose a reason for hiding this comment

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

bors d+

Make sure to update the PR title and description, since they are no longer accurate.

@bors
Copy link

bors bot commented Aug 5, 2022

✌️ j-loreaux can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

@leanprover-community-bot-assistant leanprover-community-bot-assistant added delegated The PR author may merge after reviewing final suggestions. and removed awaiting-review The author would like community review of the PR labels Aug 5, 2022
@j-loreaux j-loreaux changed the title feat(order/conditionally_complete_lattice): add an equiv.csupr lemma feat(order/complete_lattice): add equiv.supr_congr and equiv.supr_comp lemmas Aug 5, 2022
@github-actions github-actions bot removed the awaiting-CI The author would like to see what CI has to say before doing more work. label Aug 5, 2022
@j-loreaux
Copy link
Collaborator Author

Bors r+

bors bot pushed a commit that referenced this pull request Aug 6, 2022
…comp` lemmas (#15852)

Adds these lemmas as easy consequences of the `function.surjective` versions in order to aid in discovery.
@bors
Copy link

bors bot commented Aug 6, 2022

Pull request successfully merged into master.

Build succeeded:

@bors bors bot changed the title feat(order/complete_lattice): add equiv.supr_congr and equiv.supr_comp lemmas [Merged by Bors] - feat(order/complete_lattice): add equiv.supr_congr and equiv.supr_comp lemmas Aug 6, 2022
@bors bors bot closed this Aug 6, 2022
@bors bors bot deleted the j-loreaux/equiv-csupr branch August 6, 2022 03:36
bors bot pushed a commit that referenced this pull request Aug 16, 2022
…of ℝ≥0∞ instead of ℝ (#15833)

This refactors `pi_Lp` so that the `p` argument has type ℝ≥0∞ instead of ℝ. There are several reasons for doing this:

1. It matches the design of `lp`.
2. We have `pi_Lp ∞ β`, so we can appropriately state various interpolation inequalities.
3. It makes more sense semantically
4. It should make the equivalence between `pi_Lp` and `lp` easier to implement

The new implementation of `pi_Lp` tries to retain as much as possible of the original implementation, while at the same time mimicking the implementation of `lp`. Many of the proofs are now significantly longer because of the required case splits.

- [x] depends on: #15852
bors bot pushed a commit that referenced this pull request Oct 13, 2022
…pi_Lp`, `bounded_continuous_function` (#15872)

This adds a new file for equivalences between various L^p spaces. We do this in a new file instead of `analysis/normed_space/lp_space` in order to minimize imports. We begin by establishing the equivalence between `lp` and `pi_Lp` when the index type is a fintype, and then proceed to recognize the equivalence between `lp` (for `p = ∞`) and `bounded_continuous_function` when the codomain has various algebraic structures.

- [x] depends on: #15833
- [x] depends on: #15852
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
delegated The PR author may merge after reviewing final suggestions. t-order Order hierarchy
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants