Fermat's Last Theorem in Lean 4

← all definition modules

Definitions/Def_Deformations_DualNumbers.lean

definition module

Dual numbers as an object of the pro-Artinian category

Fix a commutative local ring \mathcal O and write k = \mathcal O/\mathfrak m_{\mathcal O} for its residue field, denoted 𝓴 π“ž. This module equips Mathlib's ring of dual numbers k[\varepsilon] = k \oplus k\varepsilon with \varepsilon^2 = 0 (the trivial square-zero extension of k by k) with all the structure needed to view it as an object of the category ProartinianCat π“ž, whose objects are topological commutative \mathcal O-algebras R that are local rings with linear, T_0, complete topology in which every quotient by an open ideal is Artinian, such that \mathcal O \to R is a local homomorphism and \mathcal O \to \mathrm{ResidueField}(R) is surjective, and whose morphisms are continuous \mathcal O-algebra homomorphisms. Accordingly it is recorded that k[\varepsilon] is a finite k-module, hence an Artinian ring; that it carries the discrete topology; that \mathcal O \to k[\varepsilon], a \mapsto \mathrm{inl}(\bar a), is local; and that \mathcal O surjects onto the residue field of k[\varepsilon]. The auxiliary lemma residue_inl_fst_eq states that for y \in k[\varepsilon] the elements \mathrm{inl}(y_{\mathrm{fst}}) and y have the same image in the residue field of k[\varepsilon], i.e. k\varepsilon \subseteq \mathfrak m_{k[\varepsilon]}.

The object itself is dualNumbers π“ž, the object of ProartinianCat π“ž with carrier k[\varepsilon]; its topology is discrete. The morphism dualNumbersFst π“ž : dualNumbers π“ž ⟢ residueField is given by the first-coordinate \mathcal O-algebra homomorphism k[\varepsilon] \to k, a + b\varepsilon \mapsto a, which is continuous since the source is discrete. Finally eq_dualNumbersFst asserts that every morphism from dualNumbers π“ž to residueField equals this projection, residueField being terminal in ProartinianCat π“ž.

Relation to Mathlib

The carrier is Mathlib's DualNumber, i.e. TrivSqZeroExt of a ring over itself, together with its fstHom; the ambient category ProartinianCat, the classes IsProartinian, IsResidueAlgebra and IsLocalProartinianAlgebra, and the terminal object residueField are the project's own notions.

Where it is used

The dual numbers are the test object of deformation theory: morphisms from a universal deformation ring to k[\varepsilon] compute the tangent space of the deformation functor, which is identified with a Galois cohomology group and bounded in the modularity-lifting argument.

References

  1. M. Schlessinger, Functors of Artin rings, Transactions of the American Mathematical Society 130 (1968), 208–222
  2. B. Mazur, Deforming Galois representations, in: Galois Groups over β„š, Mathematical Sciences Research Institute Publications 16, Springer, 1989, 385–437
  3. H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154, Β§2

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

Imports

Imported by

  • no other definition module

Declarations

Source

import Mathlib
import Definitions.Def_Deformations_ProartinianCat

set_option autoImplicit false

universe u

open CategoryTheory IsLocalRing TrivSqZeroExt
open scoped DualNumber

namespace Deformation

local notation3:max "𝓴" π“ž:max => (IsLocalRing.ResidueField π“ž)

namespace ProartinianCat

variable (π“ž : Type u) [CommRing π“ž] [IsLocalRing π“ž]

instance : Module.Finite (𝓴 π“ž) ((𝓴 π“ž)[Ξ΅]) :=
  inferInstanceAs (Module.Finite (𝓴 π“ž) ((𝓴 π“ž) Γ— (𝓴 π“ž)))

instance : IsArtinianRing ((𝓴 π“ž)[Ξ΅]) :=
  IsArtinianRing.of_finite (𝓴 π“ž) ((𝓴 π“ž)[Ξ΅])

instance : TopologicalSpace ((𝓴 π“ž)[Ξ΅]) := βŠ₯

instance : DiscreteTopology ((𝓴 π“ž)[Ξ΅]) := ⟨rfl⟩

instance : IsLocalHom (algebraMap π“ž ((𝓴 π“ž)[Ξ΅])) where
  map_nonunit a ha := by
    rw [show algebraMap π“ž ((𝓴 π“ž)[Ξ΅]) a = TrivSqZeroExt.inl (algebraMap π“ž (𝓴 π“ž) a) from rfl,
      TrivSqZeroExt.isUnit_inl_iff] at ha
    exact (isUnit_map_iff (algebraMap π“ž (𝓴 π“ž)) a).mp ha

lemma residue_inl_fst_eq (y : (𝓴 π“ž)[Ξ΅]) :
    residue ((𝓴 π“ž)[Ξ΅]) (TrivSqZeroExt.inl y.fst) = residue ((𝓴 π“ž)[Ξ΅]) y := by
  refine Ideal.Quotient.eq.mpr ?_
  have h3 : TrivSqZeroExt.inl y.fst - y = -TrivSqZeroExt.inr y.snd := by
    ext <;> simp
  rw [h3]
  refine neg_mem (IsLocalRing.mem_maximalIdeal _ |>.mpr ?_)
  rw [mem_nonunits_iff, TrivSqZeroExt.isUnit_inr_iff]
  exact fun h => (not_subsingleton (𝓴 π“ž)) h

instance : IsResidueAlgebra π“ž ((𝓴 π“ž)[Ξ΅]) where
  isSurjective' := by
    intro x
    obtain ⟨y, rfl⟩ := Ideal.Quotient.mk_surjective x
    obtain ⟨a, ha⟩ := IsLocalRing.residue_surjective (R := π“ž) y.fst
    refine ⟨a, ?_⟩
    have h1 : algebraMap π“ž ((𝓴 π“ž)[Ξ΅]) a = TrivSqZeroExt.inl y.fst := by
      rw [show algebraMap π“ž ((𝓴 π“ž)[Ξ΅]) a = TrivSqZeroExt.inl (algebraMap π“ž (𝓴 π“ž) a) from rfl,
        show algebraMap π“ž (𝓴 π“ž) a = residue π“ž a from rfl, ha]
    calc algebraMap π“ž (𝓴 ((𝓴 π“ž)[Ξ΅])) a
        = residue ((𝓴 π“ž)[Ξ΅]) (algebraMap π“ž ((𝓴 π“ž)[Ξ΅]) a) := rfl
      _ = residue ((𝓴 π“ž)[Ξ΅]) (TrivSqZeroExt.inl y.fst) := by rw [h1]
      _ = (Ideal.Quotient.mk (maximalIdeal ((𝓴 π“ž)[Ξ΅]))) y := residue_inl_fst_eq π“ž y

instance : IsLocalProartinianAlgebra π“ž ((𝓴 π“ž)[Ξ΅]) := ⟨⟩

noncomputable def dualNumbers : ProartinianCat π“ž :=
  .of π“ž ((𝓴 π“ž)[Ξ΅])

instance : DiscreteTopology (dualNumbers π“ž) :=
  inferInstanceAs (DiscreteTopology ((𝓴 π“ž)[Ξ΅]))

noncomputable def dualNumbersFst : dualNumbers π“ž ⟢ residueField where
  hom := ⟨TrivSqZeroExt.fstHom π“ž (𝓴 π“ž) (𝓴 π“ž), continuous_of_discreteTopology⟩

lemma eq_dualNumbersFst (f : dualNumbers π“ž ⟢ residueField) : f = dualNumbersFst π“ž :=
  Subsingleton.elim _ _

end ProartinianCat

end Deformation

Statements phrased using this module (0)

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