import Mathlib import Definitions.Def_CerednikDrinfeld_FormalUpperHalfPlaneCharts set_option autoImplicit false noncomputable section namespace AlgebraicGeometry open CategoryTheory CerednikDrinfeld.FormalOmega variable {π’ͺ : Type} [CommRing π’ͺ] abbrev Scheme.specOver (B : Type) [CommRing B] [Algebra π’ͺ B] : Spec (.of B) ⟢ Spec (.of π’ͺ) := Spec.map (CommRingCat.ofHom (algebraMap π’ͺ B)) theorem Scheme.specMap_algHom_comp_specOver {B : Type} [CommRing B] [Algebra π’ͺ B] {B' : Type} [CommRing B'] [Algebra π’ͺ B'] (g : B →ₐ[π’ͺ] B') : Spec.map (CommRingCat.ofHom g.toRingHom) ≫ Scheme.specOver (π’ͺ := π’ͺ) B = Scheme.specOver B' := by rw [Scheme.specOver, Scheme.specOver, ← Spec.map_comp, ← CommRingCat.ofHom_comp, AlgHom.toRingHom_eq_coe, AlgHom.comp_algebraMap] def Scheme.nilpPoints {X : Scheme.{0}} (f : X ⟢ Spec (.of π’ͺ)) : AlgFunctor π’ͺ where obj B _ _ := { Ο† : Spec (.of B) ⟢ X // Ο† ≫ f = Scheme.specOver B } map g Ο† := ⟨Spec.map (CommRingCat.ofHom g.toRingHom) ≫ Ο†.1, by rw [Category.assoc, Ο†.2, Scheme.specMap_algHom_comp_specOver]⟩ map_id Ο† := by apply Subtype.ext show Spec.map (CommRingCat.ofHom (RingHom.id _)) ≫ Ο†.1 = Ο†.1 rw [CommRingCat.ofHom_id, Spec.map_id, Category.id_comp] map_comp g h Ο† := by apply Subtype.ext show Spec.map (CommRingCat.ofHom ((h.comp g).toRingHom)) ≫ Ο†.1 = Spec.map (CommRingCat.ofHom h.toRingHom) ≫ (Spec.map (CommRingCat.ofHom g.toRingHom) ≫ Ο†.1) simp only [AlgHom.toRingHom_eq_coe] rw [AlgHom.comp_toRingHom, CommRingCat.ofHom_comp, Spec.map_comp, Category.assoc] @[simp] theorem Scheme.nilpPoints_map_val {X : Scheme.{0}} (f : X ⟢ Spec (.of π’ͺ)) {B : Type} [CommRing B] [Algebra π’ͺ B] {B' : Type} [CommRing B'] [Algebra π’ͺ B'] (g : B →ₐ[π’ͺ] B') (Ο† : (Scheme.nilpPoints f).obj B) : ((Scheme.nilpPoints f).map g Ο†).1 = Spec.map (CommRingCat.ofHom g.toRingHom) ≫ Ο†.1 := rfl def Scheme.nilpPoints.mapHom {X Y : Scheme.{0}} (fX : X ⟢ Spec (.of π’ͺ)) (fY : Y ⟢ Spec (.of π’ͺ)) (h : X ⟢ Y) (w : h ≫ fY = fX) : AlgFunctor.NatTrans (Scheme.nilpPoints fX) (Scheme.nilpPoints fY) where app B _ _ Ο† := βŸ¨Ο†.1 ≫ h, by rw [Category.assoc, w, Ο†.2]⟩ naturality g Ο† := by apply Subtype.ext show Spec.map (CommRingCat.ofHom g.toRingHom) ≫ (Ο†.1 ≫ h) = (Spec.map (CommRingCat.ofHom g.toRingHom) ≫ Ο†.1) ≫ h rw [Category.assoc] def Scheme.nilpPoints.specPoint (B : Type) [CommRing B] [Algebra π’ͺ B] : (Scheme.nilpPoints (πŸ™ (Spec (CommRingCat.of π’ͺ)))).obj B := ⟨Scheme.specOver B, Category.comp_id _⟩ end AlgebraicGeometry end