Zulip Chat Archive
Stream: Is there code for X?
Topic: Equality of sections on `Scheme.OpenCover`
Christian Merten (Jun 09 2024 at 19:40):
Do we have something like:
import Mathlib
open AlgebraicGeometry
lemma eq_of_eq_cover {X : Scheme.{u}} (f g : Scheme.Γ.obj (op X)) (𝒰 : X.OpenCover)
(h : ∀ i : 𝒰.J, Scheme.Γ.map (𝒰.map i).op f = Scheme.Γ.map (𝒰.map i).op g) : f = g :=
sorry
I have tried to use docs#TopCat.Sheaf.eq_of_locally_eq', but this does not apply cleanly, because 𝒰.J
is not in the right universe.
Christian Merten (Jun 09 2024 at 19:46):
(Sidenote: this times out at isDefEq
if the explicit universe annotation is dropped)
Adam Topaz (Jun 09 2024 at 20:12):
I assume you need to use the sheaf condition for the structure sheaf
Adam Topaz (Jun 09 2024 at 20:12):
It should be fairly direct
Adam Topaz (Jun 09 2024 at 20:14):
You may need to restrict the universe of J as it appears in the Zariski topology
Adam Topaz (Jun 09 2024 at 20:14):
Namely X.OpenCover.{u}
Adam Topaz (Jun 09 2024 at 20:16):
We could also develop some api to convert an open cover with arbitrary universes to one with the same universes as X.
Adam Topaz (Jun 09 2024 at 20:18):
Alternatively you could view f and g as morphisms to A1 (do we have a way to do this yet?) and use the gluing API
Andrew Yang (Jun 09 2024 at 20:46):
import Mathlib
open AlgebraicGeometry Opposite CategoryTheory
universe u
noncomputable
def IsOpenImmersion.ΓIso {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] :
Scheme.Γ.obj (op X) ≅ Y.presheaf.obj (op (Scheme.Hom.opensRange f)) :=
Scheme.Γ.mapIso (IsOpenImmersion.isoOfRangeEq
(Scheme.ιOpens (Scheme.Hom.opensRange f)) _ Subtype.range_val).op ≪≫
Y.presheaf.mapIso (eqToIso (TopologicalSpace.Opens.openEmbedding_obj_top _).symm).op
lemma IsOpenImmersion.map_ΓIso_inv
{X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] :
Y.presheaf.map (homOfLE le_top).op ≫ (IsOpenImmersion.ΓIso f).inv = Scheme.Γ.map f.op := by
conv_rhs => rw [← IsOpenImmersion.isoOfRangeEq_inv_fac
(Scheme.ιOpens (Scheme.Hom.opensRange f)) _ Subtype.range_val]
rw [IsOpenImmersion.ΓIso]
dsimp
rw [← Functor.map_comp_assoc]
rfl
lemma eq_of_eq_cover {X : Scheme.{u}} (f g : Scheme.Γ.obj (op X)) (𝒰 : X.OpenCover)
(h : ∀ i : 𝒰.J, Scheme.Γ.map (𝒰.map i).op f = Scheme.Γ.map (𝒰.map i).op g) : f = g := by
fapply TopCat.Sheaf.eq_of_locally_eq' X.sheaf
(fun i ↦ Scheme.Hom.opensRange (𝒰.map (𝒰.f i))) _ (fun _ ↦ homOfLE le_top)
· rintro x -; simpa using ⟨_, 𝒰.Covers x⟩
· intro x;
replace h := h (𝒰.f x)
rw [← IsOpenImmersion.map_ΓIso_inv] at h
exact (IsOpenImmersion.ΓIso (𝒰.map (𝒰.f x))).commRingCatIsoToRingEquiv.symm.injective h
Christian Merten (Jun 09 2024 at 21:31):
Andrew Yang said:
import Mathlib open AlgebraicGeometry Opposite CategoryTheory universe u noncomputable def IsOpenImmersion.ΓIso {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] : Scheme.Γ.obj (op X) ≅ Y.presheaf.obj (op (Scheme.Hom.opensRange f)) := Scheme.Γ.mapIso (IsOpenImmersion.isoOfRangeEq (Scheme.ιOpens (Scheme.Hom.opensRange f)) _ Subtype.range_val).op ≪≫ Y.presheaf.mapIso (eqToIso (TopologicalSpace.Opens.openEmbedding_obj_top _).symm).op lemma IsOpenImmersion.map_ΓIso_inv {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] : Y.presheaf.map (homOfLE le_top).op ≫ (IsOpenImmersion.ΓIso f).inv = Scheme.Γ.map f.op := by conv_rhs => rw [← IsOpenImmersion.isoOfRangeEq_inv_fac (Scheme.ιOpens (Scheme.Hom.opensRange f)) _ Subtype.range_val] rw [IsOpenImmersion.ΓIso] dsimp rw [← Functor.map_comp_assoc] rfl lemma eq_of_eq_cover {X : Scheme.{u}} (f g : Scheme.Γ.obj (op X)) (𝒰 : X.OpenCover) (h : ∀ i : 𝒰.J, Scheme.Γ.map (𝒰.map i).op f = Scheme.Γ.map (𝒰.map i).op g) : f = g := by fapply TopCat.Sheaf.eq_of_locally_eq' X.sheaf (fun i ↦ Scheme.Hom.opensRange (𝒰.map (𝒰.f i))) _ (fun _ ↦ homOfLE le_top) · rintro x -; simpa using ⟨_, 𝒰.Covers x⟩ · intro x; replace h := h (𝒰.f x) rw [← IsOpenImmersion.map_ΓIso_inv] at h exact (IsOpenImmersion.ΓIso (𝒰.map (𝒰.f x))).commRingCatIsoToRingEquiv.symm.injective h
Thanks a lot!
Christian Merten (Jun 09 2024 at 21:34):
Ah, so the trick is to use X.carrier
as the indexing type and then use 𝒰.f
:light_bulb:
Last updated: May 02 2025 at 03:31 UTC