Skip to content

Commit 410e5f2

Browse files
committed
feat(AlgebraicGeometry): universally injective morphisms (#18845)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 25c4cee commit 410e5f2

File tree

9 files changed

+141
-0
lines changed

9 files changed

+141
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,7 @@ import Mathlib.AlgebraicGeometry.Morphisms.Separated
933933
import Mathlib.AlgebraicGeometry.Morphisms.Smooth
934934
import Mathlib.AlgebraicGeometry.Morphisms.UnderlyingMap
935935
import Mathlib.AlgebraicGeometry.Morphisms.UniversallyClosed
936+
import Mathlib.AlgebraicGeometry.Morphisms.UniversallyInjective
936937
import Mathlib.AlgebraicGeometry.Noetherian
937938
import Mathlib.AlgebraicGeometry.OpenImmersion
938939
import Mathlib.AlgebraicGeometry.Over

Mathlib/AlgebraicGeometry/Morphisms/IsIso.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,7 @@ instance : HasAffineProperty (isomorphisms Scheme) fun X _ f _ ↦ IsAffine X
4242
(inferInstanceAs (IsIso (Spec.map (f.app ⊤)))),
4343
fun (_ : IsIso f) ↦ ⟨isAffine_of_isIso f, inferInstance⟩⟩
4444

45+
instance : IsLocalAtTarget (monomorphisms Scheme) :=
46+
diagonal_isomorphisms (C := Scheme).symm ▸ inferInstance
47+
4548
end AlgebraicGeometry

Mathlib/AlgebraicGeometry/Morphisms/UnderlyingMap.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,14 @@ instance surjective_isLocalAtTarget : IsLocalAtTarget @Surjective := by
8585

8686
end Surjective
8787

88+
section Injective
89+
90+
instance injective_isStableUnderComposition :
91+
MorphismProperty.IsStableUnderComposition (topologically (Function.Injective ·)) where
92+
comp_mem _ _ hf hg := hg.comp hf
93+
94+
end Injective
95+
8896
section IsOpenMap
8997

9098
instance : (topologically IsOpenMap).RespectsIso :=

Mathlib/AlgebraicGeometry/Morphisms/UniversallyClosed.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ instance universallyClosed_isStableUnderComposition :
6767
rw [universallyClosed_eq]
6868
infer_instance
6969

70+
lemma UniversallyClosed.of_comp_surjective {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z)
71+
[UniversallyClosed (f ≫ g)] [Surjective f] : UniversallyClosed g := by
72+
constructor
73+
intro X' Y' i₁ i₂ f' H
74+
have := UniversallyClosed.out _ _ _ ((IsPullback.of_hasPullback i₁ f).paste_horiz H)
75+
exact IsClosedMap.of_comp_surjective (MorphismProperty.pullback_fst (P := @Surjective) _ _ ‹_›).1
76+
(Scheme.Hom.continuous _) this
77+
7078
instance universallyClosedTypeComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z)
7179
[hf : UniversallyClosed f] [hg : UniversallyClosed g] : UniversallyClosed (f ≫ g) :=
7280
comp_mem _ _ _ hf hg
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/-
2+
Copyright (c) 2024 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 Mathlib.AlgebraicGeometry.PullbackCarrier
7+
import Mathlib.Topology.LocalAtTarget
8+
9+
/-!
10+
# Universally injective morphism
11+
12+
A morphism of schemes `f : X ⟶ Y` is universally injective if `X ×[Y] Y' ⟶ Y'` is injective
13+
for all base changes `Y' ⟶ Y`. This is equivalent to the diagonal morphism being surjective
14+
(`AlgebraicGeometry.UniversallyInjective.iff_diagonal`).
15+
16+
We show that being universally injective is local at the target, and is stable under
17+
compositions and base changes.
18+
19+
## TODO
20+
- https://stacks.math.columbia.edu/tag/01S4
21+
Show that this is equivalent to radicial morphisms
22+
(injective + purely inseparable residue field extensions)
23+
24+
-/
25+
26+
noncomputable section
27+
28+
open CategoryTheory CategoryTheory.Limits Opposite TopologicalSpace
29+
30+
universe v u
31+
32+
namespace AlgebraicGeometry
33+
34+
variable {X Y : Scheme.{u}} (f : X ⟶ Y)
35+
36+
open CategoryTheory.MorphismProperty Function
37+
38+
/--
39+
A morphism of schemes `f : X ⟶ Y` is universally injective if the base change `X ×[Y] Y' ⟶ Y'`
40+
along any morphism `Y' ⟶ Y` is injective (on points).
41+
-/
42+
@[mk_iff]
43+
class UniversallyInjective (f : X ⟶ Y) : Prop where
44+
universally_injective : universally (topologically (Injective ·)) f
45+
46+
theorem Scheme.Hom.injective (f : X.Hom Y) [UniversallyInjective f] :
47+
Function.Injective f.base :=
48+
UniversallyInjective.universally_injective _ _ _ .of_id_snd
49+
50+
theorem universallyInjective_eq :
51+
@UniversallyInjective = universally (topologically (Injective ·)) := by
52+
ext X Y f; rw [universallyInjective_iff]
53+
54+
theorem universallyInjective_eq_diagonal :
55+
@UniversallyInjective = diagonal @Surjective := by
56+
apply le_antisymm
57+
· intro X Y f hf
58+
refine ⟨fun x ↦ ⟨(pullback.fst f f).base x, hf.1 _ _ _ (IsPullback.of_hasPullback f f) ?_⟩⟩
59+
rw [← Scheme.comp_base_apply, pullback.diagonal_fst]
60+
rfl
61+
· rw [← universally_eq_iff.mpr (inferInstanceAs (IsStableUnderBaseChange (diagonal @Surjective))),
62+
universallyInjective_eq]
63+
apply universally_mono
64+
intro X Y f hf x₁ x₂ e
65+
obtain ⟨t, ht₁, ht₂⟩ := Scheme.Pullback.exists_preimage_pullback _ _ e
66+
obtain ⟨t, rfl⟩ := hf.1 t
67+
rw [← ht₁, ← ht₂, ← Scheme.comp_base_apply, ← Scheme.comp_base_apply, pullback.diagonal_fst,
68+
pullback.diagonal_snd]
69+
70+
theorem UniversallyInjective.iff_diagonal :
71+
UniversallyInjective f ↔ Surjective (pullback.diagonal f) := by
72+
rw [universallyInjective_eq_diagonal]; rfl
73+
74+
instance (priority := 900) [Mono f] : UniversallyInjective f :=
75+
have := (pullback.isIso_diagonal_iff f).mpr inferInstance
76+
(UniversallyInjective.iff_diagonal f).mpr inferInstance
77+
78+
theorem UniversallyInjective.respectsIso : RespectsIso @UniversallyInjective :=
79+
universallyInjective_eq_diagonal.symm ▸ inferInstance
80+
81+
instance UniversallyInjective.isStableUnderBaseChange :
82+
IsStableUnderBaseChange @UniversallyInjective :=
83+
universallyInjective_eq_diagonal.symm ▸ inferInstance
84+
85+
instance universallyInjective_isStableUnderComposition :
86+
IsStableUnderComposition @UniversallyInjective :=
87+
universallyInjective_eq ▸ inferInstance
88+
89+
instance : MorphismProperty.IsMultiplicative @UniversallyInjective where
90+
id_mem _ := inferInstance
91+
92+
instance universallyInjective_isLocalAtTarget : IsLocalAtTarget @UniversallyInjective :=
93+
universallyInjective_eq_diagonal.symm ▸ inferInstance
94+
95+
end AlgebraicGeometry

Mathlib/AlgebraicGeometry/PullbackCarrier.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,4 +359,10 @@ instance isJointlySurjectivePreserving (P : MorphismProperty Scheme.{u}) :
359359
obtain ⟨a, b, h⟩ := Pullback.exists_preimage_pullback x y hxy
360360
use a
361361

362+
instance : MorphismProperty.IsStableUnderBaseChange @Surjective := by
363+
refine .mk' ?_
364+
introv hg
365+
simp only [surjective_iff, ← Set.range_eq_univ, Pullback.range_fst] at hg ⊢
366+
rw [hg, Set.preimage_univ]
367+
362368
end AlgebraicGeometry.Scheme

Mathlib/CategoryTheory/Limits/Shapes/Diagonal.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ instance [Mono f] : IsIso (diagonal f) := by
6060
rw [(IsIso.inv_eq_of_inv_hom_id (diagonal_fst f)).symm]
6161
infer_instance
6262

63+
lemma isIso_diagonal_iff : IsIso (diagonal f) ↔ Mono f :=
64+
fun H ↦ ⟨fun _ _ e ↦ by rw [← lift_fst _ _ e, (cancel_epi (g := fst f f) (h := snd f f)
65+
(diagonal f)).mp (by simp), lift_snd]⟩, fun _ ↦ inferInstance⟩
66+
6367
/-- The two projections `Δ_{X/Y} ⟶ X` form a kernel pair for `f : X ⟶ Y`. -/
6468
theorem diagonal_isKernelPair : IsKernelPair f (pullback.fst f f) (pullback.snd f f) :=
6569
IsPullback.of_hasPullback f f

Mathlib/CategoryTheory/MorphismProperty/Limits.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ theorem IsStableUnderBaseChange.mk' {P : MorphismProperty C} [RespectsIso P]
6161
rw [← P.cancel_left_of_respectsIso e.inv, sq.flip.isoPullback_inv_fst]
6262
exact hP₂ _ _ _ f g hg
6363

64+
instance IsStableUnderBaseChange.isomorphisms :
65+
(isomorphisms C).IsStableUnderBaseChange where
66+
of_isPullback {_ _ _ _ f g _ _} h hg :=
67+
have : IsIso g := hg
68+
have := hasPullback_of_left_iso g f
69+
h.isoPullback_hom_snd ▸ inferInstanceAs (IsIso _)
70+
6471
variable (C) in
6572
instance IsStableUnderBaseChange.monomorphisms :
6673
(monomorphisms C).IsStableUnderBaseChange where
@@ -296,6 +303,9 @@ instance IsStableUnderBaseChange.diagonal [IsStableUnderBaseChange P] [P.Respect
296303
P.cancel_right_of_respectsIso]
297304
exact P.baseChange_map f _ (by simpa))
298305

306+
lemma diagonal_isomorphisms : (isomorphisms C).diagonal = monomorphisms C :=
307+
ext _ _ fun _ _ _ ↦ pullback.isIso_diagonal_iff _
308+
299309
end Diagonal
300310

301311
section Universally

Mathlib/Topology/Maps/Basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,12 @@ protected theorem comp (hg : IsClosedMap g) (hf : IsClosedMap f) : IsClosedMap (
461461
rw [image_comp]
462462
exact hg _ (hf _ hs)
463463

464+
protected theorem of_comp_surjective (hf : Surjective f) (hf' : Continuous f)
465+
(hfg : IsClosedMap (g ∘ f)) : IsClosedMap g := by
466+
intro K hK
467+
rw [← image_preimage_eq K hf, ← image_comp]
468+
exact hfg _ (hK.preimage hf')
469+
464470
theorem closure_image_subset (hf : IsClosedMap f) (s : Set X) :
465471
closure (f '' s) ⊆ f '' closure s :=
466472
closure_minimal (image_subset _ subset_closure) (hf _ isClosed_closure)

0 commit comments

Comments
 (0)