Repository navigation
Add: knot_lean Phase 4a - minimum vrai de croisements (def sInf + invariance prouvees) - #18592
Conversation
…vees (#2874 Phase 4a) Knot.RealizesCrossingCount + Knot.minimalCrossingNumber (sInf sur les comptes realisables, noncomputable via Nat.instInfSet) ; reflexivite, non-vacuite, borne par le compte du diagramme courant, congruence Reidemeister, invariance par KnotEquiv, unknot = 0 exact, trefoil <= 3. Aucun nouveau sorry (8/8 avant/apres, distinct_code_sorry). Jumeau EN byte-identical. See #2874 Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes] — première review du head 67b618ab3f0d (0 review, 0 commentaire non-auteur). Sous-grain #2874 Phase 4a : vrai nombre de croisements minimal (définition + invariance).
Vérifié firsthand au head :
- Bloc ajouté (92 l. dans
Invariant.lean, + jumeau EN) lu intégralement — 9 déclarations :RealizesCrossingCount,minimalCrossingNumber(sInf, noncomputable, docstring honnête « pas un algorithme »), réflexivité, non-vacuité,minimalCrossingNumber_le(Nat.sInf_le),realizesCrossingCount_congr(symétrie+transitivité),minimalCrossingNumber_invariant(ext + congrArg sInf, les deux sens),unknot_minimalCrossingNumber(sInf_le + omega),trefoil_minimalCrossingNumber_le(trans). Math re-dérivée bloc par bloc — correcte ; portée honnête (égalité stricte trefoil = classification, documentée en tête). - Aucun
sorrydans le bloc ajouté — les 10 occurrences du fichier sont des commentaires préexistants (tricolorabilité) ; le claim « avant 8 / après 8 » est cohérent avec le sorry-baseline du workflow. - Jumeau EN :
check_i18n_siblings.pyrejoué au head →OK 1/1 byte-identical | 0 drift. - CI : 0 check en failure sur le head (lean-matrix knot incluse).
- Sécurité : 0 match.
[Hermes hermes-pr-review, cycle :15 30/09, host f6be46d1b7a3, sig=70156297]
|
[ADJOINT PREFLIGHT] |
Grain: DEEP/lean — lane myia-po-2024:CoursIA — prev: DEEP/qc #18582
Résumé
See #2874 (sous-grain Phase 4a, l'EPIC reste ouverte) — le vrai nombre de croisements minimal : définition et invariance prouvées, sans aucun nouveau
sorry. La docstring deKnot.crossingNumber(Knots/Basic.lean) documentait le déficit : « À faire Phase 4+ : remplacer par le vrai minimum une fois l'équivalence concrète de Reidemeister + la minimisation par finset en place ». Ce grain observe que la moitié manquante n'est pas nécessaire pour définir ni pour prouver l'invariance :ReidemeisterEquivexiste déjà et est une équivalence prouvée (reidemeister_equiv_equivalence) ; ℕ est bien ordonné et la classe contient le diagramme courant, donc le minimum parsInfest bien défini sans finitude de la classe d'équivalence (la classe est infinie — R1 ajoute des croisements sans borne — mais unsInfde partie non vide de ℕ n'exige pas de Finset).Contenu ajouté (Invariant.lean + jumeau EN, 9 déclarations — 92 lignes FR / 90 EN)
Knot.RealizesCrossingCount(def)kréalisen» : ∃ diagramme équivalent à compte exactnKnot.minimalCrossingNumber(def)sInfdes comptes réalisables — définition Phase 4a du vrai minimumrealizesCrossingCount_reflectsrealizableCrossingCounts_nonemptyminimalCrossingNumber_lecrossingNumberOfDiagram, borne Phase 3)realizesCrossingCount_congrminimalCrossingNumber_invariantKnotEquiv k₁ k₂ → minimalCrossingNumber k₁ = minimalCrossingNumber k₂unknot_minimalCrossingNumbertrefoil_minimalCrossingNumber_letrefoil_crossing_numberPhase 3)Portée honnête : ce qui reste ouvert (Phase 4+) est le calcul du minimum — procédure de recherche sur mouvements concrets (chirurgie PD) + exploration bornée. L'égalité stricte trefoil = 3 exigerait la classification des nœuds ≤ 2 croisements, hors de portée du lac. La section le documente en tête.
Critères B (PR touchant *.lean)
scripts/lean/count_code_sorry.py --json, champdistinct_code_sorry) : avant 8 / après 8 pourknot_lean(dépôt : 12/12) — aucun nouveau sorry, aucun retiré (les 8 restants sont les sites INTRINSIC documentés : slice defs ×2, Piccirillo, Freedman, Lidman ×2, Reidemeister ×2).feature/2874-minimal-crossing— log cité au commentaire de livraison (buildKnots.Invariant+Knots.Invariant_en).lean-knot.ymlappellelean-axiom.ymlavectarget-modules: Knots.Basic,Knots.Conway,Knots.Invariant,Knots.Reidemeister,Knots.Lidman(module modifié couvert). Vérification locale#print axioms(4 nouveaux théorèmes) : aucunsorryAx, aucunnative_decide—minimalCrossingNumber_invariant,unknot_minimalCrossingNumber,trefoil_minimalCrossingNumber_ledépendent de[propext, Classical.choice, Quot.sound];realizesCrossingCount_congrde[propext, Quot.sound](les trois axiomes standard, aucun interdit).i18n (#4980)
scripts/lean/check_i18n_siblings.pysur la paire : OK — 1/1 byte-identical (code identique, seules les docstrings diffèrent), pattern A sibling-pair.Périmètre
MyIA.AI.Notebooks/SymbolicAI/Lean/knot_lean/Knots/Invariant.lean(section « Le minimum vrai (Phase 4a) », ~110 lignes).../Knots/Invariant_en.lean(même code, docstrings EN)Build local via jonction NTFS du package mathlib partagé (manifestes identiques local↔origin, vérifié avant jonction — leçon #18584).
Lié à
unknottingNumber🤖 Generated with Claude Code