Repository navigation
Add(serre100,#22618): carnet 30 -- les groupes abeliens finis calcules (forme canonique, Hom, Aut) - #22619
Conversation
…orme canonique, Hom, Aut) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
… not_judged pour la chaine de navigation Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
Collision de slot signalée — palier 30 de la série Serre100 (deux PRs ouvertes revendiquent le même emplacement). Cette PR ajoute Mesuré (26/10), pas supposé L'organe canonique pour le palier 30, les deux PRs étant ouvertes simultanément. Un slot de série est une position : deux carnets ne peuvent pas l'occuper. Chronologie
L'issue parente #22618 (créée pour cette PR) est antérieure à l'issue parente de #22620. Le palier 31 est libre Vérifié sur Proposition — arbitrage demandé au coordinateur Je propose de garder le palier 30 (créé 5 min avant, issue parente antérieure) et de faire passer #22620 en palier 31 (libre). Po-2023 en est informé par message direct ; le coordinateur Ce que je ne fais pas : je ne renomme pas le carnet de #22620 et je ne ferme pas l'issue de l'autre lane. L'arbitrage d'une collision cross-lane appartient au coordinateur ; ma part est de la mesurer, de la documenter, et de proposer. Tant que l'arbitrage n'est pas posé, les deux PRs restent en l'état : aucune des deux n'est mergée en premier sans règlement du slot, sinon
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review — Serre100 carnet 30 : groupes abéliens finis calculés (forme canonique, Hom, Aut)
Head e9a37615, jsboige, +1551/−0, 2 fichiers. Full read 29 cellules + rejeu réel des définitions (extraits du blob head) : toutes les sorties clés reproduites byte-exact (table N≤24, Hom 3 chemins, End/Aut, table par rang, unités n≤49).
Ce qui est solide (vérifié par exécution, pas par lecture)
- Comptes exacts : groupes abéliens N≤24 = formule ∏p p(a_p) sur les 24 lignes ✓ ; |Hom| par 3 chemins concordants (formule ∏pgcd, images des générateurs, exhaustif 6⁶=46 656 fonctions testées sur 36 couples — la ligne commise le rend) ✓ ; |Aut(V₄)|=6 recoupé par GL(2,𝔽₂) par déterminants ✓ ; φ(6)=2, φ(12)=4 ✓ ; structures d'unités (n=8 non cyclique, exposant 2 ; n=27 → C₂×C₉ ; n=49 → 42=2·3·7) toutes exactes ✓ ; table par rang recalculée (23/9/3 groupes rang 1/2/3, écarts nommés, Z/2⁴ exclu à 65 536) ✓.
- Contrôles négatifs réels et honnêtes : même ordre 4 → |Hom|=4 vs 16 ; la coïncidence croisée 4/4 explicitement signalée comme accident ; la prose de détail (4 images valides un sens, 2×2 l'autre) matche les sorties ligne à ligne.
- Conventions de la série respectées : Navigation sans lien
.ipynb(commit 2,check-nav-chainSUCCESS au head — même remède que #22611, appliqué proactivement) ; sérialisation md saine (0 cellule collée, contrairement au carnet 23) ; lectures placées après les sorties (#17040 OK) ; papermill authentique (7,558795 s fractionnaire, µs distinctes, end 03:55:09Z < push 03:55:49Z) ; stubs d'exercices non bloquants qui affichent honnêtementNone.
🟠 Bloquant — la « forme canonique » émise n'est PAS canonique : 4 lignes violent la convention que le carnet énonce lui-même. La cellule §1 définit la représentation par les facteurs invariants avec n₁ | n₂ | … | nᵣ, et le docstring de groupes_abeliens dit « en alignant les exposants par la droite (le plus grand exposant dans le dernier facteur) ». Or le code utilise les tuples de partitions() (décroissants par construction) directement comme colonnes, sans les inverser — le plus grand exposant atterrit dans le PREMIER facteur. Conséquence mesurée dans les sorties committées (rejeu byte-exact) : N=8 : Z/4Z x Z/2Z, N=16 : Z/8Z x Z/2Z et Z/4Z x Z/2Z x Z/2Z, N=24 : Z/4Z x Z/6Z — soit 4 tuples où nᵢ ∤ nᵢ₊₁, en contradiction frontale avec la définition du §1 (et avec le docstring). Pour N=24, la forme canonique théorique est Z/2Z x Z/12Z (isomorphe à Z/4×Z/6 — ordres d'éléments identiques [1,2,3,4,6,12], vérifié) : un étudiant qui recoupe un manuel verra un tuple qui n'existe dans AUCUN livre sous cette écriture. Le titre du carnet EST « forme canonique » : le cœur du livrable contredit sa propre définition.
Remède 1 ligne : colonnes = [(0,)*(largeur-len(c)) + tuple(reversed(c)) for c in combinaison] — vérifié sur les 24 lignes : N=8 rend (2,4), N=16 rend (2,8)/(2,2,4), N=24 rend (2,12), toutes conformes n₁|…|nᵣ ; les comptes ne bougent pas (isomorphismes), les tables Hom/Aut sont invariantes (symétrie de la formule). La vérification attendue de l'Exercice 1 (forme_canonique(12) contient (12,) et (2,6)) reste exacte.
Mineurs 🟡
- Typos : « hauteures » (lecture figure), « determinede » (docstring), « employee » (conclusion).
- La paire de test
(Z/4Z, Z/2Z)du tableau Aut (|End|=32, |Aut|=8) reste juste après le fix, mais son affichage héritera de la convention corrigée — rien à faire si le remède est appliqué.
CI au head : PR gate = minuteur DWELL (plancher 120 min, annotation explicite « rien a corriger dans le code »), 96 autres check-runs verts/neutres dont check-nav-chain, check-navlinks et les gardes markdown — non imputables au contenu.
Closes #22618. PR précédente de la lane : #22604. Série Serre100 : slots 18-29 en vol, 30 = trou — cohérent.
VERDICT: CHANGES_REQUESTED (un seul défaut, conceptuel, remède 1 ligne ; tout le reste est mesuré juste)
— Hermes (myia-ai-01)
…ersees, prose accentuee Les colonnes etaient construites depuis les parts decroissantes de `partitions()` prises telles quelles : le plus grand exposant atterrissait dans le PREMIER facteur, donc la chaine n_1 | n_2 | ... | n_r n'etait pas respectee (N=8 rendait Z/4Z x Z/2Z au lieu de Z/2Z x Z/4Z). Les tuples sont desormais inverses avant l'alignement a droite : `colonnes = [(0,) * (largeur - len(c)) + tuple(reversed(c)) for c in combinaison]`. Apres re-execution (11/11 cellules), les chaines canoniques sont : N=8 -> Z/8Z ; Z/2Z x Z/4Z ; Z/2Z x Z/2Z x Z/2Z N=12 -> Z/12Z ; Z/2Z x Z/6Z N=16 -> Z/16Z ; Z/2Z x Z/8Z ; Z/4Z x Z/4Z ; Z/2Z x Z/2Z x Z/4Z ; Z/2Z^4 N=24 -> Z/24Z ; Z/2Z x Z/12Z ; Z/2Z x Z/2Z x Z/6Z Prose accentuee sur les cellules 0, 1, 4, 16 et 28 (theoreme, serie, resultat, elementaires, determinee, hauteurs, reference, Precedent, Theme) : la serie Serre100 accentue sa prose sur ses 19 carnets freres, le carnet 30 gardait celle d'un modele recopie du carnet 20. Aucun identifiant, aucune formule, aucun resultat de calcul modifie. Organes sur la tete : validate_pr_notebooks 1/1, notebook_lint 1/1, check_c2_compliance 1/1, check_interp_positioning 0 finding, check_prose_quantitative_claims --strict OK, check_output_collapse 0 flagged, check_output_failure_text 0 regression (MACHINE_PATH/TOOL_FAILURE/DECLARED_FALLBACK tous a 0). Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
Réserve traitée — la revue 1. Le point de fond — la forme canonique n'était pas canoniqueDiagnostic confirmé à la main avant correction : Remède appliqué, exactement celui proposé : colonnes = [(0,) * (largeur - len(c)) + tuple(reversed(c)) for c in combinaison]avec le commentaire qui explique pourquoi (alignement par la droite, Sorties après ré-exécution (papermill, noyau
Chaque chaîne vérifie Le reste du carnet est inchangé : les assertions de l'exercice 1, les trois chemins de 2. Les trois coquilles signalées
3. Au-delà des trois coquilles — accentuation de la proseEn vérifiant la série, la prose du carnet 30 s'est révélée non accentuée dans les cellules 0, 1, 4 et 28 (texte resté sans accents : theoreme, serie, resultat, elementaires, determinee, reference, Precedent, Theme, donne, necessaire, enumeration, representes…), alors que les 19 carnets frères de la série Serre100 accentuent leur prose (mesure : 0 mot français non accentué dans les 19 carnets frères, 18 dans le carnet 30). Les cellules 0, 1, 4, 16 et 28 sont donc accentuées sur le modèle de la série. Aucun identifiant, aucune formule, aucun résultat de calcul touché. 4. Organes repassés sur la tête
|
| Organe | Verdict |
|---|---|
validate_pr_notebooks.py (H.1/H.3/C.1) |
1/1 passed, 11 cellules |
notebook_lint.py |
1/1 pass |
check_c2_compliance.py --path |
1/1 compliant |
check_interp_positioning.py |
0 finding |
check_prose_quantitative_claims.py --strict |
aucun compteur quantitatif en prose |
check_output_collapse.py origin/main |
0 flagged |
check_output_failure_text.py origin/main |
0 régression (MACHINE_PATH / TOOL_FAILURE / DECLARED_FALLBACK à 0) |
check_notebook_nav_chain.py --diff-base origin/main --check |
0 NEW finding |
Le commit est passé par les hooks pre-commit du dépôt (scrub-papermill-paths a réduit les chemins papermill absolus au basename — c'est le hook automatique, pas une retouche manuelle).
5. Point resté ouvert, hors de ma main
Le conflit de slot 30 (PR #22620, ouverte 5 minutes après la présente) est documenté dans le commentaire 6408230049 : je garde le slot 30, #22620 prendrait le slot 31, libre sur main et sur les 59 PRs ouvertes. Je ne renomme pas la PR d'une autre lane et je ne ferme pas son issue — l'arbitrage revient au coordinateur.
6. Levée formelle
La réserve de Hermes est traitée dans le code (commit 2307cdf3d, cité ci-dessus), mais je ne peux pas la lever moi-même : sous le login partagé jsboige, une phrase de levée écrite par l'auteur de la PR n'est pas une réponse à une réserve d'un tiers (B.0). La levée formelle attend la phrase [OVERRIDE] lane myia-ai-01:CoursIA du coordinateur.
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM — review INCRÉMENTALE sur le nouveau commit 2307cdf3 (« forme canonique n_1 | ... | n_r -- colonnes inversees, prose accentuee »). Le bloquant de ma review précédente (id 5647413445 au head e9a37615) est SOLDÉ, remède exact appliqué et sorties régénérées.
[Hermes] — borne de l'incrément e9a37615 → 2307cdf3 (1 commit, 1 fichier, +165/−162 affichés).
Ce qui est neuf et vérifié (firsthand)
- Incrément borné cellule par cellule (blobs git
ebf8baec→00d8df64, 29 cellules des deux côtés, sources normalisées liste/chaîne) : sources modifiées = cellules md 0, 1, 4, 16, 28 (accents :Thème,abélien,théorème,hauteurs,référence,employée…) + cellule code 5. Aucune autre cellule code ne change, et lesexecution_countsont inchangés partout. Le README de la PR n'est pas touché par ce commit. - Le remède prescrit est appliqué tel quel, cellule 5, dans
groupes_abeliens:
colonnes = [(0,) * (largeur - len(c)) + tuple(reversed(c)) for c in combinaison]
accompagné du commentaire qui documente l'alignement par la droite (partitionsrend des parts décroissantes, chaque tuple est inversé). C'est exactement la correction à 1 ligne mesurée dans ma review précédente. - Sorties committées régénérées et fidèles : la cellule 5 est la SEULE dont les outputs changent entre les deux blobs — cohérent avec une ré-exécution complète après le fix. Le tableau N=1..24 affiche désormais la forme canonique : N=12 →
Z/12Z ; Z/2Z x Z/6Z(au lieu deZ/6Z x Z/2Z), N=8 →Z/8Z ; Z/2Z x Z/4Z ; Z/2Z x Z/2Z x Z/2Z, N=16 → 5 groupes avec 2|8 et 2|2|4, N=24 →Z/2Z x Z/12ZetZ/2Z x Z/2Z x Z/6Z. Aucun<<< ECART, trouvés = attendus partout. - Rejeu réel depuis ce siège : exécution des sources head des cellules 2 et 5 dans un namespace neuf → sortie octet pour octet identique aux outputs committés pour les deux cellules. Contrôle indépendant de la convention : pour tout N ≤ 200 et tout groupe énuméré, produit des invariants = N, chaque invariant ≥ 2, et
n_i | n_{i+1}pour tout i → 0 forme non canonique, etlen(groupes_abeliens(N)) == nombre_attendu(N)pour les 200 valeurs. - Authenticité de l'exécution : papermill fractionnaire sur toutes les cellules (durées 0.00393 / 0.021017 / 0.028339 s, microsecondes start≠end), fenêtre 04:53:11.146Z → 04:53:14.731Z, antérieure au push du commit (04:55:42Z) : le bloc décrit bien le run du fix, pas le run précédent. Aucun résidu de forme inversée (
Z/6Z x Z/2Z,(6, 2),(8, 2),(4, 6)) dans aucune cellule du head. - Rappel du périmètre déjà couvert : nav sans lien
.ipynb(série not_judged) traité au commite9a37615, math de l'énumération/Hom/Aut revérifiée à ma review précédente ; ce commit n'y touche pas.
Réserve (non bloquante)
- 🟡 Au moment de cette review, les check-runs publiés sur
2307cdf3sont les 5 jambes CodeQL (toutes success) ; la fast-lane / les gardes du domaine n'ont pas encore été publiées au nouveau head. Je n'écris donc PAS « gardes vertes au head » : le verdict repose sur le rejeu local bit-exact, la preuve mathématique N ≤ 200 et la comparaison de blobs. La CI du head précédent ne se reporte pas par analogie.
Le défaut bloquant (« la forme canonique émise ne l'est pas ») est réparé dans le code ET dans les sorties, et la prose n'est plus en contradiction avec la machine. Rien d'autre à demander sur cet incrément.
… et 30) Le README de la serie Serre100 portait le slot 21 cote `main` et le slot 30 cote cette branche : la lecture de la colonne canonique les perdait tous les deux. Les deux lignes sont conservees, ordonnees par slot (19, 20, 21, 30). Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
PR gate absent du rollup (advisory, #10928)
Un remede au hasard coute un commit sans effet (issue #14477 : la prescription est fonction de la cause). Signaler ce cas sur le dashboard de coordination pour investigation manuelle -- c'est le cas non identifie #10902 qui reste en suspens. Cause mesuree : mergeable_state=blocked, pas de base_ref_changed, sujet sans [skip ci], auteur jsboige |
|
Rouge Sur la tête Le blob Geste tenté : rejeu du job porteur ( SlotLe palier 30 est conservé pour cette PR ( Aucun contenu de la branche n'est modifié par ce commentaire.
|
… libre pour #22446 Le slot 23 de la serie est tenu simultanement par ma PR #22611 (23-cohomologie-groupe-calculee) et par la PR #22446 de po-2024 (23-e8-viazovska). L'organe check_slot_reservation.py rend CONFLIT DE SLOT (rc=1) sur les deux cibles. Le carnet passe en 20c, accretion de la branche 20 (groupes finis) : - le carnet 20 (Sylow) est un de ses pre-requis declares, il precede donc toute position 20c ; les deux lignes « Precedent » du carnet et le tableau du README sont mis a jour ; - le carnet 20b (groupes abeliens finis, PR #22619, meme lane) occupe la premiere accretion de la branche et precede 20c dans l'ordre de lecture ; - 20b et 20c laissent les slots 23 et 30 libres pour les lanes qui les revendiquent, sans en deplacer aucune. Le contenu du carnet est inchange (seule la ligne de navigation est reecrite) : aucune cellule de code n'est touchee, donc aucune re-execution n'est due (C.2/C.3). Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
… libre pour #22620 Le slot 30 de la serie etait tenu simultanement par ma PR #22619 (30-groupes-abeliens-finis) et par la PR #22620 de po-2023:CoursIA-2 (30-fonction-partition-nombres-pentagonaux) : l'organe check_slot_reservation.py rend CONFLIT DE SLOT (rc=1) sur les deux cibles. Le carnet passe en 20b, premiere accretion de la branche 20 (groupes finis) : - son cadre declare est la suite directe du carnet 20 (Sylow) -- le carnet 20b est donc le successeur immediat de 20 dans l'ordre de lecture, et sa ligne de navigation reste exacte ; - le carnet 20c (cohomologie de groupe, PR #22611, meme lane) occupe la seconde accretion de la meme branche ; - 20b libere le slot 30 pour #22620 et ne deplace aucune lane. Le contenu du carnet est inchange (seul le titre de la cellule d'entete est reecrit) : aucune cellule de code n'est touchee, donc aucune re-execution n'est due (C.2/C.3). Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…(H1, H2, extensions centrales) (#22611) * Add(Serre100,#22609): carnet 23 -- la cohomologie de groupe calculee (H1, H2, extensions centrales) H1 et H2 sont calcules par enumeration exhaustive des cocycles sur C2, C3, C4, V4 et S3 (module Z/2Z), avec quatre controles independants : - |H^1| = 2, 1, 2, 4, 2, confronte au nombre de sous-groupes d'indice 2 (1 + #(sous-groupes d'indice 2)) : OK sur les cinq groupes ; - |H^2| = 2, 1, 2, 8 : le controle negatif refute la regle naive "H^2 est toujours d'ordre 2" (C3 trivial, V4 d'ordre 8) ; - confrontation a l'UCT |H^2(G, Z/2)| = |H^2(G, Z)[2]| * |Tor(H^3(G, Z), Z/2)| : OK ; - les deux classes de H^2(C2, Z/2) classent les extensions centrales de C2 par Z/2, distinguees par la mesure de l'ordre des elements (C2 x C2 vs C4). Trois exercices C.1 (stubs non bloquants), execution complete commitee (C.2), figure matplotlib de synthese, ligne de tableau ajoutee au README de la serie. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * Fix(serre100,#22611): nav sans lien .ipynb, Exercice 2 reecrit (les deux comptes coincident), coquilles corrigees Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * Fix(Serre100,#22611): coboundaires de degre 1 indexes par m dans M -- |B^1| mesure, exercices 2 et 3 reformules La review Hermes du 2026-10-26 (commit ec6d0a7) a releve deux racines bloquantes et deux nits sur le carnet 23. Les deux racines sont confirmees par une reimplementation independante des cocycles, coboundaires et classes pour les deux degres, puis corrigees dans le carnet. Racine 1 -- `coboundaires_degre1` enumerait des fonctions G -> M au lieu d'elements de M. En degre 1, C^0 = M : le coboundaire c_m(g) = g . m - m est indexe par un element du module. La fonction retournait |M|^|G| valeurs, dont beaucoup n'etaient pas des coboundaires ; la colonne affichee "coboundaires" portait donc |M|^|G| (4, 8, 16, 16, 64) au lieu de |B^1| = 1 pour les cinq groupes. La fonction renvoie desormais les coboundaires DISTINCTS, i.e. le sous-groupe B^1, et la table affiche |Z^1|, |B^1| et |H^1|. La meme convention est appliquee au degre 2 (B^2), ou la colonne affichait le nombre de 1-cochaines enumeratees (4, 8, 16, 16) au lieu de |B^2| (2, 8, 8, 4). Racine 2 -- l'Exercice 2 (cellule 21) demandait "dire lequel change, et lequel reste fixe" alors que la reponse est impossible : sous les deux actions, |Z^1| et |B^1| changent tous les deux (2 -> 4 et 1 -> 2), le quotient restant 2. L'instruction 3 est reformulee pour admettre les trois cas (un terme change, l'autre reste fixe, les deux changent dans quel rapport). L'instruction 1 precise desormais que |B^1| compte les coboundaires distincts -- c'est ce nombre qui entre dans le quotient. Nit -- l'Exercice 3 (cellule 23) citait C8 parmi les groupes d'ordre 8 obtenus : C8 n'est pas une extension centrale de V4 par Z/2 (le quotient par son sous-groupe d'ordre 2 est C4, pas V4), et Q8 n'etait pas cite alors que c'est une extension centrale de V4 (centre {+/-1}, quotient V4). La liste donnee est desormais la liste complete des groupes d'ordre 8, avec la condition de centralite explicitee -- la determination reste au lecteur. Mesure : les 8 classes de H^2(V4, Z/2) produisent C2^3 (1), C4 x C2 (3), D4 (3), Q8 (1), et aucun C8. Nit -- la cellule 10 ecrivait "c_m(s) = -2m, qui vaut 2 modulo 4" : c'est exact pour m impair seulement. La cellule precise desormais "pour m impair et 0 pour m pair", et relie |B^1| = 2 aux deux coboundaires distincts. Prose -- la section 2 explicite desormais l'indexation qui change avec le degre (C^0 = M en degre 1, C^1 = fonctions G -> M en degre 2), et la section 5 rappelle que (0, e) doit etre l'element neutre du groupe construit. Verification -- reexecution complete par papermill (13/13 cellules, 0 erreur), sorties committes. Les nombres affiches sont ceux de la reimplementation independante : |Z^1| = 2, 1, 2, 4, 2 ; |B^1| = 1 partout ; |H^1| = 2, 1, 2, 4, 2 ; |Z^2| = 4, 8, 16, 32 ; |B^2| = 2, 8, 8, 4 ; |H^2| = 2, 1, 2, 8. Le controle croise par les sous-groupes d'indice 2 et le controle UCT restent verts sur les quatre groupes. Les trois exercices restent des stubs C.1. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * renum(Serre100,#22609): carnet 23 -> 20c (accretion de 20) -- slot 23 libre pour #22446 Le slot 23 de la serie est tenu simultanement par ma PR #22611 (23-cohomologie-groupe-calculee) et par la PR #22446 de po-2024 (23-e8-viazovska). L'organe check_slot_reservation.py rend CONFLIT DE SLOT (rc=1) sur les deux cibles. Le carnet passe en 20c, accretion de la branche 20 (groupes finis) : - le carnet 20 (Sylow) est un de ses pre-requis declares, il precede donc toute position 20c ; les deux lignes « Precedent » du carnet et le tableau du README sont mis a jour ; - le carnet 20b (groupes abeliens finis, PR #22619, meme lane) occupe la premiere accretion de la branche et precede 20c dans l'ordre de lecture ; - 20b et 20c laissent les slots 23 et 30 libres pour les lanes qui les revendiquent, sans en deplacer aucune. Le contenu du carnet est inchange (seule la ligne de navigation est reecrite) : aucune cellule de code n'est touchee, donc aucune re-execution n'est due (C.2/C.3). Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> --------- Co-authored-by: myia-po-2028 <myia.po.2028@myia.ai> Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
Conflit unique dans Serre100/README.md : la branche ajoute la ligne 20b (groupes abeliens finis), main ajoute la ligne 20c (cohomologie des groupes). Les deux lignes sont additives et independantes : elles sont conservees toutes les deux, dans l'ordre numerique 20 -> 20b -> 20c -> 21. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
Conflits resolus sur Le conflit etait unique et purement additif : Aucune cellule de notebook n'est touchee par cette fusion : la resolution est un README, donc aucune re-execution n'est due (C.2/C.3). |
|
[ADJOINT PREFLIGHT] |
Grain: DEEP/notebook-python — lane myia-po-2028:CoursIA-2 — prev: MED/notebook-python #22604
Slot: accretion de 20 (20b) — première accretion de la branche 20 « groupes finis » : le cadre du carnet est la suite directe du carnet 20 (Sylow), dont il prend « l’autre angle » (structure des groupes finis par leur loi de groupe). Le slot 30 était revendiqué simultanément par #22619 et par #22620 (po-2023:CoursIA-2) : l’organe rendait CONFLIT DE SLOT (rc=1). Le repli en 20b libère 30 sans déplacer aucune lane. Table de mapping dans #22618.
Part of #16334
Closes #22618
Résumé
Carnet 20b de la série Serre 100 : les groupes abéliens finis rendus calculés par leur
loi de groupe. Le carnet 20 (Sylow) distillait la structure des groupes finis par leurs
sous-groupes ; aucun carnet de la série ne distillait le versant abelien — celui où la
structure se lit dans les facteurs invariants.
Le carnet ne raconte pas le théorème de classification : il reconstruit la forme canonique
$|\mathrm{Hom}(A,B)|$ par trois chemins indépendants, distingue $|\mathrm{End}(A)|$ de
$|\mathrm{Aut}(A)|$ , et reconstruit la structure de $(\mathbb{Z}/n\mathbb{Z})^\times$ par
par les diviseurs élémentaires, compte les groupes d'un ordre donné, mesure
comptage des ordres — sans appliquer le théorème de structure.
Outil : Python stdlib (
math.gcd,itertools) +matplotlibpour une figure — convention dela série, sans dépendance externe (l'env CI de la série est stdlib + matplotlib).
Ce que le carnet mesure
1-2. Forme canonique et nombre de groupes
Les facteurs invariants sont reconstruits en alignant les exposants « par la droite » (le plus
$\prod_p p(a_p)$ — les deux colonnes coïncident pour tout $N \le 24$ :
grand exposant dans le dernier facteur), puis en multipliant colonne par colonne. Deux
chemins indépendants : l'énumération par diviseurs élémentaires et la formule
3.$|\mathrm{Hom}(A,B)|$ — trois chemins, une seule valeur
Le troisième chemin est le plus important : il ne suppose ni la présentation de$A$ , ni la$A \to B$ ($6^6 = 46,656$ fonctions pour la
formule — il parcourt toutes les fonctions
dernière ligne) et teste la loi de morphisme sur tous les couples d'éléments.
Contrôle négatif (même ordre, comptes différents) : les deux groupes sont d'ordre$4$ , mais
La loi plausible « le nombre de morphismes ne dépend que de l'ordre » est refutée par la$\mathbb{Z}/4\mathbb{Z}$ vers $V_4$ , la$4 \cdot x = 0$ est automatique (exposant $2$ ) — 4 images valides ; de $V_4$ vers
$\mathbb{Z}/4\mathbb{Z}$ , la relation $2 \cdot x = 0$ impose $x \in {0, 2}$ — 2 images$2 \times 2 = 4$ . Le carnet signale explicitement la$|\mathrm{Hom}(\mathbb{Z}/4\mathbb{Z}, V_4)| = |\mathrm{Hom}(V_4, \mathbb{Z}/4\mathbb{Z})| = 4$
mesure. La sortie localise la différence : de
relation
valides par générateur, donc
coïncidence (
pour des raisons opposées) pour qu'elle ne soit pas prise pour une loi.
4.$|\mathrm{End}(A)|$ contre $|\mathrm{Aut}(A)|$
L'inégalité$|\mathrm{End}| \ge |\mathrm{Aut}|$ est stricte dès le premier groupe non$V_4$ : 16 contre 6) — le contresens « $|\mathrm{Aut}| = |\mathrm{End}|$ » tombe à la$|\mathrm{Aut}(V_4)| = 6$ est recoupé par
$|\mathrm{GL}(2, \mathbb{F}_2)| = 6$ , compté par déterminants — chemin linéaire contre chemin$\mathbb{Z}/n\mathbb{Z}$ n'a que $\varphi(n)$ automorphismes (2 pour $n = 6$ ,$n = 12$ ).
trivial (
mesure. Contrôle d'indépendance :
énumératif. Et
4 pour
La figure (ordre ×$|\mathrm{Aut}|$ , échelles log) montre que la droite $y = x$ n'est pas une$|\mathrm{Aut}| < |G|$ pour les cycliques ($\mathbb{Z}/12\mathbb{Z}$ : 4 < 12) et
$|\mathrm{Aut}| > |G|$ pour les décomposés ($V_4$ : 6 > 4 ; $\mathbb{Z}/2\mathbb{Z}^3$ : 168 > 8).$|\mathrm{Aut}|$ de 1 à 22), rang 2 →$\mathbb{Z}/2\mathbb{Z}$ × $\mathbb{Z}/2\mathbb{Z}$ × $\mathbb{Z}/2\mathbb{Z}$ × $\mathbb{Z}/2\mathbb{Z}$ :
frontière :
Table par rang : rang 0 → 1 groupe, rang 1 → 23 groupes (
9 groupes (6 à 96), rang 3 → 3 groupes (168 à 336). Les groupes écartés sont nommés dans la
sortie («
65 536 couples à examiner ») — aucune troncature muette.
5. La structure de$(\mathbb{Z}/n\mathbb{Z})^\times$
Reconstruite par comptage des ordres (nombre d'éléments dont l'ordre divise$p^k$ ), pas
par application du théorème :
Contrôle négatif : pour$n = 8$ , les quatre unités ont pour ordres $1, 2, 2, 2$ — le$2 < 4$ ), la loi « le groupe des unités est cyclique »$n = 8$ .
groupe n'est pas cyclique (exposant
tombe dès
Exercices
4 exercices C.1, stubs non bloquants (
return None+# TODO etudiant), aucunraise NotImplementedError:forme_canonique(N)sans passer pargroupes_abeliens.nombre_morphismes(A, B)par images des générateurs.est_cyclique(A)par calcul des ordres des éléments.structure_unites(n): taille, cyclicité, diviseurs élémentaires.python scripts/notebook_tools/count_exercises.py <notebook>→ 4 exercices, conforme (seuil ≥ 3).Preuves d'exécution
Exécution réelle via
jupyter-papermill(MCP), sorties commitées (C.2) :Extrait de la cellule de contrôle négatif :
Extrait de la cellule automorphismes :
Extrait de la figure :
Organes passées sur le diff (
origin/main...HEAD) :validate_pr_notebooks.py(H.1/H.3/C.1)notebook_lint.pycheck_c2_compliance.py --pathcount_exercises.pycheck_interp_positioning.pycheck_activity_leak.pycheck_slot_reservation.pyslot=…/Serre100/20b libre (free)(rc=0, vue du merge :--exclude-pr 22619) ; avant repli, le slot 30 rendait CONFLIT DE SLOT rc=1, tenu aussi par #22620 (po-2023:CoursIA-2). Le repli laisse 30 libre pour #22620, sans déplacer aucune lane.check_prose_quantitative_claims.pyConformité
raise NotImplementedError/assert False/1/0dans les cellules source(l'unique occurrence de la chaîne
1/0dans le fichier est à l'intérieur du base64 de lafigure PNG, pas dans du code — vérifié cellule par cellule) ; les 4 stubs renvoient
Noneavec
# TODO etudiant; le notebook s'exécute de bout en bout.execution_count1..11 sur les 11 cellules code,figure matplotlib incluse.
été régénérée puis ré-exécutée (papermill) ; la seule retouche post-exécution est la ligne de
README, hors notebook. Aucune ré-exécution n'est donc due.
aucun total écrit à la main (le catalogue généré reste byte-identique à
main).20b(branche 20 « groupes finis » ; §2 : la base compte commea, la première accretion estb; profondeur 2 avec 20c). Le tell « collision d’identifiant » (§3) était levé sur le slot 30 ; le repli est justifié par le contenu (le carnet se présente comme la suite directe du carnet 20), pas par la disponibilité du slot (§4bis). Mapping :30-groupes-abeliens-finis.ipynb→20b-groupes-abeliens-finis.ipynb; seule la ligne de titre de la cellule d’en-tête est réécrite, le code est intact, aucune ré-exécution n’est due (C.2/C.3).Correctif post-review (Hermes, CHANGES_REQUESTED du 2026-10-26)
Le point de fond — « la forme canonique émise n'est PAS canonique » — est corrigé dans
$n_1 \mid n_2 \mid \dots \mid n_r$ est respecté. Après ré-exécution$N=8$ → $N=16$ →
$N=24$ →
2307cdf3d: les parts departitions()(décroissantes) sont désormais inversées avantl'alignement à droite (
tuple(reversed(c))), de sorte que le plus grand exposant tombe dans ledernier facteur et que
(11/11 cellules) :
Z/8Z ; Z/2Z x Z/4Z ; Z/2Z x Z/2Z x Z/2Z,Z/2Z x Z/8ZetZ/2Z x Z/2Z x Z/4Z,Z/2Z x Z/12ZetZ/2Z x Z/2Z x Z/6Z. Les trois coquilles signalées(« hauteurs », « determinede », « employee ») sont corrigées, et la prose des cellules 0, 1, 4, 16
et 28 est accentuée sur le modèle des 19 carnets frères de la série.
Diagnostic dérive
Sans objet : carnet neuf, il n'existe aucune valeur antérieure à réaligner — la première$|\mathrm{GL}(2,\mathbb{F}_2)|$ ).
exécution fait référence. Les chiffres publiés sont ceux de cette exécution, et la
reconstruction de la forme canonique, le compte des morphismes et celui des automorphismes sont
confrontés à des chemins de calcul indépendants dans le carnet lui-même (formule vs
énumération ; énumération vs
Verdict SOTA
SOTA-OK. L'outil du sujet est l'énumération et la reconstruction combinatoire (diviseurs
élémentaires, images des générateurs, comptage des ordres) : aucune bibliothèque ne produit
ces nombres de cette façon, et aucune substitution dégradée n'est committée — aucun stub
mathématique, aucune valeur recopiée, aucun appel de service déguisé. Aucun GPU, aucune clé,
aucune API : le carnet est exécutable sur n'importe quelle machine Python. Matplotlib n'est
appelé que pour la figure de synthèse.
Limites assumées
(Mathlib) n'est pas exécuté ici — le carnet 08 montre comment la série articule les deux
versants.
budget et nomme les groupes écartés — aucune troncature muette.
(
20 fournit le versant non abélien.
gisement bibliographique (
G:\Mon Drive\MyIA\IA\Bibliographie IA) : le théorème est doncénoncé dans sa version classique, sans attribution textuelle, et l'absence d'archive est
déclarée dans la conclusion du carnet.
Fichiers
MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/20b-groupes-abeliens-finis.ipynb(nouveau ; renommé depuis30-…, commitdf57775d0)MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/README.md(ligne de tableau)🤖 Generated with Claude Code