Repository navigation
Fix(lean,#24143): Knots.Invariant_en.lean -- miroir EN aligne sur le canonique FR (22 -> 0 HARD) - #24602
Open
jsboige wants to merge 1 commit into
Open
Fix(lean,#24143): Knots.Invariant_en.lean -- miroir EN aligne sur le canonique FR (22 -> 0 HARD)#24602jsboige wants to merge 1 commit into
jsboige wants to merge 1 commit into
Conversation
…nique FR (22 -> 0 HARD) Le lac `knot_lean` portait 22 findings HARD de l'organe de fidelite des jetons i18n sur le couple `Invariant.lean` / `Invariant_en.lean`. Les 22 ont ete relus FIRSTHAND et se repartissent en 5 mecanismes : 1. un span de code melangeant code et prose FR (`d₂.edges = d₁.edges ++ (labels de c₁, c₂)`) — la prose est sortie du span des deux cotes ; 2. un span EN unique (`simp only [triColorConditionAt, hcol*]`) ou le FR porte deux spans distincts sur deux lignes — re-pose 1 span par ligne ; 3. un bloc de commentaire EN comptant 10 lignes pour 9 au FR (le « mur R2 »), qui decalait l'appariement par rang et faisait porter `r2_append_only_wall` et le nombre `2` aux mauvaises paires ; 4. un `R1` ecrit une ligne trop haut cote EN, et un `4_1` ASCII cote EN la ou le FR ecrit `4₁` (le `1` ASCII etait un nombre en trop) ; 5. un groupe de 10 lignes FR pour 11 lignes EN (le corollaire `trefoil_not_unknot`) : le miroir EN nommait les deux pieces que le FR laissait en prose. Le point 5 traite dans les DEUX sens : le FR est **enrichi** (les deux pieces sont nommees comme spans de code) et le miroir EN est complete (`sorry` mentionne comme au FR). Aucune suppression : rien n'est retire ni d'un cote ni de l'autre. Mesures (meme organe avant et apres) : | organe | avant | apres | |-----------------------------------|-----------------|----------------| | #24584 (fence corrigee) | 22 HARD / 267 A | 0 HARD / 240 A | | compose #24584 + #24591 | 22 HARD / 267 A | 0 HARD / 240 A | | `main` / #24591 (avant fence) | 152 HARD / 458 A| 130 HARD / 431 A| Les 130 residuels sous l'organe de `main` sont les **artefacts de fence** (c.828), deja corriges par la PR #24584 ; aucune variante d'organe ne **gagne** un finding, et le lac passe de 68 a 46 HARD. Preuves : `check_i18n_siblings.py` 24/24 paires byte-identiques (0 drift, 0 orphan, 0 unbuilt) ; `count_code_sorry.py --json` : `distinct_code_sorry` du lac = 8 avant et 8 apres ; `lake build` / `Proof integrity` **inchanges par construction** (code byte-identique). Diff 2 fichiers, 16+/16-, commentaires uniquement. See #24143 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Contributor
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
This was referenced Nov 4, 2026
Open
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grain: DEEP/notebook-lean — lane myia-po-2024:CoursIA-2 — prev: DEEP/notebook-lean #24594
Ce que cette PR corrige
Le lac
knot_leanportait 22 findings HARD de l'organe de fidelite des jetons i18n (scripts/lean/check_i18n_token_fidelity.py) sur le coupleInvariant.lean/Invariant_en.lean. Les 22 ont ete relus FIRSTHAND : ce sont des divergences de contenu reelles, et non des artefacts d'appariement. Elles se repartissent en cinq mecanismes.1. Un span de code melangeant code et prose FR
Le FR ecrivait
`d₂.edges = d₁.edges ++ (labels de c₁, c₂)`: la prose francaise etait a l'interieur du span de code, si bien que le span EN ((labels of c₁, c₂)) ne pouvait pas etre le miroir. La prose est sortie du span des deux cotes :`d₂.edges = d₁.edges` ++ (labels de c₁, c₂)`d₂.edges = d₁.edges` ++ (labels of c₁, c₂)2. Un span EN unique ou le FR en porte deux
Le FR ecrivait, sur deux lignes,
`simp only`puis`triColorConditionAt, hcol*`; le miroir EN les avait fusionnes en un seul span`simp only [triColorConditionAt, hcol*]`. Les deux lignes EN sont re-posees, un span par ligne, comme le FR.3. Un bloc de commentaire EN comptant 10 lignes pour 9 au FR (le « mur R2 »)
Le bloc du contre-exemple formel R2 comptait 10 lignes en EN pour 9 en FR. L'organe apparie les commentaires par rang dans le groupe d'ancre : le decalage d'une ligne faisait porter
r2_append_only_wallet le nombre2(de « ≥ 2 couleurs » / "≥ 2 colors") sur des paires qui ne se correspondent pas — 6 des 22 findings HARD n'etaient que cela. Le bloc EN est re-pose en 9 lignes, span par span :not_tricolorable_invariant_current»r2_append_only_wall(below) remains »ReidemeisterEquivclosure. »Aucun contenu n'est perdu : les trois phrases anglaises sont integralement redistribuees.
4. Deux nombres ecrits d'un seul cote
1etait reporte d'une paire a l'autre. Il est desormais sur la meme ligne que le FR.1ASCII est un nombre pour l'organe, l'indice₁ne l'est pas. Le1ASCII etait donc un nombre « extra EN ». L'EN ecrit desormais4₁, comme le FR.5. Le groupe
trefoil_not_unknot— 10 lignes FR pour 11 lignes ENLe miroir EN nommait les deux pieces (
`trefoil_tricolorable`,`unknot_not_tricolorable`) que le FR laissait en prose (« the two pieces are proven ») ; l'inverse valait aussi poursorry, que le FR mentionne et que l'EN avait perdu en resumant.La divergence se traite dans les deux sens :
sorryy est mentionne comme au FR.Les deux blocs sont re-posees a 11 lignes, span par span.
En passant : l'en-tete du miroir
L'en-tete EN annonçait « (3-colorability, crossing number) » la ou le canonique FR ecrit « (tricolorabilite, nombre de croisements) » : le
3etait un nombre « extra EN ». Le titre EN dit desormais « tricolorability ».Mesures
Meme organe avant et apres (mesures « avant » et « apres » faites avec le meme organe) :
main(avant la correction fence)Les 130 residuels sous l'organe de
mainsont les artefacts de fence (classe c.828), deja corriges par la PR #24584 : ce ne sont pas des pertes de traduction. Aucune variante d'organe ne gagne un finding, et le lac passe de 68 a 46 HARD (les 22 de ce fichier etant les seuls vises).Preuves
python scripts/lean/check_i18n_siblings.py MyIA.AI.Notebooks/SymbolicAI/Lean/KNOTS/knot_lean→ 24/24 paires byte-identiques | 0 consumer-pattern | 0 drift | 0 orphan | 0 unbuilt — le code n'est pas touche.python scripts/lean/count_code_sorry.py --json→ lacknot_lean:distinct_code_sorry= 8 avant, 8 apres ;code_sorry= 16 avant et apres. Le compteur naif (naive_sorry, qui compte la prose) passe de 78 a 79 : c'est le motsorrymentionne dans un commentaire que le miroir EN porte desormais comme le FR — pas unsorryde code.lake build SUCCESS/Proof integrity SUCCESS: inchanges par construction (code byte-identique, 24/24 paires). L'environnement Lean local n'a pas de cache Mathlib construit, la construction n'est donc pas rejouee ici.Perimetre
Compression_lean), Fix(lean,#24143): Folk_en.lean -- commentaire EN re-cadre aux zeros du canonique FR #24526 (RepeatedGames), Fix(lean,#24143): Containment_en.lean -- en-tete EN fidele au canonique FR #24566 (Komlos), Fix(lean,#24143): i18n token-fidelity ReidemeisterAny_en — 11 HARD -> 0 #24567 (KNOTS/ReidemeisterAny— autre fichier du meme lac), Fix(lean,#24143): check_i18n_token_fidelity - les blocs fence cassaient l appariement des backticks #24584, Fix(lean,#24143): les miroirs EN de la famille SocialChoice sont fideles au canonique FR (35 HARD -> 0) #24585, Fix(lean,#24143): reconnaitre la declaration de jumeau « EN sibling of X » (check_i18n_token_fidelity) #24591, Fix(lean,#24143): les miroirs EN de social_choice_lean_peters sont fideles au canonique FR (10 HARD -> 0) #24593, Fix(lean,#24143): aligner les miroirs EN de asymmetric_information_lean sur le canonique FR (8 HARD -> 0) #24594, Fix(lean,#24143): SymbolCodec_en.lean — docstrings EN fidèles au canonique FR #24596 (SymbolCodec) — aucun ne toucheInvariant.leanniInvariant_en.lean.See #24143
🤖 Generated with Claude Code