@@ -380,6 +380,23 @@ lemma Scheme.Hom.isoImage_inv_ι
380380 (f.isoImage U).inv ≫ U.ι ≫ f = (f ''ᵁ U).ι :=
381381 IsOpenImmersion.isoOfRangeEq_inv_fac _ _ _
382382
383+ @[reassoc]
384+ lemma Scheme.Hom.isoImage_hom_homOfLE
385+ {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] (U V : Opens X) (e : U ≤ V) :
386+ (f.isoImage U).hom ≫ Y.homOfLE (f.image_mono e) = X.homOfLE e ≫ (f.isoImage V).hom := by
387+ simp [← cancel_mono (f ''ᵁ V).ι]
388+
389+ @[reassoc]
390+ lemma Scheme.Hom.isoImage_inv_homOfLE
391+ {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] (U V : Opens X) (e : U ≤ V) :
392+ (f.isoImage U).inv ≫ X.homOfLE e = Y.homOfLE (f.image_mono e) ≫ (f.isoImage V).inv := by
393+ simp [← cancel_mono (f.isoImage V).hom, ← f.isoImage_hom_homOfLE]
394+
395+ @ [reassoc (attr := simp)]
396+ lemma Scheme.Opens.isoImage_ι_inv_ι {X : Scheme.{u}} (U : Opens X) (V : Opens U) :
397+ (U.ι.isoImage V).inv ≫ V.ι = X.homOfLE (U.ι_image_le V) := by
398+ simp [← cancel_mono U.ι]
399+
383400/-- If `f : X ⟶ Y` is an open immersion, then `X` is isomorphic to its image in `Y`. -/
384401def Scheme.Hom.isoOpensRange {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] :
385402 X ≅ f.opensRange :=
@@ -577,6 +594,17 @@ theorem morphismRestrict_comp {X Y Z : Scheme.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) (
577594 pullbackRestrictIsoRestrict_inv_fst_assoc]
578595 rfl
579596
597+ @[reassoc]
598+ theorem morphismRestrict_homOfLE {X Y : Scheme.{u}} (f : X ⟶ Y) (U V : Y.Opens) (e : U ≤ V) :
599+ (f ∣_ U) ≫ Y.homOfLE e = X.homOfLE (f.preimage_mono e) ≫ (f ∣_ V) := by
600+ simp [← cancel_mono V.ι]
601+
602+ @ [reassoc (attr := simp)]
603+ lemma Scheme.Hom.isoImage_preimage_hom_homOfLE {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f]
604+ (U : Y.Opens) :
605+ (f.isoImage (f ⁻¹ᵁ U)).hom ≫ Y.homOfLE (f.image_preimage_le U) = f ∣_ U := by
606+ simp [← cancel_mono U.ι]
607+
580608instance {X Y : Scheme.{u}} (f : X ⟶ Y) [IsIso f] (U : Y.Opens) : IsIso (f ∣_ U) := by
581609 delta morphismRestrict; infer_instance
582610
@@ -622,6 +650,20 @@ theorem morphismRestrict_appLE {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Y.Opens) (V
622650 rw [Scheme.Hom.appLE, morphismRestrict_app', Scheme.Opens.toScheme_presheaf_map,
623651 Scheme.Hom.appLE_map]
624652
653+ @[reassoc]
654+ theorem morphismRestrict_homOfLE_isoImage_ι_hom
655+ {X : Scheme.{u}} {U V : X.Opens} (e : U ≤ V) (W : Opens V) :
656+ X.homOfLE e ∣_ W ≫ (V.ι.isoImage W).hom =
657+ (U.ι.isoImage (X.homOfLE e ⁻¹ᵁ W)).hom ≫ X.homOfLE (X.ι_image_homOfLE_le_ι_image e W) := by
658+ simp [← cancel_mono (V.ι ''ᵁ W).ι]
659+
660+ @[reassoc]
661+ theorem isoImage_ι_inv_morphismRestrict_homOfLE {X : Scheme.{u}} {U V : X.Opens}
662+ (e : U ≤ V) (W : Opens V) :
663+ (U.ι.isoImage (X.homOfLE e ⁻¹ᵁ W)).inv ≫ X.homOfLE e ∣_ W =
664+ X.homOfLE (X.ι_image_homOfLE_le_ι_image e W) ≫ (V.ι.isoImage W).inv := by
665+ simp [← cancel_mono (V.ι.isoImage W).hom, morphismRestrict_homOfLE_isoImage_ι_hom]
666+
625667set_option backward.isDefEq.respectTransparency false in
626668/-- Restricting a morphism onto the image of an open immersion is isomorphic to the base change
627669along the immersion. -/
@@ -647,17 +689,27 @@ def morphismRestrictEq {X Y : Scheme.{u}} (f : X ⟶ Y) {U V : Y.Opens} (e : U =
647689 Arrow.mk (f ∣_ U) ≅ Arrow.mk (f ∣_ V) :=
648690 eqToIso (by subst e; rfl)
649691
692+ @[reassoc]
693+ lemma morphismRestrict_ι_image_ι_isoImage_inv
694+ {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Y.Opens) (V : U.toScheme.Opens) :
695+ f ∣_ U.ι ''ᵁ V ≫ (U.ι.isoImage V).inv = (X.homOfLE (image_morphismRestrict_preimage f U V).ge ≫
696+ ((f ⁻¹ᵁ U).ι.isoImage ((f ∣_ U) ⁻¹ᵁ V)).inv) ≫ f ∣_ U ∣_ V := by
697+ simp [← cancel_mono (Scheme.Opens.ι _)]
698+
699+ @[reassoc]
700+ lemma morphismRestrict_morphismRestrict_ι_isoImage_hom
701+ {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Y.Opens) (V : U.toScheme.Opens) :
702+ f ∣_ U ∣_ V ≫ (U.ι.isoImage V).hom = (((f ⁻¹ᵁ U).ι.isoImage ((f ∣_ U) ⁻¹ᵁ V)).hom ≫
703+ X.homOfLE (image_morphismRestrict_preimage f U V).le) ≫ f ∣_ U.ι ''ᵁ V := by
704+ simp [← cancel_mono (Scheme.Opens.ι _)]
705+
650706/-- Restricting a morphism twice is isomorphic to one restriction. -/
651707def morphismRestrictRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Y.Opens) (V : U.toScheme.Opens) :
652708 Arrow.mk (f ∣_ U ∣_ V) ≅ Arrow.mk (f ∣_ U.ι ''ᵁ V) := by
653709 refine Arrow.isoMk' _ _ ((Scheme.Opens.ι _).isoImage _ ≪≫ Scheme.isoOfEq _ ?_)
654710 ((Scheme.Opens.ι _).isoImage _) ?_
655711 · exact image_morphismRestrict_preimage f U V
656- · rw [← cancel_mono (Scheme.Opens.ι _), Iso.trans_hom, Category.assoc, Category.assoc,
657- Category.assoc, morphismRestrict_ι, Scheme.isoOfEq_hom_ι_assoc,
658- Scheme.Hom.isoImage_hom_ι_assoc,
659- Scheme.Hom.isoImage_hom_ι,
660- morphismRestrict_ι_assoc, morphismRestrict_ι]
712+ · simp [← cancel_mono (Scheme.Opens.ι _)]
661713
662714set_option backward.isDefEq.respectTransparency false in
663715/-- Restricting a morphism twice onto a basic open set is isomorphic to one restriction. -/
0 commit comments