|
2 | 2 | Copyright (c) 2024 Weihong Xu. All rights reserved. |
3 | 3 | Released under Apache 2.0 license as described in the file LICENSE. |
4 | 4 | Authors: Kevin Buzzard, Johan Commelin, Amelia Livingston, Sophie Morel, Jujian Zhang, Weihong Xu, |
5 | | - Andrew Yang |
| 5 | + Andrew Yang, Brian Nugent |
6 | 6 | -/ |
7 | 7 | module |
8 | 8 |
|
9 | | -public import Mathlib.Algebra.Module.LocalizedModule.Basic |
| 9 | +public import Mathlib.Algebra.Category.ModuleCat.Localization |
| 10 | +public import Mathlib.Algebra.Category.ModuleCat.Sheaf.Quasicoherent |
10 | 11 | public import Mathlib.AlgebraicGeometry.AffineScheme |
11 | 12 | public import Mathlib.AlgebraicGeometry.Modules.Sheaf |
12 | | -public import Mathlib.Algebra.Category.ModuleCat.Sheaf.Quasicoherent |
13 | | -public import Mathlib.Algebra.Category.ModuleCat.FilteredColimits |
14 | | -public import Mathlib.CategoryTheory.Limits.ConcreteCategory.WithAlgebraicStructures |
15 | 13 |
|
16 | 14 | /-! |
17 | 15 |
|
@@ -43,7 +41,7 @@ def modulesSpecToSheaf : |
43 | 41 | (Spec R).Modules ⥤ TopCat.Sheaf (ModuleCat R) (Spec R) := |
44 | 42 | SheafOfModules.forgetToSheafModuleCat (Spec R).ringCatSheaf (.op ⊤) |
45 | 43 | (Limits.initialOpOfTerminal Limits.isTerminalTop) ⋙ |
46 | | - sheafCompose _ (ModuleCat.restrictScalars (StructureSheaf.globalSectionsIso R).hom.hom) |
| 44 | + sheafCompose _ (ModuleCat.restrictScalars (Scheme.ΓSpecIso R).inv.hom) |
47 | 45 |
|
48 | 46 | /-- The global section functor for `𝒪_{Spec R}` modules -/ |
49 | 47 | noncomputable |
@@ -81,6 +79,10 @@ def SpecModulesToSheafFullyFaithful : (modulesSpecToSheaf (R := R)).FullyFaithfu |
81 | 79 | map_preimage f := rfl |
82 | 80 | preimage_map f := rfl |
83 | 81 |
|
| 82 | +instance : (modulesSpecToSheaf (R := R)).Faithful := SpecModulesToSheafFullyFaithful.faithful |
| 83 | + |
| 84 | +instance : (modulesSpecToSheaf (R := R)).Full := SpecModulesToSheafFullyFaithful.full |
| 85 | + |
84 | 86 | /-- |
85 | 87 | `M^~` as a sheaf of `𝒪_{Spec R}`-modules |
86 | 88 | -/ |
@@ -410,6 +412,96 @@ lemma isIso_fromTildeΓ_of_presentation (M : (Spec R).Modules) (P : M.Presentati |
410 | 412 | exact ⟨cokernel g, ⟨PreservesCokernel.iso (tilde.functor R) g ≪≫ iso ≪≫ |
411 | 413 | IsColimit.coconePointUniqueUpToIso (colimit.isColimit _) P.isColimit⟩⟩ |
412 | 414 |
|
| 415 | +section IsLocalizing |
| 416 | + |
| 417 | +variable (M : (Spec R).Modules) (f : R) {S : CommRingCat.{u}} (φ : R ⟶ S) |
| 418 | + |
| 419 | +open TopologicalSpace |
| 420 | + |
| 421 | +/-- A sheaf `M` of `R-modules` is localizing if for all `f` in `R`, the restriction map |
| 422 | +from `M(⊤)` to `M(D(f))` is localization with respect to `f`. -/ |
| 423 | +abbrev IsLocalizing (M : TopCat.Sheaf (ModuleCat R) (Spec R)) : Prop := |
| 424 | + ∀ f : R, IsLocalizedModule (.powers f) (M.obj.map (basicOpen f).leTop.op).hom |
| 425 | + |
| 426 | +theorem isLocalizing_of_iso {M N : TopCat.Sheaf (ModuleCat R) (Spec R)} (φ : M ≅ N) |
| 427 | + (hM : IsLocalizing M) : |
| 428 | + IsLocalizing N := by |
| 429 | + intro f |
| 430 | + rw [← IsLocalizedModule.comp_iff_of_bijective_left _ _ <| |
| 431 | + ConcreteCategory.bijective_of_isIso (φ.inv.hom.app (op (basicOpen f))), ← ModuleCat.hom_comp, |
| 432 | + φ.inv.hom.naturality (basicOpen f).leTop.op, ModuleCat.hom_comp, |
| 433 | + IsLocalizedModule.comp_iff_of_bijective_right _ _ <| ConcreteCategory.bijective_of_isIso _] |
| 434 | + exact hM f |
| 435 | + |
| 436 | +theorem isLocalizing_iff_of_iso {M N : TopCat.Sheaf (ModuleCat R) (Spec R)} (φ : M ≅ N) : |
| 437 | + IsLocalizing M ↔ IsLocalizing N := |
| 438 | + ⟨fun h => isLocalizing_of_iso φ h, fun h => isLocalizing_of_iso φ.symm h⟩ |
| 439 | + |
| 440 | +theorem isLocalizing_of_isIso_app_top {M N : TopCat.Sheaf (ModuleCat.{u} R) (Spec R)} {φ : M ⟶ N} |
| 441 | + (h : IsIso (φ.hom.app (op ⊤))) (hM : IsLocalizing M) (hN : IsLocalizing N) : |
| 442 | + IsIso φ := by |
| 443 | + refine TopCat.Sheaf.isIso_iff_isIso_basis (φ := φ) isBasis_basic_opens (fun f => ?_) |
| 444 | + refine ModuleCat.isIso_of_isLocalizedModule_comp (hM f) ?_ |
| 445 | + rw [φ.hom.naturality] |
| 446 | + exact IsLocalizedModule.of_linearEquiv_right _ _ (asIso (φ.hom.app (op ⊤))).toLinearEquiv |
| 447 | + |
| 448 | +theorem isLocalizing_tilde (M : ModuleCat R) : |
| 449 | + IsLocalizing (modulesSpecToSheaf.obj (tilde M)) := by |
| 450 | + intro f |
| 451 | + -- We can't rewrite with `tilde.toOpen_res` below, because of def-eq abuse between |
| 452 | + -- `Spec R` and `PrimeSpectrum R`. |
| 453 | + have heq : tilde.toOpen M ⊤ ≫ (modulesSpecToSheaf.obj (tilde M)).obj.map (basicOpen f).leTop.op = |
| 454 | + tilde.toOpen M (basicOpen f) := |
| 455 | + tilde.toOpen_res _ _ _ _ |
| 456 | + rw [← IsLocalizedModule.comp_iff_of_bijective_right _ _ <| |
| 457 | + ConcreteCategory.bijective_of_isIso (tilde.toOpen M ⊤), ← ModuleCat.hom_comp, heq] |
| 458 | + infer_instance |
| 459 | + |
| 460 | +/-- An `𝓞_Spec R` module `M` is isomorphic to `Γ(M)^~` if and only if it is localizing |
| 461 | +as a sheaf of `R` modules -/ |
| 462 | +theorem isIso_fromTildeΓ_iff_isLocalizing (M : (Spec R).Modules) : |
| 463 | + IsIso M.fromTildeΓ ↔ IsLocalizing (modulesSpecToSheaf.obj M) := by |
| 464 | + refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩ |
| 465 | + · rw [← isLocalizing_iff_of_iso (modulesSpecToSheaf.mapIso (asIso M.fromTildeΓ))] |
| 466 | + exact isLocalizing_tilde _ |
| 467 | + · rw [← isIso_iff_of_reflects_iso _ modulesSpecToSheaf] |
| 468 | + refine isLocalizing_of_isIso_app_top ?_ (isLocalizing_tilde _) h |
| 469 | + rw [← isIso_comp_left_iff (tilde.toOpen ((modulesSpecToSheaf.obj M).presheaf.obj (op ⊤)) ⊤), |
| 470 | + Scheme.Modules.toOpen_fromTildeΓ_app] |
| 471 | + simpa using IsIso.id _ |
| 472 | + |
| 473 | +/-- `Scheme.Modules.pushforward` and `modulesSpecToSheaf` commute -/ |
| 474 | +def pushforwardCompModulesSpecToSheafIso : |
| 475 | + Scheme.Modules.pushforward (Spec.map φ) ⋙ modulesSpecToSheaf ≅ |
| 476 | + modulesSpecToSheaf ⋙ TopCat.Sheaf.pushforward (ModuleCat S) (Spec.map φ).base ⋙ |
| 477 | + sheafCompose _ (ModuleCat.restrictScalars φ.hom) := |
| 478 | + (Functor.associator _ _ _).symm ≪≫ |
| 479 | + Functor.isoWhiskerRight (SheafOfModules.pushforwardCompForgetToSheafModuleCat _ _ _ |
| 480 | + (initialOpOfTerminal isTerminalTop)) _ ≪≫ Functor.associator _ _ _ ≪≫ |
| 481 | + (Functor.isoWhiskerLeft _ (Functor.associator _ _ _)) ≪≫ |
| 482 | + Functor.isoWhiskerLeft _ (Scheme.Modules.sheafComposePushforwardComp φ) ≪≫ |
| 483 | + (Functor.associator _ _ _).symm |
| 484 | + |
| 485 | +open scoped ModuleCat.Algebra in |
| 486 | +theorem isLocalizing_pushforward_of_isLocalizing {M : (Spec S).Modules} |
| 487 | + (h : IsLocalizing (modulesSpecToSheaf.obj M)) : |
| 488 | + IsLocalizing (modulesSpecToSheaf.obj ((Scheme.Modules.pushforward (Spec.map φ)).obj M)) := by |
| 489 | + rw [← Functor.comp_obj, |
| 490 | + isLocalizing_iff_of_iso ((pushforwardCompModulesSpecToSheafIso φ).app M)] |
| 491 | + have : CommRing ((Spec S).ringCatSheaf.obj.obj ((Opens.map (Spec.map φ).base).op.obj (op ⊤))) := |
| 492 | + inferInstanceAs (CommRing Γ(Spec S, ⊤)) |
| 493 | + algebraize [φ.hom] |
| 494 | + exact fun f => IsLocalizedModule.restrictScalars_powers f _ (h := h (φ f)) |
| 495 | + |
| 496 | +/- TODO: Once `IsIso M.fromTildeΓ` is shown to be equivalent to `M` being quasicoherent, use |
| 497 | +this to show that quasicoherent sheaves pushforward to quasicoherent sheaves for affine morphisms -/ |
| 498 | +theorem isIso_fromTildeΓ_pushforward (M : (Spec S).Modules) [h : IsIso M.fromTildeΓ] : |
| 499 | + IsIso ((Scheme.Modules.pushforward (Spec.map φ)).obj M).fromTildeΓ := by |
| 500 | + simp_all only [isIso_fromTildeΓ_iff_isLocalizing] |
| 501 | + exact isLocalizing_pushforward_of_isLocalizing φ h |
| 502 | + |
| 503 | +end IsLocalizing |
| 504 | + |
413 | 505 | end IsQuasicoherent |
414 | 506 |
|
415 | 507 | end AlgebraicGeometry |
|
0 commit comments