Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 5182bba

Browse files
committed
feat(algebraic_geometry/open_immersion): API for Scheme.restrict_functor. (#17184)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 50a4565 commit 5182bba

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

src/algebraic_geometry/open_immersion.lean

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1703,9 +1703,13 @@ def hom.opens_range {X Y : Scheme} (f : X ⟶ Y) [H : is_open_immersion f] : ope
17031703

17041704
end Scheme
17051705

1706+
section
1707+
1708+
variable (X : Scheme)
1709+
17061710
/-- The functor taking open subsets of `X` to open subschemes of `X`. -/
17071711
@[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 :=
17091713
{ obj := λ U, over.mk (X.of_restrict U.open_embedding),
17101714
map := λ U V i, over.hom_mk (is_open_immersion.lift (X.of_restrict _) (X.of_restrict _)
17111715
(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 :=
17231727
iterate 3 { rw [is_open_immersion.lift_fac] }
17241728
end }
17251729

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+
17261789
/-- The restriction of an isomorphism onto an open set. -/
17271790
noncomputable
17281791
abbreviation Scheme.restrict_map_iso {X Y : Scheme} (f : X ⟶ Y) [is_iso f] (U : opens Y.carrier) :

src/topology/category/Top/opens.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ def map (f : X ⟶ Y) : opens Y ⥤ opens X :=
131131
{ obj := λ U, ⟨ f ⁻¹' U.val, U.property.preimage f.continuous ⟩,
132132
map := λ U V i, ⟨ ⟨ λ x h, i.le h ⟩ ⟩ }.
133133

134+
lemma map_coe (f : X ⟶ Y) (U : opens Y) :
135+
↑((map f).obj U) = f ⁻¹' U :=
136+
rfl
137+
134138
@[simp] lemma map_obj (f : X ⟶ Y) (U) (p) :
135139
(map f).obj ⟨U, p⟩ = ⟨f ⁻¹' U, p.preimage f.continuous⟩ := rfl
136140

@@ -302,4 +306,21 @@ begin
302306
{ rintros ⟨⟨x, -, rfl⟩, hx⟩, exact ⟨x, hx, rfl⟩ }
303307
end
304308

309+
@[simp] lemma functor_map_eq_inf {X : Top} (U V : opens X) :
310+
U.open_embedding.is_open_map.functor.obj ((opens.map U.inclusion).obj V) = V ⊓ U :=
311+
by { ext1, refine set.image_preimage_eq_inter_range.trans _, simpa }
312+
313+
lemma map_functor_eq' {X U : Top} (f : U ⟶ X) (hf : _root_.open_embedding f) (V) :
314+
((opens.map f).obj $ hf.is_open_map.functor.obj V) = V :=
315+
opens.ext $ set.preimage_image_eq _ hf.inj
316+
317+
@[simp] lemma map_functor_eq {X : Top} {U : opens X} (V : opens U) :
318+
((opens.map U.inclusion).obj $ U.open_embedding.is_open_map.functor.obj V) = V :=
319+
topological_space.opens.map_functor_eq' _ U.open_embedding V
320+
321+
@[simp] lemma adjunction_counit_map_functor {X : Top} {U : opens X} (V : opens U) :
322+
U.open_embedding.is_open_map.adjunction.counit.app (U.open_embedding.is_open_map.functor.obj V)
323+
= eq_to_hom (by { conv_rhs { rw ← V.map_functor_eq }, refl }) :=
324+
by ext
325+
305326
end topological_space.opens

0 commit comments

Comments
 (0)