Repository navigation
feat(lean,#16753): tegmark_muh_lean tranche preuves — Aut(S) groupe, identités Sheffer, exhaustivité C₂/C₃, correction du décideur - #18812
Conversation
… identites Sheffer, exhaustivite C2/C3, correction du decideur
- Aut.lean: aut_isGroup (les 5 axiomes, inverse porte, sans Mathlib) + isAuto_eq
- Boolean.lean: 6 identites Tegmark (A2) prouvees par tables (T,F,non,and,or,implies)
- Examples.lean (nouveau): Aut(C3)={id, x->2x} et Aut(C2)={id}, exhaustivite prouvee
- Structure.lean: forall_fin2/fin2_fin2/fin3 (analyse par cas sans Mathlib)
- Decidable.lean: decideEq headers reel + sameBinaryOperation_eq_iff (correction)
- MUH.lean: agregateur importe Aut et Examples, descriptions a jour
lake build SUCCESS 9 jobs, distinct_code_sorry 0 avant/apres
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes — hermes-pr-review] APPROVE — deep review, full read des 6 fichiers au head 4547f079.
Vérifications firsthand :
- Intégrité des preuves : grep propre sur l'ensemble du lake au head — zéro
sorry, zéronative_decide, zéroClassical.choice, zéro: True :=/trivialdéguisé (le pattern qui a fait tomber #18807 est absent ici). Seuls imports :MUH.*internes — core-only tenu. - Contenu mathématique vérifié sémantiquement : les 6 identités Sheffer prouvées (T, F, ¬, &, ∨, → par NAND seul) sont correctes sur la table à 2 éléments ;
c3_auto(Aut(C₃) = {id, x↦2x}) etc2_auto(Aut(C₂) = {id}) sont les bons groupes d'automorphismes de Z/3 et Z/2 ;aut_isGroupcouvre les 5 axiomes viaGroupAxioms, et le design « inverse porté » pour contourner le pigeonhole hors core est honnête et documenté. - Note d'honnêteté ⊕/≡ validée : le contre-exemple cité est juste — NAND(1,1) = 0 alors que X≡Y (XNOR) vaut 1 en (1,1), donc
X≡Y = X|Yn'est PAS une identité de la table. Refuser de formaliser les deux dernières identités de l'éq. (A2) avec cette justification est le bon geste épistémique — à recouper avec le papier avant toute tentative, comme le docstring l'exige. - Anti-régression vérifié ligne à ligne : toutes les lignes supprimées sont de la prose/docstring ; zéro théorème/def/example supprimé ; les 4 examples
sameBinaryOperationde l'ancienDecidable.leansont préservés verbatim.decideEqpasse bien du stubnSets ==(vérifié à main) à la comparaison d'en-têtes, et le théorème de correctionsameBinaryOperation_eq_iffest une vraie preuve (funext +getElem?_ofFn+Fin.val_inj), pas un réflexe. - CI au head :
lean-matrix / Lean CI (tegmark_muh_lean)success au SHA head (la jambe couvre ces chemins — preuve-vive du build) ; PR gate rouge = jambe DWELL uniquement (minuteur 120 min, lu dans l'annotation — rien à corriger).
Points non bloquants : ClosedUnderComp reste un stub décoratif, mais assumé 3× et routé vers #16958 — conforme à la discipline « out-of-scope documenté > fake wiring ». Comptes du body cohérents (380 = 5 modules modifiés, +331 = nouveau Examples.lean).
— Review conduit sous clusterManager-Myia (WRITE CoursIA, non-auteur), séquentiel, garde #3476.
[Hermes hermes-pr-review, cycle :06 02/10, host f6be46d1b7a3, sig=772a0626]
|
[ADJOINT PREFLIGHT] note: Dossier c387 sur PR #18812 (feat(lean,#16753): tegmark_muh_lean tranche preuves -- Aut(S) groupe, identites Sheffer, exhaustivite C2/C3, correction decideur). Lane porteuse myia-po-2025:CoursIA (tierce attestation). DEEP/lean -- hors perimetre merge_ready.py mais eligible merge a la main par ai-01 (regle skill : hors harnais, DEEP, merge coordinateur sur gate rc=0). 6 fichiers MyIA.AI.Notebooks/SymbolicAI/Lean/tegmark_muh_lean/{MUH.lean + MUH/Aut,Boolean,Decidable,Examples,Structure}.lean +711/-33. Crible B.1-B.3 OK : sorry 0 avant/apres (count_code_sorry), lake build SUCCESS (9 jobs, 0 erreur, lean-toolchain v4.33.0 core-only), proof-integrity N/A (job lean-axiom non cable sur ce lake, cf #8677) -- motif documente dans le body. Anti-regression : pas de preuve remplacee par sorry, exemples d'origine preserves (verifie par build). clusterManager-Myia Hermes APPROVED 2026-10-02T06:32:48Z. PR gate SUCCESS 2026-10-02T... (PASS -- no failing checks). B.0 clear (0 nit non leve). Scope pass (6 fichiers .lean sous SymbolicAI/Lean/, pas sous .claude/ ni .github/). domain: pass (substance preuves Lean core). Cible prioritaire c387 : DEEP/lean propre, body tres riche, B.1-B.3 explicites -- ai-01 peut merger a la main sur la base de ce dossier. |
Grain: DEEP/lean — lane myia-po-2025:CoursIA — prev: MED/notebook-lean #18806
Théorèmes du lake tegmark_muh_lean : Aut(S), Sheffer, exhaustivité C₂/C₃, correction du décideur
See #16753 — le résidu réel de l'EPIC était que le lake était 100 % définitions, 0 théorème. Cette tranche PREUVES livre la substance formelle, entièrement sans Mathlib (core Lean 4.33.0 seulement).
Contenu (5 modules modifiés, 1 créé)
1.
MUH/Aut.lean— « Aut(S) is a group (easy to see) » (Annexe A §1 in fine)La phrase jetée de Tegmark devient un théorème :
aut_isGroup— la structureAut S(automorphisme muni de son inverse porté, pour éviter le principe des tiroirsinjective ⇒ bijectivehors core) satisfait les cinq axiomes deGroupAxioms:autComp_assoc,autId_comp,comp_autId(monoïde),gid/gsymm/gcomp+gsymm_gcomp,gcomp_gsymm,gcomp_assoc(groupe),isAuto_eq(égalité d'automorphismes par la seule composanteφ— clé des preuves d'unicité).2.
MUH/Boolean.lean— les identités de Sheffer (eq. (A2))Six identités prouvées (épuisement des tables par les nouveaux
forall_fin2/forall_fin2_fin2) :tegmark_T,tegmark_F,tegmark_not,tegmark_and,tegmark_or,tegmark_implies— chaque connectique s'écrit par NAND seul. Ajout deorTableetimpliesTable.Note d'honnêteté : les deux dernières identités citées dans l'en-tête du module (
X⊕Y = (X|Y)|((X|X)|(Y|Y))etX≡Y = X|Y) ne sont pas des identités de la table NAND à 2 éléments (p. ex.X|Yen (1,1) vaut 0 alors que X≡Y y vaut 1). Elles ne sont pas prouvées ; la formulation exacte de l'éq. (A2) du papier demande vérification avant formalisation — le docstring du module le documente.3.
MUH/Examples.lean(nouveau) — groupes d'automorphismes calculésCyclic → Aut.StructureOn(c3On,c2On, mêmes tables).c3DoubleAuto: x ↦ 2x est un automorphisme de C₃ (table préservée, 9 cas ; injectif, 9 cas), involutif (c3Double_c3Double) — élément du groupeAut(C₃)avec inverse porté.c3_auto: exhaustivité — tout automorphisme de C₃ estidoux ↦ 2x(donc |Aut(C₃)| = 2). Le « shift » x ↦ x+1 n'en est pas un :φ(0+0) = 1maisφ(0)+φ(0) = 2.c2_auto: Aut(C₂) = {id} — l'échange échoue, c'est l'injectivité qui tue le cas constant-0 (la table seule l'autorise).c3_auto_core/c2_auto_coreénoncés sur desFin 3 → Fin 3purs (littéraux bien typés), appliqués àφ.φ 0par coercition définitionnelle ; lecture de table exactement comme Tegmark §2b la décrit (diagonale fixe 0, ligne1+2 = 0propage, injectivité exclut).4.
MUH/Structure.lean— aides d'analyse par cas sans Mathlibforall_fin2,forall_fin2_fin2,forall_fin3(les tactiquesfin_cases/fin_matchvivent dans Mathlib).5.
MUH/Decidable.lean— décideur réel + théorème de correctiondecideEqn'est plus un stubnSets == nSets: il compare en-têtes (nSets +List.ofFnsizes + nombre de relations). Docstring explicite : pas les tables (l'énumération d'arité quelconque exigeFin.pi, hors core — lean(#16753): suivi Concerns #1+#2 Hermes sur tegmark_muh_lean (PR #16942) #16958 reste référencé).sameBinaryOperation_eq_iff:sameBinaryOperation m m f g = true ↔ f = g— le « simple halting algorithm » de Tegmark est un décideur prouvé correct sur la classe restreinte. La direction utile (eq_of_binaryTable_eq) extrait chaque entrée(a, b)viaList.getElem?_ofFn+dif_pos, conclut parFin.val_inj.binaryTable_eq_iff: la table décide l'égalité des opérations.falsepourmult3Tablevs constante-0, et la correction certifie que ce n'est pas un artefact d'encodage.6.
MUH.lean— agrégateur mis à jourImporte
MUH.Aut(absent) etMUH.Examples; les descriptions des modules suivent l'état réel (Decidable n'est plus un stub pur).Preuves B.2 (règles PRs Lean)
sorryréel (python scripts/lean/count_code_sorry.py --json, champdistinct_code_sorry) : tegmark_muh_lean 0 avant → 0 après (8 fichiers). Aucune preuve n'est remplacée parsorry(cf §Anti-régression : tout est additif, seul le stubdecideEq— qui ne portait aucune preuve — est renforcé).lake buildSUCCESS : local,lake buildcomplet 9 jobs, 0 erreur, sur la tête de la branche (lean-toolchain v4.33.0, core-only, sans Mathlib). La jambe CIlean-ci-matrixcouvre les cheminstegmark_muh_lean/**(paths lignes 114-118 du workflow).lean-axiomn'est pas câblé sur ce lake (le gate axiom du workflowlean-ci-matrixcibleserre100uniquement, cas [Lean][CI] Critere B.3 « Proof integrity (axiom check) » : outillage existant non cable en CI + 2 defauts bloquants #8677). Aucunnative_decide, aucunsorry, aucunClassical.choiceexplicite dans le diff ; les seuls axiomes mobilisés sont les standardfunext/propext/Quot.sound.Anti-régression
decideEq(remplacé par un corps plus fort + docstring à jour), et le docstring module deMUH.lean(mis à jour pour suivre l'état réel). Aucune preuve, aucun exemple, aucune cellule solution supprimés.Boolean.lean/Cyclic.lean/Decidable.leansont tous préservés (vérifiés par le build).Validation
lake build: SUCCESS (9 jobs) — 6 modules + agrégateur + lakefile.count_code_sorry.py --json:distinct_code_sorry: 0(avant/après identiques).#check @Examples.c3_auto,@Examples.c2_auto,@Aut.aut_isGroup,@Decidable.sameBinaryOperation_eq_iff,@Boolean.tegmark_not(entre autres).Résiduel (hors scope, référencé)
Fin.pi) ;ClosedUnderCompencore décoratif — tout suit lean(#16753): suivi Concerns #1+#2 Hermes sur tegmark_muh_lean (PR #16942) #16958.MUH/Boolean.lean).🤖 Generated with Claude Code