import Definitions.Def_AlgebraicGeometry_TwoAffineOpenCoverH1BaseChange set_option autoImplicit false noncomputable section universe u open CategoryTheory CategoryTheory.Limits Opposite namespace AlgebraicGeometry.Scheme.TwoAffineOpenCover variable {X Y : Scheme.{u}} def preimage (๐’ฑ : X.TwoAffineOpenCover) (g : Y โŸถ X) [IsAffineHom g] : Y.TwoAffineOpenCover where U0 := g โปยนแต ๐’ฑ.U0 U1 := g โปยนแต ๐’ฑ.U1 isAffineOpen_U0 := ๐’ฑ.isAffineOpen_U0.preimage g isAffineOpen_U1 := ๐’ฑ.isAffineOpen_U1.preimage g sup_eq_top := by rw [โ† Scheme.Hom.preimage_sup, ๐’ฑ.sup_eq_top]; rfl isAffineOpen_inf := by rw [โ† Scheme.Hom.preimage_inf]; exact ๐’ฑ.isAffineOpen_inf.preimage g @[simp] theorem preimage_U0 (๐’ฑ : X.TwoAffineOpenCover) (g : Y โŸถ X) [IsAffineHom g] : (๐’ฑ.preimage g).U0 = g โปยนแต ๐’ฑ.U0 := rfl @[simp] theorem preimage_U1 (๐’ฑ : X.TwoAffineOpenCover) (g : Y โŸถ X) [IsAffineHom g] : (๐’ฑ.preimage g).U1 = g โปยนแต ๐’ฑ.U1 := rfl variable {R : Type u} [CommRing R] {S : Type u} [CommRing S] theorem pullback_eq_preimage (๐’ฑ : X.TwoAffineOpenCover) (c : X โŸถ Spec (.of R)) (A : Type u) [CommRing A] [Algebra R A] : ๐’ฑ.pullback c A = @preimage _ _ ๐’ฑ (Limits.pullback.fst c (specMap R A)) (isAffineHom_fst c A) := rfl def HomOver.ofPreimage {ฯ„ : R โ†’+* S} (๐’ฑ : X.TwoAffineOpenCover) (c : X โŸถ Spec (.of R)) (c' : Y โŸถ Spec (.of S)) (g : Y โŸถ X) [IsAffineHom g] (hg : g โ‰ซ c = c' โ‰ซ Spec.map (CommRingCat.ofHom ฯ„)) : HomOver ฯ„ ๐’ฑ c (๐’ฑ.preimage g) c' where hom := g comm := hg U0_le := le_rfl U1_le := le_rfl @[simp] theorem HomOver.ofPreimage_hom {ฯ„ : R โ†’+* S} (๐’ฑ : X.TwoAffineOpenCover) (c : X โŸถ Spec (.of R)) (c' : Y โŸถ Spec (.of S)) (g : Y โŸถ X) [IsAffineHom g] (hg : g โ‰ซ c = c' โ‰ซ Spec.map (CommRingCat.ofHom ฯ„)) : (HomOver.ofPreimage ๐’ฑ c c' g hg).hom = g := rfl def HomOver.pullback {๐’ฑ : X.TwoAffineOpenCover} {c : X โŸถ Spec (.of R)} {๐’ฒ : Y.TwoAffineOpenCover} {c' : Y โŸถ Spec (.of R)} (f : HomOver (RingHom.id R) ๐’ฑ c ๐’ฒ c') (A : Type u) [CommRing A] [Algebra R A] : HomOver (RingHom.id A) (๐’ฑ.pullback c A) (Limits.pullback.snd c (specMap R A)) (๐’ฒ.pullback c' A) (Limits.pullback.snd c' (specMap R A)) where hom := Limits.pullback.map c' (specMap R A) c (specMap R A) f.hom (๐Ÿ™ _) (๐Ÿ™ _) (by rw [Category.comp_id, f.comm, CommRingCat.ofHom_id]; erw [Spec.map_id]; try rw [Category.comp_id]) (by simp) comm := by rw [Limits.pullback.lift_snd, CommRingCat.ofHom_id] erw [Spec.map_id] try rw [Category.comp_id, Category.comp_id] U0_le := by change Limits.pullback.fst c' (specMap R A) โปยนแต ๐’ฒ.U0 โ‰ค Limits.pullback.map c' (specMap R A) c (specMap R A) f.hom (๐Ÿ™ _) (๐Ÿ™ _) _ _ โปยนแต (Limits.pullback.fst c (specMap R A) โปยนแต ๐’ฑ.U0) rw [โ† Scheme.Hom.comp_preimage, Limits.pullback.lift_fst, Scheme.Hom.comp_preimage] exact Scheme.Hom.preimage_mono _ f.U0_le U1_le := by change Limits.pullback.fst c' (specMap R A) โปยนแต ๐’ฒ.U1 โ‰ค Limits.pullback.map c' (specMap R A) c (specMap R A) f.hom (๐Ÿ™ _) (๐Ÿ™ _) _ _ โปยนแต (Limits.pullback.fst c (specMap R A) โปยนแต ๐’ฑ.U1) rw [โ† Scheme.Hom.comp_preimage, Limits.pullback.lift_fst, Scheme.Hom.comp_preimage] exact Scheme.Hom.preimage_mono _ f.U1_le theorem HomOver.pullback_hom {๐’ฑ : X.TwoAffineOpenCover} {c : X โŸถ Spec (.of R)} {๐’ฒ : Y.TwoAffineOpenCover} {c' : Y โŸถ Spec (.of R)} (f : HomOver (RingHom.id R) ๐’ฑ c ๐’ฒ c') (A : Type u) [CommRing A] [Algebra R A] : (f.pullback A).hom โ‰ซ Limits.pullback.fst c (specMap R A) = Limits.pullback.fst c' (specMap R A) โ‰ซ f.hom := Limits.pullback.lift_fst _ _ _ theorem HomOver.pullback_hom_comp_stage_hom {๐’ฑ : X.TwoAffineOpenCover} {c : X โŸถ Spec (.of R)} {๐’ฒ : Y.TwoAffineOpenCover} {c' : Y โŸถ Spec (.of R)} (f : HomOver (RingHom.id R) ๐’ฑ c ๐’ฒ c') {A : Type u} [CommRing A] [Algebra R A] {B : Type u} [CommRing B] [Algebra R B] (g : A โ†’โ‚[R] B) : (f.pullback B).hom โ‰ซ (HomOver.stage ๐’ฑ c g).hom = (HomOver.stage ๐’ฒ c' g).hom โ‰ซ (f.pullback A).hom := by apply Limits.pullback.hom_ext <;> simp only [HomOver.pullback, HomOver.stage, RelPicard.baseChangeSnd, Category.assoc, Limits.pullback.lift_fst, Limits.pullback.lift_fst_assoc, Limits.pullback.lift_snd, Limits.pullback.lift_snd_assoc, Category.comp_id, Category.id_comp] end AlgebraicGeometry.Scheme.TwoAffineOpenCover end