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(topology/sheaves/skyscraper): define skyscraper presheaves and calculate stalks #15934
Conversation
jjaassoonn
commented
Aug 8, 2022
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.
Will take a closer look later!
src/topology/sheaves/skyscraper.lean
Outdated
point, then the skyscraper sheaf `𝓕` with value `A` is defined by `U ↦ A` if `p₀ ∈ U` and | ||
`U ↦ *` if `p₀ ∉ A` where `*` is some terminal object. | ||
-/ | ||
def skyscraper_sheaf : sheaf C 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.
You can probably get a shorter proof using Top.presheaf.is_sheaf_iff_is_sheaf_opens_le_cover. I might try to golf the other proofs later.
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 the universe level for Top.presheaf.is_sheaf_iff_is_sheaf_opens_le_cover
is too small
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.
Though, it might not be useful to keep skyscraper_presheaf
universe level depending on three universe levels u, v, w
, because to calculate stalks, universe level needs to be restricted anyway.
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.
Oh yes, but I would try to generalize the universe there. It's also better to fix the universe level of Top.presheaf to the (identical) Type (max w v u)
.
You might also generalize universe for stalk
by using has_limits_of_size C
as assumption.
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.
opens_le_cover
generalized at #16214.
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.
Yes. I think you are right. So I think it makes sense to define Godement resolution in terms of skyscraper (no matter the explicit description or pushforward definition) so that
can be easily shown to be a monomorphism into an Injective sheaf. (
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.
Yeah, so let's figure out which definition is the easiest to work with to show monomorphism. I think you meant to write Sky(I_x) instead of I_x? It should be easy to show the pushforward of a mono is a mono, using the fact that a (pre)sheaf morphism is mono iff it's a mono on every open (this is stated in Stacks for Set-valued (pre)sheaves, but presumably holds more generally (also for functor categories)?).
As for the first map being mono, it's also enough to use the stalk-skyscraper adjunction. Two morphisms G→F agree after composing with the unit F→Sky_x(F_x) iff the corresponding morphisms G_x→F_x under the adjunction agree, so it suffices to use the fact that a sheaf morphism is determined by the induced morphisms on stalks. This doesn't work for presheaves though; I assume the original proof also doesn't?
An independent issue: I think the docstring here is problematic, because the skyscraper may have nonzero (non-terminal) stalks at points other than p0, so it may not be supported on a single point.
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.
Yeah, so let's figure out which definition is the easiest to work with to show monomorphism. I think you meant to write Sky(I_x) instead of I_x? It should be easy to show the pushforward of a mono is a mono, using the fact that a (pre)sheaf morphism is mono iff it's a mono on every open (this is stated in Stacks for Set-valued (pre)sheaves, but presumably holds more generally (also for functor categories)?).
Sheaf(C, X) morphism is mono iff it’s a mono on every open holds for every concrete category C that preserves pullback, this is in the other PR containing the sky-stalk adjunction. Under this assumption every morphism in C is injective iff it’s mono. This is the maximal generality I could think of
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.
An independent issue: I think the docstring here is problematic, because the skyscraper may have nonzero (non-terminal) stalks at points other than p0, so it may not be supported on a single point.
I thought supported don a single point p
meant something like that F(U)
is not zero if and only if p \in U
. I have removed this phrase to clear confusion
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.
Sheaf(C, X) morphism is mono iff it’s a mono on every open holds for every concrete category C that preserves pullback, this is in the other PR containing the sky-stalk adjunction.
I actually didn't find the exact statement in that PR, but I think you may use category_theory.nat_trans.mono_iff_mono_app combined with category_theory.Sheaf.hom.mono_iff_presheaf_mono that you introduced earlier.
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
…verse (#16214) + Generalize universe levels in the sheaf condition `opens_le_cover` on topological spaces and its equivalence with the sheaf condition on sites, allowing three different universe parameters as in `Top.{w}`, `C : Type u` and `category.{v} C`. To be used in #15934. + Generalize universes for the sheaf condition `pairwise_intersection` on topological spaces. This sheaf condition also doesn't require any assumption on the category `C`, and its equivalence with `opens_le_cover` could also have universe levels at maximal generality; however, the proof `is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections` breaks due to the `small_category` restriction on [category_theory.functor.initial.is_limit_whisker_equiv](https://leanprover-community.github.io/mathlib_docs/category_theory/limits/final.html#category_theory.functor.initial.is_limit_whisker_equiv), which will take more work to fix, so we do not generalize the equivalence at this time. + Generalize universes for `Top.presheaf.pushforward`; pullback is not generalized because it would need `has_colimits_of_size`. `Top.sheaf.pushforward` is not yet generalized. + Fixate the universe level of [Top.presheaf](https://leanprover-community.github.io/mathlib_docs/topology/sheaves/presheaf.html#Top.presheaf) to be the same as [Top.sheaf](https://leanprover-community.github.io/mathlib_docs/topology/sheaves/sheaf.html#Top.sheaf).
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
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.
Looks good to me, and I am happy with showing it's a sheaf in another PR.
I already approved this earlier, and I just pinged maintainers on Zulip yesterday; maybe you should instead request review from a maintainer?
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.
What do you think about using a namespace? I think it would be nice to have sheaf.skyscraper
, or something like that.
bors d+
✌️ jjaassoonn can now approve this pull request. To approve and merge a pull request, simply reply with |
Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com>
I am not entirely sure about the namespace thing, because with a namespace like |
I totally agree, I was thinking more to a |
Put them under |
OK, let's do that. |
bors r+ |
Build failed (retrying...): |
Pull request successfully merged into master. Build succeeded: |