Skip to content

Commit a2089ae

Browse files
refactor(CategoryTheory): make morphisms in full subcategories a 1-field structure (#26446)
This PR refactors the definition of morphisms in full subcategories (and induced categories), by making them a 1-field structure. This prevents certain defeq abuse, and improves automation. (The only issue is that this adds an extra layer: `f` sometimes becomes `f.hom`, etc.) (It would make sense to redefine `CommGrp/Grp/CommMon` as full subcategories of `Mon`, rather than defining `CommGrp` by applying `InducedCategory` twice, which adds one unnecessary layer of `.hom`, but no attempt was made to change this in this PR.) Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 25ce633 commit a2089ae

File tree

150 files changed

+1887
-1663
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

150 files changed

+1887
-1663
lines changed

Mathlib/Algebra/Category/CommAlgCat/FiniteType.lean

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,14 @@ lemma Algebra.FiniteType.exists_fgAlgCatSkeleton (A : Type v) [CommRing A] [Alge
5050
/-- Universe lift functor for finitely generated algebras. -/
5151
def FGAlgCat.uliftFunctor : FGAlgCat.{v} R ⥤ FGAlgCat.{max v w} R where
5252
obj A := ⟨.of R <| ULift A.1, .equiv inferInstance ULift.algEquiv.symm⟩
53-
map {A B} f := CommAlgCat.ofHom <|
54-
ULift.algEquiv.symm.toAlgHom.comp <| f.hom.comp ULift.algEquiv.toAlgHom
53+
map {A B} f := ConcreteCategory.ofHom <|
54+
ULift.algEquiv.symm.toAlgHom.comp <| f.hom.hom.comp ULift.algEquiv.toAlgHom
5555

5656
/-- The universe lift functor for finitely generated algebras is fully faithful. -/
5757
def FGAlgCat.fullyFaithfulUliftFunctor : (FGAlgCat.uliftFunctor R).FullyFaithful where
5858
preimage {A B} f :=
59-
CommAlgCat.ofHom <| ULift.algEquiv.toAlgHom.comp <| f.hom.comp ULift.algEquiv.symm.toAlgHom
59+
ConcreteCategory.ofHom <| ULift.algEquiv.toAlgHom.comp <|
60+
f.hom.hom.comp ULift.algEquiv.symm.toAlgHom
6061

6162
instance : (FGAlgCat.uliftFunctor R).Full :=
6263
(FGAlgCat.fullyFaithfulUliftFunctor R).full
@@ -95,9 +96,9 @@ def FGAlgCat.equivUnder (R : CommRingCat.{u}) :
9596
FGAlgCat R ≌ MorphismProperty.Under (toMorphismProperty FiniteType) ⊤ R where
9697
functor.obj A := ⟨(commAlgCatEquivUnder R).functor.obj A.obj,
9798
(RingHom.finiteType_algebraMap (A := R) (B := A.obj)).mpr A.2
98-
functor.map {A B} f := ⟨(commAlgCatEquivUnder R).functor.map f, trivial, trivial⟩
99+
functor.map {A B} f := ⟨(commAlgCatEquivUnder R).functor.map f.hom, trivial, trivial⟩
99100
inverse.obj A := ⟨(commAlgCatEquivUnder R).inverse.obj A.1, A.2
100-
inverse.map {A B} f := (commAlgCatEquivUnder R).inverse.map f.hom
101+
inverse.map {A B} f := ObjectProperty.homMk ((commAlgCatEquivUnder R).inverse.map f.hom)
101102
unitIso := NatIso.ofComponents fun A ↦
102103
ObjectProperty.isoMk _ (CommAlgCat.isoMk { toRingEquiv := .refl A.1, commutes' _ := rfl })
103104
counitIso := .refl _

Mathlib/Algebra/Category/FGModuleCat/Basic.lean

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,13 @@ section Ring
9090

9191
variable (R : Type u) [Ring R]
9292

93-
@[simp] lemma hom_comp (A B C : FGModuleCat.{v} R) (f : A ⟶ B) (g : B ⟶ C) :
94-
(f ≫ g).hom = g.hom.comp f.hom := rfl
93+
@[simp] lemma hom_hom_comp {A B C : FGModuleCat.{v} R} (f : A ⟶ B) (g : B ⟶ C) :
94+
(f ≫ g).hom.hom = g.hom.hom.comp f.hom.hom := rfl
9595

96-
@[simp] lemma hom_id (A : FGModuleCat.{v} R) : (𝟙 A : A ⟶ A).hom = LinearMap.id := rfl
96+
@[simp] lemma hom_hom_id (A : FGModuleCat.{v} R) : (𝟙 A : A ⟶ A).hom.hom = LinearMap.id := rfl
97+
98+
@[deprecated (since := "2025-12-18")] alias hom_comp := hom_hom_comp
99+
@[deprecated (since := "2025-12-18")] alias hom_id := hom_hom_id
97100

98101
instance : Inhabited (FGModuleCat.{v} R) :=
99102
⟨⟨ModuleCat.of R PUnit, by unfold ModuleCat.isFG; infer_instance⟩⟩
@@ -111,17 +114,17 @@ variable {R} in
111114
abbrev ofHom {V W : Type v} [AddCommGroup V] [Module R V] [Module.Finite R V]
112115
[AddCommGroup W] [Module R W] [Module.Finite R W]
113116
(f : V →ₗ[R] W) : of R V ⟶ of R W :=
114-
ModuleCat.ofHom f
117+
ConcreteCategory.ofHom f
115118

116119
variable {R} in
117-
@[ext] lemma hom_ext {V W : FGModuleCat.{v} R} {f g : V ⟶ W} (h : f.hom = g.hom) : f = g :=
118-
ModuleCat.hom_ext h
120+
@[ext] lemma hom_ext {V W : FGModuleCat.{v} R} {f g : V ⟶ W} (h : f.hom.hom = g.hom.hom) : f = g :=
121+
ObjectProperty.hom_ext _ (ModuleCat.hom_ext h)
119122

120123
instance (V : FGModuleCat.{v} R) : Module.Finite R V :=
121124
V.property
122125

123126
instance : (forget₂ (FGModuleCat.{v} R) (ModuleCat.{v} R)).Full where
124-
map_surjective f := ⟨f, rfl⟩
127+
map_surjective f := ⟨ofHom f.hom, rfl⟩
125128

126129
variable {R} in
127130
/-- Converts an isomorphism in the category `FGModuleCat R` to
@@ -136,19 +139,19 @@ def _root_.LinearEquiv.toFGModuleCatIso
136139
{V W : Type v} [AddCommGroup V] [Module R V] [Module.Finite R V]
137140
[AddCommGroup W] [Module R W] [Module.Finite R W] (e : V ≃ₗ[R] W) :
138141
FGModuleCat.of R V ≅ FGModuleCat.of R W where
139-
hom := ModuleCat.ofHom e.toLinearMap
140-
inv := ModuleCat.ofHom e.symm.toLinearMap
142+
hom := ConcreteCategory.ofHom e.toLinearMap
143+
inv := ConcreteCategory.ofHom e.symm.toLinearMap
141144
hom_inv_id := by ext x; exact e.left_inv x
142145
inv_hom_id := by ext x; exact e.right_inv x
143146

144147
/-- Universe lifting as a functor on `FGModuleCat`. -/
145148
def ulift : FGModuleCat.{v} R ⥤ FGModuleCat.{max v w} R where
146149
obj M := .of R <| ULift M
147-
map f := ofHom <| ULift.moduleEquiv.symm.toLinearMap ∘ₗ f.hom ∘ₗ ULift.moduleEquiv.toLinearMap
150+
map f := ofHom <| ULift.moduleEquiv.symm.toLinearMap ∘ₗ f.hom.hom ∘ₗ ULift.moduleEquiv.toLinearMap
148151

149152
/-- Universe lifting is fully faithful. -/
150153
def fullyFaithfulULift : (ulift R).FullyFaithful where
151-
preimage f := ofHom <| ULift.moduleEquiv.toLinearMap ∘ₗ f.hom ∘ₗ
154+
preimage f := ofHom <| ULift.moduleEquiv.toLinearMap ∘ₗ f.hom.hom ∘ₗ
152155
ULift.moduleEquiv.symm.toLinearMap
153156

154157
instance : (ulift R).Faithful :=
@@ -177,11 +180,11 @@ instance : (forget₂ (FGModuleCat.{u} R) (ModuleCat.{u} R)).Additive where
177180
instance : (forget₂ (FGModuleCat.{u} R) (ModuleCat.{u} R)).Linear R where
178181

179182
theorem Iso.conj_eq_conj {V W : FGModuleCat R} (i : V ≅ W) (f : End V) :
180-
Iso.conj i f = FGModuleCat.ofHom (LinearEquiv.conj (isoToLinearEquiv i) f.hom) :=
183+
Iso.conj i f = FGModuleCat.ofHom (LinearEquiv.conj (isoToLinearEquiv i) f.hom.hom) :=
181184
rfl
182185

183186
theorem Iso.conj_hom_eq_conj {V W : FGModuleCat R} (i : V ≅ W) (f : End V) :
184-
(Iso.conj i f).hom = (LinearEquiv.conj (isoToLinearEquiv i) f.hom) :=
187+
(Iso.conj i f).hom.hom = (LinearEquiv.conj (isoToLinearEquiv i) f.hom.hom) :=
185188
rfl
186189

187190
end CommRing
@@ -190,17 +193,21 @@ section Field
190193

191194
variable (K : Type u) [Field K]
192195

193-
instance (V W : FGModuleCat.{v} K) : Module.Finite K (V ⟶ W) :=
196+
instance (V W : FGModuleCat.{v} K) : Module.Finite K (V.obj ⟶ W.obj) :=
194197
(inferInstanceAs <| Module.Finite K (V →ₗ[K] W)).equiv ModuleCat.homLinearEquiv.symm
195198

199+
instance (V W : FGModuleCat.{v} K) : Module.Finite K (V ⟶ W) :=
200+
(inferInstanceAs (Module.Finite K (V.obj ⟶ W.obj))).equiv
201+
InducedCategory.homLinearEquiv.symm
202+
196203
instance : (ModuleCat.isFG K).IsMonoidalClosed where
197204
prop_ihom {X Y} (_ : Module.Finite _ _) (_ : Module.Finite _ _) :=
198205
(inferInstanceAs <| Module.Finite K (X →ₗ[K] Y)).equiv ModuleCat.homLinearEquiv.symm
199206

200207
variable (V W : FGModuleCat K)
201208

202209
@[simp]
203-
theorem ihom_obj : (ihom V).obj W = FGModuleCat.of K (V ⟶ W) :=
210+
theorem ihom_obj : (ihom V).obj W = FGModuleCat.of K (V.obj ⟶ W.obj) :=
204211
rfl
205212

206213
/-- The dual module is the dual in the rigid monoidal category `FGModuleCat K`. -/
@@ -215,7 +222,7 @@ open CategoryTheory.MonoidalCategory
215222

216223
/-- The coevaluation map is defined in `LinearAlgebra.coevaluation`. -/
217224
def FGModuleCatCoevaluation : 𝟙_ (FGModuleCat K) ⟶ V ⊗ FGModuleCatDual K V :=
218-
ModuleCat.ofHom <| coevaluation K V
225+
ConcreteCategory.ofHom <| coevaluation K V
219226

220227
theorem FGModuleCatCoevaluation_apply_one :
221228
(FGModuleCatCoevaluation K V).hom (1 : K) =
@@ -225,7 +232,7 @@ theorem FGModuleCatCoevaluation_apply_one :
225232

226233
/-- The evaluation morphism is given by the contraction map. -/
227234
def FGModuleCatEvaluation : FGModuleCatDual K V ⊗ V ⟶ 𝟙_ (FGModuleCat K) :=
228-
ModuleCat.ofHom <| contractLeft K V
235+
ConcreteCategory.ofHom <| contractLeft K V
229236

230237
theorem FGModuleCatEvaluation_apply (f : FGModuleCatDual K V) (x : V) :
231238
(FGModuleCatEvaluation K V).hom (f ⊗ₜ x) = f.toFun x :=
@@ -237,7 +244,7 @@ theorem FGModuleCatEvaluation_apply (f : FGModuleCatDual K V) (x : V) :
237244
theorem FGModuleCatEvaluation_apply' (f : FGModuleCatDual K V) (x : V) :
238245
DFunLike.coe
239246
(F := ((ModuleCat.of K (Module.Dual K V) ⊗ V.obj).carrier →ₗ[K] (𝟙_ (ModuleCat K))))
240-
(FGModuleCatEvaluation K V).hom (f ⊗ₜ x) = f.toFun x :=
247+
(FGModuleCatEvaluation K V).hom.hom (f ⊗ₜ x) = f.toFun x :=
241248
contractLeft_apply f x
242249

243250
private theorem coevaluation_evaluation :
@@ -275,10 +282,10 @@ end FGModuleCat
275282

276283
@[simp] theorem LinearMap.comp_id_fgModuleCat
277284
{R} [Ring R] {G : FGModuleCat.{v} R} {H : Type v} [AddCommGroup H] [Module R H]
278-
(f : G →ₗ[R] H) : f.comp (ModuleCat.Hom.hom (𝟙 G)) = f :=
285+
(f : G →ₗ[R] H) : f.comp (ModuleCat.Hom.hom (InducedCategory.Hom.hom (𝟙 G))) = f :=
279286
ModuleCat.hom_ext_iff.mp <| Category.id_comp (ModuleCat.ofHom f)
280287

281288
@[simp] theorem LinearMap.id_fgModuleCat_comp
282289
{R} [Ring R] {G : Type v} [AddCommGroup G] [Module R G] {H : FGModuleCat.{v} R}
283-
(f : G →ₗ[R] H) : LinearMap.comp (ModuleCat.Hom.hom (𝟙 H)) f = f :=
290+
(f : G →ₗ[R] H) : LinearMap.comp (ModuleCat.Hom.hom (InducedCategory.Hom.hom (𝟙 H))) f = f :=
284291
ModuleCat.hom_ext_iff.mp <| Category.comp_id (ModuleCat.ofHom f)

Mathlib/Algebra/Category/FGModuleCat/EssentiallySmall.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ noncomputable def ofFiniteEquiv : ofFinite R M ≃ₗ[R] M :=
6767
Classical.choice (Module.Finite.exists_fin_quot_equiv R M).choose_spec.choose_spec
6868

6969
instance : Category (FGModuleRepr R) :=
70-
InducedCategory.category fun x : FGModuleRepr R ↦ FGModuleCat.of R x
70+
inferInstanceAs (Category (InducedCategory _
71+
(fun x : FGModuleRepr R ↦ FGModuleCat.of R x)))
7172

7273
instance : SmallCategory (FGModuleRepr R) where
7374

Mathlib/Algebra/Category/Grp/FiniteGrp.lean

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ instance : CoeSort FiniteGrp.{u} (Type u) where
4545
coe G := G.toGrp
4646

4747
@[to_additive]
48-
instance : Category FiniteGrp := InducedCategory.category FiniteGrp.toGrp
48+
instance : Category FiniteGrp :=
49+
inferInstanceAs (Category (InducedCategory _ FiniteGrp.toGrp))
4950

5051
@[to_additive]
5152
instance : ConcreteCategory FiniteGrp (· →* ·) := InducedCategory.concreteCategory FiniteGrp.toGrp
@@ -67,7 +68,7 @@ def of (G : Type u) [Group G] [Finite G] : FiniteGrp where
6768
@[to_additive
6869
/-- The morphism in `FiniteAddGrp`, induced from a morphism of the category `AddGrpCat` -/]
6970
def ofHom {X Y : Type u} [Group X] [Finite X] [Group Y] [Finite Y] (f : X →* Y) : of X ⟶ of Y :=
70-
GrpCat.ofHom f
71+
InducedCategory.homMk (GrpCat.ofHom f)
7172

7273
@[to_additive]
7374
lemma ofHom_apply {X Y : Type u} [Group X] [Finite X] [Group Y] [Finite Y] (f : X →* Y) (x : X) :

Mathlib/Algebra/Category/Grp/LeftExactFunctor.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ instance (F : C ⥤ₗ Type v) : PreservesFiniteLimits (inverseAux.obj F) where
6565

6666
/-- Implementation, see `leftExactFunctorForgetEquivalence`. -/
6767
noncomputable def inverse : (C ⥤ₗ Type v) ⥤ (C ⥤ₗ AddCommGrpCat.{v}) :=
68-
ObjectProperty.lift _ inverseAux inferInstance
68+
ObjectProperty.lift _ inverseAux (by simp only [leftExactFunctor_iff]; infer_instance)
6969

7070
open scoped MonObj
7171

Mathlib/Algebra/Category/ModuleCat/Tannaka.lean

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,24 @@ universe u
2222

2323
open CategoryTheory
2424

25+
attribute [local simp] add_smul mul_smul in
26+
attribute [local ext] End.ext in
2527
/-- An ingredient of Tannaka duality for rings:
2628
A ring `R` is equivalent to
2729
the endomorphisms of the additive forgetful functor `Module R ⥤ AddCommGroup`.
2830
-/
2931
def ringEquivEndForget₂ (R : Type u) [Ring R] :
3032
R ≃+* End (AdditiveFunctor.of (forget₂ (ModuleCat.{u} R) AddCommGrpCat.{u})) where
3133
toFun r :=
32-
{ app := fun M =>
33-
@AddCommGrpCat.ofHom M.carrier M.carrier _ _ (DistribMulAction.toAddMonoidHom M r) }
34-
invFun φ := φ.app (ModuleCat.of R R) (1 : R)
35-
left_inv := by
36-
intro r
37-
simp
38-
right_inv := by
39-
intro φ
40-
apply NatTrans.ext
34+
ObjectProperty.homMk
35+
{ app M := @AddCommGrpCat.ofHom M.carrier M.carrier _ _
36+
(DistribMulAction.toAddMonoidHom M r) }
37+
invFun φ := φ.hom.app (ModuleCat.of R R) (1 : R)
38+
left_inv _ := by simp
39+
right_inv φ := by
4140
ext M (x : M)
4241
have w := CategoryTheory.congr_fun
43-
(φ.naturality (ModuleCat.ofHom (LinearMap.toSpanSingleton R M x))) (1 : R)
44-
exact w.symm.trans (congr_arg (φ.app M) (one_smul R x))
45-
map_add' := by
46-
intros
47-
apply NatTrans.ext
48-
ext
49-
simp only [AdditiveFunctor.of_fst, ModuleCat.forget₂_obj, DistribMulAction.toAddMonoidHom_apply,
50-
add_smul, AddCommGrpCat.hom_ofHom]
51-
rfl
52-
map_mul' := by
53-
intros
54-
apply NatTrans.ext
55-
ext
56-
simp only [AdditiveFunctor.of_fst, ModuleCat.forget₂_obj, DistribMulAction.toAddMonoidHom_apply,
57-
mul_smul, AddCommGrpCat.hom_ofHom]
58-
rfl
42+
(φ.hom.naturality (ModuleCat.ofHom (LinearMap.toSpanSingleton R M x))) (1 : R)
43+
exact w.symm.trans (congr_arg (φ.hom.app M) (one_smul R x))
44+
map_add' := by cat_disch
45+
map_mul' := by cat_disch

Mathlib/Algebra/Homology/LocalCohomology.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ instance ideal_powers_initial [hR : IsNoetherian R R] :
206206
out J' := by
207207
apply (config := { allowSynthFailures := true }) zigzag_isConnected
208208
· obtain ⟨k, hk⟩ := Ideal.exists_pow_le_of_le_radical_of_fg J'.2 (isNoetherian_def.mp hR _)
209-
exact ⟨CostructuredArrow.mk (⟨⟨hk⟩⟩ : (idealPowersToSelfLERadical J).obj (op k) ⟶ J')⟩
209+
exact ⟨CostructuredArrow.mk (⟨⟨⟨hk⟩⟩⟩ : (idealPowersToSelfLERadical J).obj (op k) ⟶ J')⟩
210210
· intro j1 j2
211211
apply Relation.ReflTransGen.single
212212
-- The inclusions `J^n1 ≤ J'` and `J^n2 ≤ J'` always form a triangle, based on

Mathlib/AlgebraicGeometry/AffineScheme.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def AffineScheme.of (X : Scheme) [h : IsAffine X] : AffineScheme :=
103103
/-- Type check a morphism of schemes as a morphism in `AffineScheme`. -/
104104
def AffineScheme.ofHom {X Y : Scheme} [IsAffine X] [IsAffine Y] (f : X ⟶ Y) :
105105
AffineScheme.of X ⟶ AffineScheme.of Y :=
106-
f
106+
InducedCategory.homMk f
107107

108108
@[simp]
109109
theorem essImage_Spec {X : Scheme} : Scheme.Spec.essImage X ↔ IsAffine X :=

Mathlib/AlgebraicGeometry/Cover/Open.lean

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,18 @@ variable [∀ x, HasPullback (𝒰.f x ≫ f) g]
4545
instance (i : 𝒰.I₀) : IsOpenImmersion (𝒰.f i) := 𝒰.map_prop i
4646

4747
/-- The affine cover of a scheme. -/
48-
def affineCover (X : Scheme.{u}) : OpenCover X where
49-
I₀ := X
50-
X x := Spec (X.local_affine x).choose_spec.choose
51-
f x :=
52-
⟨(X.local_affine x).choose_spec.choose_spec.some.inv ≫ X.toLocallyRingedSpace.ofRestrict _⟩
53-
mem₀ := by
54-
rw [presieve₀_mem_precoverage_iff]
55-
refine ⟨fun x ↦ ?_, inferInstance⟩
56-
use x
57-
simp only [LocallyRingedSpace.comp_toShHom, SheafedSpace.comp_base, TopCat.hom_comp,
58-
ContinuousMap.coe_comp]
59-
rw [Set.range_comp, Set.range_eq_univ.mpr, Set.image_univ]
60-
· erw [Subtype.range_coe_subtype]
61-
exact (X.local_affine x).choose.2
62-
rw [← TopCat.epi_iff_surjective]
63-
change Epi ((SheafedSpace.forget _).map (LocallyRingedSpace.forgetToSheafedSpace.map _))
64-
infer_instance
48+
def affineCover (X : Scheme.{u}) : OpenCover X := by
49+
choose U R h using X.local_affine
50+
let e (x) := (h x).some
51+
exact
52+
{ I₀ := X
53+
X x := Spec (R x)
54+
f x := ⟨(e x).inv ≫ X.toLocallyRingedSpace.ofRestrict _⟩
55+
mem₀ := by
56+
rw [presieve₀_mem_precoverage_iff]
57+
refine ⟨fun x ↦ ⟨x, ⟨(e x).hom.base ⟨x, (U x).2⟩, ?_⟩⟩, inferInstance⟩
58+
change ((((e x).hom ≫ (e x).inv).base ≫ (X.ofRestrict _).base)) ⟨x, _⟩ = x
59+
cat_disch }
6560

6661
instance : Inhabited X.OpenCover :=
6762
⟨X.affineCover⟩

Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -172,26 +172,27 @@ def toΓSpecCBasicOpens :
172172
apply X.presheaf.map_comp
173173

174174
/-- The canonical morphism of sheafed spaces from `X` to the spectrum of its global sections. -/
175-
@[simps]
176-
def toΓSpecSheafedSpace : X.toSheafedSpace ⟶ Spec.toSheafedSpace.obj (op (Γ.obj (op X))) where
177-
base := X.toΓSpecBase
178-
c :=
179-
TopCat.Sheaf.restrictHomEquivHom (structureSheaf (Γ.obj (op X))).1 _ isBasis_basic_opens
180-
X.toΓSpecCBasicOpens
175+
@[simps! -isSimp]
176+
def toΓSpecSheafedSpace : X.toSheafedSpace ⟶ Spec.toSheafedSpace.obj (op (Γ.obj (op X))) :=
177+
InducedCategory.homMk
178+
{ base := X.toΓSpecBase
179+
c :=
180+
TopCat.Sheaf.restrictHomEquivHom (structureSheaf (Γ.obj (op X))).1 _ isBasis_basic_opens
181+
X.toΓSpecCBasicOpens }
181182

182183
theorem toΓSpecSheafedSpace_app_eq :
183-
X.toΓSpecSheafedSpace.c.app (op (basicOpen r)) = X.toΓSpecCApp r := by
184+
X.toΓSpecSheafedSpace.hom.c.app (op (basicOpen r)) = X.toΓSpecCApp r := by
184185
apply TopCat.Sheaf.extend_hom_app _ _ _
185186

186187
@[reassoc] theorem toΓSpecSheafedSpace_app_spec (r : Γ.obj (op X)) :
187-
toOpen (Γ.obj (op X)) (basicOpen r) ≫ X.toΓSpecSheafedSpace.c.app (op (basicOpen r)) =
188+
toOpen (Γ.obj (op X)) (basicOpen r) ≫ X.toΓSpecSheafedSpace.hom.c.app (op (basicOpen r)) =
188189
X.toToΓSpecMapBasicOpen r :=
189190
(X.toΓSpecSheafedSpace_app_eq r).symm ▸ X.toΓSpecCApp_spec r
190191

191192
/-- The map on stalks induced by the unit commutes with maps from `Γ(X)` to
192193
stalks (in `Spec Γ(X)` and in `X`). -/
193194
theorem toStalk_stalkMap_toΓSpec (x : X) :
194-
toStalk _ _ ≫ X.toΓSpecSheafedSpace.stalkMap x = X.presheaf.Γgerm x := by
195+
toStalk _ _ ≫ X.toΓSpecSheafedSpace.hom.stalkMap x = X.presheaf.Γgerm x := by
195196
rw [PresheafedSpace.Hom.stalkMap,
196197
← toOpen_germ _ (basicOpen (1 : Γ.obj (op X))) _ (by rw [basicOpen_one]; trivial),
197198
← Category.assoc, Category.assoc (toOpen _ _), stalkFunctor_map_germ, ← Category.assoc,
@@ -202,10 +203,8 @@ theorem toStalk_stalkMap_toΓSpec (x : X) :
202203

203204
/-- The canonical morphism from `X` to the spectrum of its global sections. -/
204205
@[simps! base]
205-
def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) where
206-
__ := X.toΓSpecSheafedSpace
207-
prop := by
208-
intro x
206+
def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) :=
207+
LocallyRingedSpace.homMk (X.toΓSpecSheafedSpace) (fun x ↦ by
209208
let p : PrimeSpectrum (Γ.obj (op X)) := X.toΓSpecFun x
210209
constructor
211210
-- show stalk map is local hom ↓
@@ -222,7 +221,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) where
222221
rw [← toStalk_stalkMap_toΓSpec, CommRingCat.comp_apply]
223222
erw [← he]
224223
rw [map_mul]
225-
exact ht.mul <| (IsLocalization.map_units (R := Γ.obj (op X)) S s).map _
224+
exact ht.mul <| (IsLocalization.map_units (R := Γ.obj (op X)) S s).map _)
226225

227226
/-- On a locally ringed space `X`, the preimage of the zero locus of the prime spectrum
228227
of `Γ(X, ⊤)` under `toΓSpec` agrees with the associated zero locus on `X`. -/
@@ -250,11 +249,11 @@ theorem comp_ring_hom_ext {X : LocallyRingedSpace.{u}} {R : CommRingCat.{u}} {f
250249
f ≫ X.presheaf.map (homOfLE le_top : (Opens.map β.base).obj (basicOpen r) ⟶ _).op =
251250
toOpen R (basicOpen r) ≫ β.c.app (op (basicOpen r))) :
252251
X.toΓSpec ≫ Spec.locallyRingedSpaceMap f = β := by
253-
ext1
254-
refine Spec.basicOpen_hom_ext w ?_
252+
refine LocallyRingedSpace.forgetToSheafedSpace.map_injective
253+
(Spec.basicOpen_hom_ext w ?_)
255254
intro r U
256-
rw [LocallyRingedSpace.comp_c_app]
257-
erw [toOpen_comp_comap_assoc]
255+
erw [SheafedSpace.comp_hom_c_app, toOpen_comp_comap_assoc]
256+
dsimp
258257
rw [Category.assoc]
259258
erw [toΓSpecSheafedSpace_app_spec, ← X.presheaf.map_comp]
260259
exact h r

0 commit comments

Comments
 (0)