Kodaira/Tate fibre-order calculus: discriminant, type table, points
DefinitionFTheoryK3TateCoreThis bundle sets up the Kodaira/Tate fibre-order calculus for a (short) Weierstrass model over the affine line, with over a field .
-
Discriminant. (the discriminant up to the unit ).
-
K3 degree data.
IsK3Data f gis , , and . -
Kodaira types.
Kodairaenumerates the seven additive-reduction Kodaira/Tate fibre types whose discriminant order is a function of the vanishing orders : . The multiplicative series is deliberately omitted, since there and the order is a free datum, not a function of . -
discOrder. The Tate-table discriminant order attached to each type: , , , , , , .
-
HasKodaira.
HasKodaira f g t₀ τstates, through vanishing orders alone, that the fibre at carries type . A lower bound is written as the divisibility (which also holds for , order ); an exact order is writtenrootMultiplicity = n. The signatures are the Tate table: , , , , , ; and is together with the reduced-discriminant nondegeneracy , where and are the leading local (Taylor) coefficients — this is what pins the order at rather than higher. -
IsE8Point is defined as type . Its clause encodes faithfully, including the degenerate case, which a plain
rootMultiplicity ≥ 4encoding silently drops.
Formalization note. natDegree and rootMultiplicity are on the zero polynomial. Divisibility clauses therefore carry the convention for the zero polynomial, while rootMultiplicity = n clauses force the polynomial to be nonzero.
import Mathlib
open Polynomial
namespace FTheoryK3Tate
variable {k : Type*} [Field k]
/-- Discriminant of the short Weierstrass model `y² = x³ + f x + g`
(the usual discriminant up to the unit `-16`). -/
noncomputable def Δ (f g : k[X]) : k[X] := 4 * f ^ 3 + 27 * g ^ 2
/-- Calabi–Yau / K3 Weierstrass degree data over the affine chart, with nondegenerate
discriminant: `deg f ≤ 8`, `deg g ≤ 12`, `Δ ≠ 0`. -/
def IsK3Data (f g : k[X]) : Prop :=
f.natDegree ≤ 8 ∧ g.natDegree ≤ 12 ∧ Δ f g ≠ 0
/-- The seven reduced (additive-reduction) Kodaira/Tate fibre types whose discriminant
order is pinned by the vanishing orders `(ord f, ord g)`. The multiplicative `Iₙ`
series (where `ord f = ord g = 0` and `ord Δ = n` is the free datum) is deliberately
excluded, as its order is not a function of `(ord f, ord g)`. -/
inductive Kodaira
| II | III | IV | I0star | IVstar | IIIstar | IIstar
/-- The discriminant vanishing order `ord Δ` attached to each Kodaira/Tate type — the
entries of the Tate table. The type II* (gauge algebra `E₈`) entry is `10`. -/
def Kodaira.discOrder : Kodaira → ℕ
| .II => 2
| .III => 3
| .IV => 4
| .I0star => 6
| .IVstar => 8
| .IIIstar => 9
| .IIstar => 10
/-- `HasKodaira f g t₀ τ` : the fibre of `y² = x³ + f x + g` at the base point `t₀` has
Kodaira/Tate type `τ`, expressed purely through the vanishing orders of `f` and `g`.
Conventions (all Mathlib-native): `p.rootMultiplicity t₀` is `ord_{t₀} p` (with the
zero polynomial having multiplicity `0`), and the divisibility clause `(X - C t₀)^n ∣ p`
reads as `ord_{t₀} p ≥ n`, which — unlike `rootMultiplicity` — also holds for `p = 0`
(order `+∞`). Exact orders (`= n`) are stated with `rootMultiplicity`, lower bounds
(`≥ n`) with divisibility.
For `I₀*` the two orders sit at the cancellation locus `3·ord f = 2·ord g = 6`, so the
order is pinned at `6` only when the **reduced discriminant** `4 c₂³ + 27 d₃²` is
nonzero, where `c₂ = (taylor t₀ f).coeff 2` and `d₃ = (taylor t₀ g).coeff 3` are the
leading local (Taylor) coefficients of `f` and `g` at `t₀`. -/
def HasKodaira (f g : k[X]) (t₀ : k) : Kodaira → Prop
| .II => (X - C t₀) ∣ f ∧ g.rootMultiplicity t₀ = 1
| .III => f.rootMultiplicity t₀ = 1 ∧ (X - C t₀) ^ 2 ∣ g
| .IV => (X - C t₀) ^ 2 ∣ f ∧ g.rootMultiplicity t₀ = 2
| .I0star => f.rootMultiplicity t₀ = 2 ∧ g.rootMultiplicity t₀ = 3 ∧
4 * ((taylor t₀ f).coeff 2) ^ 3 + 27 * ((taylor t₀ g).coeff 3) ^ 2 ≠ 0
| .IVstar => (X - C t₀) ^ 3 ∣ f ∧ g.rootMultiplicity t₀ = 4
| .IIIstar => f.rootMultiplicity t₀ = 3 ∧ (X - C t₀) ^ 5 ∣ g
| .IIstar => (X - C t₀) ^ 4 ∣ f ∧ g.rootMultiplicity t₀ = 5
/-- A base point carrying a Kodaira type II* fibre — the `E₈` gauge algebra locus.
The `(X - C t₀)^4 ∣ f` clause encodes `ord_{t₀} f ≥ 4` faithfully, **including** the
degenerate `f = 0` case (order `+∞`), which the plain `rootMultiplicity ≥ 4` encoding
silently excludes. -/
def IsE8Point (f g : k[X]) (t₀ : k) : Prop := HasKodaira f g t₀ Kodaira.IIstar
end FTheoryK3Tate
Read-back
What the Lean code literally says, in plain math · claude-opus-4-8
Blind read-back (independent auditor).
Δ. For a field , a noncomputable map sending to , where are the images of those integers as constant polynomials. No constraints on ; defined for the zero polynomials; in small characteristic or may vanish.
IsK3Data. For : the conjunction , (with natDegree, so the zero polynomial has degree ), and . The degree bounds are automatic when or is .
Kodaira. A finite enumeration with exactly seven nullary constructors , carrying no data.
Kodaira.discOrder. A function to : , , , , , , . A pure lookup table.
HasKodaira. For , , and a label, a proposition by cases. With the root multiplicity of in ( for a non-root and for ) and the linear polynomial :
- : and .
- : and .
- : and .
- : and and in , where (coefficient of in ) and .
- : and .
- : and .
- : and .
Note the asymmetry: some clauses are exact multiplicities (equalities, forcing the polynomial nonzero and pinning the order), the paired clause is a divisibility (a lower bound, satisfied also by the zero polynomial); the two are not interchangeable in strength.
IsE8Point. Defined as HasKodaira f g t₀ Kodaira.IIstar: and .