Documentation

TauCeti.NumberTheory.ModularForms.Degeneracy

The level-raising degeneracy maps V_d #

For a positive integer d, the level-raising (or degeneracy) map V_d sends a function on the upper half-plane to τ ↦ f (d τ). It is the slash action by diag(d, 1), renormalized by d ^ (1 - k) so that no power of d is introduced.

Properties of f transport up to V_d f — the level of the congruence subgroup, the eigenvalue and nebentypus transport, the q-expansion — which is what makes V_d a map of modular forms. Two of them also read back down: the slash transformation law (slash_conjScale_eq_smul_of_slash_scaleGL) and holomorphy (mdifferentiable_of_comp_scaleGL_smul), which is what recognizes a bare function as a form at the lower level. The q-expansion results go up only.

Main definitions #

Main results #

The old subspace of Layer 3 of the ModularForms roadmap is spanned by the images of the V_d, and the conductor statement of Layer 4 is phrased with this normalization of V_d.

References #

The scaling matrix diag(d, 1) #

noncomputable def TauCeti.scaleGL (d : ℕ) [NeZero d] :
GL (Fin 2) ℝ

The diagonal element !![d, 0; 0, 1] of GL(2, ℝ), for d a nonzero natural number. Slashing by it is, up to the normalizing scalar d ^ (1 - k), the level-raising operator V_d.

Equations
Instances For
    @[simp]
    theorem TauCeti.coe_scaleGL {d : ℕ} [NeZero d] :
    ↑(scaleGL d) = !![↑d, 0; 0, 1]
    noncomputable def TauCeti.scaleGLRat (d : ℕ) [NeZero d] :
    GL (Fin 2) ℚ

    diag(d, 1) over ℚ. scaleGL is stated over ℝ, where the slash action lives, but the cusp argument needs the same matrix over ℚ, because what makes diag(d, 1)⁻¹ · A carry cusps to cusps is precisely that it is rational.

    Equations
    Instances For
      theorem TauCeti.coe_inv_scaleGL {d : ℕ} [NeZero d] :
      ↑(scaleGL d)⁻¹ = !![(↑d)⁻¹, 0; 0, 1]
      @[simp]
      @[simp]
      theorem TauCeti.coe_scaleGL_smul {d : ℕ} [NeZero d] (τ : UpperHalfPlane) :
      ↑(scaleGL d • τ) = ↑d * ↑τ
      @[simp]
      theorem TauCeti.coe_inv_scaleGL_smul {d : ℕ} [NeZero d] (τ : UpperHalfPlane) :
      ↑((scaleGL d)⁻¹ • τ) = ↑τ / ↑d

      Scaling down divides the argument.

      @[simp]
      theorem TauCeti.inv_scaleGL_smul_vadd {d : ℕ} [NeZero d] (a : ℝ) (τ : UpperHalfPlane) :
      (scaleGL d)⁻¹ • (a +ᵥ τ) = a / ↑d +ᵥ (scaleGL d)⁻¹ • τ

      Scaling down commutes with translation, at the cost of dividing the shift by d.

      @[simp]
      theorem TauCeti.scaleGL_mul (d e : ℕ) [NeZero d] [NeZero e] :
      theorem TauCeti.slash_scaleGL_apply {d : ℕ} [NeZero d] (k : ℤ) (f : UpperHalfPlane → ℂ) (τ : UpperHalfPlane) :
      SlashAction.map k (scaleGL d) f τ = ↑d ^ (k - 1) * f (scaleGL d • τ)

      Slashing by diag(d, 1) rescales the argument and introduces the factor d ^ (k - 1).

      theorem TauCeti.smul_slash_scaleGL_eq {d : ℕ} [NeZero d] (k : ℤ) (f : UpperHalfPlane → ℂ) :
      ↑d ^ (1 - k) • SlashAction.map k (scaleGL d) f = fun (τ : UpperHalfPlane) => f (scaleGL d • τ)

      The defining formula for V_d, for a bare function: the renormalized slash d ^ (1 - k) • (f ∣[k] diag(d, 1)) is τ ↦ f (d τ), with no stray power of d. This is ModularForm.levelRaise_apply for an f : ℍ → ℂ that is not yet known to be a modular form, which is the situation of the conductor theorem: there the transformation law of f is what is being proved, so f cannot be assumed to carry one.

      Stated between functions rather than pointwise, because that is the form in which a hypothesis ⇑g = d ^ (1 - k) • (f ∣[k] diag(d, 1)) is rewritten; congrFun gives the values. It is not a simp lemma: Pi.smul_apply takes the pointwise left-hand side out of simp-normal form.

      The level-raising operator #

      theorem TauCeti.mem_conjAct_inv_scaleGL_iff {d : ℕ} {𝒢 : Subgroup (GL (Fin 2) ℝ)} [NeZero d] {g : GL (Fin 2) ℝ} :

      Membership in diag(d,1)⁻¹ 𝒢 diag(d,1), spelled out as a conjugation condition.

      theorem TauCeti.le_conjAct_inv_scaleGL_mul {𝒢 𝒢' 𝒢'' : Subgroup (GL (Fin 2) ℝ)} {d e : ℕ} [NeZero d] [NeZero e] (h₁ : 𝒢'' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢') (h₂ : 𝒢' ≤ ConjAct.toConjAct (scaleGL e)⁻¹ • 𝒢) :
      𝒢'' ≤ ConjAct.toConjAct (scaleGL (e * d))⁻¹ • 𝒢

      The conjugation conditions compose: if 𝒢'' is conjugated into 𝒢' by diag(d,1) and 𝒢' into 𝒢 by diag(e,1), then 𝒢'' is conjugated into 𝒢 by diag(de,1).

      theorem TauCeti.le_of_le_conjAct_inv_scaleGL_one {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL 1)⁻¹ • 𝒢) :
      𝒢' ≤ 𝒢

      At d = 1 the conjugation condition is the subgroup inclusion: diag(1, 1) is the identity, so 𝒢' ≤ diag(1, 1)⁻¹ 𝒢 diag(1, 1) says no more than 𝒢' ≤ 𝒢. This is what lets levelRaise_one name its ofLe without carrying a second inclusion hypothesis.

      noncomputable def TauCeti.ModularForm.levelRaise {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) :
      ModularForm 𝒢' k

      The level-raising (degeneracy) operator V_d, (V_d f) τ = f (d τ), as a map from modular forms for 𝒢 to modular forms for a group 𝒢' conjugated into 𝒢 by diag(d, 1).

      Equations
      Instances For
        theorem TauCeti.ModularForm.coe_levelRaise {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) :
        ⇑(levelRaise d h f) = ↑d ^ (1 - k) • SlashAction.map k (scaleGL d) ⇑f
        @[simp]
        theorem TauCeti.ModularForm.levelRaise_apply {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) (τ : UpperHalfPlane) :
        (levelRaise d h f) τ = f (scaleGL d • τ)

        The defining formula for V_d: (V_d f) τ = f (d τ), with no stray power of d. The algebraic properties of V_d all follow from this by ext.

        noncomputable def TauCeti.ModularForm.levelRaiseₗ {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) :

        The level-raising operator, as a ℂ-linear map.

        Equations
        Instances For
          @[simp]
          theorem TauCeti.ModularForm.levelRaiseₗ_apply {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) :
          (levelRaiseₗ d h) f = levelRaise d h f
          theorem TauCeti.ModularForm.levelRaise_injective {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) :

          V_d is injective: f (d τ) determines f, since τ ↦ d τ is a bijection of ℍ.

          theorem TauCeti.ModularForm.levelRaiseₗ_injective {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) :

          V_d is injective as a ℂ-linear map, so its range is a copy of M_k(𝒢) inside M_k(𝒢').

          theorem TauCeti.ModularForm.levelRaise_one_apply {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL 1)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) (τ : UpperHalfPlane) :
          (levelRaise 1 h f) τ = f τ

          V₁ is the restriction map: it changes nothing but the invariance group.

          @[simp]
          theorem ModularForm.levelRaise_one {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] (h : 𝒢' ≤ ConjAct.toConjAct (TauCeti.scaleGL 1)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) :

          V₁ is the restriction map, as forms. The pointwise statement of TauCeti.ModularForm.levelRaise_one_apply, packaged as an equality of modular forms: at d = 1 the level-raising operator is ofLe. This is what lets a statement about V_d be specialised to one about restriction along 𝒢' ≤ 𝒢, rather than reproved for it.

          It is stated in the root ModularForm namespace, beside ModularForm.ofLe, so that dot notation on a ModularForm resolves.

          V₁ at an unchanged level is the identity. When the invariance group stays 𝒢, the level-raising operator at d = 1 fixes every modular form.

          @[simp]
          theorem TauCeti.ModularForm.levelRaise_levelRaise {k : ℤ} {𝒢 𝒢' 𝒢'' : Subgroup (GL (Fin 2) ℝ)} {d e : ℕ} [𝒢'.HasDetOne] [𝒢''.HasDetOne] [NeZero d] [NeZero e] (h₁ : 𝒢'' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢') (h₂ : 𝒢' ≤ ConjAct.toConjAct (scaleGL e)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) :
          levelRaise d h₁ (levelRaise e h₂ f) = levelRaise (e * d) ⋯ f

          The level-raising operators compose: V_d ∘ V_e = V_{de}.

          noncomputable def TauCeti.CuspForm.levelRaise {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :
          CuspForm 𝒢' k

          The level-raising (degeneracy) operator V_d on cusp forms, (V_d f) τ = f (d τ).

          Equations
          Instances For
            theorem TauCeti.CuspForm.coe_levelRaise {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :
            ⇑(levelRaise d h f) = ↑d ^ (1 - k) • SlashAction.map k (scaleGL d) ⇑f
            @[simp]
            theorem TauCeti.CuspForm.levelRaise_apply {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) (τ : UpperHalfPlane) :
            (levelRaise d h f) τ = f (scaleGL d • τ)

            The defining formula for V_d on cusp forms: (V_d f) τ = f (d τ), with no stray power of d.

            noncomputable def TauCeti.CuspForm.levelRaiseₗ {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) :

            The level-raising operator on cusp forms, as a ℂ-linear map.

            Equations
            Instances For
              @[simp]
              theorem TauCeti.CuspForm.levelRaiseₗ_apply {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :
              (levelRaiseₗ d h) f = levelRaise d h f
              theorem TauCeti.CuspForm.levelRaise_injective {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) :

              V_d is injective on cusp forms: f (d τ) determines f, since τ ↦ d τ is a bijection of ℍ.

              theorem TauCeti.CuspForm.levelRaiseₗ_injective {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] [𝒢'.HasDetOne] (d : ℕ) [NeZero d] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) :

              V_d is injective as a ℂ-linear map on cusp forms, so its range is a copy of S_k(𝒢) inside S_k(𝒢'). These ranges are what span the old subspace.

              theorem TauCeti.CuspForm.levelRaise_one_apply {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] (h : 𝒢' ≤ ConjAct.toConjAct (scaleGL 1)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) (τ : UpperHalfPlane) :
              (levelRaise 1 h f) τ = f τ

              V₁ is the restriction map: it changes nothing but the invariance group.

              @[simp]
              theorem CuspForm.levelRaise_one {k : ℤ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] (h : 𝒢' ≤ ConjAct.toConjAct (TauCeti.scaleGL 1)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :

              V₁ is the restriction map, as forms. The pointwise statement of TauCeti.CuspForm.levelRaise_one_apply, packaged as an equality of cusp forms: at d = 1 the level-raising operator is ofLe. This is what lets a statement about V_d be specialised to one about restriction along 𝒢' ≤ 𝒢, rather than reproved for it.

              It is stated in the root CuspForm namespace, beside CuspForm.ofLe, so that dot notation on a CuspForm resolves.

              theorem CuspForm.levelRaise_one_self {k : ℤ} {𝒢 : Subgroup (GL (Fin 2) ℝ)} [𝒢.HasDetOne] (h : 𝒢 ≤ ConjAct.toConjAct (TauCeti.scaleGL 1)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :

              V₁ at an unchanged level is the identity. When the invariance group stays 𝒢, the level-raising operator at d = 1 fixes every cusp form.

              @[simp]
              theorem TauCeti.CuspForm.levelRaise_levelRaise {k : ℤ} {𝒢 𝒢' 𝒢'' : Subgroup (GL (Fin 2) ℝ)} {d e : ℕ} [𝒢'.HasDetOne] [𝒢''.HasDetOne] [NeZero d] [NeZero e] (h₁ : 𝒢'' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢') (h₂ : 𝒢' ≤ ConjAct.toConjAct (scaleGL e)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :
              levelRaise d h₁ (levelRaise e h₂ f) = levelRaise (e * d) ⋯ f

              The level-raising operators compose: V_d ∘ V_e = V_{de}.

              Level transport for the congruence subgroups #

              def TauCeti.conjScale (d : ℕ) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) (c : ℤ) (hc : ↑γ 1 0 = ↑d * c) :

              The diag(d, 1)-conjugate of an integral matrix whose lower-left entry is d * c: the entries are rearranged as (a, b; d c, e) ↦ (a, d b; c, e), which is again integral of determinant one.

              Equations
              Instances For
                @[simp]
                theorem TauCeti.coe_conjScale (d : ℕ) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) (c : ℤ) (hc : ↑γ 1 0 = ↑d * c) :
                ↑(conjScale d γ c hc) = !![↑γ 0 0, ↑d * ↑γ 0 1; c, ↑γ 1 1]
                theorem TauCeti.conjScale_apply_one_one (d : ℕ) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) (c : ℤ) (hc : ↑γ 1 0 = ↑d * c) :
                ↑(conjScale d γ c hc) 1 1 = ↑γ 1 1

                conjScale leaves the lower-right entry alone.

                Conjugation by diag(d, 1) realizes conjScale.

                theorem TauCeti.exists_conjScale_mem_Gamma0_of_dvd (d M N : ℕ) (hdvd : d * M ∣ N) (γ : ↥(CongruenceSubgroup.Gamma0 N)) :
                ∃ (c : ℤ) (hc : ↑↑γ 1 0 = ↑d * c) (hm : conjScale d (↑γ) c hc ∈ CongruenceSubgroup.Gamma0 M), (CongruenceSubgroup.Gamma0Map M).toHomUnits ⟨conjScale d (↑γ) c hc, hm⟩ = (ZMod.unitsMap ⋯) ((CongruenceSubgroup.Gamma0Map N).toHomUnits γ)

                The diag(d, 1)-conjugate of a matrix γ ∈ Γ₀(N) lies in Γ₀(M) whenever d * M ∣ N, and the conjugation leaves the lower-right entry alone: the diamond label of γ is read along the reduction (ZMod N)ˣ → (ZMod M)ˣ.

                Level transport for Γ₁: conjugation by diag(d, 1) carries Γ₁(dM) into Γ₁(M). This is what makes V_d a map M_k(Γ₁(M)) → M_k(Γ₁(dM)).

                Level transport at a divisor. Whenever d * M ∣ N, conjugation by diag(d, 1) carries Γ₁(N) into Γ₁(M): this is what makes V_d a map S_k(Γ₁(M)) → S_k(Γ₁(N)), not only for N = d * M but for every multiple of it.

                Level transport for Γ₀: conjugation by diag(d, 1) carries Γ₀(dM) into Γ₀(M). This is what makes V_d a map M_k(Γ₀(M)) → M_k(Γ₀(dM)).

                Level transport for Γ₀ at a divisor. Whenever d * M ∣ N, conjugation by diag(d, 1) carries Γ₀(N) into Γ₀(M): this is what makes V_d a map S_k(Γ₀(M)) → S_k(Γ₀(N)) for every multiple N of d * M.

                The T-factorisation of Γ₀(N / l) #

                theorem TauCeti.exists_eq_T_zpow_mul_conjScale_mul_T_zpow (l N : ℕ) [NeZero l] (hlN : l ∣ N) (γ' : Matrix.SpecialLinearGroup (Fin 2) ℤ) (hγ' : γ' ∈ CongruenceSubgroup.Gamma0 (N / l)) :
                ∃ (i : ℤ) (j : ℤ) (c : ℤ) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) (hc : ↑γ 1 0 = ↑l * c), γ ∈ CongruenceSubgroup.Gamma0 N ∧ γ' = ModularGroup.T ^ i * conjScale l γ c hc * ModularGroup.T ^ j ∧ ↑γ 1 1 = ↑γ' 1 1 - ↑γ' 1 0 * j

                The T-factorisation of Γ₀(N / l). For l ∣ N, every γ' ∈ Γ₀(N / l) is a product T ^ i * conjScale l γ c * T ^ j for some i, j, c : ℤ and some γ ∈ Γ₀(N) whose lower-left entry factors as γ 1 0 = l * c: the level of γ' can be raised back from N / l to N at the cost of two translations. Since conjScale and the translations all fix the lower-right entry up to the recorded shift, the last conjunct γ 1 1 = γ' 1 1 - γ' 1 0 * j pins the lower-right entry of γ, which is what a nebentypus of level N reads off it.

                Slashing a level-raise, and the transport of the nebentypus #

                Slashing by diag(d, 1) and then by an integral matrix γ whose lower-left entry is divisible by d is slashing by the conjugate matrix conjScale d γ and then by diag(d, 1).

                theorem TauCeti.ModularForm.coe_levelRaise_slash {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) {c : ℤ} (hc : ↑γ 1 0 = ↑d * c) :

                Slashing a level-raise by an integral matrix γ whose lower-left entry is divisible by d is the level-raise of the slash of f by the conjugate matrix conjScale d γ.

                theorem TauCeti.CuspForm.coe_levelRaise_slash {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) {c : ℤ} (hc : ↑γ 1 0 = ↑d * c) :

                Slashing a level-raised cusp form by an integral matrix γ whose lower-left entry is divisible by d is the level-raise of the slash of f by the conjugate matrix conjScale d γ.

                theorem TauCeti.ModularForm.slash_levelRaise_eq_smul {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) {c : ℤ} (hc : ↑γ 1 0 = ↑d * c) {z : ℂ} (hf : SlashAction.map k ((Matrix.SpecialLinearGroup.mapGL ℝ) (conjScale d γ c hc)) ⇑f = z • ⇑f) :

                Eigenvalue transport. If f is an eigenvector of the slash by conjScale d γ with eigenvalue z, then V_d f is an eigenvector of the slash by γ with the same eigenvalue. Applied to γ ∈ Γ₀(dM) this is what transports the nebentypus, in levelRaise_mem_modFormCharSpace.

                theorem TauCeti.CuspForm.slash_levelRaise_eq_smul {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) (γ : Matrix.SpecialLinearGroup (Fin 2) ℤ) {c : ℤ} (hc : ↑γ 1 0 = ↑d * c) {z : ℂ} (hf : SlashAction.map k ((Matrix.SpecialLinearGroup.mapGL ℝ) (conjScale d γ c hc)) ⇑f = z • ⇑f) :

                Eigenvalue transport (cusp forms). If f is an eigenvector of the slash by conjScale d γ with eigenvalue z, then V_d f is an eigenvector of the slash by γ with the same eigenvalue.

                Descending along the level-raise #

                Eigenvalue descent, the converse of ModularForm.slash_levelRaise_eq_smul. If the level-raise of f is an eigenvector of the slash by γ with eigenvalue z, then f itself is an eigenvector of the slash by the conjugate matrix conjScale d γ, with the same eigenvalue.

                Both sides of the hypothesis and of the conclusion scale together, so the normalizing scalar d ^ (1 - k) of V_d cancels and does not appear. Applied to γ ∈ Γ₀(dM), this is what descends a nebentypus through V_d: the level-lowering step of the conductor theorem, where f is only known to be a function and this transformation law is what exhibits it as a form.

                theorem TauCeti.mdifferentiable_of_comp_scaleGL_smul {d : ℕ} [NeZero d] {f : UpperHalfPlane → ℂ} (hf : MDiff fun (τ : UpperHalfPlane) => f (scaleGL d • τ)) :
                MDiff f

                Holomorphy descent. If τ ↦ f (d τ) is holomorphic on ℍ, then so is f. This is UpperHalfPlane.mdifferentiable_comp_smul_iff — holomorphy is invariant under any positive-determinant Möbius action — read at g = diag(d, 1); with smul_slash_scaleGL_eq it descends holomorphy through V_d at every weight.

                The nebentypus character of a level-raise #

                V_d intertwines the diamond operators. For d * M ∣ N, the diamond operator ⟨u⟩ of level N acts on a level-raised form V_d f as the diamond operator of level M at the reduction of u acts on f. Both sides are slashes by a matrix of Γ₀, related by the diag(d, 1)-conjugation, which preserves the lower-right entry.

                The nebentypus of a level-raise. For d * M ∣ N, V_d carries M_k(Γ₁(M), χ) into M_k(Γ₁(N), χ ∘ (ZMod N)ˣ → (ZMod M)ˣ): the character of V_d f at level N is the character of f read along the reduction map. The target level is any multiple of d * M.

                The nebentypus of a level-raise (cusp forms). For d * M ∣ N, V_d carries S_k(Γ₁(M), χ) into S_k(Γ₁(N), χ ∘ (ZMod N)ˣ → (ZMod M)ˣ): the character of V_d f at level N is the character of f read along the reduction map.

                This is the character half only. That V_d f is old is the separate statement TauCeti.levelRaise_mem_cuspFormsOld, which additionally needs M ≠ N and is about the character-free TauCeti.cuspFormsOld N k.

                The nebentypus of a level-raise at the exact level (cusp forms). The N = d * M case of TauCeti.CuspForm.levelRaise_mem_cuspFormCharSpace_of_dvd.

                The Γ₀(N/l)-transformation law of a function whose level-raise carries a nebentypus.

                If the level-raise f ∣[k] V_l is an eigenvector of every γ ∈ Γ₀(N) with eigenvalue the value χ reads off γ, if f is T-periodic, and if χ is trivial on the kernel of the reduction (ZMod N)ˣ → (ZMod (N/l))ˣ, then f itself transforms under each γ' ∈ Γ₀(N / l) by χ u, for any unit u of level N lying over the nebentypus label of γ'.

                The value does not depend on which u is chosen: two such units differ by an element of the kernel of the reduction, on which χ is trivial by hχ — which is exactly what that hypothesis is for. TauCeti.slash_mapGL_eq_self_of_mem_Gamma1_div is the case of trivial label, and TauCeti.cuspFormOfSmulSlashScaleGL_mem_cuspFormCharSpace is the case of a character that factors, so both the descent and the nebentypus of the descended form are instances of this one law rather than separate arguments.

                Γ₁(N/l)-invariance from a nebentypus of level N that factors through N / l.

                If the level-raise f ∣[k] V_l is an eigenvector of every γ ∈ Γ₀(N) with eigenvalue the character value χ reads off γ, if f is T-periodic, and if χ is trivial on the kernel of the reduction (ZMod N)ˣ → (ZMod (N/l))ˣ, then f is invariant under all of Γ₁(N / l).

                This is the step that converts a nebentypus into honest invariance, and it is where the conductor drops: a form whose character already factors through N / l is invariant under all of Γ₁(N / l), the larger congruence subgroup at the lower level, which is what the conductor argument turns into a statement about newforms.

                Adapted from conductor_slash_eq_self_of_mem_Gamma1_div in AINTLIB (Eigenforms/ConductorTheorem.lean:217, Chris Birkbeck, Apache-2.0, commit 2baa76f742bdb4fb8ee323fabba41203bd390e08). The source states it over its own levelRaiseFun and a DirichletCharacter, and routes through a conductor-specific helper; here it is stated over scaleGL and a units-valued character, and assembled from exists_eq_T_zpow_mul_conjScale_mul_T_zpow, slash_zpow_mul_mul_zpow_eq_smul and slash_conjScale_eq_smul_of_slash_scaleGL.

                The nebentypus character of a level restriction #

                The nebentypus of a level restriction. For M ∣ N, reading a form of level M as a form of level N carries M_k(Γ₁(M), χ) into M_k(Γ₁(N), χ ∘ (ZMod N)ˣ → (ZMod M)ˣ): the character is pulled back along the reduction map.

                This is the degeneracy map V₁ at the pair M ∣ N, the one operator the old subspace excludes at M = N; unlike TauCeti.ModularForm.levelRaise_mem_modFormCharSpace, which raises the level to exactly d * M, the target level here is an arbitrary multiple of M.

                Follows restrictSubgroup_mem_modFormCharSpace of the AINTLIB LeanModularForms project (Eigenforms/MainLemma.lean, https://github.com/CBirkbeck/AINTLIB, commit 2baa76f742bdb4fb8ee323fabba41203bd390e08, Apache-2.0).

                The nebentypus of a level restriction (cusp forms). For M ∣ N, reading a cusp form of level M as a cusp form of level N carries S_k(Γ₁(M), χ) into S_k(Γ₁(N), χ ∘ (ZMod N)ˣ → (ZMod M)ˣ). Together with TauCeti.ofLe_mem_cuspFormsOld this places the restriction of a χ-form of proper divisor level inside the old subspace, with a known character.

                The q-expansion of a level-raise #

                Scaling the argument by d raises the local parameter at the cusp ∞ to the d-th power: q(d τ) = q(τ) ^ d.

                theorem TauCeti.ModularForm.qExpansion_levelRaise {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h𝒢 : 1 ∈ 𝒢.strictPeriods) (h𝒢' : 1 ∈ 𝒢'.strictPeriods) (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) :

                The q-expansion of a level-raise. Level-raising substitutes q ↦ q ^ d in the q-expansion, which on power series is PowerSeries.expand d.

                theorem TauCeti.ModularForm.qExpansion_levelRaise_coeff {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h𝒢 : 1 ∈ 𝒢.strictPeriods) (h𝒢' : 1 ∈ 𝒢'.strictPeriods) (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : ModularForm 𝒢 k) (n : ℕ) :

                The q-expansion of a level-raise, on coefficients. aₙ(V_d f) = a_{n/d}(f) when d ∣ n, and 0 otherwise.

                The q-expansion of a level-raise, at Γ₁. For f of level Γ₁(M), its image V_d f has level Γ₁(dM) and q-expansion coefficients aₙ(V_d f) = a_{n/d}(f) when d ∣ n, and 0 otherwise.

                theorem TauCeti.CuspForm.qExpansion_levelRaise {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h𝒢 : 1 ∈ 𝒢.strictPeriods) (h𝒢' : 1 ∈ 𝒢'.strictPeriods) (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :

                The q-expansion of a level-raised cusp form. A cusp form and its image under the inclusion into modular forms have the same underlying function, so the substitution q ↦ q ^ d of ModularForm.qExpansion_levelRaise reads the same way on cusp forms.

                theorem TauCeti.CuspForm.qExpansion_levelRaise_coeff {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h𝒢 : 1 ∈ 𝒢.strictPeriods) (h𝒢' : 1 ∈ 𝒢'.strictPeriods) (hle : 𝒢' ≤ ConjAct.toConjAct (scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) (n : ℕ) :

                The q-expansion of a level-raised cusp form, on coefficients. aₙ(V_d f) = a_{n/d}(f) when d ∣ n, and 0 otherwise.

                The q-expansion of a level-raised cusp form, at Γ₁. For f of level Γ₁(M), its image V_d f has level Γ₁(dM) and q-expansion coefficients aₙ(V_d f) = a_{n/d}(f) when d ∣ n, and 0 otherwise. These are the coefficients of the spanning forms of the old subspace.

                The coefficients of a level-raise, read backwards. If a cusp form G of level Γ₁(M) is V_d g as a function on ℍ, that is ⇑G = d ^ (1 - k) • (⇑g ∣[k] diag(d, 1)) for a cusp form g of level Γ₁(M / d) with d ∣ M, then a_m(g) = a_{dm}(G). This is how a form recovered by the level-lowering dichotomy (ConductorDichotomy.lean) hands its coefficients back.

                Level-raising lands in the series supported on multiples of d. The q-expansion of V_d f is the PowerSeries.expand d of that of f, so its coefficients away from the multiples of d vanish.

                This is the forward half of the Atkin–Lehner description of the old subspace: everything in the image of V_d satisfies the support condition.

                theorem CuspForm.isSupportedOnDvd_qExpansion_levelRaise {k : ℤ} {d : ℕ} {𝒢 𝒢' : Subgroup (GL (Fin 2) ℝ)} [𝒢'.HasDetOne] [NeZero d] (h𝒢 : 1 ∈ 𝒢.strictPeriods) (h𝒢' : 1 ∈ 𝒢'.strictPeriods) (hle : 𝒢' ≤ ConjAct.toConjAct (TauCeti.scaleGL d)⁻¹ • 𝒢) (f : CuspForm 𝒢 k) :

                Level-raising lands in the series supported on multiples of d, for cusp forms. The cusp-form reading of ModularForm.isSupportedOnDvd_qExpansion_levelRaise, which is the form the old subspace is described with.