|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Raphael Douglas Giles. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Raphael Douglas Giles |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Topology.LocallyFinsupp |
| 9 | +public import Mathlib.Topology.Spectral.Basic |
| 10 | + |
| 11 | +/-! |
| 12 | +# Pushforward of functions with locally finite support |
| 13 | +
|
| 14 | +In this file we define the notion of the pushforward of a function with locally finite support |
| 15 | +between prespectral spaces along a spectral map. This is used for defining the (proper) pushforward |
| 16 | +of algebraic cycles in algebraic geometry. |
| 17 | +
|
| 18 | +## Main declarations |
| 19 | +
|
| 20 | +- `Function.locallyFinsupp.map`: If `f : X → Y` is a spectral map between spectral spaces and |
| 21 | + `c : X → R` is locally of finite support, the pushforward of `c` along `f` at `y : Y` is |
| 22 | + `∑ᶠ x ∈ f ⁻¹' {y}, c x * w x`, where `w : X → R` is a weight function. |
| 23 | +
|
| 24 | +## Notes |
| 25 | +
|
| 26 | +In the case of algebraic cycles, the weight function used in `Function.locallyFinsupp.map` will be |
| 27 | +specialized to the degree of the residue field extension |
| 28 | +(see https://stacks.math.columbia.edu/tag/02R4). |
| 29 | +-/ |
| 30 | + |
| 31 | +@[expose] public section |
| 32 | + |
| 33 | +open Set Order Topology TopologicalSpace |
| 34 | + |
| 35 | +variable {X Y R : Type*} [TopologicalSpace X] [TopologicalSpace Y] |
| 36 | + {f : X → Y} (hf : IsSpectralMap f) (w : X → R) |
| 37 | + |
| 38 | +namespace Function.locallyFinsupp |
| 39 | + |
| 40 | +variable [Semiring R] {W : Set Y} (hW : IsOpen W) (c : Function.locallyFinsupp X R) |
| 41 | + [PrespectralSpace Y] |
| 42 | + |
| 43 | +variable (f) in |
| 44 | +/-- |
| 45 | +The pushforward of a function `c` of locally finite support by a spectral map with respect to a |
| 46 | +weight function `w`. |
| 47 | +-/ |
| 48 | +noncomputable |
| 49 | +def map (hf : IsSpectralMap f) (c : locallyFinsupp X R) : Function.locallyFinsupp Y R where |
| 50 | + toFun z := ∑ᶠ x ∈ f ⁻¹' {z}, c x * w x |
| 51 | + supportWithinDomain' := by simp |
| 52 | + supportLocallyFiniteWithinDomain' y _ := by |
| 53 | + obtain ⟨U, hU⟩ := (PrespectralSpace.isTopologicalBasis (X := Y)).exists_subset_of_mem_open |
| 54 | + (by simp : y ∈ ⊤) (by simp) |
| 55 | + refine ⟨U, IsOpen.mem_nhds hU.1.1 hU.2.1, ?_⟩ |
| 56 | + suffices h : (U ∩ {z | (f ⁻¹' {z} ∩ support ⇑c).Nonempty}).Finite by |
| 57 | + refine h.subset (inter_subset_inter_right U fun y hy ↦ ?_) |
| 58 | + obtain ⟨x, (hx : f x = y), h'⟩ := exists_ne_zero_of_finsum_mem_ne_zero hy |
| 59 | + use x |
| 60 | + grind [mem_support] |
| 61 | + suffices (f ⁻¹' (U ∩ {z | (f ⁻¹' {z} ∩ c.support).Nonempty}) ∩ c.support).Finite from |
| 62 | + (this.image f).subset (fun a ha ↦ by grind [Set.Nonempty]) |
| 63 | + exact (c.locallyFiniteSupport.finite_inter_support_of_isCompact <| hf.2 hU.1.1 hU.1.2).subset |
| 64 | + (by simp; grind) |
| 65 | + |
| 66 | +@[simp] |
| 67 | +lemma map_apply (hf : IsSpectralMap f) (c : locallyFinsupp X R) (y : Y) : |
| 68 | + map f w hf c y = ∑ᶠ x ∈ f ⁻¹' {y}, c x * w x := rfl |
| 69 | + |
| 70 | +lemma support_map_subset_of_forall_mem (s : Set X) (t : Set Y) (hc : c.support ⊆ s) |
| 71 | + (h : ∀ x : X, x ∈ s → w x ≠ 0 → f x ∈ t) : (map f w hf c).support ⊆ t := by |
| 72 | + intro y hy |
| 73 | + obtain ⟨x, (rfl : f x = y), h'⟩ := exists_ne_zero_of_finsum_mem_ne_zero hy |
| 74 | + grind [mem_support] |
| 75 | + |
| 76 | +@[simp] |
| 77 | +lemma map_id [PrespectralSpace X] (hw : ∀ z : X, w z = 1) : |
| 78 | + map id w isSpectralMap_id c = c := by |
| 79 | + ext |
| 80 | + simp [map, hw] |
| 81 | + |
| 82 | +end Function.locallyFinsupp |
0 commit comments