Skip to content

feat(lean,#13483): maillon 3 -- tour dyadique complete des unions periodiques (HashlifeMarginFragment FR+EN) - #19363

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/13483-t14b-maillon3
Oct 6, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/13483-t14b-maillon3

Conversation

@jsboige

@jsboige jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/lean — lane myia-po-2024:CoursIA — prev: MED/refactor #19347

See #13483 — maillon 3 de la séquence Hashlife : tour dyadique complète des unions périodiques, HashlifeMarginFragment.lean + sibling _en. Deux fichiers, 361 insertions(+), 0 deletion — aucune cellule de notebook touchée, aucun autre fichier.

Ce que ce maillon ajoute

L'assemblage P4.4 annoncé par la décomposition du 2026-09-04 (c.5539811910) : la tour dyadique complète des unions périodiques dans le fragment de marge — le bloc de preuve sorry-free qui ferme la partie constructive du maillon (les briques L1/L2 étaient posées, ce commit livre la tour). Paire FR/_en selon la convention #4980 : docstrings FR + sibling _en byte-identique hors docstrings.

Compte de sorry — instrument canonique, avant/après

python scripts/lean/count_code_sorry.py --json, champ distinct_code_sorry, lake MyIA.AI.Notebooks/SymbolicAI/Lean/conway_lean :

Référence files naive code distinct
origin/main (base) 85 194 2 1
tête 68bff205d39 85 194 2 1

1 → 1, inchangé, et c'est l'état attendu. Le sorry survivant est l'énoncé-cadre hashlife_correct_margin (HashlifeMarginFragment.lean:170 + miroir _en) — cœur de recherche ouvert P4/P5, verdict INTRINSIC documenté, acceptance B (voir le module doc et lean-conway.yml:12 : « conway has 1 real tactic sorry (HashlifeMarginFragment.lean framework sorry) »). Ce maillon ne le touche pas : il ajoute de la preuve complète autour de lui. Jamais grep -c sorry : 194 naïfs pour 1 réel sur ce lake.

Preuves d'élaboration (locales, tête 68bff205d39)

lake env lean depuis le lake dans WSL, contenu committé :

FILE=Conway/Life/HashlifeMarginFragment.lean    LEAN_RC=0 ERREURS=0
FILE=Conway/Life/HashlifeMarginFragment_en.lean LEAN_RC=0 ERREURS=0

Le lake build complet du lake est porté par la CI lean-conway.yml (déclenchée par le filtre de chemin conway_lean/**.lean).

B.3 — proof-integrity : câblage vérifié, portée exacte

lean-conway.yml appelle bien lean-axiom.yml (câblage : grep -ln lean-axiom .github/workflows/*.yml). La jambe bloquante proof-integrity cible Conway.KochenSpecker, Conway.FreeWillTheorem — le module modifié ici n'en fait PAS partie ; l'audit advisory couvre les fondations Life (Conway.Life.HashlifeCorrectness + MacroCell/Hashlife). Écrit ici au lieu d'être sauté en silence, conformément à §B.3 du précis de review : le vert bloquant attendu ne prouve pas ce module, et l'audit advisory en couvre le voisinage.

Le piège omega réparé (et sa sonde)

Les deux branches Or.inr de la disjonction de marge échouaient sur omega avec un goal contaminé par une métavariable : Int.natAbs_of_nonneg : 0 ≤ a → natAbs a = a ne peut pas unifier le but de branche natAbs (q - p) = p - q (la conclusion natAbs a = a diffère), l'unification diffère ?m, et omega échoue sur le but pollué. Int.natAbs_of_nonpos et Int.natAbs_sub_comm n'existent pas dans ce Mathlib (vérifié par sonde). Réparation :

rw [show q.1 - p.1 = -(p.1 - q.1) by ring, Int.natAbs_neg]
exact Int.natAbs_of_nonneg (by omega)

Isolée par une sonde minimale à 4 variantes (V1/V2 absentes, V3/V4 compilent) avant de toucher les fichiers réels. Miroir identique sur p.2/q.2 dans hcolabs, et dans le sibling _en.

Provenance de la branche

Construit sur le commit maillon 2 (1902d8d06e8) ; #19324 a été squash-mergé (f8f3443b33fc, parent unique — mesuré), donc le parent n'est pas ancêtre de main : git rebase --onto origin/main 1902d8d06e8. Vérifié : blobs du parent == blobs de origin/main (ac11c8bb78b / 211633911e5), et le diff deux-points tête vs main = exactement les 361 insertions de ce maillon — aucun résidu du maillon 2, aucune collision add/add.

Garde i18n

python scripts/lean/check_i18n_siblings.py --all : 327/333 paires byte-identical | 6 consumer | 0 drift | 0 orphan — la paire FR/_en de ce maillon est byte-identique hors docstrings (gate #4980).

Portée écrite

🤖 Generated with Claude Code

Ajoute quatre items a HashlifeMarginFragment (FR + sibling _en, preuves
byte-identiques) :

1. gridToMacroCellWithOffset_level_ge_of_span : l'etendue en distance de
   Chebyshev de deux cellules vivantes borne INFERIEUREMENT le level du
   macro-cell (reciproque de gridToMacroCellWithOffsetN_level_gt_n).
2. evolve_ne_of_period_ne : une grille non vide de periode T > 0 reste non
   vide a tout temps t (decomposition t = (t/T)*T + t%T).
3. hcap_of_union_periodic_dyadic : hcap pour T = 2^i quelconque, la fenetre
   geometrique max 3 (2^i) etant fournie par le temoin d'etendue (1), ce qui
   leve la restriction T in {1,2,4} du maillon 2 sans hypothese de non-vacuite
   sur la fenetre.
4. hashlife_correct_margin_of_union_periodic_dyadic : assemblage L2 miroir,
   correction Hashlife pour une union scindee de periodes dyadiques.

Empile sur la tete de #19324 (maillon 2), consomme son moteur
(mem_evolve_union_sep, hcap_of_union_periodic, evolve_mulF_of_period).
Push retenu jusqu'au merge de #19324 (consigne de dispatch).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19363 (feat(lean,#13483): maillon 3 -- tour dyadique complete des unions periodiques (HashlifeMarginFragment FR+EN)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19363
head: 68bff20
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 2027af7c3f4b7ac288c4d34f5fa622c5400973c0544ab5e9ba19b827e0d0acc5
diff-files: 2
diff-additions: 361
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19363
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit b48c67f into main Oct 6, 2026
30 of 33 checks passed
@jsboige
jsboige deleted the feature/13483-t14b-maillon3 branch October 7, 2026 07:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants