Skip to content

Commit 69ce5a6

Browse files
committed
Third-round corrections; sorry-count check in CI
- Lafforgue VII.6(v): the E_lambda descent statement concerns the n-fold direct sum of the companion, not its n-th power; the companion's finite-order determinant is carried from the construction in the proof rather than read off clause (v). Both stated where the theorem is identified. - Module header rewritten: the deleted integral-closure-instance claim was still asserted there, and the theorem count predated the family corollary. - AbsGal and CompanionRep docstrings state their literal scope: the closure reading comes from the IsAlgClosure hypothesis the theorems carry. - Attestation made exact and strengthened: the axiom guard pins axiom-name sets, not sorry counts, so a second sorry inside the tainted closure would have passed; CI now counts sorry tokens and requires exactly one. - AUDIT: eq_of_isUnramifiedAt's actual hypotheses (Noetherian + Algebra.IsUnramifiedAt, no group); primesOver, not LiesOver, is the restated idiom; Representation.IsIrreducible and IsOfFinOrder recorded as counterparts; degree-one wording scoped to guaranteed match; note on definitions elaborating over a bare CommRing.
1 parent 6517eff commit 69ce5a6

5 files changed

Lines changed: 84 additions & 46 deletions

File tree

.github/workflows/build.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,9 @@ jobs:
2323

2424
- name: Check axiom profile
2525
run: lake env lean Axioms.lean
26+
27+
- name: Check sorry count
28+
run: |
29+
count=$( (grep -hE '^[[:space:]]+sorry[[:space:]]*$' LambdaAdicSlice.lean LambdaAdicSlice/*.lean || true) | wc -l )
30+
echo "sorry tokens: $count"
31+
test "$count" -eq 1

AUDIT.md

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@ infinite, and every result taking one is then vacuously true.
5151
counts, not one: a finite residue field at the chosen prime, `[Finite G]`, and
5252
`[Algebra.IsInvariant R S G]`. Existence of Frobenius elements in the absolute
5353
Galois group therefore has to be assumed as data. The same file carries a fuller
54-
finite-level theory: a canonical `arithFrobAt`, conjugacy of the canonical
54+
finite-level theory: a canonical `arithFrobAt` and conjugacy of the canonical
5555
Frobenii at primes over one base prime (`isConj_arithFrobAt`, via
56-
`exists_primesOver_isConj`), and uniqueness under unramifiedness
57-
(`AlgHom.IsArithFrobAt.eq_of_isUnramifiedAt`), all under the same finiteness and
58-
invariance hypotheses, so none of it transfers either.
56+
`exists_primesOver_isConj`), both under the same finiteness and invariance
57+
hypotheses, and uniqueness under unramifiedness
58+
(`AlgHom.IsArithFrobAt.eq_of_isUnramifiedAt`), an `AlgHom`-level statement whose
59+
hypotheses are instead Noetherianity of the extension and `Algebra.IsUnramifiedAt`
60+
at the prime. None of it transfers: the first two for the group-finiteness
61+
reasons above, the third because the integral closure in `` is neither
62+
Noetherian nor unramified there.
5963

6064
`isPretransitive_of_isGaloisGroup` requires `[Finite G]` and
6165
`[IsGaloisGroup G A B]`, so transitivity of the action on primes above a place is
@@ -100,9 +104,10 @@ trivially satisfiable; a single place leaves the compatibility conditions
100104
constraining one Frobenius conjugacy class instead of infinitely many. An
101105
earlier version of this file claimed an explicit cheap witness in the one-place
102106
case, a companion-matrix representation of the constant-field quotient. That was
103-
overstated: the construction matches the prescribed polynomial only at a place
104-
of degree one, since a place of degree `d` sends the generator to the `d`-th
105-
power of the chosen matrix, and it needs the roots of the polynomial to be units
107+
overstated: the construction is guaranteed to match the prescribed
108+
polynomial only at a place of degree one — a place of degree `d` sends the
109+
generator to the `d`-th power of the chosen matrix, and equality of the
110+
characteristic polynomials then generally fails — and it needs the roots of the polynomial to be units
106111
at the target `λ`, which continuity supplies only at `λ₀`. Nor would any witness
107112
of that shape survive the present conclusion: a representation factoring through
108113
a procyclic group has image generated by a single matrix `C`, so its span lies
@@ -182,25 +187,38 @@ continuity.
182187

183188
## What is not machine-checked
184189

185-
Compile status and the axiom profile are checked in CI; see `Axioms.lean` and
186-
`.github/workflows/build.yml`. The axiom check covers the declarations named
187-
there and their dependency closures; a `sorry` in a declaration outside those
188-
would not be caught, since `lake build` exits successfully on the warning it
189-
emits. No instances are declared on types Mathlib owns, so the diamond an earlier
190+
Compile status, the axiom profile, and the count of `sorry` tokens are checked in CI; see `Axioms.lean` and
191+
`.github/workflows/build.yml`. The axiom check pins the set of axiom names in each named declaration's
192+
dependency closure. On its own that misses two things: a `sorry` in a
193+
declaration outside those closures, and a second `sorry` inside a closure
194+
already reporting `sorryAx`, since the set of names does not change; `lake
195+
build` accepts both with only a warning. CI therefore also counts the `sorry`
196+
tokens in the source and requires exactly one. No instances are declared on types Mathlib owns, so the diamond an earlier
190197
version created no longer arises; the five instances declared here are the
191198
projections of `CompanionRep`, whose carrier is defined here.
192199

193-
Three notions defined here have close Mathlib counterparts that are not used.
200+
Five notions defined here have close Mathlib counterparts that are not used.
194201
`LambdaAdicRep` is a `ContinuousMonoidHom`; the recurring conjunction
195-
`Q.IsPrime ∧ Q.under A = v.asIdeal` restates `Ideal.LiesOver`, the idiom
196-
`RingTheory/Frobenius.lean` itself uses; and `Field.absoluteGaloisGroup` is the
197-
fixed-closure form of `AbsGal`. Each is equivalent to what is written, and each would be the better choice in a version aimed at upstreaming. Two further
202+
`Q.IsPrime ∧ Q.under A = v.asIdeal` is membership in `Ideal.primesOver`, the
203+
idiom `RingTheory/Frobenius.lean` itself uses, where `Ideal.LiesOver` alone
204+
records only the contraction equality; `Field.absoluteGaloisGroup` is the
205+
fixed-closure form of `AbsGal`; `IsIrred` is a matrix presentation of
206+
`Representation.IsIrreducible`; and `DetFiniteOrderHom` applied to `ρ` says
207+
`IsOfFinOrder` of the composite of `Matrix.GeneralLinearGroup.det` with `ρ`.
208+
Each matches what is written over the field-valued, positive-dimension setting
209+
used here, and each would be the better choice in a version aimed at
210+
upstreaming. Two further
198211
items: `IsUnramifiedAt` is hard-wired to representations over `E_λ`, so the same
199212
inertia condition is written a second time, inline, in the conclusion of
200213
`exists_companion`, where a version stated for an arbitrary `G →* GL n R` would
201-
let hypothesis, conclusion and the family corollary share one predicate; and
202-
`FrobeniusChoice` supplies a lift at every place where only the places outside
203-
`S` are used.
214+
let hypothesis, conclusion and the family corollary share one predicate; and `FrobeniusChoice` supplies a lift at every place where only the places
215+
outside `S` are used. Alongside these, one fact of Lean's elaboration: section
216+
instance variables enter a definition only when it uses them, so the definitions
217+
here are stated over a bare commutative ring, and the Dedekind, fraction-field
218+
and algebraic-closure setting the README fixes binds only in the theorems, which
219+
include it automatically. The theorems therefore match the README's frame
220+
exactly; `IsCompatibleFamily`, which no theorem consumes, never regains that
221+
setting and is that much more general than its prose.
204222

205223
The literature attributions, including Deligne's part-numbering in Weil II and
206224
the hypotheses and conclusions of Lafforgue's Theorem VII.6, have been checked

Axioms.lean

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
/-
22
Machine-checked attestation of the axiom profile. `lake env lean Axioms.lean`
3-
fails if any proved lemma acquires an axiom dependency, or if the companion
4-
theorems stop depending on `sorryAx` — that is, if the single deliberate `sorry`
5-
silently moves or multiplies. Run in CI.
3+
fails if any proved lemma acquires an axiom dependency or if either companion
4+
theorem's axiom set changes. It pins the set of axiom names, not the number or
5+
location of `sorry` terms; the source-level count in CI covers those. Run in
6+
CI.
67
-/
78
import LambdaAdicSlice.Companions
89

LambdaAdicSlice/Companions.lean

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ Authors: Suvir Rathore
55
-/
66
/-
77
Statement-level formalisation: compatible families of λ-adic Galois
8-
representations, and the statement of Lafforgue's companion theorem for curves.
9-
10-
Five supporting results are proved. The companion theorem itself is stated only;
11-
its proof is `sorry`. Ingredients Mathlib v4.28.0 cannot construct — existence of
12-
Frobenius elements in the absolute Galois group, and the `MulSemiringAction` of
13-
`G_K` on the integral closure — are supplied as explicit data or instances and
14-
documented as such.
8+
representations, and the companion-existence statement of Lafforgue's theorem
9+
for curves.
10+
11+
Five supporting results are proved. The companion theorem is stated with its
12+
proof left `sorry`, and the family over all coefficient places is derived from
13+
it by choice, inheriting that `sorry`. The one ingredient Mathlib v4.28.0
14+
cannot construct — existence of Frobenius elements in the absolute Galois
15+
group — is taken as explicit data and documented as such.
1516
-/
1617
import Mathlib
1718

@@ -36,8 +37,10 @@ variable (A K : Type*) [CommRing A] [IsDedekindDomain A] [Field K]
3637
-- A fixed algebraic closure of `K`.
3738
variable (Kbar : Type*) [Field Kbar] [Algebra K Kbar] [IsAlgClosure K Kbar]
3839

39-
/-- The absolute Galois group `G_K`. The Krull topology instance comes from
40-
`Mathlib/FieldTheory/KrullTopology.lean`. -/
40+
/-- The automorphism group of `Kbar` over `K`. The abbreviation itself asks only
41+
for an extension; wherever the theorems below live, the ambient
42+
`IsAlgClosure K Kbar` hypothesis makes this the absolute Galois group `G_K`. The
43+
Krull topology instance comes from `Mathlib/FieldTheory/KrullTopology.lean`. -/
4144
abbrev AbsGal := Kbar ≃ₐ[K] Kbar
4245

4346
-- The coefficient field `E`.
@@ -323,7 +326,9 @@ universe u
323326

324327
/-- A **companion representation** at `λ`: a continuous representation of `G_K`
325328
into `GL_n(M)` for some finite extension `M` of `E_λ`, carrying the `E_λ`-module
326-
topology.
329+
topology. As with `AbsGal`, the structure asks of `Kbar` only that it extend
330+
`K`; the `G_K` reading comes from the `IsAlgClosure` hypothesis in force where
331+
the theorems use it.
327332
328333
The coefficient field is bundled because Lafforgue's theorem does not produce
329334
companions over `E_λ` itself. Theorem VII.6(v) states the companion over a finite
@@ -361,15 +366,17 @@ variable (A K Kbar : Type*) [CommRing A] [IsDedekindDomain A] [Field K]
361366
variable (E : Type*) [Field E] [NumberField E] (n : ℕ)
362367

363368
/-- The finite-extension companion-existence consequence of Lafforgue's Theorem
364-
VII.6(v), after fixing the coefficient field `E` and an `E_{λ₀}`-model, stated one
365-
place `λ` at a time.
369+
VII.6, after fixing the coefficient field `E` and an `E_{λ₀}`-model, stated one
370+
place `λ` at a time. Clause (v) gives the companion and its coefficient field;
371+
the companion's finite-order determinant is carried from the construction in the
372+
proof rather than read off the clause.
366373
367374
This is a slice of VII.6, not the whole of it. VII.6 begins from an irreducible
368375
lisse sheaf of finite-order determinant and constructs `E` and the polynomials
369376
`P_v`; here both are supplied as data. VII.6 also proves purity, unit-ness of the Frobenius
370377
roots away from `p` with slope bounds at the places over `p`, and a further
371-
statement descending the `n`-th power of the companion to `E_λ` itself, none of
372-
which is formalised.
378+
statement descending the `n`-fold direct sum of the
379+
companion to `E_λ` itself, none of which is formalised.
373380
374381
`A` is a finite-type Dedekind `𝔽_q`-algebra with fraction field the function
375382
field `K`, so `Spec A` is a smooth affine curve over `𝔽_q` and its closed points

README.md

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
A statement-level formalisation in Lean 4 of compatible families of λ-adic Galois
66
representations, and of the companion-existence statement of Lafforgue's theorem
7-
for curves. Five supporting lemmas are proved; the companion theorem is stated and
8-
left `sorry` deliberately. Getting the statement exactly right is the point,
7+
for curves. Five supporting lemmas are proved, the companion
8+
theorem is stated and left `sorry` deliberately, and the family over all
9+
coefficient places is derived from it by choice. Getting the statement exactly right is the point,
910
since a statement can compile, pass an axiom audit, and still be mathematically
1011
false. Several such errors were found here and corrected.
1112

@@ -48,12 +49,13 @@ determinant of finite order.
4849
The statement is made one place `λ` at a time. A family indexed by all `λ`
4950
follows by choice, and `exists_companion_family` is that derivation.
5051

51-
This is the companion-existence part of Lafforgue's Theorem VII.6(v), not the
52-
whole of VII.6. VII.6 starts from an irreducible lisse sheaf with finite-order
52+
This is the companion-existence part of Lafforgue's Theorem VII.6, not the
53+
whole of it: clause (v) gives the companion and its coefficient field, and the
54+
companion's finite-order determinant is carried from the construction in the
55+
proof. VII.6 starts from an irreducible lisse sheaf with finite-order
5356
determinant and constructs `E` and the `P_v`, which are hypotheses here; it also proves
5457
purity, unit-ness of the Frobenius roots away from `p` with slope bounds at the
55-
places over `p`, and a further statement descending the `n`-th power of the
56-
companion to `E_λ` itself. In
58+
places over `p`, and a further statement descending the `n`-fold direct sum of the companion to `E_λ` itself. In
5759
the other direction, the curve here is the affine `Spec A` with `S` removed,
5860
where VII.6 treats a smooth curve as an open subscheme of a projective one.
5961

@@ -212,10 +214,14 @@ made the statement assert more than Lafforgue's theorem gives. A `sorry` conceal
212214
the difference: a statement that is unprovable because it is false looks exactly
213215
like a statement that is unproved because the infrastructure is missing.
214216

215-
CI runs the build and checks the axiom profile of the declarations named in
216-
`Axioms.lean`, so the deliberate `sorry` cannot silently spread into them. It
217-
does not cover declarations outside their dependency closures, since `lake build`
218-
exits successfully on the warning a `sorry` emits. Further review is welcome.
217+
CI runs the build, checks the axiom profile of the declarations named in
218+
`Axioms.lean`, and counts the `sorry` tokens in the source, requiring exactly
219+
one. The axiom guard pins the set of axiom names in each declaration's
220+
dependency closure — the five lemmas admit none beyond the classical three, the
221+
two theorems additionally `sorryAx` — not the number or location of `sorry`
222+
terms. The count is what rules out a second `sorry` arriving inside an
223+
already-tainted proof, or in a declaration outside the guarded closures, either
224+
of which `lake build` accepts with only a warning. Further review is welcome.
219225

220226
## Next steps
221227

0 commit comments

Comments
 (0)