Fermat's Last Theorem in Lean 4

← all definition modules

Definitions/Def_ModularCurve_JLinePlacesBar.lean

definition module

The -line inside the base-changed modular function field

Fix a level N \ge 1. The modular function field of level N over \overline{\mathbb Q} is here modularFunctionFieldBar N, the subfield of \overline{\mathbb Q}((q)) generated over \overline{\mathbb Q} by the coefficientwise images (under coeffEmb, i.e. application of \mathbb Q \to \overline{\mathbb Q} to each Laurent coefficient) of the field modularFunctionFieldFull N, which is the \mathbb Q-subfield of \mathbb Q((q)) generated by the series q-expansions \mathrm{jq} rescaled by q \mapsto q^{d} for all divisors d \mid N. Write \bar j for the element of that field given by the coefficientwise image of the q-expansion \mathrm{jq} of the modular invariant, with membership supplied by jq_mem_full. The abbreviation jLineBar N is the intermediate field \overline{\mathbb Q}(\bar j), i.e. the \overline{\mathbb Q}-subfield of modularFunctionFieldBar N generated by \bar j, together with its \overline{\mathbb Q}-algebra and \overline{\mathbb Q}-module structures; transcendental_jLineBar_gen records that \bar j is transcendental over \overline{\mathbb Q}, quoting transcendental_coeffEmb_jq. Consequently jLineBarRingEquiv N is a ring isomorphism \overline{\mathbb Q}(T) \cong \overline{\mathbb Q}(\bar j), namely the underlying ring map of Mathlib's algebra isomorphism attached to a transcendental element; accompanying lemmas state that it acts as the identity on constants from \overline{\mathbb Q} and sends T to \bar j.

Three places of \overline{\mathbb Q}(\bar j) over \overline{\mathbb Q} are then fixed. A Place K F is a valuation subring of F containing the image of K, proper in F, and a principal ideal ring; Place.congrRingEquiv transports a place along a ring isomorphism compatible with the structure maps by pulling the valuation subring back along the inverse isomorphism. Applying this to jLineBarRingEquiv N gives jLineBarPlace1728 N, jLineBarPlaceZero N and jLineBarPlaceInfty N, the transports of the places of \overline{\mathbb Q}(T) cut out by the primes (T - 1728) and (T) of \overline{\mathbb Q}[T] and of the place at infinity given by the degree valuation. A classical decidable-equality helper for \overline{\mathbb Q}(T) accompanies the last of these.

Relation to Mathlib

Place, placeOfPoint and placeInfty are the project's own notions, built on Mathlib's height-one-spectrum adic valuations and on RatFunc.inftyValuation; the isomorphism with the rational function field comes from Mathlib's RatFunc.algEquivOfTranscendental.

Where it is used

These objects provide the base of the j-cover of the modular curve of level N over \overline{\mathbb Q} in function-field language: the j-line sits inside the base-changed modular function field, and the three places at j = 1728, j = 0 and j = \infty are the ones over which the cover is studied, in the analysis of the divisor class group \mathrm{Pic}^0 and its torsion with its Galois action.

References

  1. G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, Princeton University Press, 1971, Chapter 6
  2. H. Stichtenoth, Algebraic Function Fields and Codes, 2nd edition, Springer, 2009

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_ModularCurve_JLinePlacesBar.lean

Imports

Theorems imported by this definition module

Imported by

  • no other definition module

Declarations

Source

import Mathlib
import Definitions.Def_ModularCurve_ArithmeticGalois
import Definitions.Def_AlgebraicCurve_RatFuncPlaces
import Definitions.Def_AlgebraicCurve_RatFuncPlaceInfty
import Theorems.Thm_ModularCurve_transcendental_coeffEmb_jq

set_option autoImplicit false

noncomputable section

open IntermediateField AlgebraicCurve AlgebraicCurve.RationalFunctionField

namespace ModularCurve

set_option synthInstance.maxHeartbeats 400000

variable (N : ℕ) [NeZero N]

abbrev jLineBar : IntermediateField (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar N) :=
  IntermediateField.adjoin (AlgebraicClosure ℚ)
    {(⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jq_mem_full N)⟩ :
      ↥(modularFunctionFieldBar N))}

instance instAlgebraJLineBar : Algebra (AlgebraicClosure ℚ) ↥(jLineBar N) := IntermediateField.algebra' (jLineBar N)

instance instModuleJLineBar : Module (AlgebraicClosure ℚ) ↥(jLineBar N) := Algebra.toModule

theorem transcendental_jLineBar_gen :
    Transcendental (AlgebraicClosure ℚ)
      (⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jq_mem_full N)⟩ :
        ↥(modularFunctionFieldBar N)) :=
  transcendental_coeffEmb_jq (AlgebraicClosure ℚ) N

def jLineBarRingEquiv : RatFunc (AlgebraicClosure ℚ) ≃+* ↥(jLineBar N) :=
  RingEquiv.ofBijective
    (RatFunc.algEquivOfTranscendental _ (transcendental_jLineBar_gen N))
    (EquivLike.bijective _)

theorem jLineBarRingEquiv_apply (f : RatFunc (AlgebraicClosure ℚ)) :
    jLineBarRingEquiv N f = RatFunc.algEquivOfTranscendental _ (transcendental_jLineBar_gen N) f := rfl

theorem jLineBarRingEquiv_algebraMap (a : AlgebraicClosure ℚ) :
    jLineBarRingEquiv N (algebraMap (AlgebraicClosure ℚ) (RatFunc (AlgebraicClosure ℚ)) a) = algebraMap (AlgebraicClosure ℚ) ↥(jLineBar N) a :=
  (RatFunc.algEquivOfTranscendental _ (transcendental_jLineBar_gen N)).commutes a

theorem jLineBarRingEquiv_X :
    (jLineBarRingEquiv N RatFunc.X : ↥(modularFunctionFieldBar N))
      = ⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jq_mem_full N)⟩ :=
  RatFunc.algEquivOfTranscendental_X _ (transcendental_jLineBar_gen N)

@[reducible] def instDecidableEqRatFuncAlgebraicClosure : DecidableEq (RatFunc (AlgebraicClosure ℚ)) := Classical.decEq _

attribute [local instance] instDecidableEqRatFuncAlgebraicClosure

def jLineBarPlace1728 : Place (AlgebraicClosure ℚ) ↥(jLineBar N) :=
  Place.congrRingEquiv (jLineBarRingEquiv N) (jLineBarRingEquiv_algebraMap N) (placeOfPoint (AlgebraicClosure ℚ) 1728)

def jLineBarPlaceZero : Place (AlgebraicClosure ℚ) ↥(jLineBar N) :=
  Place.congrRingEquiv (jLineBarRingEquiv N) (jLineBarRingEquiv_algebraMap N) (placeOfPoint (AlgebraicClosure ℚ) 0)

def jLineBarPlaceInfty : Place (AlgebraicClosure ℚ) ↥(jLineBar N) :=
  Place.congrRingEquiv (jLineBarRingEquiv N) (jLineBarRingEquiv_algebraMap N) (placeInfty (AlgebraicClosure ℚ))

end ModularCurve

end

Statements phrased using this module (0)

No statement module imports it directly (it is used through other definition modules or by proofs).