|
| 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.AlgebraicGeometry.Morphisms.QuasiCompact |
| 9 | +public import Mathlib.AlgebraicGeometry.Properties |
| 10 | +public import Mathlib.Topology.LocallyFinsupp.Pushforward |
| 11 | +public import Mathlib.AlgebraicGeometry.ResidueField |
| 12 | + |
| 13 | +/-! |
| 14 | +# Algebraic Cycles |
| 15 | +
|
| 16 | +In this file we define algebraic cycles on a scheme `X` with coefficients in a type `R` and provide |
| 17 | +some basic API for working with them. We define an algebraic cycle on a scheme `X` with |
| 18 | +coefficients in a type `R` to be functions `c : X → R` whose support is locally finite. |
| 19 | +
|
| 20 | +## Implementation notes |
| 21 | +
|
| 22 | +Here we're making use of the equivalence between irreducible closed subsets of a scheme and their |
| 23 | +generic points in order to reuse the API in `Function.locallyFinsupp`, hence the slightly |
| 24 | +nonstandard definition. |
| 25 | +-/ |
| 26 | + |
| 27 | +@[expose] public section |
| 28 | + |
| 29 | +namespace AlgebraicGeometry |
| 30 | + |
| 31 | +open CategoryTheory |
| 32 | + |
| 33 | +universe u v |
| 34 | +variable {X Y : Scheme.{u}} {R : Type*} |
| 35 | + |
| 36 | +/-- |
| 37 | +Algebraic cycle on a scheme `X` with coefficients in a type `Z` is just a function from `X` to `Z` |
| 38 | +with locally finite support (see the module docstring for more details). |
| 39 | +
|
| 40 | +Note: currently this is an abbrev to save some effort in duplicating API. This seems fine for now, |
| 41 | +but be aware of this if there is ever an instance clash involving algebraic cycles. |
| 42 | +-/ |
| 43 | +@[stacks 02QR] |
| 44 | +abbrev AlgebraicCycle (X : Scheme.{u}) (R : Type*) [Zero R] := |
| 45 | + Function.locallyFinsupp X R |
| 46 | + |
| 47 | +variable (f : X ⟶ Y) [Semiring R] (c : AlgebraicCycle X R) (x : X) (z : Y) |
| 48 | +namespace AlgebraicCycle |
| 49 | + |
| 50 | +/-- |
| 51 | +Implementation detail for `AlgebraicCycle.map`: function used to define the coefficient of the |
| 52 | +pushforward of a cycle `c` at a point `z = f x`. |
| 53 | +-/ |
| 54 | +@[stacks 02R3] |
| 55 | +noncomputable def mapCoeff {N : Type*} [DecidableEq N] {Y : Scheme} (f : X ⟶ Y) (wx : X → N) |
| 56 | + (wy : Y → N) (x : X) : ℕ := if wx x = wy (f.base x) then f.residueDegree x else 0 |
| 57 | + |
| 58 | +/-- |
| 59 | +The pushforward of algebraic cycles with respect to a quasicompact morphism of schemes. The |
| 60 | +arguments `wx` and `wy` are certain weight functions used to calculate how the weights of the |
| 61 | +algebraic cycle should be adjusted to make the pushforward operation functorial. Typically in |
| 62 | +applications these will be some notions of dimension or codimension. The most common notion of |
| 63 | +dimension is `Order.height`, and the most common notion of codimension is `Order.coheight`, though |
| 64 | +more sophisticated notions exist in the literature which are useful when sufficient |
| 65 | +equidimensionality hypotheses cannot be assumed. |
| 66 | +-/ |
| 67 | +@[stacks 02R3] |
| 68 | +noncomputable |
| 69 | +def map [QuasiCompact f] {N : Type*} [DecidableEq N] (wx : X → N) (wy : Y → N) |
| 70 | + (c : AlgebraicCycle X R) : AlgebraicCycle Y R := |
| 71 | + Function.locallyFinsupp.map f (Nat.cast (R := R) <| mapCoeff f wx wy ·) f.isSpectralMap c |
| 72 | + |
| 73 | +@[simp] |
| 74 | +lemma map_id {N : Type*} [DecidableEq N] (wx : X → N) (c : AlgebraicCycle X R) : |
| 75 | + map (𝟙 _) wx wx c = c := by |
| 76 | + apply Function.locallyFinsupp.map_id |
| 77 | + simp [mapCoeff] |
| 78 | + |
| 79 | +end AlgebraicGeometry.AlgebraicCycle |
0 commit comments