@@ -1703,9 +1703,13 @@ def hom.opens_range {X Y : Scheme} (f : X ⟶ Y) [H : is_open_immersion f] : ope
1703
1703
1704
1704
end Scheme
1705
1705
1706
+ section
1707
+
1708
+ variable (X : Scheme)
1709
+
1706
1710
/-- The functor taking open subsets of `X` to open subschemes of `X`. -/
1707
1711
@[simps obj_left obj_hom map_left]
1708
- def Scheme.restrict_functor (X : Scheme) : opens X.carrier ⥤ over X :=
1712
+ def Scheme.restrict_functor : opens X.carrier ⥤ over X :=
1709
1713
{ obj := λ U, over.mk (X.of_restrict U.open_embedding),
1710
1714
map := λ U V i, over.hom_mk (is_open_immersion.lift (X.of_restrict _) (X.of_restrict _)
1711
1715
(by { change set.range coe ⊆ set.range coe, simp_rw [subtype.range_coe], exact i.le }))
@@ -1723,6 +1727,65 @@ def Scheme.restrict_functor (X : Scheme) : opens X.carrier ⥤ over X :=
1723
1727
iterate 3 { rw [is_open_immersion.lift_fac] }
1724
1728
end }
1725
1729
1730
+ @[reassoc]
1731
+ lemma Scheme.restrict_functor_map_of_restrict {U V : opens X.carrier} (i : U ⟶ V) :
1732
+ (X.restrict_functor.map i).1 ≫ X.of_restrict _ = X.of_restrict _ :=
1733
+ is_open_immersion.lift_fac _ _ _
1734
+
1735
+ lemma Scheme.restrict_functor_map_base {U V : opens X.carrier} (i : U ⟶ V) :
1736
+ (X.restrict_functor.map i).1 .1 .base = (opens.to_Top _).map i :=
1737
+ begin
1738
+ ext a,
1739
+ exact (congr_arg (λ f : X.restrict U.open_embedding ⟶ X, by exact f.1 .base a)
1740
+ (X.restrict_functor_map_of_restrict i) : _),
1741
+ end
1742
+
1743
+ lemma Scheme.restrict_functor_map_app_aux {U V : opens X.carrier} (i : U ⟶ V) (W : opens V) :
1744
+ U.open_embedding.is_open_map.functor.obj
1745
+ ((opens.map (X.restrict_functor.map i).1 .val.base).obj W) ≤
1746
+ V.open_embedding.is_open_map.functor.obj W :=
1747
+ begin
1748
+ simp only [set.image_congr, subtype.mk_le_mk, is_open_map.functor, set.image_subset_iff,
1749
+ Scheme.restrict_functor_map_base, opens.map, subtype.coe_mk, opens.inclusion_apply,
1750
+ set.le_eq_subset],
1751
+ rintros _ h,
1752
+ exact ⟨_, h, rfl⟩,
1753
+ end
1754
+
1755
+ lemma Scheme.restrict_functor_map_app {U V : opens X.carrier} (i : U ⟶ V) (W : opens V) :
1756
+ (X.restrict_functor.map i).1 .1 .c.app (op W) = X.presheaf.map
1757
+ (hom_of_le $ X.restrict_functor_map_app_aux i W).op :=
1758
+ begin
1759
+ have e₁ := Scheme.congr_app (X.restrict_functor_map_of_restrict i)
1760
+ (op $ V.open_embedding.is_open_map.functor.obj W),
1761
+ rw Scheme.comp_val_c_app at e₁,
1762
+ have e₂ := (X.restrict_functor.map i).1 .val.c.naturality (eq_to_hom W.map_functor_eq).op,
1763
+ rw ← is_iso.eq_inv_comp at e₂,
1764
+ dsimp at e₁ e₂ ⊢,
1765
+ rw [e₂, W.adjunction_counit_map_functor, ← is_iso.eq_inv_comp, is_iso.inv_comp_eq,
1766
+ ← is_iso.eq_comp_inv] at e₁,
1767
+ simp_rw [eq_to_hom_map (opens.map _), eq_to_hom_map (is_open_map.functor _), ← functor.map_inv,
1768
+ ← functor.map_comp] at e₁,
1769
+ rw e₁,
1770
+ congr' 1 ,
1771
+ end
1772
+
1773
+ /-- The functor that restricts to open subschemes and then takes global section is
1774
+ isomorphic to the structure sheaf. -/
1775
+ @[simps]
1776
+ def Scheme.restrict_functor_Γ :
1777
+ X.restrict_functor.op ⋙ (over.forget X).op ⋙ Scheme.Γ ≅ X.presheaf :=
1778
+ nat_iso.of_components
1779
+ (λ U, X.presheaf.map_iso ((eq_to_iso (unop U).open_embedding_obj_top).symm.op : _))
1780
+ begin
1781
+ intros U V i,
1782
+ dsimp [-subtype.val_eq_coe, -Scheme.restrict_functor_map_left],
1783
+ rw [X.restrict_functor_map_app, ← functor.map_comp, ← functor.map_comp],
1784
+ congr' 1
1785
+ end
1786
+
1787
+ end
1788
+
1726
1789
/-- The restriction of an isomorphism onto an open set. -/
1727
1790
noncomputable
1728
1791
abbreviation Scheme.restrict_map_iso {X Y : Scheme} (f : X ⟶ Y) [is_iso f] (U : opens Y.carrier) :
0 commit comments