Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 03872fd

Browse files
erdOnealreadydone
andcommitted
feat(*): Prerequisites for the Spec gamma adjunction (#11209)
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
1 parent 9a8e9fa commit 03872fd

File tree

9 files changed

+82
-8
lines changed

9 files changed

+82
-8
lines changed

src/algebraic_geometry/Scheme.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ protected abbreviation sheaf (X : Scheme) := X.to_SheafedSpace.sheaf
5353
def forget_to_LocallyRingedSpace : Scheme ⥤ LocallyRingedSpace :=
5454
induced_functor _
5555

56+
@[simp] lemma forget_to_LocallyRingedSpace_preimage {X Y : Scheme} (f : X ⟶ Y) :
57+
Scheme.forget_to_LocallyRingedSpace.preimage f = f := rfl
58+
5659
/-- The forgetful functor from `Scheme` to `Top`. -/
5760
@[simps]
5861
def forget_to_Top : Scheme ⥤ Top :=

src/algebraic_geometry/Spec.lean

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Authors: Scott Morrison, Justus Springer
66
import algebraic_geometry.locally_ringed_space
77
import algebraic_geometry.structure_sheaf
88
import data.equiv.transfer_instance
9+
import topology.sheaves.sheaf_condition.sites
10+
import topology.sheaves.functors
911

1012
/-!
1113
# $Spec$ as a functor to locally ringed spaces.
@@ -31,7 +33,6 @@ natural transformation in `Spec_Γ_naturality`, and realized as a natural isomor
3133
3234
TODO: provide the unit, and prove the triangle identities.
3335
34-
3536
-/
3637

3738
noncomputable theory
@@ -132,6 +133,20 @@ lemma Spec.to_PresheafedSpace_obj_op (R : CommRing) :
132133
lemma Spec.to_PresheafedSpace_map_op (R S : CommRing) (f : R ⟶ S) :
133134
Spec.to_PresheafedSpace.map f.op = Spec.SheafedSpace_map f := rfl
134135

136+
lemma Spec.basic_open_hom_ext {X : RingedSpace} {R : CommRing} {α β : X ⟶ Spec.SheafedSpace_obj R}
137+
(w : α.base = β.base) (h : ∀ r : R, let U := prime_spectrum.basic_open r in
138+
(to_open R U ≫ α.c.app (op U)) ≫ X.presheaf.map (eq_to_hom (by rw w)) =
139+
to_open R U ≫ β.c.app (op U)) : α = β :=
140+
begin
141+
ext1,
142+
{ apply ((Top.sheaf.pushforward β.base).obj X.sheaf).hom_ext _
143+
prime_spectrum.is_basis_basic_opens,
144+
intro r,
145+
apply (structure_sheaf.to_basic_open_epi R r).1,
146+
simpa using h r },
147+
exact w,
148+
end
149+
135150
/--
136151
The spectrum of a commutative ring, as a `LocallyRingedSpace`.
137152
-/
@@ -209,7 +224,7 @@ Spec, as a contravariant functor from commutative rings to locally ringed spaces
209224
section Spec_Γ
210225
open algebraic_geometry.LocallyRingedSpace
211226

212-
/-- The morphism `R ⟶ Γ(Spec R)` given by `algebraic_geometry.structure_sheaf.to_open`. -/
227+
/-- The counit morphism `R ⟶ Γ(Spec R)` given by `algebraic_geometry.structure_sheaf.to_open`. -/
213228
@[simps] def to_Spec_Γ (R : CommRing) : R ⟶ Γ.obj (op (Spec.to_LocallyRingedSpace.obj (op R))) :=
214229
structure_sheaf.to_open R ⊤
215230

@@ -220,7 +235,7 @@ lemma Spec_Γ_naturality {R S : CommRing} (f : R ⟶ S) :
220235
f ≫ to_Spec_Γ S = to_Spec_Γ R ≫ Γ.map (Spec.to_LocallyRingedSpace.map f.op).op :=
221236
by { ext, symmetry, apply localization.local_ring_hom_to_map }
222237

223-
/-- The counit of the adjunction `Γ ⊣ Spec` is an isomorphism. -/
238+
/-- The counit (`Spec_Γ_identity.inv.op`) of the adjunction `Γ ⊣ Spec` is an isomorphism. -/
224239
@[simps] def Spec_Γ_identity : Spec.to_LocallyRingedSpace.right_op ⋙ Γ ≅ 𝟭 _ :=
225240
iso.symm $ nat_iso.of_components (λ R, as_iso (to_Spec_Γ R) : _) (λ _ _, Spec_Γ_naturality)
226241

src/algebraic_geometry/locally_ringed_space.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,13 @@ forget_to_SheafedSpace ⋙ SheafedSpace.forget _
135135
@[simp] lemma comp_val {X Y Z : LocallyRingedSpace} (f : X ⟶ Y) (g : Y ⟶ Z) :
136136
(f ≫ g).val = f.val ≫ g.val := rfl
137137

138+
@[simp] lemma comp_val_c {X Y Z : LocallyRingedSpace} (f : X ⟶ Y) (g : Y ⟶ Z) :
139+
(f ≫ g).val.c = g.val.c ≫ (presheaf.pushforward _ g.val.base).map f.val.c := rfl
140+
141+
lemma comp_val_c_app {X Y Z : LocallyRingedSpace} (f : X ⟶ Y) (g : Y ⟶ Z) (U : (opens Z)ᵒᵖ) :
142+
(f ≫ g).val.c.app U = g.val.c.app U ≫ f.val.c.app (op $ (opens.map g.val.base).obj U.unop) :=
143+
rfl
144+
138145
/--
139146
Given two locally ringed spaces `X` and `Y`, an isomorphism between `X` and `Y` as _sheafed_
140147
spaces can be lifted to a morphism `X ⟶ Y` as locally ringed spaces.

src/algebraic_geometry/prime_spectrum/basic.lean

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,10 @@ rfl
508508
comap (g.comp f) = (comap f).comp (comap g) :=
509509
rfl
510510

511+
lemma comap_comp_apply (f : R →+* S) (g : S →+* S') (x : prime_spectrum S') :
512+
prime_spectrum.comap (g.comp f) x = (prime_spectrum.comap f) (prime_spectrum.comap g x) :=
513+
rfl
514+
511515
@[simp] lemma preimage_comap_zero_locus (s : set R) :
512516
(comap f) ⁻¹' (zero_locus s) = zero_locus (f '' s) :=
513517
preimage_comap_zero_locus_aux f s
@@ -770,8 +774,12 @@ def closed_point : prime_spectrum R :=
770774

771775
variable {R}
772776

773-
lemma local_hom_iff_comap_closed_point {S : Type v} [comm_ring S] [local_ring S]
774-
{f : R →+* S} : is_local_ring_hom f ↔ prime_spectrum.comap f (closed_point S) = closed_point R :=
777+
lemma is_local_ring_hom_iff_comap_closed_point {S : Type v} [comm_ring S] [local_ring S]
778+
(f : R →+* S) : is_local_ring_hom f ↔ prime_spectrum.comap f (closed_point S) = closed_point R :=
775779
by { rw [(local_hom_tfae f).out 0 4, subtype.ext_iff], refl }
776780

781+
@[simp] lemma comap_closed_point {S : Type v} [comm_ring S] [local_ring S] (f : R →+* S)
782+
[is_local_ring_hom f] : prime_spectrum.comap f (closed_point S) = closed_point R :=
783+
(is_local_ring_hom_iff_comap_closed_point f).mp infer_instance
784+
777785
end local_ring

src/algebraic_geometry/ringed_space.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ begin
122122
{ intro h, exact ⟨x, h, rfl⟩ },
123123
end
124124

125+
@[simp]
126+
lemma mem_top_basic_open (f : X.presheaf.obj (op ⊤)) (x : X) :
127+
x ∈ X.basic_open f ↔ is_unit (X.presheaf.germ ⟨x, show x ∈ (⊤ : opens X), by trivial⟩ f) :=
128+
mem_basic_open X f ⟨x, _⟩
129+
125130
lemma basic_open_subset {U : opens X} (f : X.presheaf.obj (op U)) : X.basic_open f ⊆ U :=
126131
by { rintros _ ⟨x, hx, rfl⟩, exact x.2 }
127132

src/algebraic_geometry/stalks.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace algebraic_geometry.PresheafedSpace
3636
/--
3737
The stalk at `x` of a `PresheafedSpace`.
3838
-/
39-
def stalk (X : PresheafedSpace C) (x : X) : C := X.presheaf.stalk x
39+
abbreviation stalk (X : PresheafedSpace C) (x : X) : C := X.presheaf.stalk x
4040

4141
/--
4242
A morphism of presheafed spaces induces a morphism of stalks.

src/algebraic_geometry/structure_sheaf.lean

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,29 @@ def basic_open_iso (f : R) : (structure_sheaf R).1.obj (op (basic_open f)) ≅
812812
CommRing.of (localization.away f) :=
813813
(as_iso (show CommRing.of _ ⟶ _, from to_basic_open R f)).symm
814814

815+
/-- Stalk of the structure sheaf at a prime p as localization of R -/
816+
lemma is_localization.to_stalk (p : prime_spectrum R) :
817+
@is_localization.at_prime _ _ _ _ (to_stalk R p).to_algebra p.as_ideal _ :=
818+
begin
819+
convert (is_localization.is_localization_iff_of_ring_equiv _ (stalk_iso R p).symm
820+
.CommRing_iso_to_ring_equiv).mp localization.is_localization,
821+
erw iso.eq_comp_inv,
822+
exact to_stalk_comp_stalk_to_fiber_ring_hom R p,
823+
end
824+
825+
/-- Sections of the structure sheaf of Spec R on a basic open as localization of R -/
826+
lemma is_localization.to_basic_open (r : R) :
827+
@is_localization.away _ _ r _ _ (to_open R (basic_open r)).to_algebra :=
828+
begin
829+
convert (is_localization.is_localization_iff_of_ring_equiv _ (basic_open_iso R r).symm
830+
.CommRing_iso_to_ring_equiv).mp localization.is_localization,
831+
exact (localization_to_basic_open R r).symm
832+
end
833+
834+
instance to_basic_open_epi (r : R) : epi (to_open R (basic_open r)) :=
835+
⟨λ S f g h, by { refine is_localization.ring_hom_ext _ _,
836+
swap 5, exact is_localization.to_basic_open R r, exact h }⟩
837+
815838
@[elementwise] lemma to_global_factors : to_open R ⊤ =
816839
(CommRing.of_hom (algebra_map R (localization.away (1 : R)))) ≫ (to_basic_open R (1 : R)) ≫
817840
(structure_sheaf R).1.map (eq_to_hom (basic_open_one.symm)).op :=

src/category_theory/adjunction/basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ section
9999

100100
variables {F : C ⥤ D} {G : D ⥤ C} (adj : F ⊣ G) {X' X : C} {Y Y' : D}
101101

102+
lemma hom_equiv_id (X : C) : adj.hom_equiv X _ (𝟙 _) = adj.unit.app X := by simp
103+
104+
lemma hom_equiv_symm_id (X : D) : (adj.hom_equiv _ X).symm (𝟙 _) = adj.counit.app X := by simp
105+
102106
@[simp, priority 10] lemma hom_equiv_naturality_left_symm (f : X' ⟶ X) (g : X ⟶ G.obj Y) :
103107
(adj.hom_equiv X' Y).symm (f ≫ g) = F.map f ≫ (adj.hom_equiv X Y).symm g :=
104108
by rw [hom_equiv_counit, F.map_comp, assoc, adj.hom_equiv_counit.symm]

src/topology/sheaves/presheaf.lean

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ by rw h
7676
ℱ.map (begin dsimp [functor.op], apply quiver.hom.op, apply eq_to_hom, rw h, end) :=
7777
by simp [pushforward_eq]
7878

79+
lemma pushforward_eq'_hom_app
80+
{X Y : Top.{v}} {f g : X ⟶ Y} (h : f = g) (ℱ : X.presheaf C) (U) :
81+
nat_trans.app (eq_to_hom (pushforward_eq' h ℱ)) U = ℱ.map (eq_to_hom (by rw h)) :=
82+
by simpa
83+
7984
@[simp]
8085
lemma pushforward_eq_rfl {X Y : Top.{v}} (f : X ⟶ Y) (ℱ : X.presheaf C) (U) :
8186
(pushforward_eq (rfl : f = f) ℱ).hom.app (op U) = 𝟙 _ :=
@@ -223,11 +228,15 @@ def pushforward {X Y : Top.{v}} (f : X ⟶ Y) : X.presheaf C ⥤ Y.presheaf C :=
223228
{ obj := pushforward_obj f,
224229
map := @pushforward_map _ _ X Y f }
225230

231+
@[simp]
232+
lemma pushforward_map_app' {X Y : Top.{v}} (f : X ⟶ Y)
233+
{ℱ 𝒢 : X.presheaf C} (α : ℱ ⟶ 𝒢) {U : (opens Y)ᵒᵖ} :
234+
((pushforward C f).map α).app U = α.app (op $ (opens.map f).obj U.unop) := rfl
235+
226236
lemma id_pushforward {X : Top.{v}} : pushforward C (𝟙 X) = 𝟭 (X.presheaf C) :=
227237
begin
228238
apply category_theory.functor.ext,
229-
{ intros, ext U, have h := f.congr,
230-
erw h (opens.op_map_id_obj U), simpa },
239+
{ intros, ext U, have h := f.congr, erw h (opens.op_map_id_obj U), simpa },
231240
{ intros, apply pushforward.id_eq },
232241
end
233242

0 commit comments

Comments
 (0)