Zulip Chat Archive
Stream: mathlib4
Topic: Isomorphic covers in pretopology
Andrew Yang (May 09 2025 at 22:46):
Is the following true?
If is a pretopology on , is a cover of , and is another family, then is also a cover of .
lemma Pretopology.ofArrows_mem_of_iso {C : Type*} [Category C] [HasPullbacks C]
{ι : Type*} {X : C} {Y Y' : ι → C} (f : ∀ i, Y i ⟶ X)
(e : ∀ i, Y' i ≅ Y i) (J : Pretopology C) (H : Presieve.ofArrows Y f ∈ J X) :
Presieve.ofArrows Y' ((e _).hom ≫ f ·) ∈ J X := by
sorry
Answer: It is not (at least in mathlib)
But is this true mathematically? Is our definition of Pretopology not strong enough?
Andrew Yang (May 09 2025 at 22:46):
cc @Joël Riou @Christian Merten
Christian Merten (May 09 2025 at 23:25):
This is true if Y is injective (as a function!).
Andrew Yang (May 09 2025 at 23:28):
But should it not be true for non injective Y?
This is exceptionally bad when you consider this with our formulation of pullbacks. It says that if is a cover, then is also a cover of , where here is some random Nonempty.some of a pullback, and there is no guarantee that this is injective even if is.
Christian Merten (May 09 2025 at 23:33):
I agree, it should be true for non-injective Y.
So is the issue that Presieve.ofArrows Y f does not only depend on the range of Y and f?
Andrew Yang (May 09 2025 at 23:34):
Yeah and bind only allow sieves depending on the range of Y.
Andrew Yang (May 09 2025 at 23:35):
I claim that Pretopology need this extra condition
∀ {X : C} (S T : Presieve X), S ≤ T.isoClosure → T ≤ S.isoClosure → T ∈ J X → S ∈ J X
where
def CategoryTheory.Presieve.isoClosure {C : Type*} [Category C]
{X : C} (S : Presieve X) : Presieve X :=
fun Y ↦ { f | ∃ Z, ∃ (e : Z ≅ Y), S (e.hom ≫ f) }
Christian Merten (May 09 2025 at 23:52):
What is the idea behind defining Presieve X as ∀ ⦃Y⦄, Set (Y ⟶ X) in the first place? To be precise, what goes wrong with:
variable {C : Type*} [Category C]
structure HomTo (X : C) where
source : C
hom : source ⟶ X
def Presieve' (X : C) := Set (HomTo X)
def Presieve'.ofArrows {X : C} {ι : Type*} (Y : ι → C) (f : ∀ i, Y i ⟶ X) :
Presieve' X :=
Set.range (fun i ↦ ⟨Y i, f i⟩)
Andrew Yang (May 09 2025 at 23:54):
First of all I don't think this solves the titular question.
Secondly, I think you are just un-currying ∀ (Y), (Y ⟶ X) -> Prop and we like to curry things in mathlib.
Andrew Yang (May 10 2025 at 01:39):
But AlgebraicGeometry.Scheme.zariskiPretopology doesn't satisfy the definition...
It doesn't even satisfy the titular question, because you can have a cover that is (set-theoretically) big but essentially small, and the topology is defined only by the small covers. Do we want to change that and allow big covers as well?
Joël Riou (May 10 2025 at 07:15):
I would say that pretopologies are only a way to construct Grothendieck topologies. There is no similar issue with topologies.
Andrew Yang (May 10 2025 at 07:22):
Here's my use case:
I want to show some functor is a sheaf in Scheme.zariskiTopology.over X, and naturally I tried docs#CategoryTheory.Presieve.isSheaf_pretopology and I am led to showing something like Scheme.zariskiPretopology.toGrothendieck.over X = (Scheme.zariskiPretopology.over X).toGrothendieck But the over of an pretopology isn't necessarily a pretopology and the RHS makes no sense because of the pullback field and the issue above.
Joël Riou (May 10 2025 at 08:03):
If this can help, we could introduce a typeclass Pretopology.RespectsIso?
In any case, we need to introduce lemmas which characterizes the Zariski sheaves on Scheme (and Over X) by saying that the "restrictions" to Opens V for all V are sheaves (and also in terms of the sheaf condition for the families given by OpenCover).
Andrew Yang (May 10 2025 at 08:06):
The thing is AlgebraicGeometry.Scheme.zariskiPretopology (as it currently is) doesn't satisfy RespectsIso because of set-theoretic concerns.
Christian Merten (May 10 2025 at 08:16):
Andrew Yang said:
Here's my use case:
I want to show some functor is a sheaf inScheme.zariskiTopology.over X, and naturally I tried docs#CategoryTheory.Presieve.isSheaf_pretopology and I am led to showing something likeScheme.zariskiPretopology.toGrothendieck.over X = (Scheme.zariskiPretopology.over X).toGrothendieckBut theoverof an pretopology isn't necessarily a pretopology and the RHS makes no sense because of the pullback field and the issue above.
Does docs#AlgebraicGeometry.Scheme.overGrothendieckTopology_eq_toGrothendieck_overPretopology help?
Andrew Yang (May 10 2025 at 08:23):
Yes it works. So this issue is not immediate bugging me now. But shouldn't (and do we not need) this over thing to work for all topologies that is not necessarily defined by some morphism property (e.g. fpqc)?
Christian Merten (May 10 2025 at 08:30):
We will (hopefully) need this for the fpqc topology in the coming weeks, yes. But I think if we just take intersections with the pretopology given by QuasiCompact covers (or just assume QuasiCompact in docs#AlgebraicGeometry.Scheme.pretopology) it should still work on the level of Grothendieck topologies?
Christian Merten (May 10 2025 at 08:34):
A similar phenomenon with size issues arises here (docs#AlgebraicGeometry.Scheme.grothendieckTopology_eq_inf) btw, but it only happens on the level of pretopologies.
Andrew Yang (May 10 2025 at 08:35):
or just assume
QuasiCompactinScheme.pretopology
This approach still screams to me that this is not in the right generality and we are making our lives more painful.
Christian Merten (May 10 2025 at 08:38):
Maybe @Joël Riou knows of a natural example of a topology on schemes where coverings are not assumed to be "quasicompact"? (by "quasicompact" I mean, they satisfy the finiteness conditions in the definition of fpqc).
Christian Merten (May 10 2025 at 08:39):
Andrew Yang said:
or just assume
QuasiCompactinScheme.pretopologyThis approach still screams to me that this is not in the right generality and we are making our lives more painful.
But are you fine with taking intersections then?
Andrew Yang (May 10 2025 at 08:43):
or just assume
QuasiCompactinScheme.pretopology
Okay maybe this is fine because it is defining a pretopology anyway. I should be saying that every thing that works with an arbitrary pretopology should work for an arbitrary pretopology. Or else we need to massage our pretopology into the right form before we can apply anything.
Andrew Yang (May 10 2025 at 08:43):
(e.g. eq_toGrothendieck_overPretopology or even Scheme.Cover)
Christian Merten (May 10 2025 at 08:49):
But is there a general CategoryTheory.Pretopology.over with good definitional properties?
Andrew Yang (May 10 2025 at 08:50):
def CategoryTheory.Presieve.overForget
{X : C} {Y : Over X} (P : Presieve Y) :
Presieve Y.left :=
fun _ ↦ { f | P (Over.homMk (U := Over.mk (f ≫ Y.hom)) f rfl) }
def CategoryTheory.Pretopology.over
(J : Pretopology C) (X : C) [J.IsNice] : Pretopology (Over X) where
coverings Y := { S | S.overForget ∈ J Y.left }
This works (under a better definition of pullbacks that Scheme.pretopology does not yet satisfy)
Joël Riou (May 10 2025 at 08:59):
Yes, at some point, if we absolutely need it, we may improve the pullbacks condition so as to allow any pullback instead of the arbitrarily chosen pullback of the limits API.
Christian Merten (May 10 2025 at 08:59):
Andrew Yang said:
def CategoryTheory.Presieve.overForget {X : C} {Y : Over X} (P : Presieve Y) : Presieve Y.left := fun _ ↦ { f | P (Over.homMk (U := Over.mk (f ≫ Y.hom)) f rfl) } def CategoryTheory.Pretopology.over (J : Pretopology C) (X : C) [J.IsNice] : Pretopology (Over X) where coverings Y := { S | S.overForget ∈ J Y.left }This works (under a better definition of
pullbacksthatScheme.pretopologydoes not yet satisfy)
Does this give the same pretopology as docs#AlgebraicGeometry.Scheme.overPretopology though? Doesn't your definition mean that the component maps in the covering won't necessarily be over X?
Andrew Yang (May 10 2025 at 09:02):
The X-structure on U is by definition U.map i >> Y.hom here so U.map i commutes with them by rfl.
Christian Merten (May 10 2025 at 09:09):
Ah yes, you are right.
Last updated: Dec 20 2025 at 21:32 UTC