The Fricke operator is an involution up to a scalar #
The Fricke matrix squares to the scalar matrix (-N) • 1
(coe_frickeGL_sq of TauCeti/NumberTheory/ModularForms/Fricke/Matrix.lean), and a scalar
matrix acts trivially on ℍ. Slashing by W² is therefore multiplication by a constant, and
the Fricke operator W_N of TauCeti/NumberTheory/ModularForms/Fricke/Operator.lean satisfies
W_N ∘ W_N = c • id for that constant
c = N ^ (2 * (k - 1)) * (-N) ^ (-k).
The constant is nonzero, so W_N is invertible with W_N⁻¹ = c⁻¹ • W_N.
Main definitions #
TauCeti.frickeScalar: the constantcabove.TauCeti.frickeOperatorEquiv,TauCeti.frickeOperatorCuspEquiv:W_Nbundled as a linear automorphism ofM_k(Γ₁(N))and ofS_k(Γ₁(N)), with inversec⁻¹ • W_N.
Main results #
TauCeti.frickeGL_sq_slash: slashing byW²is multiplication byfrickeScalar N k.TauCeti.frickeOperator_frickeOperator:W_N ∘ W_N = frickeScalar N k • idonM_k(Γ₁(N)).TauCeti.frickeOperatorCusp_frickeOperatorCusp: the same onS_k(Γ₁(N)).TauCeti.frickeOperator_frickeOperator_apply,TauCeti.frickeOperatorCusp_frickeOperatorCusp_apply: the pointwise forms of those two, which are thesimp-normal ones.TauCeti.frickeScalar_def: the defining equation of the constant, for clients that cannot unfold it.TauCeti.frickeScalar_eq: its evaluated form(-1) ^ k * N ^ (k - 2).TauCeti.frickeScalar_ne_zero: the constant is nonzero, which is what makesW_Ninvertible.- The two-sided inverse laws
W_N ∘ (c⁻¹ • W_N) = id = (c⁻¹ • W_N) ∘ W_N, on modular and on cusp forms, areprivate: they exist only as theLinearEquiv.ofLinearMaparguments of the two equivalences above, which together withfrickeOperator_frickeOperatorare the public surface. TauCeti.slash_mul_frickeGL: slashing byA * WisfrickeScalar N k •slashing byA * W⁻¹. This is the form the character-space transport will consume, where the two Fricke factors of a conjugated operator have to be collapsed onto one representative.
Where the scalar comes from #
Weight-k slashing by g carries the factor |det g| ^ (k - 1) * denom g z ^ (-k). For
g = W² the two factors are the two halves of frickeScalar: det W = N gives
|det W²| = N ^ 2, and W² being the scalar matrix (-N) • 1 gives denom W² z = -N,
independently of z. The remaining ingredient is that W² acts trivially on ℍ, so the
f (W² • z) in the slash is just f z — mathlib's glScalar_smul.
Provenance #
Ported from the AINTLIB LeanModularForms project
(LeanModularForms/HeckeRIngs/GL2/Fricke.lean,
commit 340875adfb2, Apache-2.0, Chris Birkbeck), realizing part of Layer 6 of the ModularForms
roadmap.
AINTLIB states these over ℚ and pushes to ℝ through a glMap transport at every step; here,
as already in Fricke/Operator.lean, frickeGL is read at ℝ directly and no transport
appears. That also replaces AINTLIB's hand computation of W² • z and denom (W²) z from the
matrix entries: over ℝ the square is literally a Matrix.GeneralLinearGroup.scalar, so
mathlib's glScalar_smul and denom_scalar apply, and UpperHalfPlane.σ is discharged from
positivity of det W² rather than from a rational-determinant side condition.
References #
Defining equation for frickeScalar. The definition is public but is not marked
@[expose], so a downstream module rewrites with this rather than unfolding the body.
Deliberately not @[simp]: frickeScalar N k is the normal form here, not the expanded product.
Every statement below is phrased in terms of the named constant, and the two factors only need to
be visible inside frickeScalar_eq, which rewrites with this lemma explicitly.
The evaluated form of the scalar, (-1) ^ k * N ^ (k - 2), which is how
Fricke/Operator.lean describes it and the form the normalized operator
𝒲_N = (√N) ^ (2 - k) • (· ∣[k] W) needs in order to be an involution in even weight.
[NeZero N] is load-bearing rather than ambient: at N = 0, k = 2 the two sides differ.
frickeScalar N k is nonzero. This is what makes the Fricke operator invertible, with
inverse (frickeScalar N k)⁻¹ • W_N; see frickeOperatorEquiv.
Slashing by W² is multiplication by frickeScalar N k. W² = (-N) • 1 is a scalar
matrix, so it acts trivially on ℍ and has constant denom; what is left of the weight-k
slash is the constant |det W²| ^ (k - 1) * (-N) ^ (-k).
Collapsing a Fricke factor: slashing by A * W is frickeScalar N k • slashing by
A * W⁻¹, because A * W = (A * W⁻¹) * W². This is the step that lets the two Fricke factors
of a W-conjugated operator be replaced by a single one.
W_N ∘ W_N = frickeScalar N k • id on M_k(Γ₁(N)). Composing the operator with itself
slashes by W², which frickeGL_sq_slash identifies with the scalar.
W_N (W_N f) = frickeScalar N k • f for a modular form f, the pointwise form of
frickeOperator_frickeOperator. This, not the composition equality, is the simp-normal form: a
goal mentioning W_N at all mentions it applied to a form.
The Fricke operator as a linear automorphism of M_k(Γ₁(N)), with inverse
(frickeScalar N k)⁻¹ • W_N.
Equations
Instances For
The bundled Fricke operator acts as the Fricke operator.
The inverse of the bundled Fricke operator is (frickeScalar N k)⁻¹ • W_N.
W_N ∘ W_N = frickeScalar N k • id on S_k(Γ₁(N)), the cusp-form form of
frickeOperator_frickeOperator. With frickeScalar_ne_zero this makes W_N invertible on
cusp forms.
W_N (W_N f) = frickeScalar N k • f for a cusp form f, the pointwise and simp-normal
form of frickeOperatorCusp_frickeOperatorCusp.
The Fricke operator as a linear automorphism of S_k(Γ₁(N)), with inverse
(frickeScalar N k)⁻¹ • W_N.
Equations
Instances For
The bundled Fricke operator on cusp forms acts as frickeOperatorCusp.
The inverse of the bundled Fricke operator on cusp forms is
(frickeScalar N k)⁻¹ • W_N.