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

Commit 64fc723

Browse files
committed
feat(algebraic_geometry/morphisms/finite_type): Morphisms locally of finite type. (#16124)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 6805418 commit 64fc723

4 files changed

Lines changed: 143 additions & 2 deletions

File tree

src/algebraic_geometry/Scheme.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,13 @@ begin
119119
refl
120120
end
121121

122+
/-- Given a morphism of schemes `f : X ⟶ Y`, and open sets `U ⊆ Y`, `V ⊆ f ⁻¹' U`,
123+
this is the induced map `Γ(Y, U) ⟶ Γ(X, V)`. -/
124+
abbreviation hom.app_le {X Y : Scheme}
125+
(f : X ⟶ Y) {V : opens X.carrier} {U : opens Y.carrier} (e : V ≤ (opens.map f.1.base).obj U) :
126+
Y.presheaf.obj (op U) ⟶ X.presheaf.obj (op V) :=
127+
f.1.c.app (op U) ≫ X.presheaf.map (hom_of_le e).op
128+
122129
/--
123130
The spectrum of a commutative ring, as a scheme.
124131
-/
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/-
2+
Copyright (c) 2022 Andrew Yang. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Andrew Yang
5+
-/
6+
import algebraic_geometry.morphisms.ring_hom_properties
7+
import algebraic_geometry.morphisms.quasi_compact
8+
import ring_theory.ring_hom.finite_type
9+
10+
/-!
11+
# Morphisms of finite type
12+
13+
A morphism of schemes `f : X ⟶ Y` is locally of finite type if for each affine `U ⊆ Y` and
14+
`V ⊆ f ⁻¹' U`, The induced map `Γ(Y, U) ⟶ Γ(X, V)` is of finite type.
15+
16+
A morphism of schemes is of finite type if it is both locally of finite type and quasi-compact.
17+
18+
We show that these properties are local, and are stable under compositions.
19+
20+
-/
21+
22+
noncomputable theory
23+
24+
open category_theory category_theory.limits opposite topological_space
25+
26+
universes v u
27+
28+
namespace algebraic_geometry
29+
30+
variables {X Y : Scheme.{u}} (f : X ⟶ Y)
31+
32+
/--
33+
A morphism of schemes `f : X ⟶ Y` is locally of finite type if for each affine `U ⊆ Y` and
34+
`V ⊆ f ⁻¹' U`, The induced map `Γ(Y, U) ⟶ Γ(X, V)` is of finite type.
35+
-/
36+
@[mk_iff]
37+
class locally_of_finite_type (f : X ⟶ Y) : Prop :=
38+
(finite_type_of_affine_subset :
39+
∀ (U : Y.affine_opens) (V : X.affine_opens) (e : V.1 ≤ (opens.map f.1.base).obj U.1),
40+
(f.app_le e).finite_type)
41+
42+
lemma locally_of_finite_type_eq :
43+
@locally_of_finite_type = affine_locally @ring_hom.finite_type :=
44+
begin
45+
ext X Y f,
46+
rw [locally_of_finite_type_iff, affine_locally_iff_affine_opens_le],
47+
exact ring_hom.finite_type_respects_iso
48+
end
49+
50+
@[priority 900]
51+
instance locally_of_finite_type_of_is_open_immersion {X Y : Scheme} (f : X ⟶ Y)
52+
[is_open_immersion f] : locally_of_finite_type f :=
53+
locally_of_finite_type_eq.symm ▸ ring_hom.finite_type_is_local.affine_locally_of_is_open_immersion f
54+
55+
lemma locally_of_finite_type_stable_under_composition :
56+
morphism_property.stable_under_composition @locally_of_finite_type :=
57+
locally_of_finite_type_eq.symm ▸
58+
ring_hom.finite_type_is_local.affine_locally_stable_under_composition
59+
60+
instance locally_of_finite_type_comp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z)
61+
[hf : locally_of_finite_type f] [hg : locally_of_finite_type g] :
62+
locally_of_finite_type (f ≫ g) :=
63+
locally_of_finite_type_stable_under_composition f g hf hg
64+
65+
lemma locally_of_finite_type_of_comp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z)
66+
[hf : locally_of_finite_type (f ≫ g)] :
67+
locally_of_finite_type f :=
68+
begin
69+
unfreezingI { revert hf },
70+
rw [locally_of_finite_type_eq],
71+
apply ring_hom.finite_type_is_local.affine_locally_of_comp,
72+
introv H,
73+
exactI ring_hom.finite_type.of_comp_finite_type H,
74+
end
75+
76+
lemma locally_of_finite_type.affine_open_cover_iff {X Y : Scheme.{u}} (f : X ⟶ Y)
77+
(𝒰 : Scheme.open_cover.{u} Y) [∀ i, is_affine (𝒰.obj i)]
78+
(𝒰' : ∀ i, Scheme.open_cover.{u} ((𝒰.pullback_cover f).obj i))
79+
[∀ i j, is_affine ((𝒰' i).obj j)] :
80+
locally_of_finite_type f ↔
81+
(∀ i j, (Scheme.Γ.map ((𝒰' i).map j ≫ pullback.snd).op).finite_type) :=
82+
locally_of_finite_type_eq.symm ▸ ring_hom.finite_type_is_local.affine_open_cover_iff f 𝒰 𝒰'
83+
84+
lemma locally_of_finite_type.source_open_cover_iff {X Y : Scheme.{u}} (f : X ⟶ Y)
85+
(𝒰 : Scheme.open_cover.{u} X) :
86+
locally_of_finite_type f ↔ (∀ i, locally_of_finite_type (𝒰.map i ≫ f)) :=
87+
locally_of_finite_type_eq.symm ▸ ring_hom.finite_type_is_local.source_open_cover_iff f 𝒰
88+
89+
lemma locally_of_finite_type.open_cover_iff {X Y : Scheme.{u}} (f : X ⟶ Y)
90+
(𝒰 : Scheme.open_cover.{u} Y) :
91+
locally_of_finite_type f ↔
92+
(∀ i, locally_of_finite_type (pullback.snd : pullback f (𝒰.map i) ⟶ _)) :=
93+
locally_of_finite_type_eq.symm ▸
94+
ring_hom.finite_type_is_local.is_local_affine_locally.open_cover_iff f 𝒰
95+
96+
lemma locally_of_finite_type_respects_iso :
97+
morphism_property.respects_iso @locally_of_finite_type :=
98+
locally_of_finite_type_eq.symm ▸ target_affine_locally_respects_iso
99+
(source_affine_locally_respects_iso ring_hom.finite_type_respects_iso)
100+
101+
end algebraic_geometry

src/algebraic_geometry/morphisms/ring_hom_properties.lean

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ lemma affine_locally_iff_affine_opens_le
175175
(hP : ring_hom.respects_iso @P) {X Y : Scheme} (f : X ⟶ Y) :
176176
affine_locally @P f ↔
177177
(∀ (U : Y.affine_opens) (V : X.affine_opens) (e : V.1 ≤ (opens.map f.1.base).obj U.1),
178-
P (f.1.c.app (op U) ≫ X.presheaf.map (hom_of_le e).op)) :=
178+
P (f.app_le e)) :=
179179
begin
180180
apply forall_congr,
181181
intro U,
@@ -491,6 +491,36 @@ begin
491491
{ intro i, exact H }
492492
end
493493

494+
lemma affine_locally_of_comp
495+
(H : ∀ {R S T : Type.{u}} [comm_ring R] [comm_ring S] [comm_ring T], by exactI
496+
∀ (f : R →+* S) (g : S →+* T), P (g.comp f) → P g)
497+
{X Y Z : Scheme} {f : X ⟶ Y} {g : Y ⟶ Z} (h : affine_locally @P (f ≫ g)) :
498+
affine_locally @P f :=
499+
begin
500+
let 𝒰 : ∀ i, ((Z.affine_cover.pullback_cover (f ≫ g)).obj i).open_cover,
501+
{ intro i,
502+
refine Scheme.open_cover.bind _ (λ i, Scheme.affine_cover _),
503+
apply Scheme.open_cover.pushforward_iso _
504+
(pullback_right_pullback_fst_iso g (Z.affine_cover.map i) f).hom,
505+
apply Scheme.pullback.open_cover_of_right,
506+
exact (pullback g (Z.affine_cover.map i)).affine_cover },
507+
haveI h𝒰 : ∀ i j, is_affine ((𝒰 i).obj j), by { dsimp, apply_instance },
508+
let 𝒰' := (Z.affine_cover.pullback_cover g).bind (λ i, Scheme.affine_cover _),
509+
haveI h𝒰' : ∀ i, is_affine (𝒰'.obj i), by { dsimp, apply_instance },
510+
rw hP.affine_open_cover_iff f 𝒰' (λ i, Scheme.affine_cover _),
511+
rw hP.affine_open_cover_iff (f ≫ g) Z.affine_cover 𝒰 at h,
512+
rintros ⟨i, j⟩ k,
513+
dsimp at i j k,
514+
specialize h i ⟨j, k⟩,
515+
dsimp only [Scheme.open_cover.bind_map, Scheme.open_cover.pushforward_iso_obj,
516+
Scheme.pullback.open_cover_of_right_obj, Scheme.open_cover.pushforward_iso_map,
517+
Scheme.pullback.open_cover_of_right_map, Scheme.open_cover.bind_obj,
518+
Scheme.open_cover.pullback_cover_obj, Scheme.open_cover.pullback_cover_map] at h ⊢,
519+
rw [category.assoc, category.assoc, pullback_right_pullback_fst_iso_hom_snd,
520+
pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp] at h,
521+
exact H _ _ h,
522+
end
523+
494524
lemma affine_locally_stable_under_composition :
495525
(affine_locally @P).stable_under_composition :=
496526
begin

src/ring_theory/ring_hom/finite_type.lean

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,12 @@ begin
8484
{ rw ht, trivial } }
8585
end
8686

87-
lemma finite_is_local :
87+
lemma finite_type_is_local :
8888
property_is_local @finite_type :=
8989
⟨localization_finite_type, finite_type_of_localization_span_target,
9090
finite_type_stable_under_composition, finite_type_holds_for_localization_away⟩
9191

92+
lemma finite_type_respects_iso : ring_hom.respects_iso @ring_hom.finite_type :=
93+
ring_hom.finite_type_is_local.respects_iso
94+
9295
end ring_hom

0 commit comments

Comments
 (0)