Fermat's Last Theorem in Lean 4

← all definition modules

Definitions/Def_Stickelberger_Basic.lean

definition module

Stickelberger element acting on a mod- -module

Fix a natural number p, an additive commutative group A carrying a \mathbb{Z}/p-module structure, and regard an action of \Delta=(\mathbb{Z}/p)^\times on A as a monoid homomorphism \rho\colon(\mathbb{Z}/p)^\times\to\operatorname{End}_{\mathbb{Z}/p}(A) rather than as a group-action instance. The indexing set exponentSet p is the finite set of natural numbers c<p with 0<c and 2c<p, i.e. the integers in the lower half interval 0<c<p/2; the accompanying membership lemma records that c lies in it exactly when 0<c and 2c<p, the bound c<p being automatic. The natural number eigenvalueScalar p is the sum \sum_{0<c<p/2}c of the elements of that set. For c:\mathbb{N}, expUnit p c is the unit of \mathbb{Z}/p determined by c when c is coprime to p (via Mathlib's ZMod.unitOfCoprime) and is 1 otherwise, so it is a total function on \mathbb{N} by a case split rather than a partially defined one.

Given \rho, the endomorphism stickelbergerEnd is \eta=\sum_{c\in\mathtt{exponentSet}\,p}\rho\bigl((\mathtt{expUnit}\,p\,c)^{-1}\bigr), the sum taken in the \mathbb{Z}/p-linear endomorphism ring; this is the integral half-interval Stickelberger operator \sum_{0<c<p/2}\sigma_c^{-1} acting through \rho. The predicate StickelbergerAnnihilates asserts that \eta a=0 for every a\in A, stated pointwise rather than as the equation \eta=0 in the endomorphism ring. The predicate IsOmegaEigenvector takes an exponent i:\mathbb{N} and an element a\in A, and asserts that \rho(d)\,a=\bigl(\bar d^{\,i}\bigr)\cdot a for every unit d of \mathbb{Z}/p, where \bar d\in\mathbb{Z}/p is the underlying residue: thus a lies in the \omega^i-eigenspace for the given action, with \omega the inclusion of \Delta into (\mathbb{Z}/p)^\times.

Relation to Mathlib

Mathlib has no Stickelberger element or eigenspace-decomposition API; these notions are the project's own, built from Mathlib's ZMod, its unit ZMod.unitOfCoprime, and Module.End.

Where it is used

These definitions are the carriers for the Stickelberger annihilation and \omega^i-eigenspace statements used in the cyclotomic input to the theory of rational torsion on elliptic curves, which enters the irreducibility and level-lowering side of the argument.

References

  1. L. C. Washington, Introduction to Cyclotomic Fields, Graduate Texts in Mathematics 83, Springer, 1982, Chapter 6
  2. S. Lang, Cyclotomic Fields I and II, Graduate Texts in Mathematics 121, Springer, 1990

References are suggested automatically and have not been individually verified.

English text generated automatically from the Lean source; the Lean statement is authoritative.

Source file: Definitions/Def_Stickelberger_Basic.lean

Imports

  • only Mathlib

Imported by

Declarations

Source

import Mathlib.Data.ZMod.Basic ↗
import Mathlib.Algebra.Module.LinearMap.End ↗
import Mathlib.Algebra.BigOperators.Group.Finset.Basic ↗

set_option autoImplicit false

namespace Stickelberger

def exponentSet (p : ℕ) : Finset ℕ :=
  (Finset.range p).filter fun c => 0 < c ∧ 2 * c < p

@[simp] lemma mem_exponentSet {p c : ℕ} :
    c ∈ exponentSet p ↔ 0 < c ∧ 2 * c < p := by
  simp only [exponentSet, Finset.mem_filter, Finset.mem_range]
  exact ⟨fun h => h.2, fun h => ⟨by omega, h⟩⟩

def eigenvalueScalar (p : ℕ) : ℕ := ∑ c ∈ exponentSet p, c

noncomputable def expUnit (p : ℕ) (c : ℕ) : (ZMod p)ˣ :=
  if h : Nat.Coprime c p then ZMod.unitOfCoprime c h else 1

variable {p : ℕ} {A : Type*} [AddCommGroup A] [Module (ZMod p) A]

noncomputable def stickelbergerEnd (ρ : (ZMod p)ˣ →* Module.End (ZMod p) A) :
    Module.End (ZMod p) A :=
  ∑ c ∈ exponentSet p, ρ (expUnit p c)⁻¹

def StickelbergerAnnihilates (ρ : (ZMod p)ˣ →* Module.End (ZMod p) A) : Prop :=
  ∀ a : A, stickelbergerEnd ρ a = 0

def IsOmegaEigenvector (ρ : (ZMod p)ˣ →* Module.End (ZMod p) A) (i : ℕ) (a : A) : Prop :=
  ∀ d : (ZMod p)ˣ, ρ d a = ((d : ZMod p) ^ i) • a

end Stickelberger

Statements phrased using this module (2)