Skip to content

[Merged by Bors] - feat(Order): the transfinite iteration of a map#19935

Closed
joelriou wants to merge 5 commits intomasterfrom
small-object-subobjects
Closed

[Merged by Bors] - feat(Order): the transfinite iteration of a map#19935
joelriou wants to merge 5 commits intomasterfrom
small-object-subobjects

Conversation

@joelriou
Copy link
Copy Markdown
Contributor

@joelriou joelriou commented Dec 13, 2024

Given φ : I → I where [SupSet I], we define the jth transfinite iteration of φ for any j : J, with J a well-ordered type: this is transfiniteIterate φ j : I → I. If i₀ : I, then transfiniteIterate φ ⊥ i₀ = i₀; if j is a non maximal element, than transfiniteIterate φ (Order.succ j) i₀ = φ (transfiniteIterate φ j i₀); and if j is a limit element, transfiniteIterate φ j i₀ is the supremum of the transfiniteIterate φ l i₀ for l < j.

(Hopefully, this will be used in order to show Grothendieck abelian categories have enough injectives.)

Co-authored-by: vi.hdz.p@gmail.com


Open in Gitpod

@joelriou joelriou added the t-order Order theory label Dec 13, 2024
@github-actions
Copy link
Copy Markdown

github-actions bot commented Dec 13, 2024

PR summary 85a0356966

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Order.TransfiniteIteration (new file) 378

Declarations diff

+ monotone_transfiniteIterate
+ top_mem_range_transfiniteIterate
+ transfiniteIterate
+ transfiniteIterate_bot
+ transfiniteIterate_limit
+ transfiniteIterate_succ

You can run this locally as follows
## summary with just the declaration names:
./scripts/declarations_diff.sh <optional_commit>

## more verbose report:
./scripts/declarations_diff.sh long <optional_commit>

The doc-module for script/declarations_diff.sh contains some details about this script.


No changes to technical debt.

You can run this locally as

./scripts/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

@vihdzp
Copy link
Copy Markdown
Collaborator

vihdzp commented Dec 13, 2024

Am I correct in saying this is pretty much OrdinalApprox.lfpApprox but generalized to other complete lattices? If so, then we should probably deal with deduplicating them.

@joelriou
Copy link
Copy Markdown
Contributor Author

Am I correct in saying this is pretty much OrdinalApprox.lfpApprox but generalized to other complete lattices? If so, then we should probably deal with deduplicating them.

I would be happy if this was a particular case of another construction, but please note that in the applications φ : I → I satisfies i ≤ φ i, but there is no reason that φ : I →o I.

@vihdzp
Copy link
Copy Markdown
Collaborator

vihdzp commented Dec 13, 2024

Well, more precisely, I think OrdinalApprox.lfpApprox and TransfiniteIteration are both special cases of the following definition:

def transfiniteIterate {I J : Type*}
    [SupSet I] [PartialOrder J] [SuccOrder J] [WellFoundedLT J] (f : I → I) (n : J) : I → I :=
  SuccOrder.limitRecOn n
    (fun _ _ ↦ id) (fun _ _ g ↦ f ∘ g) (fun y _ IH ↦ ⨆ x : Set.Iio y, IH x.1 x.2)

There's no actual requirement that f be monotonic, but if isn't, then the limit case won't necessarily correspond to the limit. I'm not sure what works for your application, but I'd imagine that we'd actually want to use something like limsup instead of the supremum instead.

@joelriou
Copy link
Copy Markdown
Contributor Author

Well, more precisely, I think OrdinalApprox.lfpApprox and TransfiniteIteration are both special cases of the following definition:

def transfiniteIterate {I J : Type*}
    [SupSet I] [PartialOrder J] [SuccOrder J] [WellFoundedLT J] (f : I → I) (n : J) : I → I :=
  SuccOrder.limitRecOn n
    (fun _ _ ↦ id) (fun _ _ g ↦ f ∘ g) (fun y _ IH ↦ ⨆ x : Set.Iio y, IH x.1 x.2)

There's no actual requirement that f be monotonic, but if isn't, then the limit case won't necessarily correspond to the limit. I'm not sure what works for your application, but I'd imagine that we'd actually want to use something like limsup instead of the supremum instead.

Thanks very much for the shorter definition!

I think I still want to use the supremum. Under the assumption i ≤ φ i, I show that the function which sends j to the jth iteration evaluated at i₀ : I is a monotone function.

@vihdzp
Copy link
Copy Markdown
Collaborator

vihdzp commented Dec 13, 2024

The advantage with using the limsup (or really any more proper notion of a limit on complete lattices) is that it also gives us the dual notion of a transfinite iterate for functions with i ≤ f i without having to declare it separately.

If you want we can discuss this further on Zulip. I think it'd be really nice to link this definition to our existing ordinal API.

@joelriou
Copy link
Copy Markdown
Contributor Author

The advantage with using the limsup (or really any more proper notion of a limit on complete lattices) is that it also gives us the dual notion of a transfinite iterate for functions with i ≤ f i without having to declare it separately.

If you want we can discuss this further on Zulip. I think it'd be really nice to link this definition to our existing ordinal API.

I am not sure there is a need to unify with OrdinalApprox.lfpApprox, as this definition is used only in one file, involves Ordinal rather than a well-ordered type J (which is very much what we want to consider in category theory, because J has a category structure) and in the file, it seems the definitional properties matter. It seems to me using limsup would only make things more complicated, and anyway in OrdinalApprox.lfpApprox, is used, not limsup.

Copy link
Copy Markdown
Member

@jcommelin jcommelin 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+

@mathlib-bors
Copy link
Copy Markdown
Contributor

mathlib-bors bot commented Dec 23, 2024

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

@ghost ghost added the delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). label Dec 23, 2024
Co-authored-by: Johan Commelin <johan@commelin.net>
@joelriou
Copy link
Copy Markdown
Contributor Author

Thanks!

bors merge

@ghost ghost added the ready-to-merge This PR has been sent to bors. label Dec 23, 2024
mathlib-bors bot pushed a commit that referenced this pull request Dec 23, 2024
Given `φ : I → I` where `[SupSet I]`, we define the `j`th transfinite iteration of `φ` for any `j : J`, with `J` a well-ordered type: this is `transfiniteIterate φ j : I → I`. If `i₀ : I`, then `transfiniteIterate φ ⊥ i₀ = i₀`; if `j` is a non maximal element, than `transfiniteIterate φ (Order.succ j) i₀ = φ (transfiniteIterate φ j i₀)`; and if `j` is a limit element, `transfiniteIterate φ j i₀` is the supremum of the `transfiniteIterate φ l i₀` for `l < j`.

(Hopefully, this will be used in order to show Grothendieck abelian categories have enough injectives.)

Co-authored-by: vi.hdz.p@gmail.com



Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@mathlib-bors
Copy link
Copy Markdown
Contributor

mathlib-bors bot commented Dec 23, 2024

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat(Order): the transfinite iteration of a map [Merged by Bors] - feat(Order): the transfinite iteration of a map Dec 23, 2024
@mathlib-bors mathlib-bors bot closed this Dec 23, 2024
@mathlib-bors mathlib-bors bot deleted the small-object-subobjects branch December 23, 2024 22:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). ready-to-merge This PR has been sent to bors. t-order Order theory

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants