Documentation

TauCeti.AlgebraicGeometry.Curves.StableReduction.NumericalType.Basic

Numerical types and their signed genus #

A numerical type is the combinatorial shadow of the special fibre of a proper regular model of a curve over a discrete valuation ring: a finite nonempty set of components carrying multiplicities mᵢ, weights wᵢ (the degrees of the constant fields of the components over the residue field) and genera gᵢ, together with a symmetric matrix of intersection numbers A = (aᵢⱼ) whose off-diagonal entries are nonnegative, whose associated graph is connected, which is killed by the multiplicity vector, and whose i-th row is divisible by wᵢ.

This file introduces that structure, its positivity and connectedness API, its reindexing along an equivalence of component sets, equivalences of numerical types, and its signed genus

g(T) = 1 + ∑ᵢ mᵢ (wᵢ (gᵢ - 1) - aᵢᵢ / 2).

The arithmetic subtlety in the genus formula is that the individual half-diagonals aᵢᵢ / 2 need not be integers, so the halving may only be performed once, on the whole sum. That this is legitimate is TauCeti.NumericalType.even_sum_multiplicity_mul_diagonal: pairing the fibre relation against the multiplicity vector gives ∑ᵢⱼ mᵢ mⱼ aᵢⱼ = 0, and for a symmetric integer matrix that forces ∑ᵢ mᵢ aᵢᵢ to be even (Matrix.IsSymm.even_sum_mul_diag_of_dotProduct_mulVec_eq_zero).

Main definitions #

Main results #

Implementation notes #

Abstract numerical types can have negative genus, so arithmeticGenus lands in ℤ rather than ℕ; the genus-zero variant of twoComponentWeightTwoExample in Picard/WeightedExample.lean has genus -1. Nor may the halving be distributed over the sum: oddDiagonalExample has odd diagonal entries.

Symmetry of the intersection matrix is recorded through Mathlib's Matrix.IsSymm rather than as a bare pointwise equation, so that a reindexed matrix inherits it from Matrix.IsSymm.submatrix.

The no-disconnected-cut criterion in the other direction, which is what discharges the connected field when a numerical type is built, has to be available before the type exists, so it is stated for a bare matrix: Matrix.forall_reflTransGen_ne_and_pos_iff in TauCeti.LinearAlgebra.Matrix.Connected, which this file re-exports.

structure TauCeti.NumericalType :
Type (u + 1)

A numerical type, in the sense of Stacks, Tag 0C6Z.

multiplicity i and weight i are the multiplicity of the i-th component of the special fibre of a proper regular model and the degree of its constant field over the residue field, and genus i is its arithmetic genus over that constant field, not the genus of its normalization. The matrix intersection records the intersection numbers of the components.

Instances For

    Intersection numbers of a numerical type commute.

    Connectedness of the intersection graph #

    Two components of a numerical type are adjacent when they are distinct and meet.

    Equations
    Instances For
      @[simp]
      theorem TauCeti.NumericalType.adj_iff (T : NumericalType) {i j : T.Component} :
      T.Adj i j ↔ i ≠ j ∧ 0 < T.intersection i j

      Unfolding of TauCeti.NumericalType.Adj.

      theorem TauCeti.NumericalType.Adj.symm {T : NumericalType} {i j : T.Component} (h : T.Adj i j) :
      T.Adj j i

      Adjacency is a symmetric relation.

      theorem TauCeti.NumericalType.exists_mem_notMem_adj (T : NumericalType) (s : Set T.Component) (hne : s.Nonempty) (hs : s ≠ Set.univ) :
      ∃ i ∈ s, ∃ j ∉ s, T.Adj i j

      Every nonempty proper set of components of a numerical type meets its complement: this is the no-disconnected-cut form of the connectedness axiom.

      @[simp]

      The fibre relation in matrix form: the multiplicity vector lies in the kernel of the intersection matrix.

      @[simp]

      The fibre relation in row-vector form: the multiplicity vector lies in the kernel of the intersection matrix.

      Self-intersections #

      Off the diagonal, multiplicity-weighted intersection numbers are nonnegative.

      The fibre relation with the diagonal term isolated.

      Self-intersections in a numerical type are nonpositive.

      theorem TauCeti.NumericalType.exists_adj (T : NumericalType) (h : 1 < Fintype.card T.Component) (i : T.Component) :
      ∃ (j : T.Component), T.Adj i j

      In a numerical type with more than one component, every component meets some other one.

      In a numerical type with more than one component, self-intersections are negative.

      theorem TauCeti.NumericalType.exists_intersection_self_eq (T : NumericalType) (h : 1 < Fintype.card T.Component) (i : T.Component) :
      ∃ (k : ℕ), 1 ≤ k ∧ T.intersection i i = -(↑k * ↑↑(T.weight i))

      With more than one component, every self-intersection is a negative multiple of the weight.

      Bounds at the neighbours of a component #

      The multiplicity-weighted intersection number mᵢaᵢⱼ is bounded by the weighted self-intersection mⱼ|aⱼⱼ| of the second component (Stacks, Tag 0C9U).

      theorem TauCeti.NumericalType.multiplicity_mul_weight_le_of_pos (T : NumericalType) {i j : T.Component} (hij : 0 < T.intersection i j) :
      ↑↑(T.multiplicity i) * ↑↑(T.weight i) ≤ ↑↑(T.multiplicity j) * |T.intersection j j|

      If two components meet, the multiplicity times the weight of the first is bounded by the weighted self-intersection of the second (Stacks, Tag 0C9U).

      Numerical types with one component #

      A numerical type with a single component has zero intersection matrix (Stacks, Tag 0C73).

      A numerical type with a component of nonzero self-intersection has more than one component.

      Integrality of the signed genus #

      The multiplicity-weighted sum of the self-intersections of a numerical type is even.

      This is what makes the halving in the genus formula exact; the individual terms mᵢ aᵢᵢ need not be even, as oddDiagonalExample shows. The fibre relation says that the intersection matrix kills the multiplicity vector, so this is an instance of Matrix.IsSymm.even_sum_mul_diag_of_dotProduct_mulVec_eq_zero.

      The signed genus #

      The signed genus of a numerical type, g(T) = 1 + ∑ᵢ mᵢ (wᵢ (gᵢ - 1) - aᵢᵢ / 2) (compare Stacks, Tag 0C71).

      The halving is performed once, on the whole sum ∑ᵢ mᵢ aᵢᵢ, which is even by even_sum_multiplicity_mul_diagonal; the individual half-diagonals need not be integers. Abstract numerical types can have negative genus, so the value is an integer, not a natural number.

      Equations
      Instances For
        theorem TauCeti.NumericalType.arithmeticGenus_def (T : NumericalType) :
        T.arithmeticGenus = 1 + ∑ i : T.Component, ↑↑(T.multiplicity i) * ↑↑(T.weight i) * (↑(T.genus i) - 1) - (∑ i : T.Component, ↑↑(T.multiplicity i) * T.intersection i i) / 2

        The defining formula of the signed genus, with the halving performed once on the whole sum ∑ᵢ mᵢ aᵢᵢ.

        theorem TauCeti.NumericalType.two_mul_arithmeticGenus (T : NumericalType) :
        2 * T.arithmeticGenus = 2 + 2 * ∑ i : T.Component, ↑↑(T.multiplicity i) * ↑↑(T.weight i) * (↑(T.genus i) - 1) - ∑ i : T.Component, ↑↑(T.multiplicity i) * T.intersection i i

        The genus formula with the halving cleared, which is the shape in which it is used.

        The signed genus of a numerical type with a single component i is 1 + mᵢwᵢ(gᵢ - 1) (Stacks, Tag 0C73).

        Reindexing #

        The numerical type obtained by transporting the component set along an equivalence.

        The finiteness and decidable equality of the new component set are transported along the equivalence, so the target needs no instances of its own and may live in any universe.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem TauCeti.NumericalType.reindex_eq (T : NumericalType) {T' : NumericalType} (e : T.Component ≃ T'.Component) (hm : ∀ (i : T.Component), T'.multiplicity (e i) = T.multiplicity i) (hw : ∀ (i : T.Component), T'.weight (e i) = T.weight i) (hA : ∀ (i j : T.Component), T'.intersection (e i) (e j) = T.intersection i j) (hg : ∀ (i : T.Component), T'.genus (e i) = T.genus i) :
          T.reindex e = T'

          Numerical types are determined by their multiplicity, weight, intersection and genus data: an equivalence of component sets matching all four identifies the two types. As the component set is a field rather than a parameter, this is the extensionality principle for numerical types; the instance fields are subsingletons and the remaining fields are proofs.

          @[simp]

          Multiplicities of a reindexed numerical type.

          @[simp]
          theorem TauCeti.NumericalType.reindex_weight (T : NumericalType) {C : Type v} (e : T.Component ≃ C) (c : C) :
          (T.reindex e).weight c = T.weight (e.symm c)

          Weights of a reindexed numerical type.

          @[simp]
          theorem TauCeti.NumericalType.reindex_genus (T : NumericalType) {C : Type v} (e : T.Component ≃ C) (c : C) :
          (T.reindex e).genus c = T.genus (e.symm c)

          Component genera of a reindexed numerical type.

          @[simp]
          theorem TauCeti.NumericalType.reindex_intersection (T : NumericalType) {C : Type v} (e : T.Component ≃ C) (c d : C) :
          (T.reindex e).intersection c d = T.intersection (e.symm c) (e.symm d)

          Intersection numbers of a reindexed numerical type.

          @[simp]

          Reindexing along the identity equivalence changes nothing.

          @[simp]
          theorem TauCeti.NumericalType.reindex_reindex (T : NumericalType) {C : Type v} (e : T.Component ≃ C) {D : Type w} (f : C ≃ D) :
          (T.reindex e).reindex f = T.reindex (e.trans f)

          Reindexing twice is reindexing along the composite equivalence.

          @[simp]

          The signed genus does not depend on the chosen indexing of the components.

          Equivalence of numerical types #

          An equivalence of numerical types, in the sense of Stacks, Tag 0C6Z: a bijection of component sets matching multiplicities, weights, intersection numbers and genera. Two numerical types are equivalent when Nonempty (T.Equiv T').

          Instances For
            theorem TauCeti.NumericalType.Equiv.ext {T : NumericalType} {T' : NumericalType} {x y : T.Equiv T'} (toEquiv : x.toEquiv = y.toEquiv) :
            x = y

            The identity equivalence of a numerical type.

            Equations
            Instances For

              The inverse of an equivalence of numerical types.

              Equations
              • f.symm = { toEquiv := f.toEquiv.symm, multiplicity_apply := ⋯, weight_apply := ⋯, intersection_apply := ⋯, genus_apply := ⋯ }
              Instances For
                @[simp]

                The bijection underlying the inverse is the inverse bijection.

                def TauCeti.NumericalType.Equiv.trans {T : NumericalType} {T' : NumericalType} {T'' : NumericalType} (f : T.Equiv T') (g : T'.Equiv T'') :
                T.Equiv T''

                The composite of two equivalences of numerical types.

                Equations
                • f.trans g = { toEquiv := f.toEquiv.trans g.toEquiv, multiplicity_apply := ⋯, weight_apply := ⋯, intersection_apply := ⋯, genus_apply := ⋯ }
                Instances For
                  @[simp]

                  The bijection underlying a composite is the composite bijection.

                  @[simp]

                  The inverse of the identity equivalence is the identity.

                  @[simp]

                  Inverting an equivalence of numerical types twice returns it.

                  @[simp]

                  The identity equivalence is a left unit for composition.

                  @[simp]

                  The identity equivalence is a right unit for composition.

                  @[simp]

                  An equivalence of numerical types composed with its inverse is the identity.

                  @[simp]

                  The inverse of an equivalence of numerical types composed with it is the identity.

                  @[simp]
                  theorem TauCeti.NumericalType.Equiv.trans_assoc {T : NumericalType} {T' : NumericalType} {T'' : NumericalType} {T''' : NumericalType} (f : T.Equiv T') (g : T'.Equiv T'') (h : T''.Equiv T''') :
                  (f.trans g).trans h = f.trans (g.trans h)

                  Composition of equivalences of numerical types is associative.

                  An equivalence of numerical types identifies the target with the reindexed source.

                  Equivalent numerical types have the same signed genus.

                  A numerical type is equivalent to each of its reindexings, along the reindexing equivalence.

                  Equations
                  • T.equivReindex e = { toEquiv := e, multiplicity_apply := ⋯, weight_apply := ⋯, intersection_apply := ⋯, genus_apply := ⋯ }
                  Instances For
                    @[simp]

                    The bijection underlying TauCeti.NumericalType.equivReindex is the reindexing equivalence.

                    Two numerical types are equivalent exactly when one is a reindexing of the other.

                    Worked examples #