Documentation

Mathlib.Analysis.Meromorphic.Divisor.Basic

Divisors on subsets of normed fields #

This file defines divisors, a standard book-keeping tool in complex analysis used to keep track of pole/vanishing orders of meromorphic objects, typically functions or differential forms. It provides supporting API and establishes divisors as an instance of a lattice ordered commutative group.

Throughout the present file, ๐•œ denotes a nontrivially normed field, and U a subset of ๐•œ.

TODOs #

Definition, coercion to functions and basic extensionality lemmas #

A divisor on U is a function ๐•œ โ†’ โ„ค whose support is discrete within U and entirely contained within U. The theorem supportDiscreteWithin_iff_locallyFiniteWithin shows that this is equivalent to the textbook definition, which requires the support of f to be locally finite within U.

structure DivisorOn {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] (U : Set ๐•œ) :
Type u_1

A divisor on U is a triple specified below.

Instances For
    def Divisor (๐•œ : Type u_2) [NontriviallyNormedField ๐•œ] :
    Type u_2

    A divisor is a divisor on โŠค : Set ๐•œ.

    Equations
    Instances For
      theorem supportDiscreteWithin_iff_locallyFiniteWithin {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {f : ๐•œ โ†’ โ„ค} (h : Function.support f โŠ† U) :
      f =แถ [Filter.codiscreteWithin U] 0 โ†” โˆ€ z โˆˆ U, โˆƒ t โˆˆ nhds z, (t โˆฉ Function.support f).Finite

      The condition supportDiscreteWithinU in a divisor is equivalent to saying that the support is locally finite near every point of U.

      instance DivisorOn.instFunLikeInt {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
      FunLike (DivisorOn U) ๐•œ โ„ค

      Divisors are FunLike: the coercion from divisors to functions is injective.

      Equations
      @[reducible, inline]
      abbrev DivisorOn.support {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) :
      Set ๐•œ

      This allows writing D.support instead of Function.support D

      Equations
      Instances For
        theorem DivisorOn.supportWithinDomain {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) :
        theorem DivisorOn.supportDiscreteWithinDomain {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) :
        theorem DivisorOn.ext {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {Dโ‚ Dโ‚‚ : DivisorOn U} (h : โˆ€ (a : ๐•œ), Dโ‚ a = Dโ‚‚ a) :
        Dโ‚ = Dโ‚‚
        theorem DivisorOn.coe_injective {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
        Function.Injective fun (x : DivisorOn U) => โ‡‘x

        Elementary properties of the support #

        @[simp]
        theorem DivisorOn.apply_eq_zero_of_not_mem {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {z : ๐•œ} (D : DivisorOn U) (hz : z โˆ‰ U) :
        D z = 0

        Simplifier lemma: A divisor on U evaluates to zero outside of U.

        theorem DivisorOn.discreteSupport {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) :

        The support of a divisor is discrete.

        theorem DivisorOn.closedSupport {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) (hU : IsClosed U) :

        If U is closed, the the support of a divisor on U is also closed.

        theorem DivisorOn.finiteSupport {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) (hU : IsCompact U) :

        If U is closed, the the support of a divisor on U is finite.

        Lattice ordered group structure #

        This section equips divisors on U with the standard structure of a lattice ordered group, where addition, comparison, min and max of divisors are defined pointwise.

        def DivisorOn.addSubgroup {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] (U : Set ๐•œ) :
        AddSubgroup (๐•œ โ†’ โ„ค)

        Divisors form an additive subgroup of functions ๐•œ โ†’ โ„ค

        Equations
        Instances For
          theorem DivisorOn.memAddSubgroup {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) :
          def DivisorOn.mk_of_mem {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (f : ๐•œ โ†’ โ„ค) (hf : f โˆˆ DivisorOn.addSubgroup U) :

          Assign a divisor to a function in the subgroup

          Equations
          • DivisorOn.mk_of_mem f hf = { toFun := f, supportWithinDomain' := โ‹ฏ, supportDiscreteWithinDomain' := โ‹ฏ }
          Instances For
            @[simp]
            theorem DivisorOn.mk_of_mem_toFun {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (f : ๐•œ โ†’ โ„ค) (hf : f โˆˆ DivisorOn.addSubgroup U) (aโœ : ๐•œ) :
            (mk_of_mem f hf) aโœ = f aโœ
            instance DivisorOn.instZero {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instAdd {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instNeg {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instSub {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instSMulNat {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instSMulInt {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            @[simp]
            theorem DivisorOn.coe_zero {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            โ‡‘0 = 0
            @[simp]
            theorem DivisorOn.coe_add {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (Dโ‚ Dโ‚‚ : DivisorOn U) :
            โ‡‘(Dโ‚ + Dโ‚‚) = โ‡‘Dโ‚ + โ‡‘Dโ‚‚
            @[simp]
            theorem DivisorOn.coe_neg {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) :
            โ‡‘(-D) = -โ‡‘D
            @[simp]
            theorem DivisorOn.coe_sub {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (Dโ‚ Dโ‚‚ : DivisorOn U) :
            โ‡‘(Dโ‚ - Dโ‚‚) = โ‡‘Dโ‚ - โ‡‘Dโ‚‚
            @[simp]
            theorem DivisorOn.coe_nsmul {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) (n : โ„•) :
            โ‡‘(n โ€ข D) = n โ€ข โ‡‘D
            @[simp]
            theorem DivisorOn.coe_zsmul {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} (D : DivisorOn U) (n : โ„ค) :
            โ‡‘(n โ€ข D) = n โ€ข โ‡‘D
            instance DivisorOn.instAddCommGroup {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instLE {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            theorem DivisorOn.le_def {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {Dโ‚ Dโ‚‚ : DivisorOn U} :
            Dโ‚ โ‰ค Dโ‚‚ โ†” โ‡‘Dโ‚ โ‰ค โ‡‘Dโ‚‚
            instance DivisorOn.instLT {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            theorem DivisorOn.lt_def {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {Dโ‚ Dโ‚‚ : DivisorOn U} :
            Dโ‚ < Dโ‚‚ โ†” โ‡‘Dโ‚ < โ‡‘Dโ‚‚
            instance DivisorOn.instMax {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            • DivisorOn.instMax = { max := fun (Dโ‚ Dโ‚‚ : DivisorOn U) => { toFun := fun (z : ๐•œ) => Dโ‚ z โŠ” Dโ‚‚ z, supportWithinDomain' := โ‹ฏ, supportDiscreteWithinDomain' := โ‹ฏ } }
            @[simp]
            theorem DivisorOn.max_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {Dโ‚ Dโ‚‚ : DivisorOn U} {x : ๐•œ} :
            (Dโ‚ โŠ” Dโ‚‚) x = Dโ‚ x โŠ” Dโ‚‚ x
            instance DivisorOn.instMin {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            • DivisorOn.instMin = { min := fun (Dโ‚ Dโ‚‚ : DivisorOn U) => { toFun := fun (z : ๐•œ) => Dโ‚ z โŠ“ Dโ‚‚ z, supportWithinDomain' := โ‹ฏ, supportDiscreteWithinDomain' := โ‹ฏ } }
            @[simp]
            theorem DivisorOn.min_def {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} {Dโ‚ Dโ‚‚ : DivisorOn U} {x : ๐•œ} :
            (Dโ‚ โŠ“ Dโ‚‚) x = Dโ‚ x โŠ“ Dโ‚‚ x
            instance DivisorOn.instLattice {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :
            Equations
            instance DivisorOn.instOrderedAddCommGroup {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U : Set ๐•œ} :

            Divisors form an ordered commutative group

            Equations

            Restriction #

            noncomputable def DivisorOn.restrict {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (D : DivisorOn U) (h : V โŠ† U) :

            If V is a subset of U, then a divisor on U restricts to a divisor in V by setting its values to zero outside of V.

            Equations
            • D.restrict h = { toFun := fun (z : ๐•œ) => if hz : z โˆˆ V then D z else 0, supportWithinDomain' := โ‹ฏ, supportDiscreteWithinDomain' := โ‹ฏ }
            Instances For
              theorem DivisorOn.restrict_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (D : DivisorOn U) (h : V โŠ† U) (z : ๐•œ) :
              (D.restrict h) z = if z โˆˆ V then D z else 0
              theorem DivisorOn.restrict_eqOn {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (D : DivisorOn U) (h : V โŠ† U) :
              Set.EqOn (โ‡‘(D.restrict h)) (โ‡‘D) V
              theorem DivisorOn.restrict_eqOn_compl {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (D : DivisorOn U) (h : V โŠ† U) :
              Set.EqOn (โ‡‘(D.restrict h)) 0 Vแถœ
              noncomputable def DivisorOn.restrictMonoidHom {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (h : V โŠ† U) :

              Restriction as a group morphism

              Equations
              Instances For
                @[simp]
                theorem DivisorOn.restrictMonoidHom_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (D : DivisorOn U) (h : V โŠ† U) :
                noncomputable def DivisorOn.restrictLatticeHom {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (h : V โŠ† U) :

                Restriction as a lattice morphism

                Equations
                Instances For
                  @[simp]
                  theorem DivisorOn.restrictLatticeHom_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {U V : Set ๐•œ} (D : DivisorOn U) (h : V โŠ† U) :