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

Commit fb7698e

Browse files
jakeleverdOne
andcommitted
feat(topology/sheaves): Locally surjective maps of presheaves (#15398)
For presheaves valued in a concrete category, we define locally surjective maps of presheaves and show that this condition is equivalent to all the induced maps of stalks being surjective. We also introduce notation for the types of sections, germs and corresponding induced maps. Co-authored by: Sam van Gool @samvang Co-authored-by: erd1 <the.erd.one@gmail.com> Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent afff1f2 commit fb7698e

1 file changed

Lines changed: 124 additions & 0 deletions

File tree

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/-
2+
Copyright (c) 2022 Sam van Gool and Jake Levinson. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Sam van Gool, Jake Levinson
5+
-/
6+
7+
import topology.sheaves.presheaf
8+
import topology.sheaves.stalks
9+
import category_theory.sites.surjective
10+
11+
/-!
12+
13+
# Locally surjective maps of presheaves.
14+
15+
Let `X` be a topological space, `ℱ` and `𝒢` presheaves on `X`, `T : ℱ ⟶ 𝒢` a map.
16+
17+
In this file we formulate two notions for what it means for
18+
`T` to be locally surjective:
19+
20+
1. For each open set `U`, each section `t : 𝒢(U)` is in the image of `T`
21+
after passing to some open cover of `U`.
22+
23+
2. For each `x : X`, the map of *stalks* `Tₓ : ℱₓ ⟶ 𝒢ₓ` is surjective.
24+
25+
We prove that these are equivalent.
26+
27+
-/
28+
29+
universes v u
30+
31+
noncomputable theory
32+
33+
open category_theory
34+
open topological_space
35+
open opposite
36+
37+
namespace Top.presheaf
38+
39+
section locally_surjective
40+
41+
local attribute [instance] concrete_category.has_coe_to_fun
42+
local attribute [instance] concrete_category.has_coe_to_sort
43+
44+
open_locale algebraic_geometry
45+
46+
/-- Let `C` be a concrete category, `X` a topological space. -/
47+
variables {C : Type u} [category.{v} C] [concrete_category.{v} C] {X : Top.{v}}
48+
49+
/-- Let `ℱ, 𝒢 : (opens X)ᵒᵖ ⥤ C` be `C`-valued presheaves on `X`. -/
50+
variables {ℱ 𝒢 : X.presheaf C}
51+
52+
/--
53+
A map of presheaves `T : ℱ ⟶ 𝒢` is **locally surjective** if for any open set `U`,
54+
section `t` over `U`, and `x ∈ U`, there exists an open set `x ∈ V ⊆ U` and a section `s` over `V`
55+
such that `$T_*(s_V) = t|_V$`.
56+
57+
See `is_locally_surjective_iff` below.
58+
-/
59+
def is_locally_surjective (T : ℱ ⟶ 𝒢) :=
60+
category_theory.is_locally_surjective (opens.grothendieck_topology X) T
61+
62+
lemma is_locally_surjective_iff (T : ℱ ⟶ 𝒢) :
63+
is_locally_surjective T ↔
64+
∀ U t (x ∈ U), ∃ V (ι : V ⟶ U), (∃ s, T.app _ s = t |_ₕ ι) ∧ x ∈ V :=
65+
iff.rfl
66+
67+
section surjective_on_stalks
68+
69+
variables [limits.has_colimits C] [limits.preserves_filtered_colimits (forget C)]
70+
71+
/-- An equivalent condition for a map of presheaves to be locally surjective
72+
is for all the induced maps on stalks to be surjective. -/
73+
lemma locally_surjective_iff_surjective_on_stalks (T : ℱ ⟶ 𝒢) :
74+
is_locally_surjective T ↔
75+
∀ (x : X), function.surjective ((stalk_functor C x).map T) :=
76+
begin
77+
split; intro hT,
78+
{ /- human proof:
79+
Let g ∈ Γₛₜ 𝒢 x be a germ. Represent it on an open set U ⊆ X
80+
as ⟨t, U⟩. By local surjectivity, pass to a smaller open set V
81+
on which there exists s ∈ Γ_ ℱ V mapping to t |_ V.
82+
Then the germ of s maps to g -/
83+
84+
-- Let g ∈ Γₛₜ 𝒢 x be a germ.
85+
intros x g,
86+
-- Represent it on an open set U ⊆ X as ⟨t, U⟩.
87+
obtain ⟨U, hxU, t, rfl⟩ := 𝒢.germ_exist x g,
88+
-- By local surjectivity, pass to a smaller open set V
89+
-- on which there exists s ∈ Γ_ ℱ V mapping to t |_ V.
90+
rcases hT U t x hxU with ⟨V, ι, ⟨s, h_eq⟩, hxV⟩,
91+
92+
-- Then the germ of s maps to g.
93+
use ℱ.germ ⟨x, hxV⟩ s,
94+
convert stalk_functor_map_germ_apply V ⟨x, hxV⟩ T s,
95+
96+
simpa [h_eq] using germ_res_apply 𝒢 ι ⟨x,hxV⟩ t, },
97+
98+
{ /- human proof:
99+
Let U be an open set, t ∈ Γ ℱ U a section, x ∈ U a point.
100+
By surjectivity on stalks, the germ of t is the image of
101+
some germ f ∈ Γₛₜ ℱ x. Represent f on some open set V ⊆ X as ⟨s, V⟩.
102+
Then there is some possibly smaller open set x ∈ W ⊆ V ∩ U on which
103+
we have T(s) |_ W = t |_ W. -/
104+
intros U t x hxU,
105+
set t_x := 𝒢.germ ⟨x, hxU⟩ t with ht_x,
106+
obtain ⟨s_x, hs_x : ((stalk_functor C x).map T) s_x = t_x⟩ := hT x t_x,
107+
obtain ⟨V, hxV, s, rfl⟩ := ℱ.germ_exist x s_x,
108+
-- rfl : ℱ.germ x s = s_x
109+
have key_W := 𝒢.germ_eq x hxV hxU (T.app _ s) t
110+
(by { convert hs_x,
111+
symmetry,
112+
convert stalk_functor_map_germ_apply _ _ _ s, }),
113+
obtain ⟨W, hxW, hWV, hWU, h_eq⟩ := key_W,
114+
115+
refine ⟨W, hWU, ⟨ℱ.map hWV.op s, _⟩, hxW⟩,
116+
convert h_eq,
117+
simp only [← comp_apply, T.naturality], },
118+
end
119+
120+
end surjective_on_stalks
121+
122+
end locally_surjective
123+
124+
end Top.presheaf

0 commit comments

Comments
 (0)