Skip to content

Abstract Hecke ring + modular forms over a commensurability class - #76

Draft
CBirkbeck wants to merge 6 commits into
mainfrom
abstract-hecke-ring-def
Draft

Abstract Hecke ring + modular forms over a commensurability class#76
CBirkbeck wants to merge 6 commits into
mainfrom
abstract-hecke-ring-def

Conversation

@CBirkbeck

@CBirkbeck CBirkbeck commented Jun 29, 2026

Copy link
Copy Markdown
Owner

Abstract Hecke ring + modular forms over a commensurability class

Two foundational slices toward #75 (Shimura, Ch. 3), ported from AINTLIB with mathlib-only imports. Builds on mathlib v4.31.0; sorry-free.

  • ForMathlib/AbstractHeckeRing.lean — the abstract Hecke ring: HeckePair (H, Δ) with H ≤ Δ ≤ commensurator H, the double-coset quotient HeckeCoset, and the ring 𝕋 of formal -linear combinations of double cosets. Definitions only (convolution product is a follow-up).
  • CommensurableLimit/ — modular forms of weight k over a commensurability class: the direct limit ModularFormCommensurable Γ₀ k of ModularForm Γ k over det-one subgroups commensurable with Γ₀, the commensurator action commRep, and range_ofLevel_eq_invariants (the level-Γ invariants are exactly ModularForm Γ.carrier k).

Part of #75.

Port the core definitions of the abstract Hecke ring (following Shimura,
Introduction to the Arithmetic Theory of Automorphic Functions, Ch. 3)
from AINTLIB: the arithmetic pair HeckePair (H, Delta), the double-coset
quotient HeckeCoset, and the Hecke ring type 𝕋 of formal Z-linear
combinations of double cosets.

Definitions only -- the convolution product and its properties are not
included yet.

Part of #75.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@CBirkbeck

Copy link
Copy Markdown
Owner Author

Note on dcSetoid / dcRel — rationale + a suggested simplification

Why it's written this way here: dcRel and dcSetoid were ported verbatim from AINTLIB's AbstractHeckeRing/Basic.lean, to keep this slice faithful to the source. That matters because the (not-yet-ported) multiplication and ring structure are written against dcRel / HeckeCoset, so keeping the definitions identical avoids defeq / simp-normal-form drift when those land.

The redundancy: mathlib already has this exact relation. In Mathlib/GroupTheory/DoubleCoset.lean:

def setoid (H K : Set G) : Setoid G := Setoid.ker fun x => doubleCoset x H K

i.e. x ≈ y ↔ HxK = HyK — identical to our dcRel. So dcRel/dcSetoid re-implement DoubleCoset.setoid.

Two reasons it isn't simply deletable:

  • HeckeCoset P := Quotient (dcSetoid P) needs a Setoid instance.
  • It must be a setoid on the commensurating submonoid Δ, not on all of G (the Hecke ring is spanned by HgH for g ∈ Δ only), so mathlib's DoubleCoset.Quotient H H — a quotient of G — isn't a drop-in.

Suggested option: reuse mathlib's setoid, pulled back along Δ ↪ G, dropping dcRel and the trivial iseqv proof:

/-- The setoid on `Δ` identifying elements with the same double coset, obtained by
restricting mathlib's double-coset setoid `DoubleCoset.setoid H H` along `Δ ↪ G`. -/
instance dcSetoid (P : HeckePair G) : Setoid P.Δ :=
  Setoid.comap Subtype.val (DoubleCoset.setoid (P.H : Set G) P.H)

def HeckeCoset (P : HeckePair G) := Quotient (dcSetoid P)

Definitionally the same relation, shorter, and makes "it's the double-coset setoid restricted to Δ" explicit. ✓ Verified to compile against mathlib v4.31.0.

Trade-off: it diverges from the AINTLIB source, so a later port of the multiplication (written against dcRel) may need small adjustments for defeq / simp-normal-form.

Leaving the code as-is for now — flagging for discussion.

… + commensurator action

Port from AINTLIB (self-contained on mathlib): the space of modular forms of weight k
over the commensurability class of a fixed group Γ₀ as a direct limit, with the
commensurator action and the level-invariants theorem. In its own folder
LeanBridge/CommensurableLimit/, separate from the existing code.

- CommensurabilityClass.lean: directed index `CommIndex Γ₀` (det-one subgroups
  commensurable with Γ₀, reverse-inclusion order) + gap lemmas `HasDetOne.of_le`,
  `commensurable_inf`, `commensurable_le_commensurator`.
- DirectLimit.lean: `ModularFormCommensurable Γ₀ k := Module.DirectLimit (ModularForm Γ k)`
  over CommIndex Γ₀, with ofLevel / lift / injectivity; headline `ModularFormArithmetic` at 𝒮ℒ.
- CommensuratorAction.lean: `PComm Γ₀ := commensurator Γ₀ ⊓ GL(2,ℝ)⁺` acts via the ℂ-linear
  slash-translate, bundled `commRep : Representation ℂ (PComm Γ₀) (limit)`; theorem
  `range_ofLevel_eq_invariants` — the Γ-invariants of the action are exactly
  `ModularForm Γ.carrier k`.

Builds on mathlib v4.31.0; sorry-free; axioms only propext/Classical.choice/Quot.sound.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@CBirkbeck CBirkbeck changed the title Abstract Hecke ring: definition (HeckePair, double-coset quotient, 𝕋) Abstract Hecke ring + modular forms over a commensurability class Jun 29, 2026
CBirkbeck and others added 4 commits June 30, 2026 16:34
…etPlusMinusOne

The base Γ₀ of ModularFormCommensurable only needs det = ±1, not det = 1:
the ℂ-vector-space structure of the direct limit comes from the index
subgroups (CommIndex.carrier, each HasDetOne), not from Γ₀. So weaken the
hypothesis [Γ₀.HasDetOne] to [Γ₀.HasDetPlusMinusOne] on the def and its
AddCommGroup/Module instances. ModularFormArithmetic (Γ₀ = 𝒮ℒ) is
unaffected since HasDetOne ⇒ HasDetPlusMinusOne.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…le commensurator

Generalize the commensurator action from the positive-determinant part
PComm = commensurator ⊓ GLPos (a ℂ-representation) to the FULL commensurator
(an ℝ-representation). A det < 0 commensurator element acts by the slash
action with σ = complex conjugation, which is ℝ-linear but not ℂ-linear, so
the representation is over ℝ; ModularFormCommensurable stays a ℂ-vector space
(the ℝ-structure is restriction of scalars).

- add translateℝ: ℝ-linear translate for any determinant (replaces translateₗ)
- build the ℝ-linear smulMap on the ℂ-direct-limit via an ℝ-linear equiv to
  the same system rebuilt over ℝ (Module.DirectLimit ℝ)
- commRep : Representation ℝ (commensurator Γ₀) (ModularFormCommensurable Γ₀ k)
- update smulMap_one/_mul, toFunₗ_smulMap, range_ofLevel_eq_invariants,
  ofLevelInvariantsEquiv (now ≃ₗ[ℝ]); drop PComm and the det>0 machinery

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…usOne bases

The whole ModularFormCommensurable section (commRep, ofLevelInvariantsEquiv,
range_ofLevel_eq_invariants, ...) was still pinned to [Γ₀.HasDetOne] solely
because Nonempty (CommIndex Γ₀) only had a HasDetOne instance (Γ₀ itself as the
witness level). Add a Nonempty (CommIndex Γ₀) instance for HasDetPlusMinusOne
bases, with witness the determinant-one part Γ₀ ⊓ ker(det): for det = ±1 groups
the determinant maps Γ₀ onto a subgroup of {±1}, so the det-one part has index
≤ 2 (proved via Subgroup.index_ker + finiteness of the det image), hence is
commensurable with Γ₀ and determinant-one. Then relax the CommensuratorAction
section variable to [Γ₀.HasDetPlusMinusOne]; the action now works for genuinely
det = ±1 bases, not just det = 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…/AddCommGroup

The Hecke ring type 𝕋 P Z and its additive structure only need additive
structure on the coefficients Z, not a full CommRing. Weaken the 𝕋 definition
and FunLike instance to [Zero Z], add an AddCommMonoid (𝕋 P Z) instance for
[AddCommMonoid Z], and state the AddCommGroup instance over [AddCommGroup Z].

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant