algebraic_geometry.Gamma_Spec_adjunction
⟷
Mathlib.AlgebraicGeometry.GammaSpecAdjunction
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -492,11 +492,11 @@ instance Spec.preservesLimits : Limits.preservesLimits Scheme.Spec :=
/-- Spec is a full functor. -/
instance : CategoryTheory.Functor.Full Spec.toLocallyRingedSpace :=
- rFullOfCounitIsIso ΓSpec.locallyRingedSpaceAdjunction
+ R_full_of_counit_isIso ΓSpec.locallyRingedSpaceAdjunction
#print AlgebraicGeometry.Spec.full /-
instance Spec.full : CategoryTheory.Functor.Full Scheme.Spec :=
- rFullOfCounitIsIso ΓSpec.adjunction
+ R_full_of_counit_isIso ΓSpec.adjunction
#align algebraic_geometry.Spec.full AlgebraicGeometry.Spec.full
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -491,21 +491,21 @@ instance Spec.preservesLimits : Limits.preservesLimits Scheme.Spec :=
-/
/-- Spec is a full functor. -/
-instance : Full Spec.toLocallyRingedSpace :=
+instance : CategoryTheory.Functor.Full Spec.toLocallyRingedSpace :=
rFullOfCounitIsIso ΓSpec.locallyRingedSpaceAdjunction
#print AlgebraicGeometry.Spec.full /-
-instance Spec.full : Full Scheme.Spec :=
+instance Spec.full : CategoryTheory.Functor.Full Scheme.Spec :=
rFullOfCounitIsIso ΓSpec.adjunction
#align algebraic_geometry.Spec.full AlgebraicGeometry.Spec.full
-/
/-- Spec is a faithful functor. -/
-instance : Faithful Spec.toLocallyRingedSpace :=
+instance : CategoryTheory.Functor.Faithful Spec.toLocallyRingedSpace :=
R_faithful_of_counit_isIso ΓSpec.locallyRingedSpaceAdjunction
#print AlgebraicGeometry.Spec.faithful /-
-instance Spec.faithful : Faithful Scheme.Spec :=
+instance Spec.faithful : CategoryTheory.Functor.Faithful Scheme.Spec :=
R_faithful_of_counit_isIso ΓSpec.adjunction
#align algebraic_geometry.Spec.faithful AlgebraicGeometry.Spec.faithful
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -266,7 +266,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X))
let S := (structure_sheaf _).Presheaf.stalk p
rintro (t : S) ht
obtain ⟨⟨r, s⟩, he⟩ := IsLocalization.surj p.as_ideal.prime_compl t
- dsimp at he
+ dsimp at he
apply isUnit_of_mul_isUnit_left
rw [he]
refine' IsLocalization.map_units S (⟨r, _⟩ : p.as_ideal.prime_compl)
@@ -466,11 +466,11 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
(SpecΓIdentity.Hom.app (X.Presheaf.obj (op ⊤))) :=
by
have := congr_app Γ_Spec.adjunction.left_triangle X
- dsimp at this
- rw [← is_iso.eq_comp_inv] at this
+ dsimp at this
+ rw [← is_iso.eq_comp_inv] at this
simp only [Γ_Spec.LocallyRingedSpace_adjunction_counit, nat_trans.op_app, category.id_comp,
- Γ_Spec.adjunction_counit_app] at this
- rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
+ Γ_Spec.adjunction_counit_app] at this
+ rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
exact this
#align algebraic_geometry.Γ_Spec.adjunction_unit_app_app_top AlgebraicGeometry.ΓSpec.adjunction_unit_app_app_top
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2021 Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Junyan Xu
-/
-import Mathbin.AlgebraicGeometry.Scheme
-import Mathbin.CategoryTheory.Adjunction.Limits
-import Mathbin.CategoryTheory.Adjunction.Reflective
+import AlgebraicGeometry.Scheme
+import CategoryTheory.Adjunction.Limits
+import CategoryTheory.Adjunction.Reflective
#align_import algebraic_geometry.Gamma_Spec_adjunction from "leanprover-community/mathlib"@"5d0c76894ada7940957143163d7b921345474cbc"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2021 Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Junyan Xu
-
-! This file was ported from Lean 3 source module algebraic_geometry.Gamma_Spec_adjunction
-! leanprover-community/mathlib commit 5d0c76894ada7940957143163d7b921345474cbc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.AlgebraicGeometry.Scheme
import Mathbin.CategoryTheory.Adjunction.Limits
import Mathbin.CategoryTheory.Adjunction.Reflective
+#align_import algebraic_geometry.Gamma_Spec_adjunction from "leanprover-community/mathlib"@"5d0c76894ada7940957143163d7b921345474cbc"
+
/-!
# Adjunction between `Γ` and `Spec`
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -88,24 +88,24 @@ theorem not_mem_prime_iff_unit_in_stalk (r : Γ.obj (op X)) (x : X) :
#align algebraic_geometry.LocallyRingedSpace.not_mem_prime_iff_unit_in_stalk AlgebraicGeometry.LocallyRingedSpace.not_mem_prime_iff_unit_in_stalk
-/
-#print AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_preim_basicOpen_eq /-
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpec_preim_basicOpen_eq /-
/-- The preimage of a basic open in `Spec Γ(X)` under the unit is the basic
open in `X` defined by the same element (they are equal as sets). -/
-theorem to_Γ_Spec_preim_basicOpen_eq (r : Γ.obj (op X)) :
+theorem toΓSpec_preim_basicOpen_eq (r : Γ.obj (op X)) :
X.toΓSpecFun ⁻¹' (basicOpen r).1 = (X.toRingedSpace.basicOpen r).1 := by ext;
erw [X.to_RingedSpace.mem_top_basic_open]; apply not_mem_prime_iff_unit_in_stalk
-#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_preim_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_preim_basicOpen_eq
+#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_preim_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpec_preim_basicOpen_eq
-/
-#print AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_continuous /-
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpec_continuous /-
/-- `to_Γ_Spec_fun` is continuous. -/
-theorem to_Γ_Spec_continuous : Continuous X.toΓSpecFun :=
+theorem toΓSpec_continuous : Continuous X.toΓSpecFun :=
by
apply is_topological_basis_basic_opens.continuous
rintro _ ⟨r, rfl⟩
erw [X.to_Γ_Spec_preim_basic_open_eq r]
exact (X.to_RingedSpace.basic_open r).2
-#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_continuous AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_continuous
+#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_continuous AlgebraicGeometry.LocallyRingedSpace.toΓSpec_continuous
-/
#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase /-
@@ -115,7 +115,7 @@ space of `X` to the prime spectrum of its global sections. -/
def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X))
where
toFun := X.toΓSpecFun
- continuous_toFun := X.to_Γ_Spec_continuous
+ continuous_toFun := X.toΓSpec_continuous
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_base AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase
-/
@@ -131,7 +131,7 @@ abbrev toΓSpecMapBasicOpen : Opens X :=
#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen_eq /-
/-- The preimage is the basic open in `X` defined by the same element `r`. -/
theorem toΓSpecMapBasicOpen_eq : X.toΓSpecMapBasicOpen r = X.toRingedSpace.basicOpen r :=
- Opens.ext (X.to_Γ_Spec_preim_basicOpen_eq r)
+ Opens.ext (X.toΓSpec_preim_basicOpen_eq r)
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_map_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen_eq
-/
@@ -234,10 +234,10 @@ theorem toΓSpecSheafedSpace_app_spec (r : Γ.obj (op X)) :
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace_app_spec AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_spec
-/
-#print AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_to_Γ_Spec /-
+#print AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_toΓSpec /-
/-- The map on stalks induced by the unit commutes with maps from `Γ(X)` to
stalks (in `Spec Γ(X)` and in `X`). -/
-theorem toStalk_stalkMap_to_Γ_Spec (x : X) :
+theorem toStalk_stalkMap_toΓSpec (x : X) :
toStalk _ _ ≫ PresheafedSpace.stalkMap X.toΓSpecSheafedSpace x = X.ΓToStalk x :=
by
rw [PresheafedSpace.stalk_map]
@@ -252,7 +252,7 @@ theorem toStalk_stalkMap_to_Γ_Spec (x : X) :
congr 1
change (X.to_Γ_Spec_base _* X.presheaf).map le_top.hom.op ≫ _ = _
apply germ_res
-#align algebraic_geometry.LocallyRingedSpace.to_stalk_stalk_map_to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_to_Γ_Spec
+#align algebraic_geometry.LocallyRingedSpace.to_stalk_stalk_map_to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_toΓSpec
-/
#print AlgebraicGeometry.LocallyRingedSpace.toΓSpec /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Junyan Xu
! This file was ported from Lean 3 source module algebraic_geometry.Gamma_Spec_adjunction
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit 5d0c76894ada7940957143163d7b921345474cbc
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.CategoryTheory.Adjunction.Reflective
/-!
# Adjunction between `Γ` and `Spec`
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We define the adjunction `Γ_Spec.adjunction : Γ ⊣ Spec` by defining the unit (`to_Γ_Spec`,
in multiple steps in this file) and counit (done in Spec.lean) and checking that they satisfy
the left and right triangle identities. The constructions and proofs make use of
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -64,28 +64,37 @@ namespace LocallyRingedSpace
variable (X : LocallyRingedSpace.{u})
+#print AlgebraicGeometry.LocallyRingedSpace.ΓToStalk /-
/-- The map from the global sections to a stalk. -/
def ΓToStalk (x : X) : Γ.obj (op X) ⟶ X.Presheaf.stalk x :=
X.Presheaf.germ (⟨x, trivial⟩ : (⊤ : Opens X))
#align algebraic_geometry.LocallyRingedSpace.Γ_to_stalk AlgebraicGeometry.LocallyRingedSpace.ΓToStalk
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecFun /-
/-- The canonical map from the underlying set to the prime spectrum of `Γ(X)`. -/
def toΓSpecFun : X → PrimeSpectrum (Γ.obj (op X)) := fun x =>
comap (X.ΓToStalk x) (LocalRing.closedPoint (X.Presheaf.stalk x))
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_fun AlgebraicGeometry.LocallyRingedSpace.toΓSpecFun
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.not_mem_prime_iff_unit_in_stalk /-
theorem not_mem_prime_iff_unit_in_stalk (r : Γ.obj (op X)) (x : X) :
r ∉ (X.toΓSpecFun x).asIdeal ↔ IsUnit (X.ΓToStalk x r) := by
erw [LocalRing.mem_maximalIdeal, Classical.not_not]
#align algebraic_geometry.LocallyRingedSpace.not_mem_prime_iff_unit_in_stalk AlgebraicGeometry.LocallyRingedSpace.not_mem_prime_iff_unit_in_stalk
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_preim_basicOpen_eq /-
/-- The preimage of a basic open in `Spec Γ(X)` under the unit is the basic
open in `X` defined by the same element (they are equal as sets). -/
theorem to_Γ_Spec_preim_basicOpen_eq (r : Γ.obj (op X)) :
X.toΓSpecFun ⁻¹' (basicOpen r).1 = (X.toRingedSpace.basicOpen r).1 := by ext;
erw [X.to_RingedSpace.mem_top_basic_open]; apply not_mem_prime_iff_unit_in_stalk
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_preim_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_preim_basicOpen_eq
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_continuous /-
/-- `to_Γ_Spec_fun` is continuous. -/
theorem to_Γ_Spec_continuous : Continuous X.toΓSpecFun :=
by
@@ -94,7 +103,9 @@ theorem to_Γ_Spec_continuous : Continuous X.toΓSpecFun :=
erw [X.to_Γ_Spec_preim_basic_open_eq r]
exact (X.to_RingedSpace.basic_open r).2
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_continuous AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_continuous
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase /-
/-- The canonical (bundled) continuous map from the underlying topological
space of `X` to the prime spectrum of its global sections. -/
@[simps]
@@ -103,25 +114,33 @@ def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X))
toFun := X.toΓSpecFun
continuous_toFun := X.to_Γ_Spec_continuous
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_base AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase
+-/
variable (r : Γ.obj (op X))
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen /-
/-- The preimage in `X` of a basic open in `Spec Γ(X)` (as an open set). -/
abbrev toΓSpecMapBasicOpen : Opens X :=
(Opens.map X.toΓSpecBase).obj (basicOpen r)
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_map_basic_open AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen_eq /-
/-- The preimage is the basic open in `X` defined by the same element `r`. -/
theorem toΓSpecMapBasicOpen_eq : X.toΓSpecMapBasicOpen r = X.toRingedSpace.basicOpen r :=
Opens.ext (X.to_Γ_Spec_preim_basicOpen_eq r)
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_map_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen_eq
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toToΓSpecMapBasicOpen /-
/-- The map from the global sections `Γ(X)` to the sections on the (preimage of) a basic open. -/
abbrev toToΓSpecMapBasicOpen :
X.Presheaf.obj (op ⊤) ⟶ X.Presheaf.obj (op <| X.toΓSpecMapBasicOpen r) :=
X.Presheaf.map (X.toΓSpecMapBasicOpen r).le_top.op
#align algebraic_geometry.LocallyRingedSpace.to_to_Γ_Spec_map_basic_open AlgebraicGeometry.LocallyRingedSpace.toToΓSpecMapBasicOpen
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.isUnit_res_toΓSpecMapBasicOpen /-
/-- `r` is a unit as a section on the basic open defined by `r`. -/
theorem isUnit_res_toΓSpecMapBasicOpen : IsUnit (X.toToΓSpecMapBasicOpen r r) :=
by
@@ -132,14 +151,18 @@ theorem isUnit_res_toΓSpecMapBasicOpen : IsUnit (X.toToΓSpecMapBasicOpen r r)
erw [← functor.map_comp]
congr
#align algebraic_geometry.LocallyRingedSpace.is_unit_res_to_Γ_Spec_map_basic_open AlgebraicGeometry.LocallyRingedSpace.isUnit_res_toΓSpecMapBasicOpen
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp /-
/-- Define the sheaf hom on individual basic opens for the unit. -/
def toΓSpecCApp :
(structureSheaf <| Γ.obj <| op X).val.obj (op <| basicOpen r) ⟶
X.Presheaf.obj (op <| X.toΓSpecMapBasicOpen r) :=
IsLocalization.Away.lift r (isUnit_res_toΓSpecMapBasicOpen _ r)
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_c_app AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp_iff /-
/-- Characterization of the sheaf hom on basic opens,
direction ← (next lemma) is used at various places, but → is not used in this file. -/
theorem toΓSpecCApp_iff
@@ -155,11 +178,15 @@ theorem toΓSpecCApp_iff
pick_goal 5; exact is_localization.to_basic_open _ r; exact h
apply congr_arg
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_c_app_iff AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp_iff
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp_spec /-
theorem toΓSpecCApp_spec : toOpen _ (basicOpen r) ≫ X.toΓSpecCApp r = X.toToΓSpecMapBasicOpen r :=
(X.toΓSpecCApp_iff r _).2 rfl
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_c_app_spec AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp_spec
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecCBasicOpens /-
/-- The sheaf hom on all basic opens, commuting with restrictions. -/
def toΓSpecCBasicOpens :
(inducedFunctor basicOpen).op ⋙ (structureSheaf (Γ.obj (op X))).1 ⟶
@@ -175,7 +202,9 @@ def toΓSpecCBasicOpens :
symm
apply X.presheaf.map_comp
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_c_basic_opens AlgebraicGeometry.LocallyRingedSpace.toΓSpecCBasicOpens
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace /-
/-- The canonical morphism of sheafed spaces from `X` to the spectrum of its global sections. -/
@[simps]
def toΓSpecSheafedSpace : X.toSheafedSpace ⟶ Spec.toSheafedSpace.obj (op (Γ.obj (op X)))
@@ -185,18 +214,24 @@ def toΓSpecSheafedSpace : X.toSheafedSpace ⟶ Spec.toSheafedSpace.obj (op (Γ.
TopCat.Sheaf.restrictHomEquivHom (structureSheaf (Γ.obj (op X))).1 _ isBasis_basic_opens
X.toΓSpecCBasicOpens
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_eq /-
theorem toΓSpecSheafedSpace_app_eq :
X.toΓSpecSheafedSpace.c.app (op (basicOpen r)) = X.toΓSpecCApp r :=
TopCat.Sheaf.extend_hom_app _ _ _ _ _
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace_app_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_eq
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_spec /-
theorem toΓSpecSheafedSpace_app_spec (r : Γ.obj (op X)) :
toOpen _ (basicOpen r) ≫ X.toΓSpecSheafedSpace.c.app (op (basicOpen r)) =
X.toToΓSpecMapBasicOpen r :=
(X.toΓSpecSheafedSpace_app_eq r).symm ▸ X.toΓSpecCApp_spec r
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace_app_spec AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_spec
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_to_Γ_Spec /-
/-- The map on stalks induced by the unit commutes with maps from `Γ(X)` to
stalks (in `Spec Γ(X)` and in `X`). -/
theorem toStalk_stalkMap_to_Γ_Spec (x : X) :
@@ -215,7 +250,9 @@ theorem toStalk_stalkMap_to_Γ_Spec (x : X) :
change (X.to_Γ_Spec_base _* X.presheaf).map le_top.hom.op ≫ _ = _
apply germ_res
#align algebraic_geometry.LocallyRingedSpace.to_stalk_stalk_map_to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_to_Γ_Spec
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.toΓSpec /-
/-- The canonical morphism from `X` to the spectrum of its global sections. -/
@[simps val_base]
def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X))
@@ -242,7 +279,9 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X))
((IsLocalization.map_units S s : _).map
(PresheafedSpace.stalk_map X.to_Γ_Spec_SheafedSpace x))
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toΓSpec
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.comp_ring_hom_ext /-
theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶ Γ.obj (op X)}
{β : X ⟶ Spec.locallyRingedSpaceObj R}
(w : X.toΓSpec.1.base ≫ (Spec.locallyRingedSpaceMap f).1.base = β.1.base)
@@ -262,7 +301,9 @@ theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶
convert h r
exact w
#align algebraic_geometry.LocallyRingedSpace.comp_ring_hom_ext AlgebraicGeometry.LocallyRingedSpace.comp_ring_hom_ext
+-/
+#print AlgebraicGeometry.LocallyRingedSpace.Γ_Spec_left_triangle /-
/-- `to_Spec_Γ _` is an isomorphism so these are mutually two-sided inverses. -/
theorem Γ_Spec_left_triangle : toSpecΓ (Γ.obj (op X)) ≫ X.toΓSpec.1.c.app (op ⊤) = 𝟙 _ :=
by
@@ -273,9 +314,11 @@ theorem Γ_Spec_left_triangle : toSpecΓ (Γ.obj (op X)) ≫ X.toΓSpec.1.c.app
erw [X.to_Γ_Spec_SheafedSpace_app_spec 1, ← functor.map_comp]
convert eq_to_hom_map X.presheaf _; rfl
#align algebraic_geometry.LocallyRingedSpace.Γ_Spec_left_triangle AlgebraicGeometry.LocallyRingedSpace.Γ_Spec_left_triangle
+-/
end LocallyRingedSpace
+#print AlgebraicGeometry.identityToΓSpec /-
/-- The unit as a natural transformation. -/
def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLocallyRingedSpace
where
@@ -295,14 +338,18 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
erw [Y.to_Γ_Spec_SheafedSpace_app_spec, f.1.c.naturality]
rfl
#align algebraic_geometry.identity_to_Γ_Spec AlgebraicGeometry.identityToΓSpec
+-/
namespace ΓSpec
+#print AlgebraicGeometry.ΓSpec.left_triangle /-
theorem left_triangle (X : LocallyRingedSpace) :
SpecΓIdentity.inv.app (Γ.obj (op X)) ≫ (identityToΓSpec.app X).val.c.app (op ⊤) = 𝟙 _ :=
X.Γ_Spec_left_triangle
#align algebraic_geometry.Γ_Spec.left_triangle AlgebraicGeometry.ΓSpec.left_triangle
+-/
+#print AlgebraicGeometry.ΓSpec.right_triangle /-
/-- `Spec_Γ_identity` is iso so these are mutually two-sided inverses. -/
theorem right_triangle (R : CommRingCat) :
identityToΓSpec.app (Spec.toLocallyRingedSpace.obj <| op R) ≫
@@ -317,7 +364,9 @@ theorem right_triangle (R : CommRingCat) :
rfl
· intro r; apply to_open_res
#align algebraic_geometry.Γ_Spec.right_triangle AlgebraicGeometry.ΓSpec.right_triangle
+-/
+#print AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction /-
-- Removing this makes the following definition time out.
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `LocallyRingedSpace`. -/
@[simps Unit counit]
@@ -332,33 +381,43 @@ def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace :=
ext1; ext1 R; erw [category.id_comp]
exact right_triangle R.unop }
#align algebraic_geometry.Γ_Spec.LocallyRingedSpace_adjunction AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction
+-/
attribute [local semireducible] Spec.to_LocallyRingedSpace
+#print AlgebraicGeometry.ΓSpec.adjunction /-
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `Scheme`. -/
def adjunction : Scheme.Γ.rightOp ⊣ Scheme.Spec :=
locallyRingedSpaceAdjunction.restrictFullyFaithful Scheme.forgetToLocallyRingedSpace (𝟭 _)
(NatIso.ofComponents (fun X => Iso.refl _) fun _ _ f => by simpa)
(NatIso.ofComponents (fun X => Iso.refl _) fun _ _ f => by simpa)
#align algebraic_geometry.Γ_Spec.adjunction AlgebraicGeometry.ΓSpec.adjunction
+-/
+#print AlgebraicGeometry.ΓSpec.adjunction_homEquiv_apply /-
theorem adjunction_homEquiv_apply {X : Scheme} {R : CommRingCatᵒᵖ}
(f : (op <| Scheme.Γ.obj <| op X) ⟶ R) :
ΓSpec.adjunction.homEquiv X R f = locallyRingedSpaceAdjunction.homEquiv X.1 R f := by
dsimp [adjunction, adjunction.restrict_fully_faithful]; simp
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_apply
+-/
+#print AlgebraicGeometry.ΓSpec.adjunction_homEquiv /-
theorem adjunction_homEquiv (X : Scheme) (R : CommRingCatᵒᵖ) :
ΓSpec.adjunction.homEquiv X R = locallyRingedSpaceAdjunction.homEquiv X.1 R :=
Equiv.ext fun f => adjunction_homEquiv_apply f
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv AlgebraicGeometry.ΓSpec.adjunction_homEquiv
+-/
+#print AlgebraicGeometry.ΓSpec.adjunction_homEquiv_symm_apply /-
theorem adjunction_homEquiv_symm_apply {X : Scheme} {R : CommRingCatᵒᵖ}
(f : X ⟶ Scheme.Spec.obj R) :
(ΓSpec.adjunction.homEquiv X R).symm f = (locallyRingedSpaceAdjunction.homEquiv X.1 R).symm f :=
by congr 2; exact adjunction_hom_equiv _ _
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_symm_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_symm_apply
+-/
+#print AlgebraicGeometry.ΓSpec.adjunction_counit_app /-
@[simp]
theorem adjunction_counit_app {R : CommRingCatᵒᵖ} :
ΓSpec.adjunction.counit.app R = locallyRingedSpaceAdjunction.counit.app R :=
@@ -367,19 +426,25 @@ theorem adjunction_counit_app {R : CommRingCatᵒᵖ} :
adjunction_hom_equiv_symm_apply]
rfl
#align algebraic_geometry.Γ_Spec.adjunction_counit_app AlgebraicGeometry.ΓSpec.adjunction_counit_app
+-/
+#print AlgebraicGeometry.ΓSpec.adjunction_unit_app /-
@[simp]
theorem adjunction_unit_app {X : Scheme} :
ΓSpec.adjunction.Unit.app X = locallyRingedSpaceAdjunction.Unit.app X.1 := by
rw [← adjunction.hom_equiv_id, ← adjunction.hom_equiv_id, adjunction_hom_equiv_apply]; rfl
#align algebraic_geometry.Γ_Spec.adjunction_unit_app AlgebraicGeometry.ΓSpec.adjunction_unit_app
+-/
attribute [local semireducible] LocallyRingedSpace_adjunction Γ_Spec.adjunction
+#print AlgebraicGeometry.ΓSpec.isIso_locallyRingedSpaceAdjunction_counit /-
instance isIso_locallyRingedSpaceAdjunction_counit : IsIso locallyRingedSpaceAdjunction.counit :=
IsIso.of_iso_inv _
#align algebraic_geometry.Γ_Spec.is_iso_LocallyRingedSpace_adjunction_counit AlgebraicGeometry.ΓSpec.isIso_locallyRingedSpaceAdjunction_counit
+-/
+#print AlgebraicGeometry.ΓSpec.isIso_adjunction_counit /-
instance isIso_adjunction_counit : IsIso ΓSpec.adjunction.counit :=
by
apply (config := { instances := false }) nat_iso.is_iso_of_is_iso_app
@@ -387,7 +452,9 @@ instance isIso_adjunction_counit : IsIso ΓSpec.adjunction.counit :=
rw [adjunction_counit_app]
infer_instance
#align algebraic_geometry.Γ_Spec.is_iso_adjunction_counit AlgebraicGeometry.ΓSpec.isIso_adjunction_counit
+-/
+#print AlgebraicGeometry.ΓSpec.adjunction_unit_app_app_top /-
-- This is just
-- `(Γ_Spec.adjunction.unit.app X).1.c.app (op ⊤) = Spec_Γ_identity.hom.app (X.presheaf.obj (op ⊤))`
-- But lean times out when trying to unify the types of the two sides.
@@ -406,6 +473,7 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
exact this
#align algebraic_geometry.Γ_Spec.adjunction_unit_app_app_top AlgebraicGeometry.ΓSpec.adjunction_unit_app_app_top
+-/
end ΓSpec
@@ -416,25 +484,31 @@ end ΓSpec
instance : Limits.PreservesLimits Spec.toLocallyRingedSpace :=
ΓSpec.locallyRingedSpaceAdjunction.rightAdjointPreservesLimits
+#print AlgebraicGeometry.Spec.preservesLimits /-
instance Spec.preservesLimits : Limits.preservesLimits Scheme.Spec :=
ΓSpec.adjunction.rightAdjointPreservesLimits
#align algebraic_geometry.Spec.preserves_limits AlgebraicGeometry.Spec.preservesLimits
+-/
/-- Spec is a full functor. -/
instance : Full Spec.toLocallyRingedSpace :=
rFullOfCounitIsIso ΓSpec.locallyRingedSpaceAdjunction
+#print AlgebraicGeometry.Spec.full /-
instance Spec.full : Full Scheme.Spec :=
rFullOfCounitIsIso ΓSpec.adjunction
#align algebraic_geometry.Spec.full AlgebraicGeometry.Spec.full
+-/
/-- Spec is a faithful functor. -/
instance : Faithful Spec.toLocallyRingedSpace :=
R_faithful_of_counit_isIso ΓSpec.locallyRingedSpaceAdjunction
+#print AlgebraicGeometry.Spec.faithful /-
instance Spec.faithful : Faithful Scheme.Spec :=
R_faithful_of_counit_isIso ΓSpec.adjunction
#align algebraic_geometry.Spec.faithful AlgebraicGeometry.Spec.faithful
+-/
instance : IsRightAdjoint Spec.toLocallyRingedSpace :=
⟨_, ΓSpec.locallyRingedSpaceAdjunction⟩
@@ -445,9 +519,11 @@ instance : IsRightAdjoint Scheme.Spec :=
instance : Reflective Spec.toLocallyRingedSpace :=
⟨⟩
+#print AlgebraicGeometry.Spec.reflective /-
instance Spec.reflective : Reflective Scheme.Spec :=
⟨⟩
#align algebraic_geometry.Spec.reflective AlgebraicGeometry.Spec.reflective
+-/
end AlgebraicGeometry
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -310,7 +310,7 @@ theorem right_triangle (R : CommRingCat) :
𝟙 _ :=
by
apply LocallyRingedSpace.comp_ring_hom_ext
- · ext ((p : PrimeSpectrum R)x)
+ · ext (p : PrimeSpectrum R) x
erw [←
IsLocalization.AtPrime.to_map_mem_maximal_iff ((structure_sheaf R).Presheaf.stalk p)
p.as_ideal x]
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -336,7 +336,7 @@ def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace :=
attribute [local semireducible] Spec.to_LocallyRingedSpace
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `Scheme`. -/
-def adjunction : Scheme.Γ.rightOp ⊣ Scheme.spec :=
+def adjunction : Scheme.Γ.rightOp ⊣ Scheme.Spec :=
locallyRingedSpaceAdjunction.restrictFullyFaithful Scheme.forgetToLocallyRingedSpace (𝟭 _)
(NatIso.ofComponents (fun X => Iso.refl _) fun _ _ f => by simpa)
(NatIso.ofComponents (fun X => Iso.refl _) fun _ _ f => by simpa)
@@ -354,7 +354,7 @@ theorem adjunction_homEquiv (X : Scheme) (R : CommRingCatᵒᵖ) :
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv AlgebraicGeometry.ΓSpec.adjunction_homEquiv
theorem adjunction_homEquiv_symm_apply {X : Scheme} {R : CommRingCatᵒᵖ}
- (f : X ⟶ Scheme.spec.obj R) :
+ (f : X ⟶ Scheme.Spec.obj R) :
(ΓSpec.adjunction.homEquiv X R).symm f = (locallyRingedSpaceAdjunction.homEquiv X.1 R).symm f :=
by congr 2; exact adjunction_hom_equiv _ _
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_symm_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_symm_apply
@@ -393,7 +393,7 @@ instance isIso_adjunction_counit : IsIso ΓSpec.adjunction.counit :=
-- But lean times out when trying to unify the types of the two sides.
theorem adjunction_unit_app_app_top (X : Scheme) :
@Eq
- ((Scheme.spec.obj (op <| X.Presheaf.obj (op ⊤))).Presheaf.obj (op ⊤) ⟶
+ ((Scheme.Spec.obj (op <| X.Presheaf.obj (op ⊤))).Presheaf.obj (op ⊤) ⟶
((ΓSpec.adjunction.Unit.app X).1.base _* X.Presheaf).obj (op ⊤))
((ΓSpec.adjunction.Unit.app X).val.c.app (op ⊤))
(SpecΓIdentity.Hom.app (X.Presheaf.obj (op ⊤))) :=
@@ -416,7 +416,7 @@ end ΓSpec
instance : Limits.PreservesLimits Spec.toLocallyRingedSpace :=
ΓSpec.locallyRingedSpaceAdjunction.rightAdjointPreservesLimits
-instance Spec.preservesLimits : Limits.preservesLimits Scheme.spec :=
+instance Spec.preservesLimits : Limits.preservesLimits Scheme.Spec :=
ΓSpec.adjunction.rightAdjointPreservesLimits
#align algebraic_geometry.Spec.preserves_limits AlgebraicGeometry.Spec.preservesLimits
@@ -424,7 +424,7 @@ instance Spec.preservesLimits : Limits.preservesLimits Scheme.spec :=
instance : Full Spec.toLocallyRingedSpace :=
rFullOfCounitIsIso ΓSpec.locallyRingedSpaceAdjunction
-instance Spec.full : Full Scheme.spec :=
+instance Spec.full : Full Scheme.Spec :=
rFullOfCounitIsIso ΓSpec.adjunction
#align algebraic_geometry.Spec.full AlgebraicGeometry.Spec.full
@@ -432,20 +432,20 @@ instance Spec.full : Full Scheme.spec :=
instance : Faithful Spec.toLocallyRingedSpace :=
R_faithful_of_counit_isIso ΓSpec.locallyRingedSpaceAdjunction
-instance Spec.faithful : Faithful Scheme.spec :=
+instance Spec.faithful : Faithful Scheme.Spec :=
R_faithful_of_counit_isIso ΓSpec.adjunction
#align algebraic_geometry.Spec.faithful AlgebraicGeometry.Spec.faithful
instance : IsRightAdjoint Spec.toLocallyRingedSpace :=
⟨_, ΓSpec.locallyRingedSpaceAdjunction⟩
-instance : IsRightAdjoint Scheme.spec :=
+instance : IsRightAdjoint Scheme.Spec :=
⟨_, ΓSpec.adjunction⟩
instance : Reflective Spec.toLocallyRingedSpace :=
⟨⟩
-instance Spec.reflective : Reflective Scheme.spec :=
+instance Spec.reflective : Reflective Scheme.Spec :=
⟨⟩
#align algebraic_geometry.Spec.reflective AlgebraicGeometry.Spec.reflective
mathlib commit https://github.com/leanprover-community/mathlib/commit/8efcf8022aac8e01df8d302dcebdbc25d6a886c8
@@ -299,14 +299,14 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
namespace ΓSpec
theorem left_triangle (X : LocallyRingedSpace) :
- specΓIdentity.inv.app (Γ.obj (op X)) ≫ (identityToΓSpec.app X).val.c.app (op ⊤) = 𝟙 _ :=
+ SpecΓIdentity.inv.app (Γ.obj (op X)) ≫ (identityToΓSpec.app X).val.c.app (op ⊤) = 𝟙 _ :=
X.Γ_Spec_left_triangle
#align algebraic_geometry.Γ_Spec.left_triangle AlgebraicGeometry.ΓSpec.left_triangle
/-- `Spec_Γ_identity` is iso so these are mutually two-sided inverses. -/
theorem right_triangle (R : CommRingCat) :
identityToΓSpec.app (Spec.toLocallyRingedSpace.obj <| op R) ≫
- Spec.toLocallyRingedSpace.map (specΓIdentity.inv.app R).op =
+ Spec.toLocallyRingedSpace.map (SpecΓIdentity.inv.app R).op =
𝟙 _ :=
by
apply LocallyRingedSpace.comp_ring_hom_ext
@@ -324,7 +324,7 @@ theorem right_triangle (R : CommRingCat) :
def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace :=
Adjunction.mkOfUnitCounit
{ Unit := identityToΓSpec
- counit := (NatIso.op specΓIdentity).inv
+ counit := (NatIso.op SpecΓIdentity).inv
left_triangle := by
ext X; erw [category.id_comp]
exact congr_arg Quiver.Hom.op (left_triangle X)
@@ -396,7 +396,7 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
((Scheme.spec.obj (op <| X.Presheaf.obj (op ⊤))).Presheaf.obj (op ⊤) ⟶
((ΓSpec.adjunction.Unit.app X).1.base _* X.Presheaf).obj (op ⊤))
((ΓSpec.adjunction.Unit.app X).val.c.app (op ⊤))
- (specΓIdentity.Hom.app (X.Presheaf.obj (op ⊤))) :=
+ (SpecΓIdentity.Hom.app (X.Presheaf.obj (op ⊤))) :=
by
have := congr_app Γ_Spec.adjunction.left_triangle X
dsimp at this
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -125,7 +125,8 @@ abbrev toToΓSpecMapBasicOpen :
/-- `r` is a unit as a section on the basic open defined by `r`. -/
theorem isUnit_res_toΓSpecMapBasicOpen : IsUnit (X.toToΓSpecMapBasicOpen r r) :=
by
- convert(X.presheaf.map <| (eq_to_hom <| X.to_Γ_Spec_map_basic_open_eq r).op).isUnit_map
+ convert
+ (X.presheaf.map <| (eq_to_hom <| X.to_Γ_Spec_map_basic_open_eq r).op).isUnit_map
(X.to_RingedSpace.is_unit_res_basic_open r)
rw [← comp_apply]
erw [← functor.map_comp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -228,7 +228,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X))
let S := (structure_sheaf _).Presheaf.stalk p
rintro (t : S) ht
obtain ⟨⟨r, s⟩, he⟩ := IsLocalization.surj p.as_ideal.prime_compl t
- dsimp at he
+ dsimp at he
apply isUnit_of_mul_isUnit_left
rw [he]
refine' IsLocalization.map_units S (⟨r, _⟩ : p.as_ideal.prime_compl)
@@ -398,11 +398,11 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
(specΓIdentity.Hom.app (X.Presheaf.obj (op ⊤))) :=
by
have := congr_app Γ_Spec.adjunction.left_triangle X
- dsimp at this
- rw [← is_iso.eq_comp_inv] at this
+ dsimp at this
+ rw [← is_iso.eq_comp_inv] at this
simp only [Γ_Spec.LocallyRingedSpace_adjunction_counit, nat_trans.op_app, category.id_comp,
- Γ_Spec.adjunction_counit_app] at this
- rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
+ Γ_Spec.adjunction_counit_app] at this
+ rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
exact this
#align algebraic_geometry.Γ_Spec.adjunction_unit_app_app_top AlgebraicGeometry.ΓSpec.adjunction_unit_app_app_top
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -82,11 +82,8 @@ theorem not_mem_prime_iff_unit_in_stalk (r : Γ.obj (op X)) (x : X) :
/-- The preimage of a basic open in `Spec Γ(X)` under the unit is the basic
open in `X` defined by the same element (they are equal as sets). -/
theorem to_Γ_Spec_preim_basicOpen_eq (r : Γ.obj (op X)) :
- X.toΓSpecFun ⁻¹' (basicOpen r).1 = (X.toRingedSpace.basicOpen r).1 :=
- by
- ext
- erw [X.to_RingedSpace.mem_top_basic_open]
- apply not_mem_prime_iff_unit_in_stalk
+ X.toΓSpecFun ⁻¹' (basicOpen r).1 = (X.toRingedSpace.basicOpen r).1 := by ext;
+ erw [X.to_RingedSpace.mem_top_basic_open]; apply not_mem_prime_iff_unit_in_stalk
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_preim_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_preim_basicOpen_eq
/-- `to_Γ_Spec_fun` is continuous. -/
@@ -153,11 +150,8 @@ theorem toΓSpecCApp_iff
rw [← IsLocalization.Away.AwayMap.lift_comp r (X.is_unit_res_to_Γ_Spec_map_basic_open r)]
pick_goal 5; exact is_localization.to_basic_open _ r
constructor
- · intro h
- refine' IsLocalization.ringHom_ext _ _
- pick_goal 5
- exact is_localization.to_basic_open _ r
- exact h
+ · intro h; refine' IsLocalization.ringHom_ext _ _
+ pick_goal 5; exact is_localization.to_basic_open _ r; exact h
apply congr_arg
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_c_app_iff AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp_iff
@@ -320,8 +314,7 @@ theorem right_triangle (R : CommRingCat) :
IsLocalization.AtPrime.to_map_mem_maximal_iff ((structure_sheaf R).Presheaf.stalk p)
p.as_ideal x]
rfl
- · intro r
- apply to_open_res
+ · intro r; apply to_open_res
#align algebraic_geometry.Γ_Spec.right_triangle AlgebraicGeometry.ΓSpec.right_triangle
-- Removing this makes the following definition time out.
@@ -332,13 +325,10 @@ def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace :=
{ Unit := identityToΓSpec
counit := (NatIso.op specΓIdentity).inv
left_triangle := by
- ext X
- erw [category.id_comp]
+ ext X; erw [category.id_comp]
exact congr_arg Quiver.Hom.op (left_triangle X)
right_triangle := by
- ext1
- ext1 R
- erw [category.id_comp]
+ ext1; ext1 R; erw [category.id_comp]
exact right_triangle R.unop }
#align algebraic_geometry.Γ_Spec.LocallyRingedSpace_adjunction AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction
@@ -353,10 +343,8 @@ def adjunction : Scheme.Γ.rightOp ⊣ Scheme.spec :=
theorem adjunction_homEquiv_apply {X : Scheme} {R : CommRingCatᵒᵖ}
(f : (op <| Scheme.Γ.obj <| op X) ⟶ R) :
- ΓSpec.adjunction.homEquiv X R f = locallyRingedSpaceAdjunction.homEquiv X.1 R f :=
- by
- dsimp [adjunction, adjunction.restrict_fully_faithful]
- simp
+ ΓSpec.adjunction.homEquiv X R f = locallyRingedSpaceAdjunction.homEquiv X.1 R f := by
+ dsimp [adjunction, adjunction.restrict_fully_faithful]; simp
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_apply
theorem adjunction_homEquiv (X : Scheme) (R : CommRingCatᵒᵖ) :
@@ -367,9 +355,7 @@ theorem adjunction_homEquiv (X : Scheme) (R : CommRingCatᵒᵖ) :
theorem adjunction_homEquiv_symm_apply {X : Scheme} {R : CommRingCatᵒᵖ}
(f : X ⟶ Scheme.spec.obj R) :
(ΓSpec.adjunction.homEquiv X R).symm f = (locallyRingedSpaceAdjunction.homEquiv X.1 R).symm f :=
- by
- congr 2
- exact adjunction_hom_equiv _ _
+ by congr 2; exact adjunction_hom_equiv _ _
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_symm_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_symm_apply
@[simp]
@@ -383,10 +369,8 @@ theorem adjunction_counit_app {R : CommRingCatᵒᵖ} :
@[simp]
theorem adjunction_unit_app {X : Scheme} :
- ΓSpec.adjunction.Unit.app X = locallyRingedSpaceAdjunction.Unit.app X.1 :=
- by
- rw [← adjunction.hom_equiv_id, ← adjunction.hom_equiv_id, adjunction_hom_equiv_apply]
- rfl
+ ΓSpec.adjunction.Unit.app X = locallyRingedSpaceAdjunction.Unit.app X.1 := by
+ rw [← adjunction.hom_equiv_id, ← adjunction.hom_equiv_id, adjunction_hom_equiv_apply]; rfl
#align algebraic_geometry.Γ_Spec.adjunction_unit_app AlgebraicGeometry.ΓSpec.adjunction_unit_app
attribute [local semireducible] LocallyRingedSpace_adjunction Γ_Spec.adjunction
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -101,7 +101,7 @@ theorem to_Γ_Spec_continuous : Continuous X.toΓSpecFun :=
/-- The canonical (bundled) continuous map from the underlying topological
space of `X` to the prime spectrum of its global sections. -/
@[simps]
-def toΓSpecBase : X.toTop ⟶ Spec.topObj (Γ.obj (op X))
+def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X))
where
toFun := X.toΓSpecFun
continuous_toFun := X.to_Γ_Spec_continuous
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -128,8 +128,7 @@ abbrev toToΓSpecMapBasicOpen :
/-- `r` is a unit as a section on the basic open defined by `r`. -/
theorem isUnit_res_toΓSpecMapBasicOpen : IsUnit (X.toToΓSpecMapBasicOpen r r) :=
by
- convert
- (X.presheaf.map <| (eq_to_hom <| X.to_Γ_Spec_map_basic_open_eq r).op).isUnit_map
+ convert(X.presheaf.map <| (eq_to_hom <| X.to_Γ_Spec_map_basic_open_eq r).op).isUnit_map
(X.to_RingedSpace.is_unit_res_basic_open r)
rw [← comp_apply]
erw [← functor.map_comp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -263,10 +263,9 @@ theorem comp_ring_hom_ext {X : LocallyRingedSpace.{u}} {R : CommRingCat.{u}} {f
toOpen R (basicOpen r) ≫ β.1.c.app (op (basicOpen r))) :
X.toΓSpec ≫ Spec.locallyRingedSpaceMap f = β := by
ext1
- -- Porting note: need more hand holding here
+ -- Porting note: was `apply Spec.basicOpen_hom_ext`
refine Spec.basicOpen_hom_ext w ?_
intro r U
- -- Porting note: changed `rw` to `erw`
rw [LocallyRingedSpace.comp_val_c_app]
erw [toOpen_comp_comap_assoc]
rw [Category.assoc]
@@ -154,10 +154,7 @@ theorem toΓSpecCApp_iff
--pick_goal 5; exact is_localization.to_basic_open _ r
constructor
· intro h
- -- Porting note: Type class problem got stuck, same as above
- refine' @IsLocalization.ringHom_ext _ _ _ _ _ _ _ _ loc_inst _ _ _
- exact h
- --pick_goal 5; exact is_localization.to_basic_open _ r; exact h
+ exact IsLocalization.ringHom_ext (Submonoid.powers r) h
apply congr_arg
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_c_app_iff AlgebraicGeometry.LocallyRingedSpace.toΓSpecCApp_iff
@@ -257,7 +254,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) where
exact ht.mul <| this.map _
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toΓSpec
-theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶ Γ.obj (op X)}
+theorem comp_ring_hom_ext {X : LocallyRingedSpace.{u}} {R : CommRingCat.{u}} {f : R ⟶ Γ.obj (op X)}
{β : X ⟶ Spec.locallyRingedSpaceObj R}
(w : X.toΓSpec.1.base ≫ (Spec.locallyRingedSpaceMap f).1.base = β.1.base)
(h :
@@ -267,15 +264,14 @@ theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶
X.toΓSpec ≫ Spec.locallyRingedSpaceMap f = β := by
ext1
-- Porting note: need more hand holding here
- change (X.toΓSpec.1 ≫ _).base = _ at w
- apply Spec.basicOpen_hom_ext w
+ refine Spec.basicOpen_hom_ext w ?_
intro r U
-- Porting note: changed `rw` to `erw`
- erw [LocallyRingedSpace.comp_val_c_app]
+ rw [LocallyRingedSpace.comp_val_c_app]
erw [toOpen_comp_comap_assoc]
rw [Category.assoc]
erw [toΓSpecSheafedSpace_app_spec, ← X.presheaf.map_comp]
- convert h r using 1
+ exact h r
#align algebraic_geometry.LocallyRingedSpace.comp_ring_hom_ext AlgebraicGeometry.LocallyRingedSpace.comp_ring_hom_ext
/-- `toSpecΓ _` is an isomorphism so these are mutually two-sided inverses. -/
@@ -416,11 +412,9 @@ theorem adjunction_unit_app {X : Scheme} :
-- Porting Note: Commented
-- attribute [local semireducible] locallyRingedSpaceAdjunction ΓSpec.adjunction
-set_option maxHeartbeats 400000 in
-instance isIso_locallyRingedSpaceAdjunction_counit : IsIso locallyRingedSpaceAdjunction.counit := by
- dsimp only [locallyRingedSpaceAdjunction, Adjunction.mkOfUnitCounit_counit]
- -- Porting Note: `dsimp` was unnecessary and had to make this explicit
- convert IsIso.of_iso_inv (NatIso.op SpecΓIdentity) using 1
+instance isIso_locallyRingedSpaceAdjunction_counit :
+ IsIso.{u + 1, u + 1} locallyRingedSpaceAdjunction.counit :=
+ IsIso.of_iso_inv (NatIso.op SpecΓIdentity)
#align algebraic_geometry.Γ_Spec.is_iso_LocallyRingedSpace_adjunction_counit AlgebraicGeometry.ΓSpec.isIso_locallyRingedSpaceAdjunction_counit
instance isIso_adjunction_counit : IsIso ΓSpec.adjunction.counit := by
@@ -430,7 +424,7 @@ instance isIso_adjunction_counit : IsIso ΓSpec.adjunction.counit := by
infer_instance
#align algebraic_geometry.Γ_Spec.is_iso_adjunction_counit AlgebraicGeometry.ΓSpec.isIso_adjunction_counit
-theorem adjunction_unit_app_app_top (X : Scheme) :
+theorem adjunction_unit_app_app_top (X : Scheme.{u}) :
(ΓSpec.adjunction.unit.app X).1.c.app (op ⊤) =
SpecΓIdentity.hom.app (X.presheaf.obj (op ⊤)) := by
have := congr_app ΓSpec.adjunction.left_triangle X
@@ -450,17 +444,17 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
rw [← op_inv, Quiver.Hom.op_inj.eq_iff] at this
-- Note: changed from `rw` to `simp_rw` to improve performance
simp_rw [SpecΓIdentity_hom_app]
- convert this using 1
+ exact this
#align algebraic_geometry.Γ_Spec.adjunction_unit_app_app_top AlgebraicGeometry.ΓSpec.adjunction_unit_app_app_top
end ΓSpec
@[reassoc]
-theorem SpecΓIdentity_naturality {R S : CommRingCat} (f : R ⟶ S) :
+theorem SpecΓIdentity_naturality {R S : CommRingCat.{u}} (f : R ⟶ S) :
(Scheme.Spec.map f.op).1.c.app (op ⊤) ≫ SpecΓIdentity.hom.app _ =
SpecΓIdentity.hom.app _ ≫ f := SpecΓIdentity.hom.naturality f
-theorem SpecΓIdentity_hom_app_presheaf_obj {X : Scheme} (U : Opens X) :
+theorem SpecΓIdentity_hom_app_presheaf_obj {X : Scheme.{u}} (U : Opens X) :
SpecΓIdentity.hom.app (X.presheaf.obj (op U)) =
Scheme.Γ.map (Scheme.Spec.map (X.presheaf.map (eqToHom U.openEmbedding_obj_top).op).op).op ≫
(ΓSpec.adjunction.unit.app (X ∣_ᵤ U)).val.c.app (op ⊤) ≫
Functor.Full
a Prop (#12449)
Before this PR, Functor.Full
contained the data of the preimage of maps by a full functor F
. This PR makes Functor.Full
a proposition. This is to prevent any diamond to appear.
The lemma Functor.image_preimage
is also renamed Functor.map_preimage
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -377,16 +377,15 @@ lemma locallyRingedSpaceAdjunction_counit :
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `Scheme`. -/
def adjunction : Scheme.Γ.rightOp ⊣ Scheme.Spec :=
locallyRingedSpaceAdjunction.restrictFullyFaithful Scheme.forgetToLocallyRingedSpace (𝟭 _)
- (NatIso.ofComponents (fun X => Iso.refl _) )
- (NatIso.ofComponents (fun X => Iso.refl _) )
+ (NatIso.ofComponents (fun X => Iso.refl _))
+ (NatIso.ofComponents (fun X => Iso.refl _))
#align algebraic_geometry.Γ_Spec.adjunction AlgebraicGeometry.ΓSpec.adjunction
theorem adjunction_homEquiv_apply {X : Scheme} {R : CommRingCatᵒᵖ}
(f : (op <| Scheme.Γ.obj <| op X) ⟶ R) :
ΓSpec.adjunction.homEquiv X R f = locallyRingedSpaceAdjunction.homEquiv X.1 R f := by
- dsimp [adjunction, Adjunction.restrictFullyFaithful]
- simp only [Category.comp_id, Category.id_comp]
- rfl -- Porting note: Added
+ dsimp [adjunction, Adjunction.restrictFullyFaithful, equivOfFullyFaithful]
+ simp
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_apply
theorem adjunction_homEquiv (X : Scheme) (R : CommRingCatᵒᵖ) :
@@ -484,10 +483,10 @@ instance Spec.preservesLimits : Limits.PreservesLimits Scheme.Spec :=
/-- Spec is a full functor. -/
instance : Spec.toLocallyRingedSpace.Full :=
- rFullOfCounitIsIso ΓSpec.locallyRingedSpaceAdjunction
+ R_full_of_counit_isIso ΓSpec.locallyRingedSpaceAdjunction
instance Spec.full : Scheme.Spec.Full :=
- rFullOfCounitIsIso ΓSpec.adjunction
+ R_full_of_counit_isIso ΓSpec.adjunction
#align algebraic_geometry.Spec.full AlgebraicGeometry.Spec.full
/-- Spec is a faithful functor. -/
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -483,18 +483,18 @@ instance Spec.preservesLimits : Limits.PreservesLimits Scheme.Spec :=
#align algebraic_geometry.Spec.preserves_limits AlgebraicGeometry.Spec.preservesLimits
/-- Spec is a full functor. -/
-instance : Full Spec.toLocallyRingedSpace :=
+instance : Spec.toLocallyRingedSpace.Full :=
rFullOfCounitIsIso ΓSpec.locallyRingedSpaceAdjunction
-instance Spec.full : Full Scheme.Spec :=
+instance Spec.full : Scheme.Spec.Full :=
rFullOfCounitIsIso ΓSpec.adjunction
#align algebraic_geometry.Spec.full AlgebraicGeometry.Spec.full
/-- Spec is a faithful functor. -/
-instance : Faithful Spec.toLocallyRingedSpace :=
+instance : Spec.toLocallyRingedSpace.Faithful :=
R_faithful_of_counit_isIso ΓSpec.locallyRingedSpaceAdjunction
-instance Spec.faithful : Faithful Scheme.Spec :=
+instance Spec.faithful : Scheme.Spec.Faithful :=
R_faithful_of_counit_isIso ΓSpec.adjunction
#align algebraic_geometry.Spec.faithful AlgebraicGeometry.Spec.faithful
Among other things, change the nsmul
, zsmul
, qsmul
fields to have n
/q
come before x
, because this matches the lemmas we want to write about them. It would be preferrable to perform the same changes to the AddMonoid
/AddGroup
-like typeclasses, but this is impossible with the current to_additive
framework, so instead I have inserted some Function.swap
at the interface between AddMonoid
/AddGroup
and Ring
/Field
.
Reduce the diff of #11203
@@ -417,6 +417,7 @@ theorem adjunction_unit_app {X : Scheme} :
-- Porting Note: Commented
-- attribute [local semireducible] locallyRingedSpaceAdjunction ΓSpec.adjunction
+set_option maxHeartbeats 400000 in
instance isIso_locallyRingedSpaceAdjunction_counit : IsIso locallyRingedSpaceAdjunction.counit := by
dsimp only [locallyRingedSpaceAdjunction, Adjunction.mkOfUnitCounit_counit]
-- Porting Note: `dsimp` was unnecessary and had to make this explicit
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -154,7 +154,7 @@ theorem toΓSpecCApp_iff
--pick_goal 5; exact is_localization.to_basic_open _ r
constructor
· intro h
- --Porting Note: Type class problem got stuck, same as above
+ -- Porting note: Type class problem got stuck, same as above
refine' @IsLocalization.ringHom_ext _ _ _ _ _ _ _ _ loc_inst _ _ _
exact h
--pick_goal 5; exact is_localization.to_basic_open _ r; exact h
@@ -298,7 +298,7 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
apply LocallyRingedSpace.comp_ring_hom_ext
· ext1 x
dsimp [Spec.topMap, LocallyRingedSpace.toΓSpecFun]
- --Porting Note: Had to add the next four lines
+ -- Porting note: Had to add the next four lines
rw [comp_apply, comp_apply]
dsimp [toΓSpecBase]
-- The next six lines were `rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]` before
@@ -344,7 +344,7 @@ theorem right_triangle (R : CommRingCat) :
#align algebraic_geometry.Γ_Spec.right_triangle AlgebraicGeometry.ΓSpec.right_triangle
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `LocallyRingedSpace`. -/
---Porting Note: `simps` cause a time out, so `Unit` and `counit` will be added manually
+-- Porting note: `simps` cause a time out, so `Unit` and `counit` will be added manually
def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace.{u} :=
Adjunction.mkOfUnitCounit
{ unit := identityToΓSpec
@@ -386,7 +386,7 @@ theorem adjunction_homEquiv_apply {X : Scheme} {R : CommRingCatᵒᵖ}
ΓSpec.adjunction.homEquiv X R f = locallyRingedSpaceAdjunction.homEquiv X.1 R f := by
dsimp [adjunction, Adjunction.restrictFullyFaithful]
simp only [Category.comp_id, Category.id_comp]
- rfl --Porting Note: Added
+ rfl -- Porting note: Added
#align algebraic_geometry.Γ_Spec.adjunction_hom_equiv_apply AlgebraicGeometry.ΓSpec.adjunction_homEquiv_apply
theorem adjunction_homEquiv (X : Scheme) (R : CommRingCatᵒᵖ) :
In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:
) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.
@@ -127,7 +127,7 @@ theorem isUnit_res_toΓSpecMapBasicOpen : IsUnit (X.toToΓSpecMapBasicOpen r r)
convert
(X.presheaf.map <| (eqToHom <| X.toΓSpecMapBasicOpen_eq r).op).isUnit_map
(X.toRingedSpace.isUnit_res_basicOpen r)
- -- Porting note : `rw [comp_apply]` to `erw [comp_apply]`
+ -- Porting note: `rw [comp_apply]` to `erw [comp_apply]`
erw [← comp_apply, ← Functor.map_comp]
congr
#align algebraic_geometry.LocallyRingedSpace.is_unit_res_to_Γ_Spec_map_basic_open AlgebraicGeometry.LocallyRingedSpace.isUnit_res_toΓSpecMapBasicOpen
@@ -202,7 +202,7 @@ theorem toΓSpecSheafedSpace_app_eq :
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace_app_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_eq
--- Porting note : need a helper lemma `toΓSpecSheafedSpace_app_spec_assoc` to help compile
+-- Porting note: need a helper lemma `toΓSpecSheafedSpace_app_spec_assoc` to help compile
-- `toStalk_stalkMap_to_Γ_Spec`
@[reassoc] theorem toΓSpecSheafedSpace_app_spec (r : Γ.obj (op X)) :
toOpen (Γ.obj (op X)) (basicOpen r) ≫ X.toΓSpecSheafedSpace.c.app (op (basicOpen r)) =
@@ -219,7 +219,7 @@ theorem toStalk_stalkMap_toΓSpec (x : X) :
⟨X.toΓSpecFun x, by rw [basicOpen_one]; trivial⟩]
rw [← Category.assoc, Category.assoc (toOpen _ _)]
erw [stalkFunctor_map_germ]
- -- Porting note : was `rw [← assoc, toΓSpecSheafedSpace_app_spec]`, but Lean did not like it.
+ -- Porting note: was `rw [← assoc, toΓSpecSheafedSpace_app_spec]`, but Lean did not like it.
rw [toΓSpecSheafedSpace_app_spec_assoc]
unfold ΓToStalk
rw [← stalkPushforward_germ _ X.toΓSpecBase X.presheaf ⊤]
@@ -250,7 +250,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) where
rw [← toStalk_stalkMap_toΓSpec]
erw [comp_apply, ← he]
rw [RingHom.map_mul]
- -- Porting note : `IsLocalization.map_units` and the goal needs to be simplified before Lean
+ -- Porting note: `IsLocalization.map_units` and the goal needs to be simplified before Lean
-- realize it is useful
have := IsLocalization.map_units (R := Γ.obj (op X)) S s
dsimp at this ⊢
@@ -266,11 +266,11 @@ theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶
toOpen R (basicOpen r) ≫ β.1.c.app (op (basicOpen r))) :
X.toΓSpec ≫ Spec.locallyRingedSpaceMap f = β := by
ext1
- -- Porting note : need more hand holding here
+ -- Porting note: need more hand holding here
change (X.toΓSpec.1 ≫ _).base = _ at w
apply Spec.basicOpen_hom_ext w
intro r U
- -- Porting note : changed `rw` to `erw`
+ -- Porting note: changed `rw` to `erw`
erw [LocallyRingedSpace.comp_val_c_app]
erw [toOpen_comp_comap_assoc]
rw [Category.assoc]
@@ -354,7 +354,7 @@ def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace.{u}
exact congr_arg Quiver.Hom.op (left_triangle X)
right_triangle := by
ext R : 2
- -- Porting note : a little bit hand holding
+ -- Porting note: a little bit hand holding
change identityToΓSpec.app _ ≫ 𝟙 _ ≫ Spec.toLocallyRingedSpace.map _ =
𝟙 _
simp_rw [Category.id_comp, show (NatIso.op SpecΓIdentity).inv.app R =
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -254,7 +254,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) where
-- realize it is useful
have := IsLocalization.map_units (R := Γ.obj (op X)) S s
dsimp at this ⊢
- refine ht.mul <| this.map _
+ exact ht.mul <| this.map _
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toΓSpec
theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶ Γ.obj (op X)}
@@ -435,7 +435,7 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
SpecΓIdentity.hom.app (X.presheaf.obj (op ⊤)) := by
have := congr_app ΓSpec.adjunction.left_triangle X
dsimp at this
- -- Porting Notes: Slightly changed some rewrites.
+ -- Porting note: Slightly changed some rewrites.
-- Originally:
-- rw [← is_iso.eq_comp_inv] at this
-- simp only [Γ_Spec.LocallyRingedSpace_adjunction_counit, nat_trans.op_app, category.id_comp,
continuous_generateFrom
to an iff
(#9259)
Similarly, upgrade tendsto_nhds_generateFrom
, IsTopologicalBasis.continuous
, Topology.IsLower.continuous_of_Ici
, and Topology.IsUpper.continuous_iff_Iic
.
The old lemmas are now deprecated, and the new ones have _iff
in their names.
Once we remove the old lemmas, we can drop the _iff
suffixes.
@@ -87,7 +87,7 @@ theorem toΓSpec_preim_basicOpen_eq (r : Γ.obj (op X)) :
/-- `toΓSpecFun` is continuous. -/
theorem toΓSpec_continuous : Continuous X.toΓSpecFun := by
- apply isTopologicalBasis_basic_opens.continuous
+ rw [isTopologicalBasis_basic_opens.continuous_iff]
rintro _ ⟨r, rfl⟩
erw [X.toΓSpec_preim_basicOpen_eq r]
exact (X.toRingedSpace.basicOpen r).2
@@ -197,7 +197,7 @@ theorem toΓSpecSheafedSpace_app_eq :
((TopCat.Sheaf.pushforward _ X.toΓSpecBase).obj X.𝒪)
isBasis_basic_opens X.toΓSpecCBasicOpens r
dsimp at this
- rw [←this]
+ rw [← this]
dsimp
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace_app_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_eq
@@ -219,7 +219,7 @@ theorem toStalk_stalkMap_toΓSpec (x : X) :
⟨X.toΓSpecFun x, by rw [basicOpen_one]; trivial⟩]
rw [← Category.assoc, Category.assoc (toOpen _ _)]
erw [stalkFunctor_map_germ]
- -- Porting note : was `rw [←assoc, toΓSpecSheafedSpace_app_spec]`, but Lean did not like it.
+ -- Porting note : was `rw [← assoc, toΓSpecSheafedSpace_app_spec]`, but Lean did not like it.
rw [toΓSpecSheafedSpace_app_spec_assoc]
unfold ΓToStalk
rw [← stalkPushforward_germ _ X.toΓSpecBase X.presheaf ⊤]
@@ -304,10 +304,10 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
-- The next six lines were `rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]` before
-- leanprover/lean4#2644
have : (ContinuousMap.mk (toΓSpecFun Y) (toΓSpec_continuous _)) (f.val.base x)
- = toΓSpecFun Y (f.val.base x) := by erw [ContinuousMap.coe_mk]; rfl
+ = toΓSpecFun Y (f.val.base x) := by rw [ContinuousMap.coe_mk]
erw [this]
have : (ContinuousMap.mk (toΓSpecFun X) (toΓSpec_continuous _)) x
- = toΓSpecFun X x := by erw [ContinuousMap.coe_mk]
+ = toΓSpecFun X x := by rw [ContinuousMap.coe_mk]
erw [this]
dsimp [toΓSpecFun]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
Fixed AlgebraicGeometry/AffineSchemes.lean
, AlgebraicGeometry/Morphisms/QuasiSeparated.lean
and AlgebraicGeometry/Morphisms/RingHomProperties.lean
.
Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -3,7 +3,7 @@ Copyright (c) 2021 Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Junyan Xu
-/
-import Mathlib.AlgebraicGeometry.Scheme
+import Mathlib.AlgebraicGeometry.Restrict
import Mathlib.CategoryTheory.Adjunction.Limits
import Mathlib.CategoryTheory.Adjunction.Reflective
@@ -455,6 +455,21 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
end ΓSpec
+@[reassoc]
+theorem SpecΓIdentity_naturality {R S : CommRingCat} (f : R ⟶ S) :
+ (Scheme.Spec.map f.op).1.c.app (op ⊤) ≫ SpecΓIdentity.hom.app _ =
+ SpecΓIdentity.hom.app _ ≫ f := SpecΓIdentity.hom.naturality f
+
+theorem SpecΓIdentity_hom_app_presheaf_obj {X : Scheme} (U : Opens X) :
+ SpecΓIdentity.hom.app (X.presheaf.obj (op U)) =
+ Scheme.Γ.map (Scheme.Spec.map (X.presheaf.map (eqToHom U.openEmbedding_obj_top).op).op).op ≫
+ (ΓSpec.adjunction.unit.app (X ∣_ᵤ U)).val.c.app (op ⊤) ≫
+ X.presheaf.map (eqToHom U.openEmbedding_obj_top.symm).op := by
+ rw [ΓSpec.adjunction_unit_app_app_top]
+ dsimp [-SpecΓIdentity_hom_app]
+ rw [SpecΓIdentity_naturality_assoc, ← Functor.map_comp, ← op_comp, eqToHom_trans, eqToHom_refl,
+ op_id, CategoryTheory.Functor.map_id, Category.comp_id]
+
/-! Immediate consequences of the adjunction. -/
This incorporates changes from
nightly-testing
are unexciting: we need to fully qualify a few names)They can all be closed when this is merged.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -199,7 +199,6 @@ theorem toΓSpecSheafedSpace_app_eq :
dsimp at this
rw [←this]
dsimp
- congr
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_SheafedSpace_app_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecSheafedSpace_app_eq
Port of https://github.com/leanprover-community/mathlib/pull/17561
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
@@ -169,7 +169,7 @@ theorem toΓSpecCApp_spec : toOpen _ (basicOpen r) ≫ X.toΓSpecCApp r = X.toTo
@[simps app]
def toΓSpecCBasicOpens :
(inducedFunctor basicOpen).op ⋙ (structureSheaf (Γ.obj (op X))).1 ⟶
- (inducedFunctor basicOpen).op ⋙ ((TopCat.Sheaf.pushforward X.toΓSpecBase).obj X.𝒪).1 where
+ (inducedFunctor basicOpen).op ⋙ ((TopCat.Sheaf.pushforward _ X.toΓSpecBase).obj X.𝒪).1 where
app r := X.toΓSpecCApp r.unop
naturality r s f := by
apply (StructureSheaf.to_basicOpen_epi (Γ.obj (op X)) r.unop).1
@@ -194,7 +194,7 @@ def toΓSpecSheafedSpace : X.toSheafedSpace ⟶ Spec.toSheafedSpace.obj (op (Γ.
theorem toΓSpecSheafedSpace_app_eq :
X.toΓSpecSheafedSpace.c.app (op (basicOpen r)) = X.toΓSpecCApp r := by
have := TopCat.Sheaf.extend_hom_app (Spec.toSheafedSpace.obj (op (Γ.obj (op X)))).presheaf
- ((TopCat.Sheaf.pushforward X.toΓSpecBase).obj X.𝒪)
+ ((TopCat.Sheaf.pushforward _ X.toΓSpecBase).obj X.𝒪)
isBasis_basic_opens X.toΓSpecCBasicOpens r
dsimp at this
rw [←this]
@@ -101,6 +101,9 @@ def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X)) where
continuous_toFun := X.toΓSpec_continuous
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_base AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase
+-- These lemmas have always been bad (#7657), but lean4#2644 made `simp` start noticing
+attribute [nolint simpNF] AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase_apply
+
variable (r : Γ.obj (op X))
/-- The preimage in `X` of a basic open in `Spec Γ(X)` (as an open set). -/
@@ -299,9 +302,17 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
--Porting Note: Had to add the next four lines
rw [comp_apply, comp_apply]
dsimp [toΓSpecBase]
- rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]
+ -- The next six lines were `rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]` before
+ -- leanprover/lean4#2644
+ have : (ContinuousMap.mk (toΓSpecFun Y) (toΓSpec_continuous _)) (f.val.base x)
+ = toΓSpecFun Y (f.val.base x) := by erw [ContinuousMap.coe_mk]; rfl
+ erw [this]
+ have : (ContinuousMap.mk (toΓSpecFun X) (toΓSpec_continuous _)) x
+ = toΓSpecFun X x := by erw [ContinuousMap.coe_mk]
+ erw [this]
dsimp [toΓSpecFun]
- rw [← LocalRing.comap_closedPoint (PresheafedSpace.stalkMap f.val x), ←
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [← LocalRing.comap_closedPoint (PresheafedSpace.stalkMap f.val x), ←
PrimeSpectrum.comap_comp_apply, ← PrimeSpectrum.comap_comp_apply]
congr 2
exact (PresheafedSpace.stalkMap_germ f.1 ⊤ ⟨x, trivial⟩).symm
@@ -101,9 +101,6 @@ def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X)) where
continuous_toFun := X.toΓSpec_continuous
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_base AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase
--- These lemmas have always been bad (#7657), but lean4#2644 made `simp` start noticing
-attribute [nolint simpNF] AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase_apply
-
variable (r : Γ.obj (op X))
/-- The preimage in `X` of a basic open in `Spec Γ(X)` (as an open set). -/
@@ -302,17 +299,9 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
--Porting Note: Had to add the next four lines
rw [comp_apply, comp_apply]
dsimp [toΓSpecBase]
- -- The next six lines were `rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]` before
- -- leanprover/lean4#2644
- have : (ContinuousMap.mk (toΓSpecFun Y) (toΓSpec_continuous _)) (f.val.base x)
- = toΓSpecFun Y (f.val.base x) := by erw [ContinuousMap.coe_mk]; rfl
- erw [this]
- have : (ContinuousMap.mk (toΓSpecFun X) (toΓSpec_continuous _)) x
- = toΓSpecFun X x := by erw [ContinuousMap.coe_mk]
- erw [this]
+ rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]
dsimp [toΓSpecFun]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [← LocalRing.comap_closedPoint (PresheafedSpace.stalkMap f.val x), ←
+ rw [← LocalRing.comap_closedPoint (PresheafedSpace.stalkMap f.val x), ←
PrimeSpectrum.comap_comp_apply, ← PrimeSpectrum.comap_comp_apply]
congr 2
exact (PresheafedSpace.stalkMap_germ f.1 ⊤ ⟨x, trivial⟩).symm
@@ -101,6 +101,9 @@ def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X)) where
continuous_toFun := X.toΓSpec_continuous
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_base AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase
+-- These lemmas have always been bad (#7657), but lean4#2644 made `simp` start noticing
+attribute [nolint simpNF] AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase_apply
+
variable (r : Γ.obj (op X))
/-- The preimage in `X` of a basic open in `Spec Γ(X)` (as an open set). -/
@@ -299,9 +302,17 @@ def identityToΓSpec : 𝟭 LocallyRingedSpace.{u} ⟶ Γ.rightOp ⋙ Spec.toLoc
--Porting Note: Had to add the next four lines
rw [comp_apply, comp_apply]
dsimp [toΓSpecBase]
- rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]
+ -- The next six lines were `rw [ContinuousMap.coe_mk, ContinuousMap.coe_mk]` before
+ -- leanprover/lean4#2644
+ have : (ContinuousMap.mk (toΓSpecFun Y) (toΓSpec_continuous _)) (f.val.base x)
+ = toΓSpecFun Y (f.val.base x) := by erw [ContinuousMap.coe_mk]; rfl
+ erw [this]
+ have : (ContinuousMap.mk (toΓSpecFun X) (toΓSpec_continuous _)) x
+ = toΓSpecFun X x := by erw [ContinuousMap.coe_mk]
+ erw [this]
dsimp [toΓSpecFun]
- rw [← LocalRing.comap_closedPoint (PresheafedSpace.stalkMap f.val x), ←
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [← LocalRing.comap_closedPoint (PresheafedSpace.stalkMap f.val x), ←
PrimeSpectrum.comap_comp_apply, ← PrimeSpectrum.comap_comp_apply]
congr 2
exact (PresheafedSpace.stalkMap_germ f.1 ⊤ ⟨x, trivial⟩).symm
These changes mildly improve performance. They are put in place until AlgebraicGeometry
is refactored.
@@ -438,7 +438,8 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
Spec.sheafedSpaceObj_carrier, Spec.sheafedSpaceObj_presheaf,
SpecΓIdentity_inv_app, Category.id_comp] at this
rw [← op_inv, Quiver.Hom.op_inj.eq_iff] at this
- rw [SpecΓIdentity_hom_app]
+ -- Note: changed from `rw` to `simp_rw` to improve performance
+ simp_rw [SpecΓIdentity_hom_app]
convert this using 1
#align algebraic_geometry.Γ_Spec.adjunction_unit_app_app_top AlgebraicGeometry.ΓSpec.adjunction_unit_app_app_top
These unification hints appear to do nothing.
@@ -333,17 +333,6 @@ theorem right_triangle (R : CommRingCat) :
· intro r; apply toOpen_res
#align algebraic_geometry.Γ_Spec.right_triangle AlgebraicGeometry.ΓSpec.right_triangle
--- Porting note : the two unification hint is to help compile `locallyRingedSpaceAdjunction`
--- faster, from 900000 to normal maxHeartbeats
-/-- opposite of composition of two functors -/
-unif_hint uh_functor_op1 where ⊢
- Functor.op (Spec.toLocallyRingedSpace.rightOp ⋙ Γ) ≟
- Spec.toLocallyRingedSpace.{u} ⋙ Γ.rightOp in
-
-/-- opposite of identity functor -/
-unif_hint uh_functor_op2 where ⊢
- Functor.op (𝟭 CommRingCat.{u}) ≟ 𝟭 CommRingCatᵒᵖ in
-
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `LocallyRingedSpace`. -/
--Porting Note: `simps` cause a time out, so `Unit` and `counit` will be added manually
def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace.{u} :=
@@ -365,11 +365,11 @@ def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace.{u}
#align algebraic_geometry.Γ_Spec.LocallyRingedSpace_adjunction AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction
lemma locallyRingedSpaceAdjunction_unit :
- locallyRingedSpaceAdjunction.unit = identityToΓSpec := rfl
+ locallyRingedSpaceAdjunction.unit = identityToΓSpec := rfl
#align algebraic_geometry.Γ_Spec.LocallyRingedSpace_adjunction_unit AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction_unit
lemma locallyRingedSpaceAdjunction_counit :
- locallyRingedSpaceAdjunction.counit = (NatIso.op SpecΓIdentity.{u}).inv := rfl
+ locallyRingedSpaceAdjunction.counit = (NatIso.op SpecΓIdentity.{u}).inv := rfl
#align algebraic_geometry.Γ_Spec.LocallyRingedSpace_adjunction_counit AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction_counit
-- Porting Note: Commented
@@ -2,16 +2,13 @@
Copyright (c) 2021 Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Junyan Xu
-
-! This file was ported from Lean 3 source module algebraic_geometry.Gamma_Spec_adjunction
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.AlgebraicGeometry.Scheme
import Mathlib.CategoryTheory.Adjunction.Limits
import Mathlib.CategoryTheory.Adjunction.Reflective
+#align_import algebraic_geometry.Gamma_Spec_adjunction from "leanprover-community/mathlib"@"d39590fc8728fbf6743249802486f8c91ffe07bc"
+
/-!
# Adjunction between `Γ` and `Spec`
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -217,7 +217,7 @@ theorem toStalk_stalkMap_toΓSpec (x : X) :
toStalk _ _ ≫ PresheafedSpace.stalkMap X.toΓSpecSheafedSpace x = X.ΓToStalk x := by
rw [PresheafedSpace.stalkMap]
erw [← toOpen_germ _ (basicOpen (1 : Γ.obj (op X)))
- ⟨X.toΓSpecFun x, by rw [basicOpen_one] ; trivial⟩]
+ ⟨X.toΓSpecFun x, by rw [basicOpen_one]; trivial⟩]
rw [← Category.assoc, Category.assoc (toOpen _ _)]
erw [stalkFunctor_map_germ]
-- Porting note : was `rw [←assoc, toΓSpecSheafedSpace_app_spec]`, but Lean did not like it.
@@ -15,8 +15,8 @@ import Mathlib.CategoryTheory.Adjunction.Reflective
/-!
# Adjunction between `Γ` and `Spec`
-We define the adjunction `Γ_Spec.adjunction : Γ ⊣ Spec` by defining the unit (`to_Γ_Spec`,
-in multiple steps in this file) and counit (done in Spec.lean) and checking that they satisfy
+We define the adjunction `ΓSpec.adjunction : Γ ⊣ Spec` by defining the unit (`toΓSpec`,
+in multiple steps in this file) and counit (done in `Spec.lean`) and checking that they satisfy
the left and right triangle identities. The constructions and proofs make use of
maps and lemmas defined and proved in structure_sheaf.lean extensively.
@@ -27,10 +27,10 @@ case the unit and the counit would switch to each other.
## Main definition
-* `algebraic_geometry.identity_to_Γ_Spec` : The natural transformation `𝟭 _ ⟶ Γ ⋙ Spec`.
-* `algebraic_geometry.Γ_Spec.LocallyRingedSpace_adjunction` : The adjunction `Γ ⊣ Spec` from
+* `AlgebraicGeometry.identityToΓSpec` : The natural transformation `𝟭 _ ⟶ Γ ⋙ Spec`.
+* `AlgebraicGeometry.ΓSpec.locallyRingedSpaceAdjunction` : The adjunction `Γ ⊣ Spec` from
`CommRingᵒᵖ` to `LocallyRingedSpace`.
-* `algebraic_geometry.Γ_Spec.adjunction` : The adjunction `Γ ⊣ Spec` from
+* `AlgebraicGeometry.ΓSpec.adjunction` : The adjunction `Γ ⊣ Spec` from
`CommRingᵒᵖ` to `Scheme`.
-/
@@ -82,26 +82,26 @@ theorem not_mem_prime_iff_unit_in_stalk (r : Γ.obj (op X)) (x : X) :
/-- The preimage of a basic open in `Spec Γ(X)` under the unit is the basic
open in `X` defined by the same element (they are equal as sets). -/
-theorem to_Γ_Spec_preim_basicOpen_eq (r : Γ.obj (op X)) :
+theorem toΓSpec_preim_basicOpen_eq (r : Γ.obj (op X)) :
X.toΓSpecFun ⁻¹' (basicOpen r).1 = (X.toRingedSpace.basicOpen r).1 := by
ext
erw [X.toRingedSpace.mem_top_basicOpen]; apply not_mem_prime_iff_unit_in_stalk
-#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_preim_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_preim_basicOpen_eq
+#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_preim_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpec_preim_basicOpen_eq
/-- `toΓSpecFun` is continuous. -/
-theorem to_Γ_Spec_continuous : Continuous X.toΓSpecFun := by
+theorem toΓSpec_continuous : Continuous X.toΓSpecFun := by
apply isTopologicalBasis_basic_opens.continuous
rintro _ ⟨r, rfl⟩
- erw [X.to_Γ_Spec_preim_basicOpen_eq r]
+ erw [X.toΓSpec_preim_basicOpen_eq r]
exact (X.toRingedSpace.basicOpen r).2
-#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_continuous AlgebraicGeometry.LocallyRingedSpace.to_Γ_Spec_continuous
+#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_continuous AlgebraicGeometry.LocallyRingedSpace.toΓSpec_continuous
/-- The canonical (bundled) continuous map from the underlying topological
space of `X` to the prime spectrum of its global sections. -/
@[simps]
def toΓSpecBase : X.toTopCat ⟶ Spec.topObj (Γ.obj (op X)) where
toFun := X.toΓSpecFun
- continuous_toFun := X.to_Γ_Spec_continuous
+ continuous_toFun := X.toΓSpec_continuous
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_base AlgebraicGeometry.LocallyRingedSpace.toΓSpecBase
variable (r : Γ.obj (op X))
@@ -113,7 +113,7 @@ abbrev toΓSpecMapBasicOpen : Opens X :=
/-- The preimage is the basic open in `X` defined by the same element `r`. -/
theorem toΓSpecMapBasicOpen_eq : X.toΓSpecMapBasicOpen r = X.toRingedSpace.basicOpen r :=
- Opens.ext (X.to_Γ_Spec_preim_basicOpen_eq r)
+ Opens.ext (X.toΓSpec_preim_basicOpen_eq r)
#align algebraic_geometry.LocallyRingedSpace.to_Γ_Spec_map_basic_open_eq AlgebraicGeometry.LocallyRingedSpace.toΓSpecMapBasicOpen_eq
/-- The map from the global sections `Γ(X)` to the sections on the (preimage of) a basic open. -/
@@ -213,7 +213,7 @@ theorem toΓSpecSheafedSpace_app_eq :
/-- The map on stalks induced by the unit commutes with maps from `Γ(X)` to
stalks (in `Spec Γ(X)` and in `X`). -/
-theorem toStalk_stalkMap_to_Γ_Spec (x : X) :
+theorem toStalk_stalkMap_toΓSpec (x : X) :
toStalk _ _ ≫ PresheafedSpace.stalkMap X.toΓSpecSheafedSpace x = X.ΓToStalk x := by
rw [PresheafedSpace.stalkMap]
erw [← toOpen_germ _ (basicOpen (1 : Γ.obj (op X)))
@@ -227,7 +227,7 @@ theorem toStalk_stalkMap_to_Γ_Spec (x : X) :
congr 1
change (X.toΓSpecBase _* X.presheaf).map le_top.hom.op ≫ _ = _
apply germ_res
-#align algebraic_geometry.LocallyRingedSpace.to_stalk_stalk_map_to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_to_Γ_Spec
+#align algebraic_geometry.LocallyRingedSpace.to_stalk_stalk_map_to_Γ_Spec AlgebraicGeometry.LocallyRingedSpace.toStalk_stalkMap_toΓSpec
/-- The canonical morphism from `X` to the spectrum of its global sections. -/
@[simps! val_base]
@@ -248,7 +248,7 @@ def toΓSpec : X ⟶ Spec.locallyRingedSpaceObj (Γ.obj (op X)) where
rw [he]
refine' IsLocalization.map_units S (⟨r, _⟩ : p.asIdeal.primeCompl)
apply (not_mem_prime_iff_unit_in_stalk _ _ _).mpr
- rw [← toStalk_stalkMap_to_Γ_Spec]
+ rw [← toStalk_stalkMap_toΓSpec]
erw [comp_apply, ← he]
rw [RingHom.map_mul]
-- Porting note : `IsLocalization.map_units` and the goal needs to be simplified before Lean
@@ -279,7 +279,7 @@ theorem comp_ring_hom_ext {X : LocallyRingedSpace} {R : CommRingCat} {f : R ⟶
convert h r using 1
#align algebraic_geometry.LocallyRingedSpace.comp_ring_hom_ext AlgebraicGeometry.LocallyRingedSpace.comp_ring_hom_ext
-/-- `to_Spec_Γ _` is an isomorphism so these are mutually two-sided inverses. -/
+/-- `toSpecΓ _` is an isomorphism so these are mutually two-sided inverses. -/
theorem Γ_Spec_left_triangle : toSpecΓ (Γ.obj (op X)) ≫ X.toΓSpec.1.c.app (op ⊤) = 𝟙 _ := by
unfold toSpecΓ
rw [← toOpen_res _ (basicOpen (1 : Γ.obj (op X))) ⊤ (eqToHom basicOpen_one.symm)]
@@ -321,7 +321,7 @@ theorem left_triangle (X : LocallyRingedSpace) :
X.Γ_Spec_left_triangle
#align algebraic_geometry.Γ_Spec.left_triangle AlgebraicGeometry.ΓSpec.left_triangle
-/-- `Spec_Γ_identity` is iso so these are mutually two-sided inverses. -/
+/-- `SpecΓIdentity` is iso so these are mutually two-sided inverses. -/
theorem right_triangle (R : CommRingCat) :
identityToΓSpec.app (Spec.toLocallyRingedSpace.obj <| op R) ≫
Spec.toLocallyRingedSpace.map (SpecΓIdentity.inv.app R).op =
@@ -348,7 +348,7 @@ unif_hint uh_functor_op2 where ⊢
Functor.op (𝟭 CommRingCat.{u}) ≟ 𝟭 CommRingCatᵒᵖ in
/-- The adjunction `Γ ⊣ Spec` from `CommRingᵒᵖ` to `LocallyRingedSpace`. -/
---Porting Note: `simps` cause a time out, so `unit` and `counit` will be added manually
+--Porting Note: `simps` cause a time out, so `Unit` and `counit` will be added manually
def locallyRingedSpaceAdjunction : Γ.rightOp ⊣ Spec.toLocallyRingedSpace.{u} :=
Adjunction.mkOfUnitCounit
{ unit := identityToΓSpec
@@ -439,12 +439,12 @@ theorem adjunction_unit_app_app_top (X : Scheme) :
SpecΓIdentity.hom.app (X.presheaf.obj (op ⊤)) := by
have := congr_app ΓSpec.adjunction.left_triangle X
dsimp at this
- -- -- Porting Notes: Slightly changed some rewrites.
- -- -- Originally:
- -- -- rw [← is_iso.eq_comp_inv] at this
- -- -- simp only [Γ_Spec.LocallyRingedSpace_adjunction_counit, nat_trans.op_app, category.id_comp,
- -- -- Γ_Spec.adjunction_counit_app] at this
- -- -- rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
+ -- Porting Notes: Slightly changed some rewrites.
+ -- Originally:
+ -- rw [← is_iso.eq_comp_inv] at this
+ -- simp only [Γ_Spec.LocallyRingedSpace_adjunction_counit, nat_trans.op_app, category.id_comp,
+ -- Γ_Spec.adjunction_counit_app] at this
+ -- rw [← op_inv, nat_iso.inv_inv_app, quiver.hom.op_inj.eq_iff] at this
rw [← IsIso.eq_comp_inv] at this
simp only [adjunction_counit_app, locallyRingedSpaceAdjunction_counit, NatIso.op_inv,
NatTrans.op_app, unop_op, Functor.id_obj, Functor.comp_obj, Functor.rightOp_obj,
The unported dependencies are