|
| 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