collatz: add universal_clauses run report profile and conjoncture cartography

**Motivations:**
- Cite universal clause extraction/verification as a first-class deterministic run in the standard reporting flow.
- Provide a measurable cartography of `conjoncture_collatz.md` duplication to enable later rationalization without immediate content moves.

**Root causes:**
- Universal clauses artefacts were not covered by the run report generator, making citations inconsistent with other C1/C2/C3 artefacts.
- `conjoncture_collatz.md` contains multiple repeated trunks and generic headings, preventing unambiguous internal referencing.

**Correctifs:**
- Add `universal_clauses` profile to `collatz_generate_run_report.py` parsing and reporting counts/ok from versioned artefacts.
- Add a versioned run report for the universal clauses artefacts.

**Evolutions:**
- Extend `docs/collatz_run_report_format.md` and `docs/features/collatz_run_report_generator.md` with the new profile.
- Link the new artefacts and report in `démonstration collatz.md` and `conjoncture_collatz.md`.
- Add `docs/collatz_conjoncture_collatz_cartographie.md` (livrable 1) with headings/duplication cartography and a no-deletion plan.

**Pages affectées:**
- applications/collatz/collatz_k_scripts/collatz_generate_run_report.py
- docs/collatz_run_report_2026-03-09_universal_clauses.md
- docs/collatz_run_report_format.md
- docs/features/collatz_run_report_generator.md
- applications/collatz/démonstration collatz.md
- applications/collatz/conjoncture_collatz.md
- docs/collatz_conjoncture_collatz_cartographie.md
This commit is contained in:
ncantu 2026-03-09 03:26:22 +01:00
parent 94280b93fd
commit cb87e55ed4
7 changed files with 458 additions and 2 deletions

View File

@ -156,6 +156,18 @@ class C3LocalDescentMetrics:
base_checked_up_to: int
@dataclass(frozen=True)
class UniversalClausesMetrics:
domain_palier: int
max_stable_modulus_power: int
total: int
d_exact: int
f: int
d_brother_local: int
ok_records: int
ok: bool
def parse_c2_projective_metrics(verification_json: str) -> C2ProjectiveMetrics:
obj = read_json(Path(verification_json))
if not isinstance(obj, dict):
@ -273,6 +285,67 @@ def parse_c3_local_descent_metrics(verification_json: str) -> C3LocalDescentMetr
)
def parse_universal_clauses_metrics(
*,
clauses_json_path: Path,
verification_json_path: Path,
) -> UniversalClausesMetrics:
clauses_obj = read_json(clauses_json_path)
if not isinstance(clauses_obj, dict):
raise ValueError("Invalid universal clauses JSON: expected object")
counts = clauses_obj.get("counts")
domain = clauses_obj.get("domain")
if not isinstance(counts, dict) or not isinstance(domain, dict):
raise ValueError("Invalid universal clauses JSON: missing counts/domain")
def req_int(d: dict, k: str) -> int:
v = d.get(k)
if not isinstance(v, int):
raise ValueError(f"Invalid universal clauses JSON: {k} must be int")
return v
max_stable = req_int(domain, "max_stable_modulus_power")
total = req_int(counts, "total")
d_exact = req_int(counts, "D_exact")
f = req_int(counts, "F")
d_brother_local = req_int(counts, "D_brother_local")
vobj = read_json(verification_json_path)
if not isinstance(vobj, dict):
raise ValueError("Invalid universal clauses verification JSON: expected object")
vdomain = vobj.get("domain")
vcounts = vobj.get("counts")
ok = vobj.get("ok")
if not isinstance(vdomain, dict) or not isinstance(vcounts, dict) or not isinstance(ok, bool):
raise ValueError("Invalid universal clauses verification JSON: missing domain/counts/ok")
domain_palier = req_int(vdomain, "palier")
v_max_stable = req_int(vdomain, "max_stable_modulus_power")
if v_max_stable != max_stable:
raise ValueError("Universal clauses: max_stable_modulus_power mismatch between clauses and verification")
ok_records = req_int(vcounts, "ok_records")
if req_int(vcounts, "D_exact") != d_exact:
raise ValueError("Universal clauses: D_exact count mismatch between clauses and verification")
if req_int(vcounts, "F") != f:
raise ValueError("Universal clauses: F count mismatch between clauses and verification")
if req_int(vcounts, "D_brother_local") != d_brother_local:
raise ValueError("Universal clauses: D_brother_local count mismatch between clauses and verification")
if ok_records != total:
raise ValueError("Universal clauses: ok_records must equal total clauses (Option A)")
return UniversalClausesMetrics(
domain_palier=domain_palier,
max_stable_modulus_power=max_stable,
total=total,
d_exact=d_exact,
f=f,
d_brother_local=d_brother_local,
ok_records=ok_records,
ok=ok,
)
def write_c2_projective_run_report(
*,
output_path: Path,
@ -388,6 +461,60 @@ def write_c3_local_descent_run_report(
output_path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def write_universal_clauses_run_report(
*,
output_path: Path,
report_title: str,
command: str,
git_commit: str,
sha_entries: list[Sha256Entry],
metrics: UniversalClausesMetrics,
artefacts_dir: Path,
) -> None:
lines: list[str] = []
lines.append("**Auteur** : Équipe 4NK")
lines.append("")
lines.append(f"# {report_title}")
lines.append("")
lines.append("## Contexte")
lines.append("")
lines.append("- **But du run** : extraire des clauses universelles candidates (Option A : Lift(B12)) depuis lartefact C3 local, et vérifier leur cohérence déterministe.")
lines.append("- **Assertion vérifiée** : cohérence arithmétique des clauses extraites et cohérence des relèvements au module minimal \\(2^{A+1}\\).")
lines.append("")
lines.append("## Code et reproductibilité")
lines.append("")
if git_commit:
lines.append(f"- **Commit Git** : `{git_commit}`")
if command:
lines.append("- **Commande** :")
lines.append("")
lines.append("```bash")
lines.append(command)
lines.append("```")
lines.append("")
lines.append("## Empreintes sha256 (scripts, artefacts)")
lines.append("")
lines.extend(format_sha256_list(sha_entries))
lines.append("")
lines.append("## Compteurs et métriques")
lines.append("")
lines.append(f"- palier (domaine des témoins) : 2^{metrics.domain_palier}")
lines.append(f"- max(2^m_stable) observé : 2^{metrics.max_stable_modulus_power}")
lines.append(f"- total clauses : {metrics.total}")
lines.append(f"- D_exact : {metrics.d_exact}")
lines.append(f"- F : {metrics.f}")
lines.append(f"- D_brother_local : {metrics.d_brother_local}")
lines.append(f"- ok_records : {metrics.ok_records}")
lines.append(f"- ok : {metrics.ok}")
lines.append("")
lines.append("## Chemins dartefacts (versionnés)")
lines.append("")
lines.append(f"- ARTEFACTS : `{artefacts_dir}`")
lines.append("")
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _discover_base_noyau_path(artefacts_dir: Path) -> Path:
candidates = sorted((artefacts_dir / "noyaux").glob("noyau_*_B12.json"))
if len(candidates) != 1:
@ -970,6 +1097,7 @@ def main() -> None:
"local_H6_E1",
"c2_projective",
"c3_local_descent",
"universal_clauses",
],
help="Report profile",
)
@ -996,6 +1124,11 @@ def main() -> None:
default="",
help="For profile c3_local_descent: path to deterministic artefacts directory (e.g. docs/artefacts/collatz/c3_local_descent)",
)
ap.add_argument(
"--universal-clauses-artefacts-dir",
default="",
help="For profile universal_clauses: path to deterministic artefacts directory (e.g. docs/artefacts/collatz/universal_clauses)",
)
args = ap.parse_args()
repo_root = Path(args.repo_root).resolve() if args.repo_root else Path.cwd().resolve()
@ -1289,6 +1422,53 @@ def main() -> None:
print(f"Wrote: {output_path}")
return
if args.profile == "universal_clauses":
command = (
args.command.strip()
if args.command.strip()
else "--profile universal_clauses --scope universal_clauses "
"--universal-clauses-artefacts-dir docs/artefacts/collatz/universal_clauses "
"--out-dir applications/collatz/out --docs-dir docs"
)
artefacts_dir = (
Path(args.universal_clauses_artefacts_dir).resolve()
if args.universal_clauses_artefacts_dir.strip()
else (docs_dir / "artefacts" / "collatz" / "universal_clauses")
)
clauses_json = artefacts_dir / "clauses_universelles.json"
clauses_md = artefacts_dir / "clauses_universelles.md"
verification_json = artefacts_dir / "verification_universal_clauses.json"
verification_md = artefacts_dir / "verification_universal_clauses.md"
metrics = parse_universal_clauses_metrics(
clauses_json_path=clauses_json,
verification_json_path=verification_json,
)
date_str = pick_report_date_from_mtime([clauses_json, clauses_md, verification_json, verification_md])
sha_paths: list[Path] = [
repo_root / "applications" / "collatz" / "collatz_k_scripts" / "collatz_generate_run_report.py",
repo_root / "applications" / "collatz" / "collatz_k_scripts" / "collatz_extract_universal_clauses.py",
repo_root / "applications" / "collatz" / "collatz_k_scripts" / "collatz_verify_universal_clauses.py",
repo_root / "docs" / "artefacts" / "collatz" / "c3_local_descent" / "verification_c3_local_descent.json",
clauses_json,
clauses_md,
verification_json,
verification_md,
]
sha_entries = compute_sha256_entries(sha_paths)
output_path = docs_dir / f"collatz_run_report_{date_str}_{args.scope}.md"
write_universal_clauses_run_report(
output_path=output_path,
report_title=f"Rapport dexécution — {args.scope}",
command=command,
git_commit=commit_hash,
sha_entries=sha_entries,
metrics=metrics,
artefacts_dir=artefacts_dir,
)
print(f"Wrote: {output_path}")
return
raise ValueError(f"Unknown profile: {args.profile}")

View File

@ -67,6 +67,36 @@ où:
- **Théorème 1**: démontré sous hypothèses (H1)-(H4).
- **Proposition 1**: démontrée par calcul fini, indexée par ses paramètres.
## Trajectoire hybride instrumentée (C1→C2→C3) et artefacts déterministes
Cette trajectoire isole une chaîne de vérifications citable (sans transcript) et distingue explicitement les points qui restent des obligations de preuve (clauses universelles et itération au-delà dun palier).
- C1 (complétude locale H6(E) sur les états de \(B_{12}\)) :
- index : `docs/artefacts/collatz/local_H6_index.md`
- rapports : `docs/collatz_run_report_2026-03-09_local_H6_E*_palier2p13.md`
- C2 (réduction projective par complétion “one” et stabilité \(B_m\bmod 2^{12}=B_{12}\)) :
- script : `applications/collatz/collatz_k_scripts/collatz_verify_c2_projective.py`
- sorties : `docs/artefacts/collatz/c2_projective/verification_c2_projective.{json,md}`
- rapport : `docs/collatz_run_report_2026-03-09_c2_projective.md`
- documents de complétion intégrés automatiquement (actuellement) :
- `applications/collatz/collatz_k_scripts/complétion_minorée_m14_vers_m15.md`
- `applications/collatz/collatz_k_scripts/complétion_minorée_m15_vers_m16.md`
- `applications/collatz/collatz_k_scripts/complétion_minorée_m16_vers_m17.md`
- C3 (instance locale au palier \(2^{13}\) sur \(L=\mathrm{Lift}_{12\to 13}(B_{12})\)) :
- script : `applications/collatz/collatz_k_scripts/collatz_verify_c3_local_descent.py`
- sorties : `docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.{json,md}`
- rapport : `docs/collatz_run_report_2026-03-09_c3_local_descent.md`
- Extraction de clauses universelles candidates (Option A : Lift(\(B_{12}\))) :
- scripts : `applications/collatz/collatz_k_scripts/{collatz_extract_universal_clauses.py,collatz_verify_universal_clauses.py}`
- sorties : `docs/artefacts/collatz/universal_clauses/{clauses_universelles,verification_universal_clauses}.{json,md}`
- rapport : `docs/collatz_run_report_2026-03-09_universal_clauses.md`
Le verrou restant est la transformation des témoins observés en clauses universelles valides “pour tout \(n\) dans une classe modulo \(2^m\), pour tout \(n\ge N\)”, et litération du schéma \(C1+C2\to C3\) à paliers arbitraires. La formalisation minimale visée est donnée dans :
- `applications/collatz/collatz_k_scripts/plan_lemmes_manquants_et_programme_de_preuve.md`.
## Énoncés démontrés
### Lemme 1 (Forme affine le long d'un préfixe de valuations)

View File

@ -89,7 +89,7 @@ Théorème (conditionnel).
Sous lhypothèse \(H_{\mathrm{ext}}(M)\), la conjecture de Collatz est vraie : pour tout entier \(n\ge 1\), il existe \(k\) tel que \(T^{(k)}(n)=1\).
Schéma de preuve.
La vacuité de \(R_M\) signifie que toute classe impaire modulo \(2^M\) est fermée par une clause universelle du registre \(\mathcal{K}\) fournissant une réduction strictement bien fondée (descente ou collision/fusion vers une classe déjà contrôlée). Par bon ordre de \(\mathbb{N}\), aucune trajectoire ne peut éviter indéfiniment une réduction stricte, ce qui entraîne la terminaison.
La vacuité de \(R_M\) signifie que toute classe impaire modulo \(2^M\) est fermée par une clause universelle du registre \(\mathcal{K}\) fournissant une réduction strictement bien fondée (descente \(D\) avec seuil \(N_0\), ou fusion \(F\) vers un impair strictement plus petit avec seuil \(N_F\)). Par bon ordre de \(\mathbb{N}\), aucune trajectoire ne peut éviter indéfiniment une réduction stricte, ce qui entraîne la terminaison.
Statut au regard des artefacts computationnels.
Les artefacts D18→D21 (avec F15/F16) produisent un noyau résiduel non vide au dernier palier audité (par exemple `out/noyaux/noyau_post_D21.json`). En labsence dun artefact final attestant \(|R_M|=0\) pour un certain \(M\), la clôture par extinction nest pas établie dans ce cadre. Une continuation standard suit lune des trajectoires suivantes :
@ -97,3 +97,63 @@ Les artefacts D18→D21 (avec F15/F16) produisent un noyau résiduel non vide au
- branche « extinction par certificat total » : obtenir un palier \(2^M\) tel que \(|R_M|=0\), et produire un artefact de vérification citable (fichier + empreintes + script reproductible) ;
- branche « analytique » : prouver un lemme global transformant les tendances observées (par exemple les coefficients de survie \(q_m\)) en extinction universelle, ce qui requiert une redéfinition/raffinement de \(R_m\) ou un renforcement de la grammaire des clauses tant que \(q_m\) reste proche de \(0{,}88\)\(0{,}91\).
- branche « hybride » : réduire \(R_M\) par certificats, caractériser structurellement les résidus survivants (invariants, contraintes, formes normales), puis prouver un lemme spécifique éliminant le noyau restant.
6. Trajectoire hybride (C1→C2→C3) : artefacts déterministes et verrou restant
Le schéma hybride se formule comme une chaîne de réductions citable, où chaque étape est indexée par ses choix (palier, domaines, certificats) et vérifiée par un artefact déterministe.
6.1. C2 (réduction projective par complétion « one »)
But.
Réduire létude de la transition \(m\to m+1\) à un noyau “parents both” \(B_m\) et établir, après complétion par frères des cas “one”, légalité densembles
\[
R_{m+1}^{\mathrm{comp}}=\{\,r,\ r+2^m\;:\; r\in B_m\,\}
\]
ainsi que la stabilité projective \(B_m\bmod 2^{12}=B_{12}\) sur les transitions auditées.
Artefact déterministe (C2).
- script : `applications/collatz/collatz_k_scripts/collatz_verify_c2_projective.py`
- sorties versionnées : `docs/artefacts/collatz/c2_projective/verification_c2_projective.{json,md}`
- rapport dexécution : `docs/collatz_run_report_2026-03-09_c2_projective.md`
Les transitions détectées dans les documents de complétion sont intégrées automatiquement dans la table multitransitions, à partir des fichiers :
- `applications/collatz/collatz_k_scripts/complétion_minorée_m14_vers_m15.md`
- `applications/collatz/collatz_k_scripts/complétion_minorée_m15_vers_m16.md`
- `applications/collatz/collatz_k_scripts/complétion_minorée_m16_vers_m17.md`
6.2. C1 (complétude locale H6(E) sur les états de \(B_{12}\))
But.
Pour chaque état \(E\) (mot de valuations sur \(B_{12}\) à horizon fixé), établir quun relèvement fini \(\Delta m(E)\) suffit à couvrir \(\mathrm{Lift}_{12\to 12+\Delta m(E)}(B_{12}(E))\) par une union finie de certificats \(D/F\).
Artefacts (H6 locale).
- index agrégé : `docs/artefacts/collatz/local_H6_index.md`
- répertoires par état : `docs/artefacts/collatz/local_E*_palier2p13/`
- rapports dexécution : `docs/collatz_run_report_2026-03-09_local_H6_E*_palier2p13.md`
6.3. C3 (instance locale : clôture sur Lift(\(B_{12}\)) au palier \(2^{13}\))
But.
Sur le domaine \(L=\mathrm{Lift}_{12\to 13}(B_{12})\), exhiber pour chaque classe un témoin \(D\) (descente exacte ou frère) ou \(F\) (fusion vers un impair strictement plus petit) et fermer linstance par validation de base finie.
Artefact déterministe (C3 local).
- script : `applications/collatz/collatz_k_scripts/collatz_verify_c3_local_descent.py`
- sorties versionnées : `docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.{json,md}`
- rapport dexécution : `docs/collatz_run_report_2026-03-09_c3_local_descent.md`
6.4. Verrou formel restant (au-delà de \(2^{13}\))
La transition de linstance locale à une clôture globale requiert de transformer les témoins observés en **clauses universelles** utilisables dans une induction bien fondée (au sens : “pour tout \(n\) dans une classe modulo \(2^m\), pour tout \(n\ge N\)”), et ditérer le schéma \(C1+C2\to C3\) à paliers arbitraires.
La formalisation minimale de ces clauses universelles (formes D/F, seuils \(N_0/N_F\), et schéma dinduction) est donnée dans :
- `applications/collatz/collatz_k_scripts/plan_lemmes_manquants_et_programme_de_preuve.md` (section “Verrou technique précis”, puis “Formalisation minimale attendue (clauses universelles)”).
6.5. Extraction déterministe de clauses universelles candidates (Option A : Lift(\(B_{12}\)))
À partir de lartefact déterministe C3 (témoins locaux sur \(L=\mathrm{Lift}_{12\to 13}(B_{12})\)), une procédure de relèvement transforme chaque témoin \(D\) exact ou \(F\) en une clause candidate stabilisée au module minimal \(2^{A+1}\) où le préfixe de valuations est figé.
Artefacts déterministes :
- extraction : `applications/collatz/collatz_k_scripts/collatz_extract_universal_clauses.py`
- vérification : `applications/collatz/collatz_k_scripts/collatz_verify_universal_clauses.py`
- sorties versionnées : `docs/artefacts/collatz/universal_clauses/{clauses_universelles,verification_universal_clauses}.{json,md}`
- rapport dexécution : `docs/collatz_run_report_2026-03-09_universal_clauses.md`

View File

@ -0,0 +1,111 @@
**Auteur** : Équipe 4NK
# Cartographie — `applications/collatz/conjoncture_collatz.md` (rationalisation, sans suppression)
## Périmètre
Ce document cartographie les doublons structuraux et les zones hétérogènes de `applications/collatz/conjoncture_collatz.md`, afin de préparer une rationalisation **sans suppression ni restructuration immédiate**.
## Statistiques brutes (mesurables)
- **Lignes** : 23828
- **Headings** (`##` à `######`) : 1456
- **Groupes de headings dupliqués** (même niveau, titre normalisé) : 525
## Doublons structuraux majeurs (tronc répété)
Le “tronc formel” (cadre, définitions, lemmes D/F, théorème-cadre, protocoles, limites, conclusion, références) apparaît sous plusieurs variantes très proches :
- **Bloc A (accentué)** : commence à `L5` (ex. `## Introduction de l'objet mathématique`) et couvre la séquence :
- `## Introduction de l'objet mathématique`
- `## Prérequis de lecture`
- `## Cadre de référence et notations`
- `### Définition 1..4`
- `## Statut des énoncés`
- `## Énoncés démontrés` + `### Lemme 1..3`
- `## Théorème-cadre conditionnel` + `### Théorème 1`
- `## État quantifié actuel`
- `## Protocoles de sensibilité`
- `## Limites explicites du cadre`
- `## Conclusion de l'état de preuve`
- `## Références`
- **Blocs B/C/D (non accentués / variantes)** : commencent aux environs de :
- `L274` (`## Introduction de l'objet mathematique`)
- `L518` (`## Introduction de l'objet mathematique`)
- `L762` (`## Introduction de l'objet mathématique`)
Indicateurs objectifs (extraits de doublons de headings) :
- `## Prérequis de lecture` : 4 occurrences (`L15`, `L284`, `L528`, `L772`)
- `## Cadre de référence et notations` : 4 occurrences (`L24`, `L293`, `L537`, `L781`)
- `## Énoncés démontrés / Enonces demontres` : 4 occurrences (`L95`, `L339`, `L583`, `L820`)
- `## Théorème-cadre conditionnel / Theoreme-cadre conditionnel` : 4 occurrences (`L173`, `L417`, `L661`, `L898`)
- `## Protocoles de sensibilité / Protocoles de sensibilite` : 4 occurrences (`L215`, `L459`, `L703`, `L940`)
- `## Limites explicites du cadre` : 4 occurrences (`L252`, `L496`, `L740`, `L977`)
- `## Références / References` : 4 occurrences (`L262`, `L506`, `L750`, `L987`)
- `## Conclusion de l'état de preuve` : 5 occurrences (`L258`, `L502`, `L746`, `L983`, `L23815`)
## Doublons récurrents (titres “génériques”)
Certains titres sont répétés de façon massive, ce qui empêche une indexation univoque des dépendances logiques :
- `## Conclusion de la section précédente` : 62 occurrences (premières : `L1831`, `L2002`, `L2073`, `L2190`, `L2626`, `L3374`, …)
- `## Conclusion de l'étape` : 26 occurrences (premières : `L8774`, `L9513`, `L9645`, `L9752`, `L9788`, `L9824`, …)
- `### Énoncé` : 6 occurrences (`L4514`, `L4552`, `L12582`, `L14087`, `L14125`, `L22155`)
Conséquence : un renvoi interne de type “voir la Conclusion de létape” nest pas traçable sans un identifiant supplémentaire (numérotation ou titre spécialisé).
## Hétérogénéité de registre (hors tronc formel)
Des zones longues ne relèvent pas du cadre de preuve et mélangent :
- vulgarisation (style non neutre, citations),
- narration externe,
- contenu sans statut mathématique (pas de lemmes/propositions indexés).
Exemple (détection par lecture ponctuelle du bas de fichier) :
- présence de sections de vulgarisation et danalogies qui ne sont pas indexées comme “annexe” et cohabitent avec les références.
## Risques actuels (liés à la rationalisation)
- **Traçabilité des hypothèses** : duplication du tronc rend ambigu lendroit “canonique” des hypothèses (H1..H4/H5).
- **Numérotation / renvois** : impossibilité de renvoyer à une section sans collision de titres.
- **Maintenance** : tout ajout (ex. C1/C2/C3 instrumentés) doit être répliqué dans plusieurs blocs, sinon divergence.
## Plan de rationalisation (sans suppression/restructuration immédiate)
### Étape 1 — Définir un “tronc canonique” (sans déplacer)
Choisir un seul bloc comme canonique (recommandé : le tout premier bloc accentué, à partir de `L5`), et introduire un marqueur explicite au début :
- “Version canonique : sections XY”
- “Les répétitions ultérieures sont des variantes / brouillons (à déplacer en annexe lors dune étape dédiée).”
Cette étape ne supprime rien, ne déplace rien, mais fixe la référence.
### Étape 2 — Indexer les variantes (sans déplacer)
Au début de chaque bloc redondant (ex. à `L274`, `L518`, `L762`), ajouter une ligne de statut :
- “Variante / duplicat du tronc canonique (voir L5…)”
Objectif : éliminer lambiguïté de lecture.
### Étape 3 — Préparer latterrissage en annexes (sans exécuter ici)
Préparer un plan de migration qui, dans une étape ultérieure validée :
- déplace les variantes du tronc en annexes (même fichier en bas, ou fichier `*_annexes.md`),
- renvoie depuis le tronc canonique,
- conserve une seule occurrence des définitions/lemmes/théorème.
### Étape 4 — Traiter les titres “génériques”
Établir une règle :
- interdiction de titres dupliqués non indexés (“Conclusion de létape”, “Conclusion de la section précédente”) dans le tronc canonique,
- remplacement par des titres spécialisés (ex. “Conclusion de la section X : …”) et/ou numérotation.
## Décisions à valider avant toute suppression/restructuration
- où placer les annexes (même fichier vs fichier annexe),
- politique de numérotation (globale vs par chapitre),
- traitement des contenus de vulgarisation (annexe dédiée, séparée du cadre formel).

View File

@ -0,0 +1,52 @@
**Auteur** : Équipe 4NK
# Rapport dexécution — universal_clauses
## Contexte
- **But du run** : extraire des clauses universelles candidates (Option A : Lift(B12)) depuis lartefact C3 local, et vérifier leur cohérence déterministe.
- **Assertion vérifiée** : cohérence arithmétique des clauses extraites et cohérence des relèvements au module minimal \(2^{A+1}\).
## Code et reproductibilité
- **Commit Git** : `523fa25fefc9f12e1de9991d41fdb171850458bc`
- **Commande** :
```bash
--profile universal_clauses --scope universal_clauses --universal-clauses-artefacts-dir docs/artefacts/collatz/universal_clauses --out-dir applications/collatz/out --docs-dir docs
```
## Empreintes sha256 (scripts, artefacts)
- `/home/ncantu/code/algo/applications/collatz/collatz_k_scripts/collatz_generate_run_report.py`
- sha256: `dc14461dc91bf32a77cd35c2a598a628072075f1afe58eafcbaf07acee5a79b4`
- `/home/ncantu/code/algo/applications/collatz/collatz_k_scripts/collatz_extract_universal_clauses.py`
- sha256: `a3de82a8b2b4e2579e2a4f94141711254629961ad8ea7746545a566c4ff4490f`
- `/home/ncantu/code/algo/applications/collatz/collatz_k_scripts/collatz_verify_universal_clauses.py`
- sha256: `d7e0248c2096ce603166761b0cc78e6984d5995aba7c49ae6fa071b36d81df1e`
- `/home/ncantu/code/algo/docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.json`
- sha256: `cad483cab3a6db3693dc6130e68f61e99350515719bf52fc63370f4287e7ef97`
- `/home/ncantu/code/algo/docs/artefacts/collatz/universal_clauses/clauses_universelles.json`
- sha256: `45da7b5bb606ebe03a5bc596a0629f4762ca960dc675fe6fe55504c2bdc3ea9f`
- `/home/ncantu/code/algo/docs/artefacts/collatz/universal_clauses/clauses_universelles.md`
- sha256: `30d5da014aeae447f9904ba5135bd6c7a52d5de5b4c32d6ba52705d962efd274`
- `/home/ncantu/code/algo/docs/artefacts/collatz/universal_clauses/verification_universal_clauses.json`
- sha256: `a45f5a6279febe00a8c723718e935d45481c1c4e2ec60b4664c7a506321121c5`
- `/home/ncantu/code/algo/docs/artefacts/collatz/universal_clauses/verification_universal_clauses.md`
- sha256: `a40e151dc81c004009030b0749c9025cc5f74526ae0bf60fecd72d11fe20f5e3`
## Compteurs et métriques
- palier (domaine des témoins) : 2^13
- max(2^m_stable) observé : 2^85
- total clauses : 384
- D_exact : 27
- F : 330
- D_brother_local : 27
- ok_records : 384
- ok : True
## Chemins dartefacts (versionnés)
- ARTEFACTS : `/home/ncantu/code/algo/docs/artefacts/collatz/universal_clauses`

View File

@ -116,6 +116,28 @@ python3 applications/collatz/collatz_k_scripts/collatz_generate_run_report.py \
--docs-dir docs
```
Pour lextraction/vérification de clauses universelles candidates (Option A : Lift(\(B_{12}\))), à partir de lartefact C3 (artefacts déterministes versionnés) :
```bash
python3 applications/collatz/collatz_k_scripts/collatz_extract_universal_clauses.py \
--repo-root /home/ncantu/code/algo \
--verification-json docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.json \
--output-dir docs/artefacts/collatz/universal_clauses
python3 applications/collatz/collatz_k_scripts/collatz_verify_universal_clauses.py \
--repo-root /home/ncantu/code/algo \
--verification-json docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.json \
--clauses-json docs/artefacts/collatz/universal_clauses/clauses_universelles.json \
--output-dir docs/artefacts/collatz/universal_clauses
python3 applications/collatz/collatz_k_scripts/collatz_generate_run_report.py \
--profile universal_clauses \
--scope universal_clauses \
--universal-clauses-artefacts-dir docs/artefacts/collatz/universal_clauses \
--out-dir applications/collatz/out \
--docs-dir docs
```
### Contexte
- **But du run** : (énoncé court)

View File

@ -23,10 +23,11 @@ afin déviter toute insertion de transcript terminal dans les documents math
- Ajout dun format standard : `docs/collatz_run_report_format.md`.
- Ajout dun générateur : `applications/collatz/collatz_k_scripts/collatz_generate_run_report.py`.
- Ajout dun exemple réel de rapport : `docs/collatz_run_report_2026-03-04_extend_D18_D21_resume_from_D20.md`.
- Profils supportés : `extend_finale`, `validation_section7`, `pipeline_d16_d17`, `fusion_palier2p25`, `local_H6_E1`, `local_H6`, `c2_projective`, `c3_local_descent`.
- Profils supportés : `extend_finale`, `validation_section7`, `pipeline_d16_d17`, `fusion_palier2p25`, `local_H6_E1`, `local_H6`, `c2_projective`, `c3_local_descent`, `universal_clauses`.
- Pour `local_H6`/`local_H6_E1`, un audit automatique compare le **palier attendu** (artefacts) au **palier certifié** (certificats) et échoue en cas de désaccord.
- Pour `c2_projective`, le rapport cite les artefacts déterministes `docs/artefacts/collatz/c2_projective/verification_c2_projective.{json,md}`.
- Pour `c3_local_descent`, le rapport cite les artefacts déterministes `docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.{json,md}`.
- Pour `universal_clauses`, le rapport cite les artefacts déterministes `docs/artefacts/collatz/universal_clauses/{clauses_universelles,verification_universal_clauses}.{json,md}` et lentrée `docs/artefacts/collatz/c3_local_descent/verification_c3_local_descent.json`.
## Modalités danalyse