Documentation

TauCeti.NumberTheory.ModularForms.DiamondOperators

Diamond operators and modular forms with character #

The diamond operators ⟨d⟩ on modular and cusp forms for Γ₁(N), and the nebentypus character spaces M_k(Γ₁(N), χ) and S_k(Γ₁(N), χ) they cut out.

Since Γ₁(N) is normal in Γ₀(N) with quotient (ZMod N)ˣ (via the lower-right entry, the map CongruenceSubgroup.Gamma0Map), slashing by any lift of d ∈ (ZMod N)ˣ is a well-defined linear endomorphism of M_k(Γ₁(N)) and of S_k(Γ₁(N)): the diamond operator ⟨d⟩, packaged as monoid homomorphisms diamondOpHom and diamondOpCuspHom into the endomorphism algebras. The character space modFormCharSpace k χ (resp. cuspFormCharSpace k χ) is the simultaneous χ-eigenspace of the diamond operators, a Submodule of Mathlib's ModularForm — not a new bundled type — and membership in it is equivalent to the classical nebentypus transformation law f ∣[k] γ = χ(d_γ) • f for γ ∈ Γ₀(N) (mem_modFormCharSpace_iff_nebentypus).

Ported from the AINTLIB LeanModularForms project (LeanModularForms/HeckeRIngs/GL2/Gamma1Pair.lean, Chris Birkbeck), realizing Layer 0 of the ModularForms roadmap; the roadmap pins these definitions (eigenspace-in-a-Submodule, not a re-founded slash action with built-in character) and their names. The Hecke pair (Γ₁(N), Δ₁(N)) from the same source file is Layer-2 material and is not ported here.

Main definitions #

Main results #

References #

Slash-transport for Γ₁(N)-invariant functions: if f is invariant under (Gamma1 N).map (mapGL ℝ) and Gamma0Map N g₁ = Gamma0Map N g₂, then f ∣[k] g₁ = f ∣[k] g₂.

The diamond operator ⟨d⟩ on modular forms for Gamma1 N, indexed by d : (ZMod N)ˣ.

Equations
Instances For

    Evaluation of the diamond operator: at any representative g ∈ Γ₀(N) with lower-right entry d, the diamond operator ⟨d⟩ is slashing by g.

    @[simp]
    theorem diamondOp_one {N : ℕ} (k : ℤ) :

    The diamond operator at 1 is the identity.

    theorem diamondOp_mul {N : ℕ} (k : ℤ) (d₁ d₂ : (ZMod N)ˣ) :
    diamondOp k (d₁ * d₂) = diamondOp k d₁ ∘ₗ diamondOp k d₂

    Diamond operators compose: ⟨d₁ * d₂⟩ = ⟨d₁⟩ ∘ ⟨d₂⟩.

    The diamond operator as a monoid homomorphism (ZMod N)ˣ →* Module.End ℂ (...).

    Equations
    Instances For
      @[simp]
      theorem diamondOpHom_apply {N : ℕ} (k : ℤ) (d : (ZMod N)ˣ) :

      The cusp-form diamond operator indexed by d : (ZMod N)ˣ.

      Equations
      Instances For

        Evaluation of the cusp-form diamond operator: at any representative g ∈ Γ₀(N) with lower-right entry d, the diamond operator ⟨d⟩ is slashing by g.

        @[simp]

        The cusp diamond operator at 1 is the identity.

        theorem diamondOpCusp_mul {N : ℕ} (k : ℤ) (d₁ d₂ : (ZMod N)ˣ) :
        diamondOpCusp k (d₁ * d₂) = diamondOpCusp k d₁ ∘ₗ diamondOpCusp k d₂

        Cusp diamond operators compose multiplicatively.

        The cusp-form diamond operator as a monoid homomorphism.

        Equations
        Instances For
          @[simp]
          theorem diamondOpCuspHom_apply {N : ℕ} (k : ℤ) (d : (ZMod N)ˣ) :

          The nebentypus character space S_k(Γ₁(N), χ): cusp forms on which every diamond operator ⟨d⟩ acts by the scalar χ(d).

          Equations
          Instances For
            theorem cuspFormCharSpace_def {N : ℕ} (k : ℤ) (χ : (ZMod N)ˣ →* ℂˣ) :
            cuspFormCharSpace k χ = ⨅ (d : (ZMod N)ˣ), ((diamondOpCuspHom k) d).eigenspace ↑(χ d)

            Defining equation for the sealed cuspFormCharSpace: it is the joint eigenspace of the diamond operators.

            @[simp]

            Membership in S_k(Γ₁(N), χ): f is in the χ-eigenspace iff ⟨d⟩ f = χ(d) • f for every d ∈ (ZMod N)ˣ.

            Diamond operators act by χ(d) on elements of S_k(Γ₁(N), χ). Not @[simp]: χ occurs only in the hypothesis and the right-hand side, so simp cannot infer it.

            A nonzero cusp form determines its nebentypus: the character spaces of two distinct characters meet only in 0, since ⟨d⟩ f = χ(d) • f = χ'(d) • f forces χ(d) = χ'(d).

            The modular-form nebentypus character space M_k(Γ₁(N), χ).

            Equations
            Instances For
              theorem modFormCharSpace_def {N : ℕ} (k : ℤ) (χ : (ZMod N)ˣ →* ℂˣ) :
              modFormCharSpace k χ = ⨅ (d : (ZMod N)ˣ), ((diamondOpHom k) d).eigenspace ↑(χ d)

              Defining equation for the sealed modFormCharSpace: it is the joint eigenspace of the diamond operators.

              @[simp]

              Membership in M_k(Γ₁(N), χ): f is in the χ-eigenspace iff ⟨d⟩ f = χ(d) • f for every d ∈ (ZMod N)ˣ.

              Diamond operators act by χ(d) on elements of M_k(Γ₁(N), χ). Not @[simp]: χ occurs only in the hypothesis and the right-hand side, so simp cannot infer it.

              Bridge: for a Gamma1-invariant modular form f, membership in the diamond-eigenspace modFormCharSpace k χ₀ is equivalent to the classical nebentypus relation f ∣[k] g = χ₀(d_g) • f for all g ∈ Γ₀(N).

              theorem slash_mapGL_eq_self_of_comp_of_mem_modFormCharSpace {k : ℤ} {M N : ℕ} (hMN : M ∣ N) {χ : (ZMod N)ˣ →* ℂˣ} {χ₀ : (ZMod M)ˣ →* ℂˣ} (hcomp : χ = χ₀.comp (ZMod.unitsMap hMN)) {f : ModularForm (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℝ) (CongruenceSubgroup.Gamma1 N)) k} (hf : f ∈ modFormCharSpace k χ) {β : Matrix.SpecialLinearGroup (Fin 2) ℤ} (hβ : β ∈ CongruenceSubgroup.Gamma0 N) (hβ11 : ↑(↑β 1 1) = 1) :

              A matrix of Γ₀(N) whose lower-right entry is 1 modulo a divisor M acts trivially on M_k(Γ₁(N), χ) when χ is pulled back from a character modulo M: its nebentypus value is χ₀ of the lower-right entry modulo M, which is χ₀ 1 = 1.

              Bridge (cusp forms): for a Gamma1-invariant cusp form f, membership in the diamond-eigenspace cuspFormCharSpace k χ₀ is equivalent to the classical nebentypus relation f ∣[k] g = χ₀(d_g) • f for all g ∈ Γ₀(N).

              The diamond operator indexed by a natural number: ⟨n⟩ is diamondOp at the unit n mod N when n is coprime to N, and 0 otherwise.

              This is ⟨n⟩ as Diamond–Shurman §5.3 writes it. Extending the index from (ZMod N)ˣ to ℕ by zero is what lets the Hecke recurrence at a prime power be stated uniformly: the ⟨p⟩ term simply vanishes when p ∣ N, instead of the recurrence needing a separate case.

              Follows diamondOp_n of the AINTLIB LeanModularForms project (HeckeRIngs/GL2/HeckeT_n.lean, https://github.com/CBirkbeck/AINTLIB, commit ce76186b5f61c846d770d2f87eb76ba5b9c9117a, Apache-2.0).

              Equations
              Instances For
                theorem diamondOpNat_of_coprime {N : ℕ} (k : ℤ) {n : ℕ} (h : n.Coprime N) :

                When n is coprime to N, ⟨n⟩ is the diamond operator at the unit n mod N.

                @[simp]
                theorem diamondOpNat_of_not_coprime {N : ℕ} (k : ℤ) {n : ℕ} (h : ¬n.Coprime N) :

                When n is not coprime to N, ⟨n⟩ vanishes. This is the case that lets the prime-power Hecke recurrence be stated without splitting on whether p divides the level.

                The cusp-form diamond operator indexed by a natural number: ⟨n⟩ is diamondOpCusp at the unit n mod N when n is coprime to N, and 0 otherwise — the cusp-form counterpart of diamondOpNat, and the reason the prime Hecke operator on S_k(Γ₁(N)) has one formula at every prime rather than one per divisibility case.

                Equations
                Instances For

                  When n is coprime to N, ⟨n⟩ is the cusp diamond operator at the unit n mod N.

                  @[simp]
                  theorem diamondOpCuspNat_of_not_coprime {N : ℕ} (k : ℤ) {n : ℕ} (h : ¬n.Coprime N) :

                  When n is not coprime to N, ⟨n⟩ vanishes on cusp forms.

                  Slashing by a Γ₀(N) representative with lower-right unit n is the zero-extended diamond operator ⟨n⟩ on modular forms.

                  Slashing by the Bézout twist is the diamond operator ⟨p⟩. The twist is the Γ₀(N) element of lower-right entry p, so this is coe_diamondOp at that representative, transported across the ℚ/ℝ bridge.

                  Slashing by the Bézout twist is the diamond operator ⟨p⟩, on cusp forms.

                  The character spaces under the cusp-form coercion #

                  @[simp]

                  The diamond operator commutes with the coercion S_k(Γ) → M_k(Γ): ⟨d⟩ slashes by a representative of d, which does not see whether a form vanishes at the cusps.

                  A cusp form is a χ-form exactly when the modular form underlying it is. Membership in either character space is the same family of diamond eigenvalue equations, and the coercion is pointwise, so the two conditions transport across it.

                  Not @[simp]: the left-hand side is itself simp-reducible — mem_modFormCharSpace_iff is @[simp] and rewrites it to the diamond eigenvalue equations — so this lemma could never fire as a rewrite rule, and tagging it makes the simpNF linter fail. Use it explicitly, as Parity.lean does.

                  theorem slash_mapGL_eq_self_of_comp_of_mem_cuspFormCharSpace {k : ℤ} {M N : ℕ} (hMN : M ∣ N) {χ : (ZMod N)ˣ →* ℂˣ} {χ₀ : (ZMod M)ˣ →* ℂˣ} (hcomp : χ = χ₀.comp (ZMod.unitsMap hMN)) {f : CuspForm (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℝ) (CongruenceSubgroup.Gamma1 N)) k} (hf : f ∈ cuspFormCharSpace k χ) {β : Matrix.SpecialLinearGroup (Fin 2) ℤ} (hβ : β ∈ CongruenceSubgroup.Gamma0 N) (hβ11 : ↑(↑β 1 1) = 1) :

                  A matrix of Γ₀(N) whose lower-right entry is 1 modulo a divisor M acts trivially on S_k(Γ₁(N), χ) when χ is pulled back from a character modulo M: its nebentypus value is χ₀ of the lower-right entry modulo M, which is χ₀ 1 = 1.

                  noncomputable def cuspToModFormCharSpace {N : ℕ} (k : ℤ) (χ : (ZMod N)ˣ →* ℂˣ) :

                  The inclusion of character spaces along S_k(Γ₁(N)) → M_k(Γ₁(N)). A cusp form lies in S_k(N, χ) exactly when the modular form underlying it lies in M_k(N, χ) (coe_mem_modFormCharSpace_iff), so Mathlib's CuspForm.toModularFormₗ restricts to a map between the character spaces. This is the map along which a statement about modFormCharSpace specialises to cuspFormCharSpace.

                  Equations
                  Instances For
                    @[simp]

                    The inclusion of character spaces is injective: it restricts Mathlib's injective CuspForm.toModularFormₗ.