Skip to content

Commit d82bdee

Browse files
justus-springerBergschaf
authored andcommitted
feat(AlgebraicGeometry/Restrict): a few more restriction lemmas (leanprover-community#39442)
These will be used later to define composition of rational maps in leanprover-community#39445.
1 parent 25e4353 commit d82bdee

1 file changed

Lines changed: 57 additions & 5 deletions

File tree

Mathlib/AlgebraicGeometry/Restrict.lean

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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`. -/
384401
def 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+
580608
instance {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+
625667
set_option backward.isDefEq.respectTransparency false in
626668
/-- Restricting a morphism onto the image of an open immersion is isomorphic to the base change
627669
along 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. -/
651707
def 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

662714
set_option backward.isDefEq.respectTransparency false in
663715
/-- Restricting a morphism twice onto a basic open set is isomorphic to one restriction. -/

0 commit comments

Comments
 (0)