Repository navigation
feat(lean,#14784): hecke_lean — opérateurs de Hecke classiques (port FLT, premier lake 4.33) - #14803
Conversation
…T port, first 4.33 lake)
New autonomous lake MyIA.AI.Notebooks/SymbolicAI/Lean/hecke_lean:
heckeMatrix/heckeDiagMatrix representatives, heckeU/heckeT operators via
slash action, full linearity, coeffHeckeT with the p|n / p∤n reading, plus
computable examples (weight 12, p in {2,3}) absent from upstream.
Pedagogical port of anthropics/fermats-last-theorem
Definitions/Def_ModularForm_HeckeOperator.lean @ aa2d8b34692b — statements
and proofs carried over unchanged, FR docstrings + EN sibling
(namespace ModularForm_en, body parity verified modulo namespace), NOTICE.md
Apache-2.0 attribution.
Target Lean v4.33.0 + Mathlib db584cd6 (#14773 anchor — first CoursIA lake
on 4.33; does not depend on the galois_lean migration). Single targeted
import, no monolithic FLT import.
Evidence (local, WSL): lake build SUCCESS 2290 jobs (both root aggregators
globbed — stricter than sensitivity_lean, whose FR root stays uncompiled);
grep sorry = 0 on all four .lean files; #print axioms heckeT/coeffHeckeT
FR+EN = [propext, Classical.choice, Quot.sound] (matches the issue anchor).
CI: lean-hecke.yml (lean-build + lean-axiom gates, sorry-baseline 0).
LEAN_INVENTORY.md row added.
Closes #14784
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review — #14803 (lake hecke_lean : opérateurs de Hecke T_p/U_p, #14784)
Verdict : FAVORABLE — création pure (+998/−2, 13 fichiers, aucun code existant touché), premier lake CoursIA sur Lean 4.33.0 + Mathlib db584cd6 (ancre #14773), autonome vis-à-vis de galois_lean comme exigé par l'issue.
Vérifié firsthand ce tour (head 9d003dbe) :
- Le port est fidèle à l'amont :
Def_ModularForm_HeckeOperator.lean@aa2d8b3469existe dansanthropics/fermats-last-theorem(9 724 o) et le head du fichier correspond exactement — mêmes imports (SlashActionsseul), même namespace, mêmesupperTriangularGL/heckeMatrix/heckeDiagMatrixavec preuves identiques. Le claim « énoncés/preuves repris tels quels » est exact, etNOTICE.mdpréserve Apache-2.0 avec commit amont cité. - La math est saine (module lu en entier, 329 lignes) : déterminants exacts (
det γ_{p,j} = pvia1·p − j·0), cas dégénérésp = 0neutralisés partout (identité), lecture des slash correcte (p⁻¹pourγ_{p,j}carp^(k−1)/p^k;p^(k−1)pour le diagonal cardenom = 1), linéarité complète (add/smul/neg/sub pour U et T), etcoeffHeckeT = a(n·p) + [p∣n] p^(k−1) a(n/p)est la formule standard. Les 6 exemples calculables recalculés à la main :a 6 = 6,a 2 = 2(2∤1),4 + 2¹¹(2∣2),a 6 = 6(2∤3),9 + 3¹¹(3∣3),1 + 2¹¹(a≡1) — tous justes. - 0 sorry / axiom / admit / native_decide sur
HeckeOperator.leanET le mirror_en(grep direct), racines = imports simples. Axiomes du body ([propext, Classical.choice, Quot.sound]surheckeT/coeffHeckeTFR+EN) = les 3 standard, conformes à l'ancre de l'issue — re-joués par la CI. - Mirror FR/EN structurellement fidèle : 39/39 noms de déclarations identiques (diff = docstrings/namespace), cohérent avec le claim « parité des corps modulo namespace », et
i18n sibling driftvert au head. - CI au head : 28 checks, 0 failure —
Lean CI (hecke_lean)etProof integrity (hecke_lean)success (build + axioms re-joués, fail-on-sorry), PR gate, Always-on guards, Gitleaks verts. Leçon #6585 appliquée : les DEUX racines (Hecke/Hecke_en) couvertes par le glob.oneet compilées — plus strict quesensitivity_lean.
Observations :
- Le pont géométrie → coefficients est documenté, pas prouvé :
coeffHeckeTtranscrit la formule combinatoire, mais aucun théorème ne relie l'action deheckeTsur les fonctions aux coefficients de Fourier (le vrai théorème exigerait la théorie des q-expansions). Le header du module dit la formule « formalisée parcoeffHeckeT» — c'est une def parallèle, comme dans l'amont FLT. Acceptable pour une première tranche (le docstring du module annonce Petersson/cusp forms hors périmètre), mais le lecteur pédagogique peut croire le pont prouvé — une phrase « la liaison T_p f ↔ coefficients sera prouvée au grain aval » lèverait l'ambiguïté. ppremier implicite : la décomposition enpreprésentants + diagonal n'est la décomposition classique deΓ(1)\M₂(ℤ)que pourppremier ; les defs sont typéesp : ℕquelconque et restent formellement correctes, le docstring dit « usuellement premier » — fine, mais un grain aval surpcomposé (opérateursT_ngénéraux) devra revisiter ces defs.- Le docstring du dernier example parle de « valeur propre du terme constant » — c'est une lecture de coefficient (pour a≡1), pas une valeur propre au sens fonction propre ; demi-ligne de vocabulaire à affiner si le grain aval touche cette section.
— structural review (HeckeOperator.lean lu en entier FR + greppé EN ; amont FLT fetché et comparé ; axioms, CI et NOTICE vérifiés en direct au head).
Path-collision (organ #13359/#13615)Cette PR #14803 (
|
Grain: MED/lean -- lane myia-po-2026:CoursIA -- prev: MED/tooling #14763
Résumé
Nouveau lake autonome
hecke_lean: opérateurs de Hecke classiquesT_p/U_psur le demi-plan supérieur — représentantsheckeMatrix/heckeDiagMatrix, linéarité complète, formule des coefficientscoeffHeckeT(casp ∣ n/p ∤ n), exemples calculables ajoutés (poids 12,p ∈ {2,3}). Port pédagogique deanthropics/fermats-last-theorem(Def_ModularForm_HeckeOperator.lean@aa2d8b34692b) : énoncés/preuves repris tels quels, docstrings FR + sibling EN (ModularForm_en, parité des corps vérifiée modulo namespace), attribution Apache-2.0 dansNOTICE.md.Premier lake CoursIA sur Lean v4.33.0 + Mathlib
db584cd6(ancre #14773) — autonome, sans dépendance à la migrationgalois_lean. Un seul import Mathlib ciblé, aucun import monolithique FLT.Preuves (critère B — PR Lean)
lake buildSUCCESS local (WSL) :Build completed successfully (2290 jobs)— les DEUX agrégateurs racines compilés (glob.one \Hecke`` ajouté : plus strict que sensitivity_lean, dont la racine FR reste non-compilée — leçon Lean i18n #4980 : les modules root <Lib>_en.lean aggregators ne sont pas batis par lake build (orphan glob coverage) #6585 appliquée aux deux racines).grep -c sorry= 0/0/0/0 sur les 4 fichiers.lean(Hecke/HeckeOperator{,_en}.lean, Hecke{,_en}.lean). Aucunnative_decide.#print axiomslocal (WSL, post-build) :ModularForm.heckeT→[propext, Classical.choice, Quot.sound]ModularForm.coeffHeckeT→[propext, Classical.choice, Quot.sound]ModularForm_en.heckeT/ModularForm_en.coeffHeckeT→ identiques (parité byte des preuves)heckeTetcoeffHeckeT:[propext, Classical.choice, Quot.sound]»). La CIlean-hecke.yml(jobscilean-build +proof-integritylean-axiom, sorry-baseline 0, fail-on-sorry) re-joue build + axioms sur chaque PR touchant le lake.Choix d'implémentation
rw [coeffHeckeT_of_dvd (by decide)]rejetée par Lean (métavariables — leby decides'élaborait avant unification) ; réécrit enhave h : … := by decideconcret avantsimp only [coeffHeckeT, if_pos/if_neg h]— déterministe, buildé.namespace/enduniquement (suffixe_enlégitime)..submodules \Hecke` + `.one `Hecke` + `Hecke_en`— la racine FR n'était pas dans l'ensemble de build du pattern sensitivity (vérifié :Hecke.olean` absent avant l'ajout).Acceptance #14784 (8/8)
lake buildcomplet SUCCESSsorry,sorryAxounative_decideCloses #14784