collatz: add hensel chain, targeted refinement leaves and brother-derived D_minor

**Motivations:**
- Extend refinement tooling with hensel chain leaves, targeted refinement leaves and brother-derived minorated clauses.
- Document grammar extensions and targeted leaves/diagnostics workflows.

**Root causes:**
- N/A (evolutions)

**Correctifs:**
- N/A

**Evolutions:**
- Add collatz_build_hensel_chain_leaves.py, collatz_verify_hensel_chain_leaves.py.
- Add collatz_build_targeted_refinement_leaves.py, collatz_verify_targeted_refinement_leaves.py, collatz_diagnose_targeted_leaves_failure.py.
- Add collatz_build_refinement_bundle_over_Sm_multilevel.py.
- Add collatz_derive_brother_minorated_clauses_from_terminal_over_Sm.py, collatz_verify_brother_derived_minorated_clauses_over_Sm.py.
- Add refinement_K artefacts (bundle, hensel_chain_leaves, targeted_leaves) and minorated_clauses_over_Sm_derived_from_brothers.
- Update README, conjoncture, and feature docs.

**Pages affectées:**
- applications/collatz/collatz_k_scripts/README.md
- applications/collatz/conjoncture_collatz.md
- applications/collatz/collatz_k_scripts/*.py (new)
- docs/features/*.md
- docs/artefacts/collatz/**
This commit is contained in:
ncantu 2026-03-10 09:07:11 +01:00
parent bd529682bf
commit 9759114f49
66 changed files with 8217477 additions and 0 deletions

View File

@ -35,5 +35,7 @@ python reproduce_all_audits.py --root /chemin/fichiers_source --out /chemin/sort
- `collatz_generate_terminal_clauses_over_Sm.py` : clauses terminales (D/F) directement décidables sur \(S_M\).
- `collatz_generate_minorated_descent_clauses_over_Sm.py` : clauses de descente minorées (D_minor) sur \(S_M\).
- `collatz_verify_minorated_descent_clauses_over_Sm.py` : vérification déterministe des clauses D_minor.
- `collatz_derive_brother_minorated_clauses_from_terminal_over_Sm.py` : dérivation de clauses D_minor “par frères” à partir de clauses D_exact sur \(S_m\).
- `collatz_build_refinement_certificate_over_Sm_multilevel.py` : audit de fermeture par raffinement (multi-niveaux) sur \(S_M\).
- `collatz_compare_dminor_families_incremental.py` : tableau dimpact incrémental (Δopen_roots, Δq_m, Δparents_one_child, quantiles lb) par ajout de familles D_minor groupées par \(k\).
- `collatz_build_refinement_bundle_over_Sm_multilevel.py` : pipeline “1 commande” (fermeture multi-niveaux + profil dobstruction + diagnostic ciblé optionnel).

View File

@ -0,0 +1,409 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_build_hensel_chain_leaves.py
New leaf grammar: Hensel-chain compression for difficult roots.
For a tracked root residue r0 (mod 2^M), we search a horizon k such that the affine numerator
L_k(n) = 3^k n + B_k (where B_k = 3*C_{k-1}+2^{A_{k-1}} from the stable prefix of length k-1)
vanishes modulo 2^M (or more). This defines a unique 2-adic Hensel lift chain r_m (m>=M)
such that L_k(r_m) 0 (mod 2^m).
We build a compact refinement certificate:
- at each level m -> m+1, only ONE child continues the chain (the unique lift),
- the sibling subtree is closed immediately by an exact D/F clause at palier m+1 (deterministic search),
- finally the chain node is closed by a D_minor clause at palier u_min(k) where 2^{u_min}>3^k.
Outputs:
- clauses_hensel_chain_leaves_mod2p<M>.{json,md} (leaf set at palier M, plugging into multilevel closure)
- certs/*.json per root (deterministic proof object)
"""
from __future__ import annotations
import argparse
import hashlib
import json
from dataclasses import dataclass
from pathlib import Path
from collatz_k_core import (
PrefixData,
delta_D,
delta_F,
fusion_choice_a,
N0_D,
Nf_F,
prefix_data,
preimage_m,
v2_fast,
)
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _write_md(path: Path, lines: list[str]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _sha256_file(path: Path, chunk_size: int = 16 * 1024 * 1024) -> str:
h = hashlib.sha256()
with path.open("rb") as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
def _req_int(d: dict[str, object], key: str) -> int:
v = d.get(key)
if not isinstance(v, int):
raise ValueError(f"Expected int for {key}")
return v
def _read_tracked_roots_file(path: Path) -> list[int]:
roots: list[int] = []
seen: set[int] = set()
for line in path.read_text(encoding="utf-8", errors="strict").splitlines():
s = line.strip()
if not s or s.startswith("#"):
continue
if "#" in s:
s = s.split("#", 1)[0].strip()
if not s:
continue
r = int(s, 10)
if r <= 0 or (r % 2) == 0:
raise ValueError(f"Invalid tracked root (must be positive odd integer): {r}")
if r not in seen:
roots.append(r)
seen.add(r)
return roots
def _u_min_for_k(k: int) -> int:
return (3**k).bit_length()
@dataclass(frozen=True)
class Leaf:
kind: str # D_exact | F | D_minor
m: int
r: int
k_or_t: int
A: int | None
threshold: int
extra: dict[str, int]
def to_json(self) -> dict[str, object]:
return {
"kind": self.kind,
"modulus_power": self.m,
"residue_mod_2p": self.r,
"k_or_t": self.k_or_t,
"A": self.A,
"threshold": self.threshold,
"extra": self.extra,
}
def _best_exact_D(*, residue: int, m: int, k_max: int) -> Leaf | None:
best: Leaf | None = None
best_key: tuple[int, int, int, int] | None = None
for k in range(1, k_max + 1):
pref = prefix_data(residue, k)
req_m = pref.A + 1
if req_m > m:
break
if delta_D(pref.A, k) <= 0:
continue
N0 = N0_D(pref.C, pref.A, k)
key = (req_m, pref.A, k, N0)
if best_key is None or key < best_key:
best_key = key
best = Leaf(
kind="D_exact",
m=m,
r=residue,
k_or_t=k,
A=pref.A,
threshold=N0,
extra={"k": k, "C_k": int(pref.C)},
)
return best
def _best_exact_F(*, residue: int, m: int, t_max: int) -> Leaf | None:
best: Leaf | None = None
best_key: tuple[int, int, int, int, int] | None = None
for t in range(1, t_max + 1):
pref = prefix_data(residue, t)
req_m = pref.A + 1
if req_m > m:
break
a = fusion_choice_a(pref.y)
if a is None:
continue
if delta_F(pref.A, t, a) <= 0:
continue
Nf = Nf_F(pref.C, pref.A, t, a)
m_pre = preimage_m(pref.y, a)
key = (req_m, pref.A, t, Nf, m_pre)
if best_key is None or key < best_key:
best_key = key
best = Leaf(
kind="F",
m=m,
r=residue,
k_or_t=t,
A=pref.A,
threshold=Nf,
extra={"t": t, "a": int(a), "y": int(pref.y), "preimage_m": int(m_pre), "C_t": int(pref.C)},
)
return best
def _leaf_for_sibling(*, residue: int, m: int, k_max: int, t_max: int) -> Leaf | None:
d = _best_exact_D(residue=residue, m=m, k_max=k_max)
f = _best_exact_F(residue=residue, m=m, t_max=t_max)
if d is None:
return f
if f is None:
return d
return d if (d.threshold, d.k_or_t) <= (f.threshold, f.k_or_t) else f
def _hensel_chain_for_root(*, root_palier: int, r0: int, k_chain_max: int) -> tuple[int, int] | None:
"""
Return (k, v) where v=v2(L_k(r0)) and k chosen to minimize u_min(k) subject to v>=u_min(k) and v>=root_palier.
"""
best: tuple[int, int, int] | None = None # (u_min, k, v)
for k in range(2, k_chain_max + 1):
pref = prefix_data(r0, k - 1)
Bk = 3 * pref.C + (1 << pref.A)
v = v2_fast((3**k) * r0 + Bk)
if v < root_palier:
continue
u = _u_min_for_k(k)
if v < u:
continue
key = (u, k, v)
if best is None or key < best:
best = key
if best is None:
return None
_, k, v = best
return (k, v)
@dataclass(frozen=True)
class ChainStep:
m: int
chain_r: int
sibling_r: int
sibling_leaf: Leaf
def to_json(self) -> dict[str, object]:
return {
"m": self.m,
"chain_r": self.chain_r,
"sibling_r": self.sibling_r,
"sibling_leaf": self.sibling_leaf.to_json(),
}
def run(
*,
repo_root: Path,
root_palier: int,
tracked_roots_file: Path,
k_chain_max: int,
k_leaf_max: int,
t_leaf_max: int,
output_dir: Path,
) -> None:
roots = _read_tracked_roots_file(tracked_roots_file)
if not roots:
raise ValueError("tracked_roots_file is empty")
certs_dir = output_dir / "certs"
certs_dir.mkdir(parents=True, exist_ok=True)
leaves: list[dict[str, object]] = []
lines: list[str] = []
lines.append("**Auteur** : Équipe 4NK")
lines.append("")
lines.append(f"# Feuilles “chaîne de Hensel” — racine 2^{root_palier}")
lines.append("")
lines.append(f"- tracked_roots_file : `{tracked_roots_file}`")
lines.append(f"- k_chain_max : {k_chain_max}")
lines.append(f"- k_leaf_max : {k_leaf_max}")
lines.append(f"- t_leaf_max : {t_leaf_max}")
lines.append("")
lines.append("| root | k | u_min(k) | v2(L_k(root)) | closed | cert |")
lines.append("| --- | --- | --- | --- | --- | --- |")
ok = 0
for r0 in roots:
cand = _hensel_chain_for_root(root_palier=root_palier, r0=r0, k_chain_max=k_chain_max)
if cand is None:
lines.append(f"| {r0} | | | | no | |")
continue
k, v = cand
u = _u_min_for_k(k)
m_end = u
# build chain from m=root_palier to m_end with sibling closures
chain_r = r0
steps: list[ChainStep] = []
for m in range(root_palier, m_end):
step = 1 << m
r_low = chain_r
r_high = chain_r + step
pref = prefix_data(chain_r, k - 1)
Bk = 3 * pref.C + (1 << pref.A)
# pick the unique child that increases divisibility
v_low = v2_fast((3**k) * r_low + Bk)
v_high = v2_fast((3**k) * r_high + Bk)
if v_low >= (m + 1) and v_high >= (m + 1):
# should not happen with odd coefficient unless overflow in reasoning; treat as failure
steps = []
break
if v_low >= (m + 1):
chain_next = r_low
sibling = r_high
elif v_high >= (m + 1):
chain_next = r_high
sibling = r_low
else:
steps = []
break
sibling_leaf = _leaf_for_sibling(residue=sibling, m=m + 1, k_max=k_leaf_max, t_max=t_leaf_max)
if sibling_leaf is None:
steps = []
break
steps.append(ChainStep(m=m + 1, chain_r=chain_next, sibling_r=sibling, sibling_leaf=sibling_leaf))
chain_r = chain_next
if not steps:
lines.append(f"| {r0} | {k} | {u} | {v} | no | |")
continue
# final D_minor on chain node at m_end
pref_end = prefix_data(chain_r, k - 1)
Bk_end = 3 * pref_end.C + (1 << pref_end.A)
if v2_fast((3**k) * chain_r + Bk_end) < m_end:
lines.append(f"| {r0} | {k} | {u} | {v} | no | |")
continue
d = (1 << m_end) - (3**k)
if d <= 0:
lines.append(f"| {r0} | {k} | {u} | {v} | no | |")
continue
N0 = (Bk_end // d) + 1
final_leaf = Leaf(
kind="D_minor",
m=m_end,
r=chain_r,
k_or_t=k,
A=None,
threshold=N0,
extra={
"k": k,
"underlineA": m_end,
"A_km1": int(pref_end.A),
"C_km1": int(pref_end.C),
"B_k": int(Bk_end),
},
)
cert_path = certs_dir / f"hensel_chain_leaf_root{r0}_mod2p{root_palier}_k{k}_to2p{m_end}.json"
cert_obj = {
"domain": {"root_palier": root_palier, "root_residue_mod_2p": r0, "k": k, "m_end": m_end},
"params": {"k_leaf_max": k_leaf_max, "t_leaf_max": t_leaf_max, "k_chain_max": k_chain_max},
"chain": {
"u_min": u,
"v2_L_root": v,
"steps": [s.to_json() for s in steps],
"final": final_leaf.to_json(),
},
}
_write_json(cert_path, cert_obj)
leaves.append(
{
"kind": "HenselChainLeaf",
"modulus_power": root_palier,
"residue_mod_2p": r0,
"certificate_path": str(cert_path),
"certificate_sha256": _sha256_file(cert_path),
}
)
ok += 1
lines.append(f"| {r0} | {k} | {u} | {v} | yes | `{cert_path}` |")
out_json = output_dir / f"clauses_hensel_chain_leaves_mod2p{root_palier}.json"
out_md = output_dir / f"clauses_hensel_chain_leaves_mod2p{root_palier}.md"
out_obj = {
"domain": {"palier": root_palier},
"inputs": {"tracked_roots_file": str(tracked_roots_file)},
"params": {"k_chain_max": k_chain_max, "k_leaf_max": k_leaf_max, "t_leaf_max": t_leaf_max},
"counts": {"tracked_roots": len(roots), "closed_roots": ok, "failed_roots": len(roots) - ok},
"clauses": leaves,
"sha256": {
"inputs": {
str(tracked_roots_file): _sha256_file(tracked_roots_file),
}
},
}
_write_json(out_json, out_obj)
lines.append("")
lines.append("## Sorties")
lines.append("")
lines.append(f"- JSON : `{out_json}`")
lines.append(f"- Markdown : `{out_md}`")
lines.append("")
_write_md(out_md, lines)
def main() -> None:
ap = argparse.ArgumentParser(description="Build Hensel-chain leaves for a tracked roots list")
ap.add_argument("--repo-root", default=".", help="Repository root")
ap.add_argument("--root-palier", type=int, default=15)
ap.add_argument("--tracked-roots-file", required=True)
ap.add_argument("--k-chain-max", type=int, default=80)
ap.add_argument("--k-leaf-max", type=int, default=256)
ap.add_argument("--t-leaf-max", type=int, default=256)
ap.add_argument("--output-dir", default="", help="Output directory (defaults under docs/artefacts/...)")
args = ap.parse_args()
repo_root = Path(args.repo_root).resolve()
root_palier = int(args.root_palier)
output_dir = Path(args.output_dir).resolve() if args.output_dir.strip() else (
repo_root / "docs" / "artefacts" / "collatz" / "refinement_K" / f"palier2p{root_palier}" / "hensel_chain_leaves"
)
run(
repo_root=repo_root,
root_palier=root_palier,
tracked_roots_file=Path(args.tracked_roots_file).resolve(),
k_chain_max=int(args.k_chain_max),
k_leaf_max=int(args.k_leaf_max),
t_leaf_max=int(args.t_leaf_max),
output_dir=output_dir,
)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,234 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_build_refinement_bundle_over_Sm_multilevel.py
Pipeline wrapper that produces a "bundle" of deterministic artefacts for multilevel refinement closure over S_M:
- multilevel closure certificate (Sm)
- open roots obstruction profile (lb histograms, quantiles, motifs)
- optional targeted-leaves failure diagnostic for a fixed tracked roots list
This wrapper is intended to keep the closure workflow reproducible with a single command.
"""
from __future__ import annotations
import argparse
import json
import subprocess
from pathlib import Path
def _run(cmd: list[str]) -> None:
subprocess.run(cmd, check=True)
def _read_leaf_domain_palier(path: Path) -> int | None:
try:
obj = json.loads(path.read_text(encoding="utf-8", errors="strict"))
except (OSError, json.JSONDecodeError):
return None
if not isinstance(obj, dict):
return None
domain = obj.get("domain")
if not isinstance(domain, dict):
return None
palier = domain.get("palier")
return palier if isinstance(palier, int) else None
def run(
*,
repo_root: Path,
root_palier: int,
max_palier: int,
leaf_json: list[Path],
bundle_dir: Path,
k_max: int,
t_max: int,
search_max_required_m: int,
tracked_roots_file: Path | None,
include_brother_derived_dminor: bool,
verify_brother_derived_dminor: bool,
) -> None:
scripts_dir = repo_root / "applications" / "collatz" / "collatz_k_scripts"
multilevel = scripts_dir / "collatz_build_refinement_certificate_over_Sm_multilevel.py"
open_roots = scripts_dir / "collatz_analyze_open_roots_refinement.py"
targeted_diag = scripts_dir / "collatz_diagnose_targeted_leaves_failure.py"
derive_bro = scripts_dir / "collatz_derive_brother_minorated_clauses_from_terminal_over_Sm.py"
verify_bro = scripts_dir / "collatz_verify_brother_derived_minorated_clauses_over_Sm.py"
bundle_dir.mkdir(parents=True, exist_ok=True)
if include_brother_derived_dminor:
derived_root = bundle_dir / "derived_brother_dminor"
derived_root.mkdir(parents=True, exist_ok=True)
derived_paths: list[Path] = []
for p in leaf_json:
palier = _read_leaf_domain_palier(p)
if palier is None:
continue
# Only derive from terminal clause artefacts (heuristic by filename).
if "clauses_terminal_over_Sm_mod2p" not in p.name:
continue
out_dir = derived_root / f"palier2p{palier}"
out_dir.mkdir(parents=True, exist_ok=True)
_run(
[
"python3",
str(derive_bro),
"--terminal-json",
str(p),
"--output-dir",
str(out_dir),
]
)
derived_json = out_dir / f"clauses_D_minor_derived_from_brothers_over_Sm_mod2p{palier}.json"
derived_paths.append(derived_json)
if verify_brother_derived_dminor:
_run(
[
"python3",
str(verify_bro),
"--derived-json",
str(derived_json),
"--output-dir",
str(out_dir),
]
)
leaf_json = leaf_json + derived_paths
leaf_args: list[str] = []
for p in leaf_json:
leaf_args.extend(["--leaf-json", str(p)])
_run(
[
"python3",
str(multilevel),
"--repo-root",
str(repo_root),
"--root-palier",
str(root_palier),
"--max-palier",
str(max_palier),
"--output-dir",
str(bundle_dir),
*leaf_args,
]
)
cert_json = bundle_dir / f"refinement_certificate_Sm_multilevel_mod2p{root_palier}_to2p{max_palier}.json"
_run(
[
"python3",
str(open_roots),
"--root-palier",
str(root_palier),
"--max-palier",
str(max_palier),
"--multilevel-json",
str(cert_json),
"--output-dir",
str(bundle_dir),
"--k-max",
str(k_max),
"--t-max",
str(t_max),
"--search-max-required-m",
str(search_max_required_m),
]
)
if tracked_roots_file is not None:
_run(
[
"python3",
str(targeted_diag),
"--root-palier",
str(root_palier),
"--tracked-roots-file",
str(tracked_roots_file),
"--k-max",
str(k_max),
"--t-max",
str(t_max),
"--search-max-required-m",
str(search_max_required_m),
"--output-dir",
str(bundle_dir),
]
)
def main() -> None:
ap = argparse.ArgumentParser(description="Build a bundle of refinement closure + diagnostics over S_M (multilevel)")
ap.add_argument("--repo-root", default=".", help="Repository root")
ap.add_argument("--root-palier", type=int, default=15)
ap.add_argument("--max-palier", type=int, default=18)
ap.add_argument("--leaf-json", action="append", default=[], help="Leaf JSON path (repeatable). If omitted, uses terminal_clauses_over_Sm for M..Mmax.")
ap.add_argument("--bundle-dir", default="", help="Bundle output directory (defaults under docs/artefacts/...)")
ap.add_argument("--k-max", type=int, default=256)
ap.add_argument("--t-max", type=int, default=256)
ap.add_argument("--search-max-required-m", type=int, default=256)
ap.add_argument("--tracked-roots-file", default="", help="Optional fixed roots list file for targeted diagnostic")
ap.add_argument(
"--include-brother-derived-dminor",
action="store_true",
help="Generate and include D_minor leaves derived from brothers (from terminal D_exact artefacts) in the bundle",
)
ap.add_argument(
"--verify-brother-derived-dminor",
action="store_true",
help="When including brother-derived D_minor, also run its deterministic verifier",
)
args = ap.parse_args()
repo_root = Path(args.repo_root).resolve()
root_palier = int(args.root_palier)
max_palier = int(args.max_palier)
if args.leaf_json:
leaf_json = [Path(p).resolve() for p in args.leaf_json]
else:
leaf_json = [
repo_root
/ "docs"
/ "artefacts"
/ "collatz"
/ "terminal_clauses_over_Sm"
/ f"palier2p{m}"
/ f"clauses_terminal_over_Sm_mod2p{m}.json"
for m in range(root_palier, max_palier + 1)
]
bundle_dir = Path(args.bundle_dir).resolve() if args.bundle_dir.strip() else (
repo_root
/ "docs"
/ "artefacts"
/ "collatz"
/ "refinement_K"
/ f"palier2p{root_palier}"
/ f"bundle_mod2p{root_palier}_to2p{max_palier}"
)
tracked_roots_file = Path(args.tracked_roots_file).resolve() if args.tracked_roots_file.strip() else None
run(
repo_root=repo_root,
root_palier=root_palier,
max_palier=max_palier,
leaf_json=leaf_json,
bundle_dir=bundle_dir,
k_max=int(args.k_max),
t_max=int(args.t_max),
search_max_required_m=int(args.search_max_required_m),
tracked_roots_file=tracked_roots_file,
include_brother_derived_dminor=bool(args.include_brother_derived_dminor),
verify_brother_derived_dminor=bool(args.verify_brother_derived_dminor),
)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,574 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_build_targeted_refinement_leaves.py
New leaf grammar: "targeted deep refinement leaves" over S_M.
Goal:
- close a *fixed list* of difficult roots r0 in S_M by paying a local "debt of observability":
we refine only those roots to a deeper palier, and close every reached node by an exact D/F clause
(or by an already-known D_minor leaf when available).
- output a leaf JSON at palier M (so it plugs into collatz_build_refinement_certificate_over_Sm_multilevel.py)
plus per-root certificates (deterministic, verifiable).
This is not a global palier lift: the deep observability is localized to the tracked roots.
"""
from __future__ import annotations
import argparse
import hashlib
import json
from dataclasses import dataclass
from pathlib import Path
from collatz_k_core import (
PrefixData,
delta_D,
delta_F,
fusion_choice_a,
N0_D,
Nf_F,
prefix_data,
preimage_m,
)
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _write_md(path: Path, lines: list[str]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _sha256_file(path: Path, chunk_size: int = 16 * 1024 * 1024) -> str:
h = hashlib.sha256()
with path.open("rb") as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
def _req_int(d: dict[str, object], key: str) -> int:
v = d.get(key)
if not isinstance(v, int):
raise ValueError(f"Expected int for {key}")
return v
def _read_tracked_roots_file(path: Path) -> list[int]:
roots: list[int] = []
seen: set[int] = set()
for line in path.read_text(encoding="utf-8", errors="strict").splitlines():
s = line.strip()
if not s or s.startswith("#"):
continue
if "#" in s:
s = s.split("#", 1)[0].strip()
if not s:
continue
r = int(s, 10)
if r <= 0 or (r % 2) == 0:
raise ValueError(f"Invalid tracked root (must be positive odd integer): {r}")
if r not in seen:
roots.append(r)
seen.add(r)
return roots
@dataclass(frozen=True)
class TerminalClause:
kind: str # D_exact | F | D_minor
modulus_power: int
residue_mod_2p: int
k_or_t: int | None
A: int | None
threshold: int | None
extra: dict[str, int]
def to_json(self) -> dict[str, object]:
return {
"kind": self.kind,
"modulus_power": self.modulus_power,
"residue_mod_2p": self.residue_mod_2p,
"k_or_t": self.k_or_t,
"A": self.A,
"threshold": self.threshold,
"extra": self.extra,
}
def _best_exact_D(*, residue: int, m: int, k_max: int) -> TerminalClause | None:
best: TerminalClause | None = None
best_key: tuple[int, int, int, int] | None = None
for k in range(1, k_max + 1):
pref = prefix_data(residue, k)
req_m = pref.A + 1
if req_m > m:
break
if delta_D(pref.A, k) <= 0:
continue
N0 = N0_D(pref.C, pref.A, k)
key = (req_m, pref.A, k, N0)
if best_key is None or key < best_key:
best_key = key
best = TerminalClause(
kind="D_exact",
modulus_power=m,
residue_mod_2p=residue,
k_or_t=k,
A=pref.A,
threshold=N0,
extra={"k": k, "C_k": int(pref.C)},
)
return best
def _best_exact_F(*, residue: int, m: int, t_max: int) -> TerminalClause | None:
best: TerminalClause | None = None
best_key: tuple[int, int, int, int, int] | None = None
for t in range(1, t_max + 1):
pref = prefix_data(residue, t)
req_m = pref.A + 1
if req_m > m:
break
a = fusion_choice_a(pref.y)
if a is None:
continue
if delta_F(pref.A, t, a) <= 0:
continue
Nf = Nf_F(pref.C, pref.A, t, a)
m_pre = preimage_m(pref.y, a)
# strict fusion requires m_pre < residue; but for a leaf in the refinement grammar,
# we store the computed preimage and leave the "global well-foundedness" to the main proof layer.
key = (req_m, pref.A, t, Nf, m_pre)
if best_key is None or key < best_key:
best_key = key
best = TerminalClause(
kind="F",
modulus_power=m,
residue_mod_2p=residue,
k_or_t=t,
A=pref.A,
threshold=Nf,
extra={"t": t, "a": int(a), "y": int(pref.y), "preimage_m": int(m_pre), "C_t": int(pref.C)},
)
return best
def _u_min_for_k(k: int) -> int:
# minimal underlineA such that 2^underlineA > 3^k
return (3**k).bit_length()
def _best_dminor(*, residue: int, m: int, k_max: int) -> TerminalClause | None:
best: TerminalClause | None = None
best_key: tuple[int, int, int] | None = None
for k in range(2, k_max + 1):
u = _u_min_for_k(k)
if u > m:
break
pref = prefix_data(residue, k - 1)
if pref.A + 1 > m:
# prefix not stable at this palier
continue
B_k = 3 * pref.C + (1 << pref.A)
mod = 1 << u
if ((3**k) * residue + B_k) % mod != 0:
continue
d = (1 << u) - (3**k)
N0 = (B_k // d) + 1
key = (u, k, N0)
if best_key is None or key < best_key:
best_key = key
best = TerminalClause(
kind="D_minor",
modulus_power=m,
residue_mod_2p=residue,
k_or_t=k,
A=None,
threshold=N0,
extra={"k": k, "underlineA": u, "A_km1": int(pref.A), "C_km1": int(pref.C), "B_k": int(B_k)},
)
return best
def _derive_brother_dminor_from_exact_D(
*,
exact_D: TerminalClause,
brother_residue: int,
m_child: int,
) -> TerminalClause | None:
if exact_D.kind != "D_exact" or exact_D.k_or_t is None:
return None
k = int(exact_D.k_or_t)
u = _u_min_for_k(k)
if u > m_child or u < 2:
return None
C_k = exact_D.extra.get("C_k")
if not isinstance(C_k, int):
return None
pref_bro = prefix_data(brother_residue, k - 1)
if pref_bro.A + 1 > m_child:
return None
B_k = 3 * pref_bro.C + (1 << pref_bro.A)
if int(B_k) != int(C_k):
return None
mod = 1 << u
if ((3**k) * brother_residue + B_k) % mod != 0:
return None
d = (1 << u) - (3**k)
if d <= 0:
return None
N0 = (B_k // d) + 1
return TerminalClause(
kind="D_minor",
modulus_power=m_child,
residue_mod_2p=brother_residue,
k_or_t=k,
A=None,
threshold=int(N0),
extra={
"k": k,
"underlineA": u,
"A_km1": int(pref_bro.A),
"C_km1": int(pref_bro.C),
"B_k": int(B_k),
"derived_from": "brother_exact_D",
},
)
def _load_dminor_residues(*, dminor_json_paths: list[Path]) -> dict[int, set[int]]:
by_m: dict[int, set[int]] = {}
for p in dminor_json_paths:
obj = _read_json(p)
if not isinstance(obj, dict):
raise ValueError(f"Invalid D_minor JSON: {p}")
domain = obj.get("domain")
clauses = obj.get("clauses")
if not isinstance(domain, dict) or not isinstance(clauses, list) or not all(isinstance(x, dict) for x in clauses):
raise ValueError(f"Invalid D_minor JSON: missing domain/clauses: {p}")
m = _req_int(domain, "palier")
s = by_m.setdefault(m, set())
for c in clauses:
r = c.get("residue_mod_2p")
if not isinstance(r, int):
raise ValueError("Invalid D_minor clause entry: residue_mod_2p")
s.add(r)
return by_m
@dataclass(frozen=True)
class CertNode:
m: int
r: int
leaf: TerminalClause | None
left: "CertNode | None"
right: "CertNode | None"
def to_json(self) -> dict[str, object]:
out: dict[str, object] = {"m": self.m, "r": self.r}
if self.leaf is not None:
out["leaf"] = self.leaf.to_json()
if self.left is not None and self.right is not None:
out["children"] = [self.left.to_json(), self.right.to_json()]
return out
def _build_tree(
*,
root_palier: int,
r0: int,
target_max_palier: int,
k_max: int,
t_max: int,
dminor_by_m: dict[int, set[int]],
) -> CertNode | None:
memo: dict[tuple[int, int], CertNode | None] = {}
def rec(m: int, r: int) -> CertNode | None:
key = (m, r)
if key in memo:
return memo[key]
if m > target_max_palier:
memo[key] = None
return None
# Fast path: precomputed D_minor at this palier (treated as terminal)
if r in dminor_by_m.get(m, set()):
node = CertNode(
m=m,
r=r,
leaf=TerminalClause(
kind="D_minor",
modulus_power=m,
residue_mod_2p=r,
k_or_t=None,
A=None,
threshold=None,
extra={"source": "precomputed"},
),
left=None,
right=None,
)
memo[key] = node
return node
d = _best_exact_D(residue=r, m=m, k_max=k_max)
f = _best_exact_F(residue=r, m=m, t_max=t_max)
dm = _best_dminor(residue=r, m=m, k_max=k_max)
leaf = None
# Deterministic preference order: D_exact, then F, then D_minor (lower bound)
if d is not None:
leaf = d
elif f is not None:
leaf = f
else:
leaf = dm
if leaf is not None:
node = CertNode(m=m, r=r, leaf=leaf, left=None, right=None)
memo[key] = node
return node
if m == target_max_palier:
memo[key] = None
return None
step = 1 << m
left_r = r
right_r = r + step
left = rec(m + 1, left_r)
if left is None:
memo[key] = None
return None
# Recombination attempt: if one child closes by an exact D leaf, try to close its brother
# by a derived D_minor leaf using the same affine numerator (brother completion).
if left.leaf is not None and left.leaf.kind == "D_exact":
derived = _derive_brother_dminor_from_exact_D(
exact_D=left.leaf,
brother_residue=right_r,
m_child=m + 1,
)
if derived is not None:
right = CertNode(m=m + 1, r=right_r, leaf=derived, left=None, right=None)
node = CertNode(m=m, r=r, leaf=None, left=left, right=right)
memo[key] = node
return node
right = rec(m + 1, right_r)
if right is None:
memo[key] = None
return None
if right.leaf is not None and right.leaf.kind == "D_exact":
derived = _derive_brother_dminor_from_exact_D(
exact_D=right.leaf,
brother_residue=left_r,
m_child=m + 1,
)
if derived is not None:
left2 = CertNode(m=m + 1, r=left_r, leaf=derived, left=None, right=None)
node = CertNode(m=m, r=r, leaf=None, left=left2, right=right)
memo[key] = node
return node
node = CertNode(m=m, r=r, leaf=None, left=left, right=right)
memo[key] = node
return node
return rec(root_palier, r0)
def run(
*,
repo_root: Path,
root_palier: int,
tracked_roots_file: Path,
target_max_palier_cap: int,
obstruction_json: Path,
k_max: int,
t_max: int,
dminor_json_paths: list[Path],
output_dir: Path,
) -> None:
tracked_roots = _read_tracked_roots_file(tracked_roots_file)
if not tracked_roots:
raise ValueError("tracked_roots_file is empty")
obs = _read_json(obstruction_json)
if not isinstance(obs, dict):
raise ValueError("Invalid obstruction JSON")
rows = obs.get("rows")
if not isinstance(rows, list) or not all(isinstance(x, dict) for x in rows):
raise ValueError("Invalid obstruction JSON: missing rows")
lb_by_root: dict[int, int] = {}
for row in rows:
r0 = row.get("root_residue_mod_2p")
if not isinstance(r0, int):
continue
lb = row.get("lower_bound_required_m_to_close_root")
if not isinstance(lb, dict):
continue
lb_any = lb.get("any")
if isinstance(lb_any, int):
lb_by_root[r0] = lb_any
dminor_by_m = _load_dminor_residues(dminor_json_paths=dminor_json_paths)
certs_dir = output_dir / "certs"
certs_dir.mkdir(parents=True, exist_ok=True)
leaf_clauses: list[dict[str, object]] = []
md: list[str] = []
md.append("**Auteur** : Équipe 4NK")
md.append("")
md.append(f"# Feuilles ciblées (raffinement profond local) — racine 2^{root_palier}")
md.append("")
md.append(f"- tracked_roots_file : `{tracked_roots_file}`")
md.append(f"- target_max_palier_cap : {target_max_palier_cap}")
md.append(f"- k_max : {k_max}")
md.append(f"- t_max : {t_max}")
md.append("")
md.append("| root | lb_any (from obstruction) | target_max | closed | cert |")
md.append("| --- | --- | --- | --- | --- |")
closed = 0
for r0 in tracked_roots:
lb = lb_by_root.get(r0)
target_max = target_max_palier_cap
tree = _build_tree(
root_palier=root_palier,
r0=r0,
target_max_palier=target_max,
k_max=k_max,
t_max=t_max,
dminor_by_m=dminor_by_m,
)
if tree is None:
md.append(f"| {r0} | {'' if lb is None else lb} | {target_max} | no | |")
continue
cert_path = certs_dir / f"targeted_leaf_cert_root{r0}_mod2p{root_palier}_to2p{target_max}.json"
_write_json(
cert_path,
{
"domain": {"root_palier": root_palier, "root_residue_mod_2p": r0, "target_max_palier": target_max},
"params": {"k_max": k_max, "t_max": t_max},
"certificate": tree.to_json(),
},
)
leaf_clauses.append(
{
"kind": "TargetedRefinementLeaf",
"modulus_power": root_palier,
"residue_mod_2p": r0,
"certificate_path": str(cert_path),
"certificate_sha256": _sha256_file(cert_path),
}
)
closed += 1
md.append(f"| {r0} | {'' if lb is None else lb} | {target_max} | yes | `{cert_path}` |")
out_json = output_dir / f"clauses_targeted_refinement_leaves_mod2p{root_palier}.json"
out_md = output_dir / f"clauses_targeted_refinement_leaves_mod2p{root_palier}.md"
obj_out = {
"domain": {"palier": root_palier},
"inputs": {
"tracked_roots_file": str(tracked_roots_file),
"obstruction_json": str(obstruction_json),
"dminor_json_paths": [str(p) for p in dminor_json_paths],
},
"params": {
"target_max_palier_cap": target_max_palier_cap,
"k_max": k_max,
"t_max": t_max,
},
"counts": {"tracked_roots": len(tracked_roots), "closed_roots": closed, "failed_roots": len(tracked_roots) - closed},
"clauses": leaf_clauses,
"sha256": {
"inputs": {
str(tracked_roots_file): _sha256_file(tracked_roots_file),
str(obstruction_json): _sha256_file(obstruction_json),
**{str(p): _sha256_file(p) for p in dminor_json_paths if p.exists()},
}
},
}
_write_json(out_json, obj_out)
md.append("")
md.append("## Sorties")
md.append("")
md.append(f"- JSON : `{out_json}`")
md.append(f"- Markdown : `{out_md}`")
md.append("")
_write_md(out_md, md)
def main() -> None:
ap = argparse.ArgumentParser(description="Build targeted deep refinement leaves for a fixed roots list")
ap.add_argument("--repo-root", default=".", help="Repository root")
ap.add_argument("--root-palier", type=int, default=15)
ap.add_argument("--tracked-roots-file", required=True)
ap.add_argument("--obstruction-json", default="", help="Path to open_roots_obstruction_profile JSON (for lb_any)")
ap.add_argument("--target-max-palier-cap", type=int, default=160)
ap.add_argument("--k-max", type=int, default=256)
ap.add_argument("--t-max", type=int, default=256)
ap.add_argument(
"--dminor-json",
action="append",
default=[],
help="Optional D_minor JSON leaf sources (can be repeated) to treat them as terminals inside certificates",
)
ap.add_argument("--output-dir", default="", help="Output directory (defaults under docs/artefacts/...)")
args = ap.parse_args()
repo_root = Path(args.repo_root).resolve()
root_palier = int(args.root_palier)
tracked_roots_file = Path(args.tracked_roots_file).resolve()
if args.obstruction_json.strip():
obstruction_json = Path(args.obstruction_json).resolve()
else:
obstruction_json = (
repo_root
/ "docs"
/ "artefacts"
/ "collatz"
/ "refinement_K"
/ f"palier2p{root_palier}"
/ f"open_roots_obstruction_profile_mod2p{root_palier}_to2p18.json"
).resolve()
output_dir = Path(args.output_dir).resolve() if args.output_dir.strip() else (
repo_root / "docs" / "artefacts" / "collatz" / "refinement_K" / f"palier2p{root_palier}" / "targeted_leaves"
)
dminor_json_paths = [Path(p).resolve() for p in args.dminor_json]
run(
repo_root=repo_root,
root_palier=root_palier,
tracked_roots_file=tracked_roots_file,
target_max_palier_cap=int(args.target_max_palier_cap),
obstruction_json=obstruction_json,
k_max=int(args.k_max),
t_max=int(args.t_max),
dminor_json_paths=dminor_json_paths,
output_dir=output_dir,
)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,182 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_derive_brother_minorated_clauses_from_terminal_over_Sm.py
Derive D_minor clauses for "brothers" from exact D clauses over S_m.
Idea (completion by brothers):
At palier 2^m, children of a parent at 2^(m-1) come in pairs (r, r ^ 2^(m-1)).
If an exact D clause exists on one child at horizon k, and the brother shares the same (k-1)-prefix
(so the affine numerator constant B_k is the same), then it can become a valid minorated descent
clause as soon as v2(3^k n + B_k) is high enough (>= u_min(k)).
This script materializes the deterministic test suggested in conjoncture_collatz.md
and outputs a leaf JSON that can be fed as an additional leaf source.
"""
from __future__ import annotations
import argparse
import hashlib
import json
from dataclasses import dataclass
from pathlib import Path
from collatz_k_core import prefix_data
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _sha256_file(path: Path, chunk_size: int = 16 * 1024 * 1024) -> str:
h = hashlib.sha256()
with path.open("rb") as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
def _u_min_for_k(k: int) -> int:
return (3**k).bit_length()
def _req_int(d: dict[str, object], key: str) -> int:
v = d.get(key)
if not isinstance(v, int):
raise ValueError(f"Expected int for {key}")
return v
@dataclass(frozen=True)
class DerivedDMinor:
modulus_power: int
residue_mod_2p: int
k: int
underlineA: int
numerator_B_k: int
prefix_word_len_km1: tuple[int, ...]
A_km1: int
C_km1: int
N0: int
derived_from_residue: int
def to_json(self) -> dict[str, object]:
return {
"kind": "D_minor",
"modulus_power": self.modulus_power,
"residue_mod_2p": self.residue_mod_2p,
"k": self.k,
"underlineA": self.underlineA,
"numerator_B_k": self.numerator_B_k,
"prefix_word_len_km1": list(self.prefix_word_len_km1),
"A_km1": self.A_km1,
"C_km1": self.C_km1,
"N0": self.N0,
"derived_from": {"kind": "D_exact", "residue_mod_2p": self.derived_from_residue},
}
def run(*, terminal_json: Path, output_dir: Path) -> None:
obj = _read_json(terminal_json)
if not isinstance(obj, dict):
raise ValueError("Invalid terminal JSON: expected object")
domain = obj.get("domain")
if not isinstance(domain, dict):
raise ValueError("Invalid terminal JSON: missing domain")
m = _req_int(domain, "palier")
clauses = obj.get("clauses")
if not isinstance(clauses, list) or not all(isinstance(x, dict) for x in clauses):
raise ValueError("Invalid terminal JSON: missing clauses list")
shift = 1 << (m - 1)
derived: list[DerivedDMinor] = []
for c in clauses:
if c.get("kind") != "D_exact":
continue
if c.get("modulus_power") != m:
continue
r = c.get("residue_mod_2p")
if not isinstance(r, int):
continue
k = c.get("k_or_t")
if not isinstance(k, int):
continue
C_k = c.get("C")
if not isinstance(C_k, int):
continue
u = _u_min_for_k(k)
if u > m:
continue
bro = r ^ shift
pref = prefix_data(bro, k - 1)
if pref.A + 1 > m:
continue
w_prefix = tuple(int(x) for x in pref.word)
B_k = 3 * pref.C + (1 << pref.A)
if int(B_k) != int(C_k):
continue
if ((3**k) * bro + B_k) % (1 << u) != 0:
continue
d = (1 << u) - (3**k)
if d <= 0:
continue
N0 = (B_k // d) + 1
derived.append(
DerivedDMinor(
modulus_power=m,
residue_mod_2p=int(bro),
k=int(k),
underlineA=int(u),
numerator_B_k=int(B_k),
prefix_word_len_km1=w_prefix,
A_km1=int(pref.A),
C_km1=int(pref.C),
N0=int(N0),
derived_from_residue=int(r),
)
)
# Stable output order for determinism
derived = sorted(derived, key=lambda x: (x.residue_mod_2p, x.k, x.underlineA, x.N0))
out_json = output_dir / f"clauses_D_minor_derived_from_brothers_over_Sm_mod2p{m}.json"
obj_out: dict[str, object] = {
"domain": {"palier": m},
"inputs": {"terminal_json": str(terminal_json)},
"counts": {"derived_clauses": len(derived)},
"clauses": [d.to_json() for d in derived],
"sha256": {"inputs": {str(terminal_json): _sha256_file(terminal_json)}},
}
_write_json(out_json, obj_out)
def main() -> None:
ap = argparse.ArgumentParser(description="Derive D_minor clauses for brothers from D_exact terminal clauses over S_m")
ap.add_argument("--terminal-json", required=True)
ap.add_argument("--output-dir", default=".")
args = ap.parse_args()
terminal_json = Path(args.terminal_json).resolve()
output_dir = Path(args.output_dir).resolve()
run(terminal_json=terminal_json, output_dir=output_dir)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,244 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_diagnose_targeted_leaves_failure.py
Diagnostic report for the failure of "targeted leaves" attempts:
explain where closure fails for each tracked root under a given leaf grammar (D/F/D_minor),
by locating the earliest depth where both children have no immediately decidable terminal
clause (within given k_max/t_max bounds) and by reporting the lower-bound required_m of each child.
This report is deterministic and intended to guide the design of a stronger leaf grammar.
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from collatz_k_core import delta_D, delta_F, fusion_choice_a, prefix_data
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _write_md(path: Path, lines: list[str]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _read_tracked_roots_file(path: Path) -> list[int]:
roots: list[int] = []
seen: set[int] = set()
for line in path.read_text(encoding="utf-8", errors="strict").splitlines():
s = line.strip()
if not s or s.startswith("#"):
continue
if "#" in s:
s = s.split("#", 1)[0].strip()
if not s:
continue
r = int(s, 10)
if r <= 0 or (r % 2) == 0:
raise ValueError(f"Invalid tracked root (must be positive odd integer): {r}")
if r not in seen:
roots.append(r)
seen.add(r)
return roots
def _best_required_m_D(*, residue: int, k_max: int, search_max_required_m: int) -> int | None:
best: int | None = None
for k in range(1, k_max + 1):
pref = prefix_data(residue, k)
req = pref.A + 1
if req > search_max_required_m:
break
if delta_D(pref.A, k) <= 0:
continue
best = req if best is None else min(best, req)
return best
def _best_required_m_F(*, residue: int, t_max: int, search_max_required_m: int) -> int | None:
best: int | None = None
for t in range(1, t_max + 1):
pref = prefix_data(residue, t)
req = pref.A + 1
if req > search_max_required_m:
break
a = fusion_choice_a(pref.y)
if a is None:
continue
if delta_F(pref.A, t, a) <= 0:
continue
best = req if best is None else min(best, req)
return best
def _has_any_terminal_now(*, residue: int, m: int, k_max: int, t_max: int) -> bool:
# a terminal is "immediately decidable at this node" if there exists a contractive D/F with A+1 <= m.
for k in range(1, k_max + 1):
pref = prefix_data(residue, k)
if pref.A + 1 > m:
break
if delta_D(pref.A, k) > 0:
return True
for t in range(1, t_max + 1):
pref = prefix_data(residue, t)
if pref.A + 1 > m:
break
a = fusion_choice_a(pref.y)
if a is None:
continue
if delta_F(pref.A, t, a) > 0:
return True
return False
def run(
*,
root_palier: int,
tracked_roots_file: Path,
k_max: int,
t_max: int,
search_max_required_m: int,
scan_depth: int,
output_dir: Path,
) -> None:
roots = _read_tracked_roots_file(tracked_roots_file)
if not roots:
raise ValueError("tracked roots list is empty")
rows: list[dict[str, object]] = []
for r0 in roots:
# we scan along refinement levels m = root_palier .. root_palier+scan_depth-1
# to find the first m where BOTH children at level m+1 have no immediate terminal.
fail_m: int | None = None
for m in range(root_palier, root_palier + scan_depth):
step = 1 << m
c0 = r0 if m == root_palier else None
# At level m, root corresponds to residue r0 modulo 2^root_palier, but at deeper levels
# there are many nodes; here we diagnose the *two direct children at level root_palier+1*
# which are the relevant split for S_root.
if m != root_palier:
break
child_low = r0
child_high = r0 + (1 << root_palier)
ok_low = _has_any_terminal_now(residue=child_low, m=root_palier + 1, k_max=k_max, t_max=t_max)
ok_high = _has_any_terminal_now(residue=child_high, m=root_palier + 1, k_max=k_max, t_max=t_max)
if (not ok_low) and (not ok_high):
fail_m = root_palier
break
child_low = r0
child_high = r0 + (1 << root_palier)
lbD_low = _best_required_m_D(residue=child_low, k_max=k_max, search_max_required_m=search_max_required_m)
lbF_low = _best_required_m_F(residue=child_low, t_max=t_max, search_max_required_m=search_max_required_m)
lb_any_low = min([x for x in [lbD_low, lbF_low] if x is not None], default=None)
lbD_high = _best_required_m_D(residue=child_high, k_max=k_max, search_max_required_m=search_max_required_m)
lbF_high = _best_required_m_F(residue=child_high, t_max=t_max, search_max_required_m=search_max_required_m)
lb_any_high = min([x for x in [lbD_high, lbF_high] if x is not None], default=None)
lb_root = max([x for x in [lb_any_low, lb_any_high] if x is not None], default=None)
rows.append(
{
"root": r0,
"children": [child_low, child_high],
"immediate_terminal_at_m16": {
"low": _has_any_terminal_now(residue=child_low, m=root_palier + 1, k_max=k_max, t_max=t_max),
"high": _has_any_terminal_now(residue=child_high, m=root_palier + 1, k_max=k_max, t_max=t_max),
},
"lower_bounds_required_m": {
"low": {"any": lb_any_low, "D": lbD_low, "F": lbF_low},
"high": {"any": lb_any_high, "D": lbD_high, "F": lbF_high},
"root": lb_root,
},
"first_m_where_both_children_blocked": fail_m,
}
)
out_json = output_dir / f"diagnostic_targeted_leaves_failure_mod2p{root_palier}.json"
out_md = output_dir / f"diagnostic_targeted_leaves_failure_mod2p{root_palier}.md"
_write_json(
out_json,
{
"domain": {"root_palier": root_palier},
"params": {"k_max": k_max, "t_max": t_max, "search_max_required_m": search_max_required_m, "scan_depth": scan_depth},
"counts": {"tracked_roots": len(rows)},
"rows": rows,
},
)
md: list[str] = []
md.append("**Auteur** : Équipe 4NK")
md.append("")
md.append(f"# Diagnostic — échec targeted leaves — racine 2^{root_palier}")
md.append("")
md.append(f"- tracked_roots_file : `{tracked_roots_file}`")
md.append(f"- k_max : {k_max}")
md.append(f"- t_max : {t_max}")
md.append(f"- search_max_required_m : {search_max_required_m}")
md.append("")
md.append("Table (par racine) :")
md.append("")
md.append("| root | child_low | child_high | immediate_low@16 | immediate_high@16 | lb_root | lb_low | lb_high |")
md.append("| --- | --- | --- | --- | --- | --- | --- | --- |")
for r in rows[:80]:
root = int(r["root"]) # type: ignore[arg-type]
ch = r["children"] # type: ignore[assignment]
low = int(ch[0]) # type: ignore[index]
high = int(ch[1]) # type: ignore[index]
imm = r["immediate_terminal_at_m16"] # type: ignore[assignment]
imm_low = "yes" if imm["low"] else "no" # type: ignore[index]
imm_high = "yes" if imm["high"] else "no" # type: ignore[index]
lbs = r["lower_bounds_required_m"] # type: ignore[assignment]
lb_root = lbs["root"] # type: ignore[index]
lb_low = lbs["low"]["any"] # type: ignore[index]
lb_high = lbs["high"]["any"] # type: ignore[index]
md.append(f"| {root} | {low} | {high} | {imm_low} | {imm_high} | {'' if lb_root is None else lb_root} | {'' if lb_low is None else lb_low} | {'' if lb_high is None else lb_high} |")
md.append("")
md.append("## Sorties")
md.append("")
md.append(f"- JSON : `{out_json}`")
md.append(f"- Markdown : `{out_md}`")
md.append("")
_write_md(out_md, md)
def main() -> None:
ap = argparse.ArgumentParser(description="Diagnose why targeted leaves closure fails for a tracked roots list")
ap.add_argument("--root-palier", type=int, default=15)
ap.add_argument("--tracked-roots-file", required=True)
ap.add_argument("--k-max", type=int, default=256)
ap.add_argument("--t-max", type=int, default=256)
ap.add_argument("--search-max-required-m", type=int, default=256)
ap.add_argument("--scan-depth", type=int, default=1)
ap.add_argument("--output-dir", default="", help="Output directory (defaults under docs/artefacts/...)")
args = ap.parse_args()
root_palier = int(args.root_palier)
output_dir = Path(args.output_dir).resolve() if args.output_dir.strip() else (
Path("docs") / "artefacts" / "collatz" / "refinement_K" / f"palier2p{root_palier}" / "targeted_leaves"
).resolve()
run(
root_palier=root_palier,
tracked_roots_file=Path(args.tracked_roots_file).resolve(),
k_max=int(args.k_max),
t_max=int(args.t_max),
search_max_required_m=int(args.search_max_required_m),
scan_depth=int(args.scan_depth),
output_dir=output_dir,
)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,190 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_verify_brother_derived_minorated_clauses_over_Sm.py
Deterministic verification of D_minor leaves derived "by brothers" from a terminal D_exact artefact.
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from collatz_k_core import prefix_data
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _write_md(path: Path, lines: list[str]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _req_int(d: dict[str, object], key: str) -> int:
v = d.get(key)
if not isinstance(v, int):
raise ValueError(f"Expected int for {key}")
return v
def _u_min_for_k(k: int) -> int:
return (3**k).bit_length()
def run(*, derived_json: Path, output_dir: Path) -> None:
obj = _read_json(derived_json)
if not isinstance(obj, dict):
raise ValueError("Invalid derived JSON: expected object")
domain = obj.get("domain")
inputs = obj.get("inputs")
clauses = obj.get("clauses")
if not isinstance(domain, dict) or not isinstance(inputs, dict) or not isinstance(clauses, list):
raise ValueError("Invalid derived JSON: missing domain/inputs/clauses")
palier = _req_int(domain, "palier")
terminal_json_raw = inputs.get("terminal_json")
if not isinstance(terminal_json_raw, str) or not terminal_json_raw:
raise ValueError("Invalid derived JSON: inputs.terminal_json must be a non-empty string")
terminal_json = Path(terminal_json_raw).resolve()
term_obj = _read_json(terminal_json)
if not isinstance(term_obj, dict):
raise ValueError("Invalid terminal JSON: expected object")
term_clauses = term_obj.get("clauses")
if not isinstance(term_clauses, list) or not all(isinstance(x, dict) for x in term_clauses):
raise ValueError("Invalid terminal JSON: missing clauses list")
exact_by_res: dict[int, dict[str, object]] = {}
for c in term_clauses:
if c.get("kind") != "D_exact":
continue
if c.get("modulus_power") != palier:
continue
r = c.get("residue_mod_2p")
if isinstance(r, int):
exact_by_res[r] = c
ok = 0
errors: list[str] = []
for c in clauses:
if not isinstance(c, dict):
raise ValueError("Invalid clause entry: expected object")
if c.get("kind") != "D_minor":
raise ValueError("Invalid clause entry: kind must be D_minor")
m = _req_int(c, "modulus_power")
r = _req_int(c, "residue_mod_2p")
k = _req_int(c, "k")
uA = _req_int(c, "underlineA")
numerator_B_k = _req_int(c, "numerator_B_k")
A_km1 = _req_int(c, "A_km1")
C_km1 = _req_int(c, "C_km1")
N0 = _req_int(c, "N0")
derived_from = c.get("derived_from")
if not isinstance(derived_from, dict):
raise ValueError("Invalid clause entry: missing derived_from object")
derived_from_res = _req_int(derived_from, "residue_mod_2p")
if m != palier:
raise ValueError("Invalid clause entry: modulus_power mismatch vs header palier")
if uA != _u_min_for_k(k):
errors.append(f"underlineA != u_min(k) for r={r} (k={k})")
continue
if uA > palier:
errors.append(f"underlineA > palier for r={r}")
continue
if A_km1 + 1 > palier:
errors.append(f"Prefix stability violated for r={r}")
continue
term = exact_by_res.get(derived_from_res)
if term is None:
errors.append(f"missing source D_exact residue={derived_from_res} for r={r}")
continue
k_src = term.get("k_or_t")
C_k_src = term.get("C")
if not isinstance(k_src, int) or not isinstance(C_k_src, int):
errors.append(f"invalid source D_exact fields for residue={derived_from_res}")
continue
if k_src != k:
errors.append(f"source k mismatch for r={r}: got {k}, source {k_src}")
continue
pref = prefix_data(r, k - 1)
if int(pref.A) != A_km1 or int(pref.C) != C_km1:
errors.append(f"prefix data mismatch for r={r}")
continue
expected_B_k = 3 * C_km1 + (1 << A_km1)
if expected_B_k != numerator_B_k:
errors.append(f"numerator_B_k mismatch for r={r}")
continue
if expected_B_k != C_k_src:
errors.append(f"B_k != C_k(source) for r={r}")
continue
if ((3**k) * r + numerator_B_k) % (1 << uA) != 0:
errors.append(f"divisibility failed for r={r}")
continue
delta_min = (1 << uA) - (3**k)
if delta_min <= 0:
errors.append(f"delta_min <= 0 for r={r}")
continue
expected_N0 = (numerator_B_k // delta_min) + 1
if expected_N0 != N0:
errors.append(f"N0 mismatch for r={r}: got {N0}, expected {expected_N0}")
continue
ok += 1
out_json = output_dir / f"verification_D_minor_derived_from_brothers_over_Sm_mod2p{palier}.json"
out_md = output_dir / f"verification_D_minor_derived_from_brothers_over_Sm_mod2p{palier}.md"
out = {
"domain": {"palier": palier},
"inputs": {"derived_json": str(derived_json), "terminal_json": str(terminal_json)},
"counts": {"total": len(clauses), "ok": ok, "errors": len(errors)},
"ok": (ok == len(clauses)),
"errors_sample": errors[:50],
}
_write_json(out_json, out)
md: list[str] = []
md.append("**Auteur** : Équipe 4NK")
md.append("")
md.append(f"# Vérification — clauses D minorées dérivées par frères sur S_M (2^{palier})")
md.append("")
md.append(f"- total : {len(clauses)}")
md.append(f"- ok : {ok}")
md.append(f"- errors : {len(errors)}")
md.append(f"- ok_all : {out['ok']}")
md.append("")
if errors:
md.append("## Erreurs (extrait)")
md.append("")
for e in errors[:30]:
md.append(f"- {e}")
md.append("")
_write_md(out_md, md)
def main() -> None:
ap = argparse.ArgumentParser(description="Verify brother-derived D_minor clauses over S_M")
ap.add_argument("--derived-json", required=True)
ap.add_argument("--output-dir", default="", help="Output directory (defaults to same directory as input)")
args = ap.parse_args()
derived_json = Path(args.derived_json).resolve()
output_dir = Path(args.output_dir).resolve() if args.output_dir.strip() else derived_json.parent
run(derived_json=derived_json, output_dir=output_dir)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,235 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_verify_hensel_chain_leaves.py
Deterministic verification of Hensel-chain leaf certificates produced by
collatz_build_hensel_chain_leaves.py.
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from collatz_k_core import delta_D, delta_F, fusion_choice_a, N0_D, Nf_F, prefix_data, preimage_m, v2_fast
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _write_md(path: Path, lines: list[str]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _req_int(d: dict[str, object], key: str) -> int:
v = d.get(key)
if not isinstance(v, int):
raise ValueError(f"Expected int for {key}")
return v
def _verify_leaf(*, leaf: dict[str, object], k_leaf_max: int, t_leaf_max: int) -> None:
kind = leaf.get("kind")
m = leaf.get("modulus_power")
r = leaf.get("residue_mod_2p")
k_or_t = leaf.get("k_or_t")
A = leaf.get("A")
thr = leaf.get("threshold")
extra = leaf.get("extra")
if not isinstance(m, int) or not isinstance(r, int) or not isinstance(k_or_t, int) or not isinstance(thr, int) or not isinstance(extra, dict):
raise ValueError("Invalid leaf structure")
if kind == "D_exact":
if not isinstance(A, int):
raise ValueError("D_exact A missing")
if k_or_t < 1 or k_or_t > k_leaf_max:
raise ValueError("D_exact k out of range")
pref = prefix_data(r, k_or_t)
if pref.A != A:
raise ValueError("D_exact A mismatch")
if pref.A + 1 > m:
raise ValueError("D_exact requires m>=A+1")
if delta_D(pref.A, k_or_t) <= 0:
raise ValueError("D_exact Δ_D <=0")
if N0_D(pref.C, pref.A, k_or_t) != thr:
raise ValueError("D_exact N0 mismatch")
return
if kind == "F":
if not isinstance(A, int):
raise ValueError("F A missing")
if k_or_t < 1 or k_or_t > t_leaf_max:
raise ValueError("F t out of range")
pref = prefix_data(r, k_or_t)
if pref.A != A:
raise ValueError("F A mismatch")
if pref.A + 1 > m:
raise ValueError("F requires m>=A+1")
a = fusion_choice_a(pref.y)
if a is None:
raise ValueError("F y mod3 ==0")
if delta_F(pref.A, k_or_t, a) <= 0:
raise ValueError("F Δ_F <=0")
if Nf_F(pref.C, pref.A, k_or_t, a) != thr:
raise ValueError("F Nf mismatch")
if extra.get("preimage_m") != preimage_m(pref.y, a):
raise ValueError("F preimage_m mismatch")
return
if kind == "D_minor":
u = extra.get("underlineA")
Akm1 = extra.get("A_km1")
Ckm1 = extra.get("C_km1")
Bk = extra.get("B_k")
if not isinstance(u, int) or not isinstance(Akm1, int) or not isinstance(Ckm1, int) or not isinstance(Bk, int):
raise ValueError("D_minor extra fields missing")
if u != m:
raise ValueError("D_minor expects underlineA == modulus_power in this certificate")
if k_or_t < 2:
raise ValueError("D_minor k must be >=2")
pref = prefix_data(r, k_or_t - 1)
if pref.A != Akm1 or pref.C != Ckm1:
raise ValueError("D_minor prefix mismatch")
exp_Bk = 3 * pref.C + (1 << pref.A)
if exp_Bk != Bk:
raise ValueError("D_minor B_k mismatch")
if v2_fast((3**k_or_t) * r + Bk) < u:
raise ValueError("D_minor divisibility mismatch")
d = (1 << u) - (3**k_or_t)
if d <= 0:
raise ValueError("D_minor Δ<=0")
exp_N0 = (Bk // d) + 1
if exp_N0 != thr:
raise ValueError("D_minor N0 mismatch")
return
raise ValueError(f"Unknown leaf kind: {kind!r}")
def run(*, leaves_json: Path, output_dir: Path) -> None:
obj = _read_json(leaves_json)
if not isinstance(obj, dict):
raise ValueError("Invalid leaves JSON")
domain = obj.get("domain")
params = obj.get("params")
clauses = obj.get("clauses")
if not isinstance(domain, dict) or not isinstance(params, dict) or not isinstance(clauses, list):
raise ValueError("Invalid leaves JSON: missing domain/params/clauses")
root_palier = _req_int(domain, "palier")
k_leaf_max = _req_int(params, "k_leaf_max")
t_leaf_max = _req_int(params, "t_leaf_max")
ok = 0
errors: list[str] = []
for c in clauses:
if not isinstance(c, dict):
raise ValueError("Invalid clause entry")
if c.get("kind") != "HenselChainLeaf":
raise ValueError("Invalid clause kind (expected HenselChainLeaf)")
if c.get("modulus_power") != root_palier:
raise ValueError("modulus_power mismatch")
r0 = c.get("residue_mod_2p")
cert_path = c.get("certificate_path")
if not isinstance(r0, int) or not isinstance(cert_path, str):
raise ValueError("Invalid clause entry: residue/certificate_path")
cert = _read_json(Path(cert_path))
if not isinstance(cert, dict):
errors.append(f"invalid cert json for r={r0}")
continue
dom = cert.get("domain")
chain = cert.get("chain")
if not isinstance(dom, dict) or not isinstance(chain, dict):
errors.append(f"invalid cert structure for r={r0}")
continue
if _req_int(dom, "root_palier") != root_palier or _req_int(dom, "root_residue_mod_2p") != r0:
errors.append(f"domain mismatch for r={r0}")
continue
k = _req_int(dom, "k")
m_end = _req_int(dom, "m_end")
steps = chain.get("steps")
final = chain.get("final")
if not isinstance(steps, list) or not all(isinstance(x, dict) for x in steps) or not isinstance(final, dict):
errors.append(f"invalid chain steps/final for r={r0}")
continue
# Verify chain monotonicity and sibling leaves
chain_r = r0
for st in steps:
m = _req_int(st, "m")
chain_next = _req_int(st, "chain_r")
sibling = _req_int(st, "sibling_r")
leaf = st.get("sibling_leaf")
if not isinstance(leaf, dict):
errors.append(f"missing sibling_leaf for r={r0}")
break
if m <= root_palier or m > m_end:
errors.append(f"invalid step m for r={r0}")
break
step = 1 << (m - 1)
if not (chain_next == chain_r or chain_next == chain_r + step):
errors.append(f"invalid chain transition for r={r0}")
break
if not (sibling == chain_r or sibling == chain_r + step):
errors.append(f"invalid sibling for r={r0}")
break
if sibling == chain_next:
errors.append(f"sibling equals chain for r={r0}")
break
chain_r = chain_next
try:
_verify_leaf(leaf=leaf, k_leaf_max=k_leaf_max, t_leaf_max=t_leaf_max)
except Exception as e:
errors.append(f"sibling leaf invalid for r={r0}: {e}")
break
else:
# final leaf at m_end on chain_r
try:
_verify_leaf(leaf=final, k_leaf_max=k_leaf_max, t_leaf_max=t_leaf_max)
except Exception as e:
errors.append(f"final leaf invalid for r={r0}: {e}")
else:
ok += 1
out_json = output_dir / f"verification_hensel_chain_leaves_mod2p{root_palier}.json"
out_md = output_dir / f"verification_hensel_chain_leaves_mod2p{root_palier}.md"
_write_json(
out_json,
{"domain": {"palier": root_palier}, "counts": {"total": len(clauses), "ok": ok, "errors": len(errors)}, "ok": ok == len(clauses), "errors_sample": errors[:50]},
)
md: list[str] = []
md.append("**Auteur** : Équipe 4NK")
md.append("")
md.append(f"# Vérification — feuilles “chaîne de Hensel” — 2^{root_palier}")
md.append("")
md.append(f"- total : {len(clauses)}")
md.append(f"- ok : {ok}")
md.append(f"- errors : {len(errors)}")
md.append(f"- ok_all : {ok == len(clauses)}")
md.append("")
if errors:
md.append("## Erreurs (extrait)")
md.append("")
for e in errors[:30]:
md.append(f"- {e}")
md.append("")
_write_md(out_md, md)
def main() -> None:
ap = argparse.ArgumentParser(description="Verify Hensel-chain leaves certificates")
ap.add_argument("--leaves-json", required=True)
ap.add_argument("--output-dir", default="", help="Output directory (defaults to same directory as input)")
args = ap.parse_args()
leaves_json = Path(args.leaves_json).resolve()
output_dir = Path(args.output_dir).resolve() if args.output_dir.strip() else leaves_json.parent
run(leaves_json=leaves_json, output_dir=output_dir)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,284 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
collatz_verify_targeted_refinement_leaves.py
Deterministic verification of per-root targeted leaf certificates produced by
collatz_build_targeted_refinement_leaves.py.
"""
from __future__ import annotations
import argparse
import json
from dataclasses import dataclass
from pathlib import Path
from collatz_k_core import delta_D, delta_F, fusion_choice_a, N0_D, Nf_F, prefix_data, preimage_m
def _read_json(path: Path) -> object:
return json.loads(path.read_text(encoding="utf-8", errors="strict"))
def _write_json(path: Path, obj: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(obj, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
def _write_md(path: Path, lines: list[str]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def _req_int(d: dict[str, object], key: str) -> int:
v = d.get(key)
if not isinstance(v, int):
raise ValueError(f"Expected int for {key}")
return v
@dataclass(frozen=True)
class Stats:
nodes: int
leaves: int
max_m: int
def _verify_leaf(*, leaf: dict[str, object], m: int, r: int, k_max: int, t_max: int) -> None:
kind = leaf.get("kind")
if kind == "D_minor":
k = leaf.get("k_or_t")
thr = leaf.get("threshold")
extra = leaf.get("extra")
# precomputed leaves omit details
if k is None and thr is None:
return
if not isinstance(k, int) or not isinstance(thr, int) or not isinstance(extra, dict):
raise ValueError("Invalid D_minor leaf structure")
u = extra.get("underlineA")
Akm1 = extra.get("A_km1")
Ckm1 = extra.get("C_km1")
Bk = extra.get("B_k")
if not isinstance(u, int) or not isinstance(Akm1, int) or not isinstance(Ckm1, int) or not isinstance(Bk, int):
raise ValueError("Invalid D_minor extra fields")
if u > m:
raise ValueError("D_minor requires underlineA <= m")
pref = prefix_data(r, k - 1)
if pref.A != Akm1 or pref.C != Ckm1:
raise ValueError("D_minor prefix mismatch")
expected_Bk = 3 * pref.C + (1 << pref.A)
if expected_Bk != Bk:
raise ValueError("D_minor B_k mismatch")
if ((3**k) * r + Bk) % (1 << u) != 0:
raise ValueError("D_minor divisibility mismatch")
d = (1 << u) - (3**k)
if d <= 0:
raise ValueError("D_minor Δ <= 0")
expected_N0 = (Bk // d) + 1
if expected_N0 != thr:
raise ValueError("D_minor N0 mismatch")
return
if kind == "D_exact":
k = leaf.get("k_or_t")
A = leaf.get("A")
thr = leaf.get("threshold")
extra = leaf.get("extra")
if not isinstance(k, int) or not isinstance(A, int) or not isinstance(thr, int) or not isinstance(extra, dict):
raise ValueError("Invalid D_exact leaf structure")
if k < 1 or k > k_max:
raise ValueError("D_exact k out of range vs params")
pref = prefix_data(r, k)
if pref.A != A:
raise ValueError("D_exact A mismatch")
if pref.A + 1 > m:
raise ValueError("D_exact requires m >= A+1")
if delta_D(pref.A, k) <= 0:
raise ValueError("D_exact Δ_D <= 0")
if N0_D(pref.C, pref.A, k) != thr:
raise ValueError("D_exact N0 mismatch")
return
if kind == "F":
t = leaf.get("k_or_t")
A = leaf.get("A")
thr = leaf.get("threshold")
extra = leaf.get("extra")
if not isinstance(t, int) or not isinstance(A, int) or not isinstance(thr, int) or not isinstance(extra, dict):
raise ValueError("Invalid F leaf structure")
if t < 1 or t > t_max:
raise ValueError("F t out of range vs params")
pref = prefix_data(r, t)
if pref.A != A:
raise ValueError("F A mismatch")
if pref.A + 1 > m:
raise ValueError("F requires m >= A+1")
a = fusion_choice_a(pref.y)
if a is None:
raise ValueError("F invalid: y mod3 == 0")
if delta_F(pref.A, t, a) <= 0:
raise ValueError("F Δ_F <= 0")
if Nf_F(pref.C, pref.A, t, a) != thr:
raise ValueError("F Nf mismatch")
m_pre = preimage_m(pref.y, a)
pre2 = extra.get("preimage_m")
if not isinstance(pre2, int) or pre2 != m_pre:
raise ValueError("F preimage_m mismatch")
return
raise ValueError(f"Unknown leaf kind: {kind!r}")
def _verify_tree(
*,
node: dict[str, object],
root_palier: int,
target_max_palier: int,
k_max: int,
t_max: int,
) -> Stats:
m = node.get("m")
r = node.get("r")
if not isinstance(m, int) or not isinstance(r, int):
raise ValueError("Invalid node: missing m/r")
if m < root_palier or m > target_max_palier:
raise ValueError("Invalid node: m out of bounds")
if r <= 0 or (r % 2) == 0:
raise ValueError("Invalid node: r must be positive odd")
leaf = node.get("leaf")
children = node.get("children")
if leaf is not None and children is not None:
raise ValueError("Invalid node: both leaf and children present")
if leaf is None and children is None:
raise ValueError("Invalid node: neither leaf nor children present")
if leaf is not None:
if not isinstance(leaf, dict):
raise ValueError("Invalid leaf: must be object")
_verify_leaf(leaf=leaf, m=m, r=r, k_max=k_max, t_max=t_max)
return Stats(nodes=1, leaves=1, max_m=m)
if not isinstance(children, list) or len(children) != 2 or not all(isinstance(x, dict) for x in children):
raise ValueError("Invalid children: must be list of 2 objects")
step = 1 << m
c0 = children[0]
c1 = children[1]
if c0.get("m") != m + 1 or c1.get("m") != m + 1:
raise ValueError("Invalid children: m mismatch")
if c0.get("r") != r or c1.get("r") != r + step:
raise ValueError("Invalid children: r mismatch")
s0 = _verify_tree(node=c0, root_palier=root_palier, target_max_palier=target_max_palier, k_max=k_max, t_max=t_max)
s1 = _verify_tree(node=c1, root_palier=root_palier, target_max_palier=target_max_palier, k_max=k_max, t_max=t_max)
return Stats(nodes=1 + s0.nodes + s1.nodes, leaves=s0.leaves + s1.leaves, max_m=max(m, s0.max_m, s1.max_m))
def run(*, targeted_leaves_json: Path, output_dir: Path) -> None:
obj = _read_json(targeted_leaves_json)
if not isinstance(obj, dict):
raise ValueError("Invalid targeted leaves JSON")
domain = obj.get("domain")
params = obj.get("params")
clauses = obj.get("clauses")
if not isinstance(domain, dict) or not isinstance(params, dict) or not isinstance(clauses, list):
raise ValueError("Invalid targeted leaves JSON: missing domain/params/clauses")
root_palier = _req_int(domain, "palier")
k_max = _req_int(params, "k_max")
t_max = _req_int(params, "t_max")
cap = _req_int(params, "target_max_palier_cap")
ok = 0
errors: list[str] = []
total_nodes = 0
total_leaves = 0
max_m_seen = root_palier
for c in clauses:
if not isinstance(c, dict):
raise ValueError("Invalid clause entry: must be object")
if c.get("kind") != "TargetedRefinementLeaf":
raise ValueError("Invalid clause entry: kind must be TargetedRefinementLeaf")
m = c.get("modulus_power")
r = c.get("residue_mod_2p")
cert_path = c.get("certificate_path")
if m != root_palier or not isinstance(r, int) or not isinstance(cert_path, str):
raise ValueError("Invalid clause entry: modulus_power/residue/certificate_path")
cert = _read_json(Path(cert_path))
if not isinstance(cert, dict):
errors.append(f"invalid cert json for r={r}")
continue
dom = cert.get("domain")
par = cert.get("params")
tree = cert.get("certificate")
if not isinstance(dom, dict) or not isinstance(par, dict) or not isinstance(tree, dict):
errors.append(f"invalid cert structure for r={r}")
continue
if _req_int(dom, "root_palier") != root_palier:
errors.append(f"cert root_palier mismatch for r={r}")
continue
if _req_int(dom, "root_residue_mod_2p") != r:
errors.append(f"cert residue mismatch for r={r}")
continue
target_max = _req_int(dom, "target_max_palier")
if target_max > cap:
errors.append(f"cert target_max_palier exceeds cap for r={r}")
continue
if _req_int(par, "k_max") != k_max or _req_int(par, "t_max") != t_max:
errors.append(f"cert params mismatch for r={r}")
continue
try:
s = _verify_tree(node=tree, root_palier=root_palier, target_max_palier=target_max, k_max=k_max, t_max=t_max)
except Exception as e:
errors.append(f"tree verification failed for r={r}: {e}")
continue
total_nodes += s.nodes
total_leaves += s.leaves
max_m_seen = max(max_m_seen, s.max_m)
ok += 1
out_json = output_dir / f"verification_targeted_refinement_leaves_mod2p{root_palier}.json"
out_md = output_dir / f"verification_targeted_refinement_leaves_mod2p{root_palier}.md"
_write_json(
out_json,
{
"domain": {"palier": root_palier},
"counts": {"total": len(clauses), "ok": ok, "errors": len(errors)},
"stats": {"total_nodes": total_nodes, "total_leaves": total_leaves, "max_m_seen": max_m_seen},
"ok": (ok == len(clauses)),
"errors_sample": errors[:50],
},
)
md: list[str] = []
md.append("**Auteur** : Équipe 4NK")
md.append("")
md.append(f"# Vérification — feuilles ciblées (raffinement profond local) — 2^{root_palier}")
md.append("")
md.append(f"- total : {len(clauses)}")
md.append(f"- ok : {ok}")
md.append(f"- errors : {len(errors)}")
md.append(f"- ok_all : {ok == len(clauses)}")
md.append(f"- total_nodes : {total_nodes}")
md.append(f"- total_leaves : {total_leaves}")
md.append(f"- max_m_seen : {max_m_seen}")
md.append("")
if errors:
md.append("## Erreurs (extrait)")
md.append("")
for e in errors[:30]:
md.append(f"- {e}")
md.append("")
_write_md(out_md, md)
def main() -> None:
ap = argparse.ArgumentParser(description="Verify targeted deep refinement leaves (per-root certificates)")
ap.add_argument("--targeted-leaves-json", required=True)
ap.add_argument("--output-dir", default="", help="Output directory (defaults to same directory as input)")
args = ap.parse_args()
targeted_leaves_json = Path(args.targeted_leaves_json).resolve()
output_dir = Path(args.output_dir).resolve() if args.output_dir.strip() else targeted_leaves_json.parent
run(targeted_leaves_json=targeted_leaves_json, output_dir=output_dir)
if __name__ == "__main__":
main()

View File

@ -2588,6 +2588,82 @@ Le cas (255\to 8447) est un représentant typique : le fils “plus profond” e
Proposition de critère opérationnel (sans hypothèse probabiliste)
Pour chaque clause exacte nouvellement trouvée au palier (m+1), tester systématiquement le frère au même palier par une clause minorée construite à partir du même numérateur linéaire (\alpha n+\beta). Quand la valuation du frère est plus élevée, la clause minorée devient souvent immédiate, comme dans la chaîne (255,8447,24831,\dots).
### Règle (complétion par frère via clause (D) minorée dérivée)
**Hypothèses.**
- Un palier \(2^m\) et une paire de frères \(r,\ r^\star\in S_m\) telle que \(r^\star=r\oplus 2^{m-1}\) (les deux enfants dun même parent dans \(S_{m-1}\)).
- Une clause exacte \(D\) au palier \(2^m\) pour \(r\), dhorizon \(k\ge 1\), avec numérateur affine \(3^k n + C_k\).
- Stabilité de préfixe au rang \(k-1\) sur le frère : \(r^\star \bmod 2^m\) impose les mêmes données \((A_{k-1},C_{k-1})\) que \(r\), donc le même \(B_k=3C_{k-1}+2^{A_{k-1}}=C_k\).
- Divisibilité contractante sur le frère : en posant \(\underline A=u_{\min}(k)\) (i.e. \(2^{\underline A}>3^k\)), on a
\[
v_2(3^k r^\star + B_k)\ \ge\ \underline A,\qquad \underline A\le m.
\]
**Conclusion.**
Sous ces hypothèses, la clause (D) minorée \((k,\underline A)\) est valide au palier \(2^m\) pour \(r^\star\) (lemme “validité dune clause (D) minorée”). En particulier, dans un audit de fermeture par raffinement, un parent \(p\in S_{m-1}\) dont un enfant est couvert par une clause exacte peut devenir un cas “both” au niveau \(m\) via une clause minorée dérivée sur le frère.
**Version indexée par artefacts (dérivation déterministe des feuilles minorées “frère”).**
À palier \(2^m\), la dérivation systématique de clauses \((D)\) minorées pour les frères à partir dun artefact `clauses_terminal_over_Sm_mod2p<m>.json` est produite par :
- `applications/collatz/collatz_k_scripts/collatz_derive_brother_minorated_clauses_from_terminal_over_Sm.py`
## Extensions de grammaire pour les cas « no/no » (dette d'observabilité)
Lorsque les deux enfants d'un nœud \((m,r)\) au premier raffinement n'admettent aucune clause terminale immédiatement décidable (\(A+1\le m+1\)), la grammaire actuelle \(D/F/D_{\underline{}}\) impose une **dette d'observabilité** : le raffinement binaire naïf conduit à une explosion combinatoire (taille \(2^{lb-m}\) pour \(lb\) la borne inférieure de profondeur requise). Les quatre pistes suivantes formalisent des extensions possibles, indexées par leurs hypothèses et leurs artefacts.
### Piste 1 : Raffinement multi-modulus (projection \(\Pi\) étendue)
**Hypothèses.**
- L'observable actuelle est \(\pi_M(n)=n\bmod 2^M\). La décidabilité des clauses dépend de la stabilité du préfixe de valuations à cette granularité.
- Pour les clauses de fusion, le choix de \(a\) (paramètre de fusion) dépend de \(y=U^{(t)}(n)\bmod 3\). Si \(y\bmod 3\) n'est pas constant sur la classe \(n\equiv r\pmod{2^m}\), la clause F n'est pas universelle.
**Énoncé.**
On étend la projection à \(\Pi_{(M,s)}: n\mapsto (n\bmod 2^M,\, n\bmod 3^s)\) (ou une autre projection finie). On raffine les nœuds non seulement par le bit \(2^{m}\) mais aussi par la congruence \(n\bmod 3^s\). Une classe \((m,r)\) devient une union de sous-classes \((m,r,b)\) avec \(b\in\{0,1,2\}\) (ou \(b\in\{0,\ldots,3^s-1\}\) si \(s>1\)). Sous hypothèse que \(y\bmod 3\) devient constant sur une sous-classe suffisamment fine, une clause F devient décidable.
**Indexation.** La conclusion est indexée par le choix de \(s\), le choix de la projection (2-adique vs 3-adique), et le protocole de raffinement (ordre des splits).
**Statut.** Proposition de recherche ; aucune implémentation ni artefact déterministe n'existe à ce jour.
### Piste 2 : Clauses \(D_{\underline{}}\) à horizon plus long et paliers plus profonds
**Hypothèses.**
- La grammaire actuelle utilise \(k\le 11\) et \(m\le 18\) pour les clauses minorées. Pour certaines racines extrêmes, le meilleur contractant \(D\) ou \(F\) a \(A+1\ge 50\) (voire 136).
- La stabilité du préfixe impose \(A_{k-1}+1\le m\). Pour \(k\) plus grand, \(A_{k-1}\) croît ; pour \(m\) plus grand, la condition devient satisfaisable.
**Énoncé.**
On génère des clauses \(D_{\underline{}}\) pour des \((k,\underline A)\) avec \(k \le k_{\max}\) (par ex. 64) et des paliers \(m\in\{19,\ldots,M_{\max}\}\) (par ex. 21 ou 24). La fermeture multi-niveaux est étendue sur \(S_M\to S_{M_{\max}}\). Les racines dont \(lb\) est dans \([19,M_{\max}]\) peuvent être fermées par ces feuilles dès que \(u_{\min}(k)\le m\) et \(A_{k-1}+1\le m\).
**Indexation.** La conclusion est indexée par \(k_{\max}\), \(M_{\max}\), et les familles \((k,\underline A)\) effectivement générées.
**Statut.** Extension mécanique : réutiliser `collatz_generate_minorated_descent_clauses_over_Sm.py` et `collatz_build_refinement_certificate_over_Sm_multilevel.py` avec des paramètres étendus.
### Piste 3 : Règle de chaîne Hensel (compression linéaire)
**Hypothèses.**
- Pour un \(k\ge 2\) et un résidu \(r\in S_m\), on pose \(L_k(n)=3^k n + B_k\) avec \(B_k=3C_{k-1}+2^{A_{k-1}}\) (préfixe \(k-1\) stable). L'équation \(L_k(n)\equiv 0\pmod{2^s}\) admet une solution unique modulo \(2^s\) (chaîne henselienne).
- À chaque palier \(m\to m+1\), un seul des deux enfants prolonge la chaîne (celui pour lequel \(v_2(L_k(n))\ge m+1\)). L'autre enfant (frère) a \(v_2(L_k(n))\) fixé à \(m\).
**Énoncé.**
On définit une règle de type « chaîne Hensel » : au lieu de raffiner binairement les deux enfants, on suit la branche unique de la chaîne jusqu'à \(m=u_{\min}(k)\), où une clause \(D_{\underline{}}\) ferme le nœud de la chaîne. À chaque niveau intermédiaire, le frère doit être fermé par une clause \(D/F/D_{\underline{}}\) au même niveau. La compression est linéaire en la profondeur (un seul chemin à suivre) au lieu d'exponentielle.
**Condition de blocage.** Pour les racines extrêmes, le frère à \(m=16\) n'a souvent pas de clause \(D/F/D_{\underline{}}\) décidable à ce niveau. La règle ne s'applique que si le frère est fermable à chaque niveau de la chaîne.
**Indexation.** La conclusion est indexée par \(k\), \(u_{\min}(k)\), et la disponibilité effective des clauses pour les frères le long de la chaîne.
**Statut.** Tentative implémentée (`collatz_build_hensel_chain_leaves.py`) ; échec sur la liste fixe (0 racines fermées) car les frères ne sont pas fermables aux niveaux intermédiaires.
### Piste 4 : Clause « \(D\) partielle » ou borne sur \(A(n)\)
**Hypothèses.**
- Une clause \(D\) exacte exige \(A(n)=A\) fixe (préfixe stable). Une clause \(D_{\underline{}}\) exige \(A(n)\ge \underline A\) et \(v_2(L_k(n))\ge \underline A\).
- Une clause « partielle » pourrait exiger une condition plus faible : par exemple, une borne sur \(A(n)\) sans exiger la stabilité complète du préfixe à la granularité \(2^m\), ou une condition de congruence sur \(n\) modulo une puissance de 2 ou de 3.
**Énoncé.**
On définit une règle de type « \(D\) partielle » : une condition \(C(n)\) sur \(n\equiv r\pmod{2^m}\) telle que, sous \(C(n)\), on puisse minorer \(U^{(k)}(n)\) par une expression affine dont le seuil de descente \(N_0\) est explicite, sans imposer \(A_{k-1}+1\le m\). La difficulté est de garantir que \(C(n)\) est décidable à la granularité \(2^m\) ou via un raffinement de taille bornée.
**Indexation.** La conclusion est indexée par la forme de \(C(n)\), le choix de \(k\), et le protocole de décidabilité.
**Statut.** Proposition de recherche ; aucune forme explicite de \(C(n)\) n'a été établie pour les cas bloquants.
## Prolongement immédiat au palier (2^{14})
La suite, dans le même style analytique, se décompose en deux chantiers strictement formels.

View File

@ -0,0 +1,16 @@
{
"domain": {
"palier": 15
},
"inputs": {
"derived_json": "/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p15/clauses_D_minor_derived_from_brothers_over_Sm_mod2p15.json",
"terminal_json": "/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json"
},
"counts": {
"total": 14500,
"ok": 14500,
"errors": 0
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,9 @@
**Auteur** : Équipe 4NK
# Vérification — clauses D minorées dérivées par frères sur S_M (2^15)
- total : 14500
- ok : 14500
- errors : 0
- ok_all : True

View File

@ -0,0 +1,446 @@
{
"domain": {
"root_palier": 15,
"max_palier": 18,
"S_root_size": 16384
},
"closure": {
"closed_roots": 15270,
"open_roots": 1114,
"closed_ratio": 0.9320068359375,
"closed_roots_sample": [
1,
3,
5,
7,
9,
11,
13,
15,
17,
19,
21,
23,
25,
29,
33,
35,
37,
39,
41,
43,
45,
49,
51,
53,
55,
57,
59,
61,
65,
67,
69,
73,
75,
77,
79,
81,
83,
85,
87,
89,
93,
95,
97,
99,
101,
105,
107,
109,
113,
115,
117,
119,
121,
123,
125,
127,
129,
131,
133,
135,
137,
139,
141,
143,
145,
147,
149,
151,
153,
155,
157,
161,
163,
165,
169,
171,
173,
175,
177,
179,
181,
183,
185,
187,
189,
191,
193,
195,
197,
199,
201,
203,
205,
207,
209,
211,
213,
215,
217,
219,
221,
225,
227,
229,
231,
233,
235,
237,
241,
243,
245,
247,
249,
253,
255,
257,
259,
261,
263,
265,
267,
269,
271,
273,
275,
277,
279,
281,
285,
287,
289,
291,
293,
295,
297,
299,
301,
303,
305,
307,
309,
311,
313,
315,
317,
321,
323,
325,
329,
331,
333,
335,
337,
339,
341,
343,
345,
347,
349,
351,
353,
355,
357,
361,
363,
365,
367,
369,
371,
373,
375,
377,
379,
381,
383,
385,
387,
389,
391,
393,
395,
397,
399,
401,
403,
405,
407,
409,
411,
413,
415,
417,
419,
421,
423,
425,
427,
429,
431,
433
],
"still_open_roots_sample": [
27,
31,
47,
63,
71,
91,
103,
111,
159,
167,
223,
239,
251,
283,
319,
327,
359,
447,
479,
495,
511,
559,
603,
639,
667,
671,
703,
743,
751,
763,
767,
795,
859,
871,
895,
927,
943,
959,
991,
1007,
1023,
1051,
1055,
1115,
1127,
1179,
1183,
1255,
1263,
1279,
1307,
1343,
1383,
1407,
1439,
1471,
1503,
1519,
1535,
1583,
1639,
1663,
1691,
1695,
1767,
1791,
1819,
1883,
1887,
1895,
1919,
1951,
1959,
2043,
2047,
2111,
2139,
2151,
2159,
2175,
2207,
2215,
2287,
2367,
2375,
2407,
2463,
2495,
2527,
2543,
2559,
2651,
2671,
2687,
2715,
2751,
2791,
2811,
2831,
2843,
2879,
2887,
2919,
2943,
3007,
3055,
3071,
3099,
3103,
3175,
3183,
3199,
3227,
3231,
3263,
3311,
3323,
3327,
3355,
3375,
3391,
3399,
3431,
3487,
3519,
3567,
3583,
3615,
3631,
3711,
3739,
3775,
3815,
3823,
3839,
3867,
3931,
3943,
3999,
4095,
4127,
4167,
4207,
4255,
4263,
4319,
4335,
4347,
4351,
4379,
4399,
4415,
4423,
4511,
4575,
4591,
4607,
4635,
4699,
4719,
4735,
4763,
4767,
4775,
4799,
4839,
4847,
4863,
4891,
4935,
4967,
4991,
5055,
5119,
5147,
5151,
5211,
5223,
5247,
5279,
5287,
5343,
5351,
5359,
5375,
5403,
5423,
5447,
5479,
5503,
5535,
5567,
5659,
5663,
5679,
5735,
5759,
5791,
5823,
5863
]
},
"generated_at": "2026-03-10T06:59:35.299015Z",
"sha256": {
"inputs": {
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json": "efd03bab49da30cb4be9cedc53e0e7fe2cb92e0e87c3e0fd1aa3514a17427fa3",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json": "09629196bfbf1fd5576df72a7a34729b0d19be3febaa64d8a3817438d95e9d35",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json": "07dc98763cc42491c937305fd7d153959c7f54f2e5cfee3a4deebe97744bae7c",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json": "16662d98a05c93a177823c3e44f84b50dff300d53152f9d525ff781e2aa89ac2",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json": "8b437c0a8215f942e0aaf47c387e7e52842ff87886fb7c6a04e9dd7776f738f5",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k9_u15.json": "4086ecee3718de33d1580db99d9f3d68677afe7ba7d6d46739b3c85c9fb77fe0",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k6_u10.json": "342285a5302ea82db64501b4b456fbde9d4335cf114243fa95a955eb5e4f46c6",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k7_u12.json": "d7f5e9e53e09da79bf244a0d9ec30dce2b2c0f21342c765ee5cf68b9300044c9",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k8_u13.json": "954a62a86c3d70f83f224541118d6a4ecf21a194e052650801973aff4a026ad8",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k9_u15.json": "80047d4a01761a80f071d48a0bfd0337826b090af1bca3467d73d918c5de64d6",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k10_u16.json": "386a2aeed2017724682775f0b12567520a603a315682829963fd5ea571f4e31c",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k6_u10.json": "608b13150f7abcdfff3453be52e84db491a958408c3019e512ecf90c081d8328",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k7_u12.json": "78ab06661923d8489810167fb249d0cb87993b8d5fe65fdd56f1f17e73dc8a5d",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k8_u13.json": "4d71267c627e630570c4b226c32bad9e30525da7d160045e2360ee4a2f36199d",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k9_u15.json": "a0f80ac79111ebad80888649d10f51cedb7f6f76c681ba98095fcbb6e6a57bfd",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k10_u16.json": "dcf0de1d69b492f8ea072e1c6045acddf4bd3a6e43e93a1f5313757ac7d430d2",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k6_u10.json": "ae047b4b91858df1ab5ade8d6f619340528fa536a163e42f5d10a92e1ea7176a",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k7_u12.json": "33a4236e7438a8f7f73165083f9d14a21dac0e6c64ac252072d3ff5d053dd5a4",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k8_u13.json": "30f7cf398782508933f0a7ed0be842ce087fc2ee0297f0cf0e1f759d8a0d832e",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k9_u15.json": "c309d9173847b8073a37cf3d62f35b380a7d22cfad4a1aa0d2074f3ae20258e9",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k10_u16.json": "933210e286995000b98b2575847185fc93f9c042ffbebe38a6178053a202cd80",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k11_u18.json": "f6176d0a032c473e638da83c7fcd756aa14cd4e65950fd18e59085016717e268"
},
"outputs": {
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/refinement_certificate_Sm_multilevel_mod2p15_to2p18.json": "f905eea71c19fcd25b1c485fab82c597ee7695cb6d00c902534142f3a8bef701"
}
}
}

View File

@ -0,0 +1,8 @@
**Auteur** : Équipe 4NK
# Audit — raffinement multi-niveaux sur S_M (2^15→2^18)
- closed_roots : 15270
- open_roots : 1114
- closed_ratio : 0.9320068359375

View File

@ -0,0 +1,99 @@
**Auteur** : Équipe 4NK
# Diagnostic — échec targeted leaves — racine 2^15
- tracked_roots_file : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt`
- k_max : 256
- t_max : 256
- search_max_required_m : 256
Table (par racine) :
| root | child_low | child_high | immediate_low@16 | immediate_high@16 | lb_root | lb_low | lb_high |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | no | no | 60 | 60 | 26 |
| 31 | 31 | 32799 | no | no | 57 | 57 | 25 |
| 47 | 47 | 32815 | no | no | 56 | 56 | 42 |
| 63 | 63 | 32831 | no | no | 55 | 55 | 25 |
| 71 | 71 | 32839 | no | no | 52 | 52 | 22 |
| 251 | 251 | 33019 | no | no | 80 | 30 | 80 |
| 703 | 703 | 33471 | no | no | 84 | 84 | 61 |
| 1055 | 1055 | 33823 | no | no | 83 | 83 | 28 |
| 1183 | 1183 | 33951 | no | no | 55 | 17 | 55 |
| 1279 | 1279 | 34047 | no | no | 70 | 25 | 70 |
| 1407 | 1407 | 34175 | no | no | 85 | 85 | 23 |
| 1471 | 1471 | 34239 | no | no | 80 | 32 | 80 |
| 1535 | 1535 | 34303 | no | no | 56 | 20 | 56 |
| 1583 | 1583 | 34351 | no | no | 82 | 82 | 38 |
| 1819 | 1819 | 34587 | no | no | 62 | 62 | 23 |
| 2047 | 2047 | 34815 | no | no | 59 | 59 | 20 |
| 2111 | 2111 | 34879 | no | no | 84 | 84 | 36 |
| 2151 | 2151 | 34919 | no | no | 52 | 42 | 52 |
| 2287 | 2287 | 35055 | no | no | 54 | 54 | 22 |
| 2527 | 2527 | 35295 | no | no | 66 | 28 | 66 |
| 2887 | 2887 | 35655 | no | no | 136 | 17 | 136 |
| 3071 | 3071 | 35839 | no | no | 50 | 50 | 20 |
| 3199 | 3199 | 35967 | no | no | 66 | 18 | 66 |
| 3263 | 3263 | 36031 | no | no | 56 | 20 | 56 |
| 3399 | 3399 | 36167 | no | no | 49 | 49 | 22 |
| 4095 | 4095 | 36863 | no | no | 52 | 52 | 39 |
| 4255 | 4255 | 37023 | no | no | 71 | 71 | 18 |
| 4263 | 4263 | 37031 | no | no | 55 | 55 | 32 |
| 4379 | 4379 | 37147 | no | no | 77 | 17 | 77 |
| 4591 | 4591 | 37359 | no | no | 66 | 66 | 21 |
| 4607 | 4607 | 37375 | no | no | 49 | 49 | 21 |
| 4735 | 4735 | 37503 | no | no | 128 | 18 | 128 |
| 5119 | 5119 | 37887 | no | no | 52 | 39 | 52 |
| 5535 | 5535 | 38303 | no | no | 67 | 28 | 67 |
| 5823 | 5823 | 38591 | no | no | 53 | 24 | 53 |
| 6143 | 6143 | 38911 | no | no | 51 | 51 | 20 |
| 6171 | 6171 | 38939 | no | no | 56 | 56 | 25 |
| 6303 | 6303 | 39071 | no | no | 59 | 29 | 59 |
| 6383 | 6383 | 39151 | no | no | 70 | 70 | 22 |
| 6471 | 6471 | 39239 | no | no | 51 | 51 | 33 |
| 6887 | 6887 | 39655 | no | no | 58 | 58 | 25 |
| 6939 | 6939 | 39707 | no | no | 63 | 29 | 63 |
| 7039 | 7039 | 39807 | no | no | 63 | 18 | 63 |
| 7167 | 7167 | 39935 | no | no | 65 | 34 | 65 |
| 7279 | 7279 | 40047 | no | no | 58 | 58 | 20 |
| 7423 | 7423 | 40191 | no | no | 54 | 39 | 54 |
| 7451 | 7451 | 40219 | no | no | 60 | 17 | 60 |
| 7527 | 7527 | 40295 | no | no | 75 | 75 | 39 |
| 7935 | 7935 | 40703 | no | no | 71 | 43 | 71 |
| 7963 | 7963 | 40731 | no | no | 76 | 76 | 25 |
| 8191 | 8191 | 40959 | no | no | 52 | 45 | 52 |
| 8223 | 8223 | 40991 | no | no | 53 | 29 | 53 |
| 8351 | 8351 | 41119 | no | no | 66 | 36 | 66 |
| 8359 | 8359 | 41127 | no | no | 51 | 51 | 23 |
| 8639 | 8639 | 41407 | no | no | 56 | 35 | 56 |
| 8959 | 8959 | 41727 | no | no | 73 | 73 | 23 |
| 9023 | 9023 | 41791 | no | no | 74 | 18 | 74 |
| 9183 | 9183 | 41951 | no | no | 55 | 55 | 38 |
| 9215 | 9215 | 41983 | no | no | 50 | 50 | 20 |
| 9663 | 9663 | 42431 | no | no | 55 | 55 | 45 |
| 9695 | 9695 | 42463 | no | no | 72 | 24 | 72 |
| 9831 | 9831 | 42599 | no | no | 52 | 18 | 52 |
| 9855 | 9855 | 42623 | no | no | 49 | 29 | 49 |
| 10011 | 10011 | 42779 | no | no | 56 | 56 | 33 |
| 10087 | 10087 | 42855 | no | no | 102 | 102 | 22 |
| 10239 | 10239 | 43007 | no | no | 71 | 35 | 71 |
| 10331 | 10331 | 43099 | no | no | 52 | 52 | 24 |
| 10351 | 10351 | 43119 | no | no | 51 | 30 | 51 |
| 10407 | 10407 | 43175 | no | no | 70 | 29 | 70 |
| 10719 | 10719 | 43487 | no | no | 49 | 23 | 49 |
| 10919 | 10919 | 43687 | no | no | 57 | 57 | 20 |
| 11263 | 11263 | 44031 | no | no | 53 | 53 | 25 |
| 11291 | 11291 | 44059 | no | no | 74 | 74 | 18 |
| 11391 | 11391 | 44159 | no | no | 50 | 50 | 38 |
| 11623 | 11623 | 44391 | no | no | 49 | 49 | 21 |
| 11903 | 11903 | 44671 | no | no | 60 | 42 | 60 |
| 11931 | 11931 | 44699 | no | no | 49 | 49 | 19 |
| 12015 | 12015 | 44783 | no | no | 60 | 23 | 60 |
| 12135 | 12135 | 44903 | no | no | 57 | 40 | 57 |
| 12287 | 12287 | 45055 | no | no | 114 | 44 | 114 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/diagnostic_targeted_leaves_failure_mod2p15.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/diagnostic_targeted_leaves_failure_mod2p15.md`

View File

@ -0,0 +1,548 @@
**Auteur** : Équipe 4NK
# Profil dobstruction — racines ouvertes sur S_15 (raffinement jusquà 2^18)
## Domaine
- racine : 2^15
- max : 2^18
- open_roots : 1114
## Recherche (borne inférieure de profondeur)
- k_max : 256
- t_max : 256
- max_required_m (pruning) : 256
### Buckets — lower_bound_required_m_to_close_root
Buckets (any):
- required_m=17 : 6
- required_m=18 : 4
- required_m=19 : 50
- required_m=20 : 50
- required_m=21 : 49
- required_m=22 : 63
- required_m=23 : 42
- required_m=24 : 42
- required_m=25 : 56
- required_m=26 : 39
- required_m=27 : 32
- required_m=28 : 52
- required_m=29 : 44
- required_m=30 : 36
- required_m=31 : 29
- required_m=32 : 18
- required_m=33 : 35
- required_m=34 : 25
- required_m=35 : 18
- required_m=36 : 31
- required_m=37 : 27
- required_m=38 : 23
- required_m=39 : 11
- required_m=40 : 8
- required_m=41 : 17
- required_m=42 : 14
- required_m=43 : 12
- required_m=44 : 14
- required_m=45 : 20
- required_m=46 : 14
- required_m=47 : 17
- required_m=48 : 16
- required_m=49 : 10
- required_m=50 : 6
- required_m=51 : 9
- required_m=52 : 10
- required_m=53 : 9
- required_m=54 : 9
- required_m=55 : 9
- required_m=56 : 10
- required_m=57 : 5
- required_m=58 : 6
- required_m=59 : 6
- required_m=60 : 7
- required_m=61 : 6
- required_m=62 : 3
- required_m=63 : 5
- required_m=64 : 4
- required_m=65 : 4
- required_m=66 : 8
- required_m=67 : 4
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 6
- required_m=71 : 8
- required_m=72 : 8
- required_m=73 : 7
- required_m=74 : 2
- required_m=75 : 2
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 2
- required_m=80 : 2
- required_m=82 : 1
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=90 : 1
- required_m=102 : 1
- required_m=114 : 1
- required_m=118 : 1
- required_m=121 : 1
- required_m=127 : 1
- required_m=128 : 2
- required_m=130 : 1
- required_m=136 : 1
Buckets (D only):
- required_m=17 : 6
- required_m=18 : 4
- required_m=19 : 50
- required_m=20 : 27
- required_m=21 : 41
- required_m=22 : 63
- required_m=23 : 37
- required_m=24 : 39
- required_m=25 : 58
- required_m=26 : 34
- required_m=27 : 35
- required_m=28 : 55
- required_m=29 : 24
- required_m=30 : 37
- required_m=31 : 17
- required_m=32 : 25
- required_m=33 : 44
- required_m=34 : 25
- required_m=35 : 23
- required_m=36 : 36
- required_m=37 : 24
- required_m=38 : 28
- required_m=39 : 10
- required_m=40 : 9
- required_m=41 : 20
- required_m=42 : 11
- required_m=43 : 13
- required_m=44 : 20
- required_m=45 : 17
- required_m=46 : 17
- required_m=47 : 25
- required_m=48 : 15
- required_m=49 : 11
- required_m=50 : 5
- required_m=51 : 13
- required_m=52 : 15
- required_m=53 : 6
- required_m=54 : 11
- required_m=55 : 14
- required_m=56 : 4
- required_m=57 : 6
- required_m=58 : 4
- required_m=59 : 7
- required_m=60 : 10
- required_m=61 : 5
- required_m=62 : 3
- required_m=63 : 9
- required_m=64 : 2
- required_m=65 : 7
- required_m=66 : 8
- required_m=67 : 6
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 7
- required_m=71 : 8
- required_m=72 : 6
- required_m=73 : 8
- required_m=74 : 5
- required_m=75 : 3
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 3
- required_m=80 : 2
- required_m=81 : 1
- required_m=82 : 2
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=87 : 1
- required_m=90 : 1
- required_m=95 : 1
- required_m=109 : 1
- required_m=114 : 1
- required_m=121 : 1
- required_m=124 : 1
- required_m=127 : 1
- required_m=128 : 2
- required_m=130 : 1
- required_m=136 : 1
Buckets (F only):
- required_m=17 : 6
- required_m=18 : 4
- required_m=19 : 50
- required_m=20 : 42
- required_m=21 : 53
- required_m=22 : 52
- required_m=23 : 50
- required_m=24 : 43
- required_m=25 : 42
- required_m=26 : 42
- required_m=27 : 38
- required_m=28 : 43
- required_m=29 : 48
- required_m=30 : 41
- required_m=31 : 35
- required_m=32 : 19
- required_m=33 : 27
- required_m=34 : 31
- required_m=35 : 18
- required_m=36 : 26
- required_m=37 : 31
- required_m=38 : 25
- required_m=39 : 13
- required_m=40 : 9
- required_m=41 : 12
- required_m=42 : 19
- required_m=43 : 12
- required_m=44 : 11
- required_m=45 : 23
- required_m=46 : 16
- required_m=47 : 13
- required_m=48 : 19
- required_m=49 : 10
- required_m=50 : 6
- required_m=51 : 10
- required_m=52 : 8
- required_m=53 : 10
- required_m=54 : 9
- required_m=55 : 5
- required_m=56 : 13
- required_m=57 : 5
- required_m=58 : 8
- required_m=59 : 6
- required_m=60 : 6
- required_m=61 : 7
- required_m=62 : 3
- required_m=63 : 5
- required_m=64 : 4
- required_m=65 : 4
- required_m=66 : 8
- required_m=67 : 4
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 6
- required_m=71 : 7
- required_m=72 : 9
- required_m=73 : 7
- required_m=74 : 2
- required_m=75 : 2
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 1
- required_m=80 : 3
- required_m=82 : 1
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=90 : 1
- required_m=102 : 1
- required_m=114 : 1
- required_m=118 : 1
- required_m=121 : 1
- required_m=127 : 1
- required_m=128 : 1
- required_m=129 : 1
- required_m=130 : 1
- required_m=136 : 1
## Motifs dominants (<=32)
- both_children_no_contracting_D_up_to32 : 8
- both_children_F_blocked_by_deltaF_up_to32 : 7
- both_children_no_contracting_F_up_to32 : 7
## Histogrammes (<=32, agrégés sur les deux enfants)
### first_k_contracting_D_up_to32
- k=1 : 2
- k=2 : 2
- k=3 : 4
- k=4 : 6
- k=5 : 12
- k=10 : 346
- k=11 : 203
- k=12 : 152
- k=13 : 223
- k=14 : 116
- k=15 : 175
- k=16 : 88
- k=17 : 121
- k=18 : 65
- k=19 : 53
- k=20 : 81
- k=21 : 51
- k=22 : 67
- k=23 : 37
- k=24 : 21
- k=25 : 44
- k=26 : 24
- k=27 : 48
- k=28 : 26
- k=29 : 32
- k=30 : 18
- k=31 : 14
- k=32 : 20
### first_k_contracting_D_up_to32 (low child)
- k=1 : 1
- k=2 : 1
- k=3 : 2
- k=4 : 3
- k=5 : 6
- k=10 : 174
- k=11 : 99
- k=12 : 78
- k=13 : 106
- k=14 : 57
- k=15 : 89
- k=16 : 45
- k=17 : 66
- k=18 : 33
- k=19 : 30
- k=20 : 32
- k=21 : 23
- k=22 : 30
- k=23 : 19
- k=24 : 13
- k=25 : 19
- k=26 : 15
- k=27 : 25
- k=28 : 12
- k=29 : 14
- k=30 : 13
- k=31 : 8
- k=32 : 13
### first_k_contracting_D_up_to32 (high child)
- k=1 : 1
- k=2 : 1
- k=3 : 2
- k=4 : 3
- k=5 : 6
- k=10 : 172
- k=11 : 104
- k=12 : 74
- k=13 : 117
- k=14 : 59
- k=15 : 86
- k=16 : 43
- k=17 : 55
- k=18 : 32
- k=19 : 23
- k=20 : 49
- k=21 : 28
- k=22 : 37
- k=23 : 18
- k=24 : 8
- k=25 : 25
- k=26 : 9
- k=27 : 23
- k=28 : 14
- k=29 : 18
- k=30 : 5
- k=31 : 6
- k=32 : 7
### first_t_contracting_F_up_to32
- t=1 : 2
- t=2 : 2
- t=3 : 4
- t=4 : 6
- t=5 : 12
- t=10 : 260
- t=11 : 366
- t=12 : 199
- t=13 : 119
- t=14 : 185
- t=15 : 108
- t=16 : 144
- t=17 : 73
- t=18 : 110
- t=19 : 57
- t=20 : 40
- t=21 : 68
- t=22 : 40
- t=23 : 56
- t=24 : 27
- t=25 : 22
- t=26 : 36
- t=27 : 30
- t=28 : 30
- t=29 : 16
- t=30 : 30
- t=31 : 12
- t=32 : 12
### first_t_y_mod3_nonzero_up_to32
- t=1 : 2228
### y_mod3_zero_count_up_to32
- count=0 : 2228
### y_mod3_zero_count_up_to32 (low child)
- count=0 : 1114
### y_mod3_zero_count_up_to32 (high child)
- count=0 : 1114
## Corrélations (borne inférieure)
### lb_D - lb_F
- diff=-8 : 2
- diff=-7 : 2
- diff=-6 : 5
- diff=-5 : 3
- diff=-4 : 6
- diff=-3 : 17
- diff=-2 : 13
- diff=-1 : 39
- diff=0 : 840
- diff=1 : 9
- diff=2 : 21
- diff=3 : 30
- diff=4 : 14
- diff=5 : 17
- diff=6 : 9
- diff=7 : 20
- diff=8 : 10
- diff=9 : 7
- diff=10 : 5
- diff=11 : 4
- diff=12 : 7
- diff=13 : 2
- diff=14 : 2
- diff=15 : 3
- diff=16 : 2
- diff=17 : 4
- diff=18 : 2
- diff=19 : 1
- diff=20 : 1
- diff=21 : 2
- diff=22 : 2
- diff=24 : 1
- diff=25 : 1
- diff=26 : 2
- diff=28 : 1
- diff=30 : 2
- diff=31 : 2
- diff=38 : 1
- diff=40 : 1
- diff=42 : 1
- diff=44 : 1
### lb_any - lb_D
- diff=-44 : 1
- diff=-42 : 1
- diff=-40 : 1
- diff=-38 : 1
- diff=-31 : 2
- diff=-30 : 2
- diff=-28 : 1
- diff=-26 : 3
- diff=-25 : 1
- diff=-23 : 1
- diff=-22 : 2
- diff=-21 : 1
- diff=-20 : 1
- diff=-19 : 1
- diff=-18 : 2
- diff=-17 : 4
- diff=-16 : 2
- diff=-15 : 3
- diff=-14 : 2
- diff=-13 : 3
- diff=-12 : 7
- diff=-11 : 4
- diff=-10 : 5
- diff=-9 : 7
- diff=-8 : 9
- diff=-7 : 21
- diff=-6 : 10
- diff=-5 : 17
- diff=-4 : 15
- diff=-3 : 30
- diff=-2 : 20
- diff=-1 : 8
- diff=0 : 926
### lb_any - lb_F
- diff=-8 : 2
- diff=-7 : 2
- diff=-6 : 5
- diff=-5 : 3
- diff=-4 : 6
- diff=-3 : 19
- diff=-2 : 20
- diff=-1 : 42
- diff=0 : 1015
## Quantiles (borne inférieure)
| metric | p50 | p75 | p90 | p95 | p99 | max |
| --- | --- | --- | --- | --- | --- | --- |
| lb_any | 30 | 44 | 59 | 70 | 84 | 136 |
| lb_D | 33 | 46 | 62 | 71 | 85 | 136 |
| lb_F | 31 | 44 | 59 | 70 | 84 | 136 |
## Exemples (premières lignes)
| r | child0 | child1 | lb_any | lb_D | lb_F |
| --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | 60 | 60 | 60 |
| 31 | 31 | 32799 | 57 | 57 | 57 |
| 47 | 47 | 32815 | 56 | 56 | 56 |
| 63 | 63 | 32831 | 55 | 55 | 58 |
| 71 | 71 | 32839 | 52 | 52 | 55 |
| 91 | 91 | 32859 | 46 | 46 | 46 |
| 103 | 103 | 32871 | 43 | 43 | 43 |
| 111 | 111 | 32879 | 32 | 32 | 32 |
| 159 | 159 | 32927 | 24 | 24 | 24 |
| 167 | 167 | 32935 | 31 | 31 | 31 |
| 223 | 223 | 32991 | 33 | 33 | 33 |
| 239 | 239 | 33007 | 22 | 22 | 22 |
| 251 | 251 | 33019 | 80 | 80 | 80 |
| 283 | 283 | 33051 | 41 | 41 | 42 |
| 319 | 319 | 33087 | 24 | 24 | 24 |
| 327 | 327 | 33095 | 25 | 25 | 25 |
| 359 | 359 | 33127 | 20 | 23 | 21 |
| 447 | 447 | 33215 | 42 | 42 | 42 |
| 479 | 479 | 33247 | 22 | 22 | 22 |
| 495 | 495 | 33263 | 29 | 29 | 29 |
| 511 | 511 | 33279 | 38 | 38 | 38 |
| 559 | 559 | 33327 | 31 | 34 | 31 |
| 603 | 603 | 33371 | 26 | 38 | 26 |
| 639 | 639 | 33407 | 34 | 34 | 34 |
| 667 | 667 | 33435 | 30 | 30 | 30 |
| 671 | 671 | 33439 | 24 | 41 | 24 |
| 703 | 703 | 33471 | 84 | 84 | 84 |
| 743 | 743 | 33511 | 25 | 25 | 28 |
| 751 | 751 | 33519 | 47 | 47 | 47 |
| 763 | 763 | 33531 | 23 | 23 | 23 |
| 767 | 767 | 33535 | 21 | 21 | 21 |
| 795 | 795 | 33563 | 28 | 28 | 28 |
| 859 | 859 | 33627 | 24 | 24 | 24 |
| 871 | 871 | 33639 | 48 | 48 | 48 |
| 895 | 895 | 33663 | 25 | 25 | 25 |
| 927 | 927 | 33695 | 38 | 38 | 38 |
| 943 | 943 | 33711 | 17 | 17 | 17 |
| 959 | 959 | 33727 | 24 | 24 | 24 |
| 991 | 991 | 33759 | 27 | 27 | 27 |
| 1007 | 1007 | 33775 | 22 | 22 | 22 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/open_roots_obstruction_profile_mod2p15_to2p18.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/open_roots_obstruction_profile_mod2p15_to2p18.md`

View File

@ -0,0 +1,152 @@
**Auteur** : Équipe 4NK
# Certificat de raffinement multi-niveaux sur S_M — racine 2^15 vers 2^18
## Domaine
- racine : 2^15
- profondeur max : 2^18
- |S_15| (impairs) : 16384
## Entrées (feuilles terminales)
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k11_u18.json`
## Fermeture (sur S_M)
- closed_roots : 15270
- open_roots : 1114
- closed_ratio : 0.9320068359375
## Timeline (première profondeur de fermeture)
| cible | newly_closed | closed | open | closed_ratio |
| --- | --- | --- | --- | --- |
| 15 | 15235 | 15235 | 1149 | 0.929871 |
| 16 | 35 | 15270 | 1114 | 0.932007 |
| 17 | 0 | 15270 | 1114 | 0.932007 |
| 18 | 0 | 15270 | 1114 | 0.932007 |
## Audit du résidu (comptes, q_m, parents à un enfant)
| m | open_count | q_m | parents_one_child |
| --- | --- | --- | --- |
| 15 | 1114 | 0.838868940754 | 359 |
| 16 | 1869 | 0.915462814339 | 316 |
| 17 | 3422 | 0.928550555231 | 489 |
| 18 | 6355 | | |
### Racines encore ouvertes (extrait)
- r=27
- r=31
- r=47
- r=63
- r=71
- r=91
- r=103
- r=111
- r=159
- r=167
- r=223
- r=239
- r=251
- r=283
- r=319
- r=327
- r=359
- r=447
- r=479
- r=495
- r=511
- r=559
- r=603
- r=639
- r=667
- r=671
- r=703
- r=743
- r=751
- r=763
- r=767
- r=795
- r=859
- r=871
- r=895
- r=927
- r=943
- r=959
- r=991
- r=1007
- ... (1074 more)
### Racines fermées (extrait)
- r=1
- r=3
- r=5
- r=7
- r=9
- r=11
- r=13
- r=15
- r=17
- r=19
- r=21
- r=23
- r=25
- r=29
- r=33
- r=35
- r=37
- r=39
- r=41
- r=43
- r=45
- r=49
- r=51
- r=53
- r=55
- r=57
- r=59
- r=61
- r=65
- r=67
- r=69
- r=73
- r=75
- r=77
- r=79
- r=81
- r=83
- r=85
- r=87
- r=89
- ... (15230 more)
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/refinement_certificate_Sm_multilevel_mod2p15_to2p18.json`
- Audit JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18/audit_refinement_certificate_Sm_multilevel_mod2p15_to2p18.json`

View File

@ -0,0 +1,450 @@
{
"domain": {
"root_palier": 15,
"max_palier": 18,
"S_root_size": 16384
},
"closure": {
"closed_roots": 15283,
"open_roots": 1101,
"closed_ratio": 0.93280029296875,
"closed_roots_sample": [
1,
3,
5,
7,
9,
11,
13,
15,
17,
19,
21,
23,
25,
29,
33,
35,
37,
39,
41,
43,
45,
49,
51,
53,
55,
57,
59,
61,
65,
67,
69,
73,
75,
77,
79,
81,
83,
85,
87,
89,
93,
95,
97,
99,
101,
105,
107,
109,
113,
115,
117,
119,
121,
123,
125,
127,
129,
131,
133,
135,
137,
139,
141,
143,
145,
147,
149,
151,
153,
155,
157,
161,
163,
165,
169,
171,
173,
175,
177,
179,
181,
183,
185,
187,
189,
191,
193,
195,
197,
199,
201,
203,
205,
207,
209,
211,
213,
215,
217,
219,
221,
225,
227,
229,
231,
233,
235,
237,
241,
243,
245,
247,
249,
253,
255,
257,
259,
261,
263,
265,
267,
269,
271,
273,
275,
277,
279,
281,
285,
287,
289,
291,
293,
295,
297,
299,
301,
303,
305,
307,
309,
311,
313,
315,
317,
321,
323,
325,
329,
331,
333,
335,
337,
339,
341,
343,
345,
347,
349,
351,
353,
355,
357,
361,
363,
365,
367,
369,
371,
373,
375,
377,
379,
381,
383,
385,
387,
389,
391,
393,
395,
397,
399,
401,
403,
405,
407,
409,
411,
413,
415,
417,
419,
421,
423,
425,
427,
429,
431,
433
],
"still_open_roots_sample": [
27,
31,
47,
63,
71,
91,
103,
111,
159,
167,
223,
239,
251,
283,
319,
327,
359,
447,
479,
495,
511,
559,
603,
639,
667,
671,
703,
743,
751,
763,
767,
795,
859,
871,
895,
927,
959,
991,
1007,
1023,
1051,
1055,
1115,
1127,
1179,
1183,
1255,
1263,
1279,
1307,
1343,
1383,
1407,
1439,
1471,
1503,
1519,
1535,
1583,
1639,
1663,
1691,
1695,
1767,
1791,
1819,
1883,
1895,
1919,
1951,
1959,
2043,
2047,
2111,
2139,
2151,
2159,
2175,
2207,
2215,
2287,
2367,
2375,
2407,
2463,
2495,
2527,
2543,
2559,
2651,
2671,
2687,
2715,
2751,
2791,
2811,
2843,
2879,
2887,
2919,
2943,
3007,
3055,
3071,
3099,
3103,
3175,
3183,
3199,
3227,
3231,
3263,
3311,
3323,
3327,
3355,
3375,
3391,
3399,
3431,
3487,
3519,
3567,
3583,
3615,
3631,
3711,
3739,
3775,
3815,
3823,
3839,
3867,
3931,
3943,
3999,
4095,
4127,
4167,
4207,
4255,
4263,
4319,
4335,
4347,
4351,
4379,
4399,
4415,
4423,
4511,
4575,
4591,
4607,
4635,
4699,
4719,
4735,
4763,
4767,
4775,
4799,
4839,
4847,
4863,
4891,
4935,
4967,
4991,
5055,
5119,
5147,
5151,
5211,
5223,
5247,
5279,
5287,
5343,
5351,
5359,
5375,
5403,
5423,
5447,
5479,
5503,
5535,
5567,
5659,
5663,
5679,
5735,
5759,
5791,
5823,
5863,
5887,
5915,
5991
]
},
"generated_at": "2026-03-10T07:19:24.524931Z",
"sha256": {
"inputs": {
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json": "efd03bab49da30cb4be9cedc53e0e7fe2cb92e0e87c3e0fd1aa3514a17427fa3",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json": "09629196bfbf1fd5576df72a7a34729b0d19be3febaa64d8a3817438d95e9d35",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json": "07dc98763cc42491c937305fd7d153959c7f54f2e5cfee3a4deebe97744bae7c",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json": "16662d98a05c93a177823c3e44f84b50dff300d53152f9d525ff781e2aa89ac2",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json": "8b437c0a8215f942e0aaf47c387e7e52842ff87886fb7c6a04e9dd7776f738f5",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k9_u15.json": "4086ecee3718de33d1580db99d9f3d68677afe7ba7d6d46739b3c85c9fb77fe0",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k6_u10.json": "342285a5302ea82db64501b4b456fbde9d4335cf114243fa95a955eb5e4f46c6",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k7_u12.json": "d7f5e9e53e09da79bf244a0d9ec30dce2b2c0f21342c765ee5cf68b9300044c9",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k8_u13.json": "954a62a86c3d70f83f224541118d6a4ecf21a194e052650801973aff4a026ad8",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k9_u15.json": "80047d4a01761a80f071d48a0bfd0337826b090af1bca3467d73d918c5de64d6",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k10_u16.json": "386a2aeed2017724682775f0b12567520a603a315682829963fd5ea571f4e31c",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k6_u10.json": "608b13150f7abcdfff3453be52e84db491a958408c3019e512ecf90c081d8328",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k7_u12.json": "78ab06661923d8489810167fb249d0cb87993b8d5fe65fdd56f1f17e73dc8a5d",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k8_u13.json": "4d71267c627e630570c4b226c32bad9e30525da7d160045e2360ee4a2f36199d",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k9_u15.json": "a0f80ac79111ebad80888649d10f51cedb7f6f76c681ba98095fcbb6e6a57bfd",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k10_u16.json": "dcf0de1d69b492f8ea072e1c6045acddf4bd3a6e43e93a1f5313757ac7d430d2",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k6_u10.json": "ae047b4b91858df1ab5ade8d6f619340528fa536a163e42f5d10a92e1ea7176a",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k7_u12.json": "33a4236e7438a8f7f73165083f9d14a21dac0e6c64ac252072d3ff5d053dd5a4",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k8_u13.json": "30f7cf398782508933f0a7ed0be842ce087fc2ee0297f0cf0e1f759d8a0d832e",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k9_u15.json": "c309d9173847b8073a37cf3d62f35b380a7d22cfad4a1aa0d2074f3ae20258e9",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k10_u16.json": "933210e286995000b98b2575847185fc93f9c042ffbebe38a6178053a202cd80",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k11_u18.json": "f6176d0a032c473e638da83c7fcd756aa14cd4e65950fd18e59085016717e268",
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p15/clauses_D_minor_derived_from_brothers_over_Sm_mod2p15.json": "3175e951681f1f05ce9bf91423025f7cef003e8e272ca1515253d59e920477d0",
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p16/clauses_D_minor_derived_from_brothers_over_Sm_mod2p16.json": "e0944088881af42e7b2569c60702a9162e201e0d9a22dfd9b976cd7c12984bbd",
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p17/clauses_D_minor_derived_from_brothers_over_Sm_mod2p17.json": "78a0a9e4afb64333b078e0f88eb4cbb0f6df6516de47c68d936af731cffcdafb",
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p18/clauses_D_minor_derived_from_brothers_over_Sm_mod2p18.json": "799d79c423e06d28eac44fc318854c86fd70a924a43bbdb0c61ef56dfd71bfae"
},
"outputs": {
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/refinement_certificate_Sm_multilevel_mod2p15_to2p18.json": "f9856c74ed88e5b61b6bd1f610a5fe2e95c889dd281ff673e7cf939a41c6e07a"
}
}
}

View File

@ -0,0 +1,8 @@
**Auteur** : Équipe 4NK
# Audit — raffinement multi-niveaux sur S_M (2^15→2^18)
- closed_roots : 15283
- open_roots : 1101
- closed_ratio : 0.93280029296875

View File

@ -0,0 +1,16 @@
{
"domain": {
"palier": 15
},
"inputs": {
"derived_json": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p15/clauses_D_minor_derived_from_brothers_over_Sm_mod2p15.json",
"terminal_json": "/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json"
},
"counts": {
"total": 14500,
"ok": 14500,
"errors": 0
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,9 @@
**Auteur** : Équipe 4NK
# Vérification — clauses D minorées dérivées par frères sur S_M (2^15)
- total : 14500
- ok : 14500
- errors : 0
- ok_all : True

View File

@ -0,0 +1,16 @@
{
"domain": {
"palier": 16
},
"inputs": {
"derived_json": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p16/clauses_D_minor_derived_from_brothers_over_Sm_mod2p16.json",
"terminal_json": "/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json"
},
"counts": {
"total": 29248,
"ok": 29248,
"errors": 0
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,9 @@
**Auteur** : Équipe 4NK
# Vérification — clauses D minorées dérivées par frères sur S_M (2^16)
- total : 29248
- ok : 29248
- errors : 0
- ok_all : True

View File

@ -0,0 +1,16 @@
{
"domain": {
"palier": 17
},
"inputs": {
"derived_json": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p17/clauses_D_minor_derived_from_brothers_over_Sm_mod2p17.json",
"terminal_json": "/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json"
},
"counts": {
"total": 59090,
"ok": 59090,
"errors": 0
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,9 @@
**Auteur** : Équipe 4NK
# Vérification — clauses D minorées dérivées par frères sur S_M (2^17)
- total : 59090
- ok : 59090
- errors : 0
- ok_all : True

View File

@ -0,0 +1,16 @@
{
"domain": {
"palier": 18
},
"inputs": {
"derived_json": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p18/clauses_D_minor_derived_from_brothers_over_Sm_mod2p18.json",
"terminal_json": "/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json"
},
"counts": {
"total": 118774,
"ok": 118774,
"errors": 0
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,9 @@
**Auteur** : Équipe 4NK
# Vérification — clauses D minorées dérivées par frères sur S_M (2^18)
- total : 118774
- ok : 118774
- errors : 0
- ok_all : True

View File

@ -0,0 +1,99 @@
**Auteur** : Équipe 4NK
# Diagnostic — échec targeted leaves — racine 2^15
- tracked_roots_file : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt`
- k_max : 256
- t_max : 256
- search_max_required_m : 256
Table (par racine) :
| root | child_low | child_high | immediate_low@16 | immediate_high@16 | lb_root | lb_low | lb_high |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | no | no | 60 | 60 | 26 |
| 31 | 31 | 32799 | no | no | 57 | 57 | 25 |
| 47 | 47 | 32815 | no | no | 56 | 56 | 42 |
| 63 | 63 | 32831 | no | no | 55 | 55 | 25 |
| 71 | 71 | 32839 | no | no | 52 | 52 | 22 |
| 251 | 251 | 33019 | no | no | 80 | 30 | 80 |
| 703 | 703 | 33471 | no | no | 84 | 84 | 61 |
| 1055 | 1055 | 33823 | no | no | 83 | 83 | 28 |
| 1183 | 1183 | 33951 | no | no | 55 | 17 | 55 |
| 1279 | 1279 | 34047 | no | no | 70 | 25 | 70 |
| 1407 | 1407 | 34175 | no | no | 85 | 85 | 23 |
| 1471 | 1471 | 34239 | no | no | 80 | 32 | 80 |
| 1535 | 1535 | 34303 | no | no | 56 | 20 | 56 |
| 1583 | 1583 | 34351 | no | no | 82 | 82 | 38 |
| 1819 | 1819 | 34587 | no | no | 62 | 62 | 23 |
| 2047 | 2047 | 34815 | no | no | 59 | 59 | 20 |
| 2111 | 2111 | 34879 | no | no | 84 | 84 | 36 |
| 2151 | 2151 | 34919 | no | no | 52 | 42 | 52 |
| 2287 | 2287 | 35055 | no | no | 54 | 54 | 22 |
| 2527 | 2527 | 35295 | no | no | 66 | 28 | 66 |
| 2887 | 2887 | 35655 | no | no | 136 | 17 | 136 |
| 3071 | 3071 | 35839 | no | no | 50 | 50 | 20 |
| 3199 | 3199 | 35967 | no | no | 66 | 18 | 66 |
| 3263 | 3263 | 36031 | no | no | 56 | 20 | 56 |
| 3399 | 3399 | 36167 | no | no | 49 | 49 | 22 |
| 4095 | 4095 | 36863 | no | no | 52 | 52 | 39 |
| 4255 | 4255 | 37023 | no | no | 71 | 71 | 18 |
| 4263 | 4263 | 37031 | no | no | 55 | 55 | 32 |
| 4379 | 4379 | 37147 | no | no | 77 | 17 | 77 |
| 4591 | 4591 | 37359 | no | no | 66 | 66 | 21 |
| 4607 | 4607 | 37375 | no | no | 49 | 49 | 21 |
| 4735 | 4735 | 37503 | no | no | 128 | 18 | 128 |
| 5119 | 5119 | 37887 | no | no | 52 | 39 | 52 |
| 5535 | 5535 | 38303 | no | no | 67 | 28 | 67 |
| 5823 | 5823 | 38591 | no | no | 53 | 24 | 53 |
| 6143 | 6143 | 38911 | no | no | 51 | 51 | 20 |
| 6171 | 6171 | 38939 | no | no | 56 | 56 | 25 |
| 6303 | 6303 | 39071 | no | no | 59 | 29 | 59 |
| 6383 | 6383 | 39151 | no | no | 70 | 70 | 22 |
| 6471 | 6471 | 39239 | no | no | 51 | 51 | 33 |
| 6887 | 6887 | 39655 | no | no | 58 | 58 | 25 |
| 6939 | 6939 | 39707 | no | no | 63 | 29 | 63 |
| 7039 | 7039 | 39807 | no | no | 63 | 18 | 63 |
| 7167 | 7167 | 39935 | no | no | 65 | 34 | 65 |
| 7279 | 7279 | 40047 | no | no | 58 | 58 | 20 |
| 7423 | 7423 | 40191 | no | no | 54 | 39 | 54 |
| 7451 | 7451 | 40219 | no | no | 60 | 17 | 60 |
| 7527 | 7527 | 40295 | no | no | 75 | 75 | 39 |
| 7935 | 7935 | 40703 | no | no | 71 | 43 | 71 |
| 7963 | 7963 | 40731 | no | no | 76 | 76 | 25 |
| 8191 | 8191 | 40959 | no | no | 52 | 45 | 52 |
| 8223 | 8223 | 40991 | no | no | 53 | 29 | 53 |
| 8351 | 8351 | 41119 | no | no | 66 | 36 | 66 |
| 8359 | 8359 | 41127 | no | no | 51 | 51 | 23 |
| 8639 | 8639 | 41407 | no | no | 56 | 35 | 56 |
| 8959 | 8959 | 41727 | no | no | 73 | 73 | 23 |
| 9023 | 9023 | 41791 | no | no | 74 | 18 | 74 |
| 9183 | 9183 | 41951 | no | no | 55 | 55 | 38 |
| 9215 | 9215 | 41983 | no | no | 50 | 50 | 20 |
| 9663 | 9663 | 42431 | no | no | 55 | 55 | 45 |
| 9695 | 9695 | 42463 | no | no | 72 | 24 | 72 |
| 9831 | 9831 | 42599 | no | no | 52 | 18 | 52 |
| 9855 | 9855 | 42623 | no | no | 49 | 29 | 49 |
| 10011 | 10011 | 42779 | no | no | 56 | 56 | 33 |
| 10087 | 10087 | 42855 | no | no | 102 | 102 | 22 |
| 10239 | 10239 | 43007 | no | no | 71 | 35 | 71 |
| 10331 | 10331 | 43099 | no | no | 52 | 52 | 24 |
| 10351 | 10351 | 43119 | no | no | 51 | 30 | 51 |
| 10407 | 10407 | 43175 | no | no | 70 | 29 | 70 |
| 10719 | 10719 | 43487 | no | no | 49 | 23 | 49 |
| 10919 | 10919 | 43687 | no | no | 57 | 57 | 20 |
| 11263 | 11263 | 44031 | no | no | 53 | 53 | 25 |
| 11291 | 11291 | 44059 | no | no | 74 | 74 | 18 |
| 11391 | 11391 | 44159 | no | no | 50 | 50 | 38 |
| 11623 | 11623 | 44391 | no | no | 49 | 49 | 21 |
| 11903 | 11903 | 44671 | no | no | 60 | 42 | 60 |
| 11931 | 11931 | 44699 | no | no | 49 | 49 | 19 |
| 12015 | 12015 | 44783 | no | no | 60 | 23 | 60 |
| 12135 | 12135 | 44903 | no | no | 57 | 40 | 57 |
| 12287 | 12287 | 45055 | no | no | 114 | 44 | 114 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/diagnostic_targeted_leaves_failure_mod2p15.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/diagnostic_targeted_leaves_failure_mod2p15.md`

View File

@ -0,0 +1,522 @@
**Auteur** : Équipe 4NK
# Profil dobstruction — racines ouvertes sur S_15 (raffinement jusquà 2^18)
## Domaine
- racine : 2^15
- max : 2^18
- open_roots : 1101
## Recherche (borne inférieure de profondeur)
- k_max : 256
- t_max : 256
- max_required_m (pruning) : 256
### Buckets — lower_bound_required_m_to_close_root
Buckets (any):
- required_m=19 : 47
- required_m=20 : 50
- required_m=21 : 49
- required_m=22 : 63
- required_m=23 : 42
- required_m=24 : 42
- required_m=25 : 56
- required_m=26 : 39
- required_m=27 : 32
- required_m=28 : 52
- required_m=29 : 44
- required_m=30 : 36
- required_m=31 : 29
- required_m=32 : 18
- required_m=33 : 35
- required_m=34 : 25
- required_m=35 : 18
- required_m=36 : 31
- required_m=37 : 27
- required_m=38 : 23
- required_m=39 : 11
- required_m=40 : 8
- required_m=41 : 17
- required_m=42 : 14
- required_m=43 : 12
- required_m=44 : 14
- required_m=45 : 20
- required_m=46 : 14
- required_m=47 : 17
- required_m=48 : 16
- required_m=49 : 10
- required_m=50 : 6
- required_m=51 : 9
- required_m=52 : 10
- required_m=53 : 9
- required_m=54 : 9
- required_m=55 : 9
- required_m=56 : 10
- required_m=57 : 5
- required_m=58 : 6
- required_m=59 : 6
- required_m=60 : 7
- required_m=61 : 6
- required_m=62 : 3
- required_m=63 : 5
- required_m=64 : 4
- required_m=65 : 4
- required_m=66 : 8
- required_m=67 : 4
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 6
- required_m=71 : 8
- required_m=72 : 8
- required_m=73 : 7
- required_m=74 : 2
- required_m=75 : 2
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 2
- required_m=80 : 2
- required_m=82 : 1
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=90 : 1
- required_m=102 : 1
- required_m=114 : 1
- required_m=118 : 1
- required_m=121 : 1
- required_m=127 : 1
- required_m=128 : 2
- required_m=130 : 1
- required_m=136 : 1
Buckets (D only):
- required_m=19 : 47
- required_m=20 : 27
- required_m=21 : 41
- required_m=22 : 63
- required_m=23 : 37
- required_m=24 : 39
- required_m=25 : 58
- required_m=26 : 34
- required_m=27 : 35
- required_m=28 : 55
- required_m=29 : 24
- required_m=30 : 37
- required_m=31 : 17
- required_m=32 : 25
- required_m=33 : 44
- required_m=34 : 25
- required_m=35 : 23
- required_m=36 : 36
- required_m=37 : 24
- required_m=38 : 28
- required_m=39 : 10
- required_m=40 : 9
- required_m=41 : 20
- required_m=42 : 11
- required_m=43 : 13
- required_m=44 : 20
- required_m=45 : 17
- required_m=46 : 17
- required_m=47 : 25
- required_m=48 : 15
- required_m=49 : 11
- required_m=50 : 5
- required_m=51 : 13
- required_m=52 : 15
- required_m=53 : 6
- required_m=54 : 11
- required_m=55 : 14
- required_m=56 : 4
- required_m=57 : 6
- required_m=58 : 4
- required_m=59 : 7
- required_m=60 : 10
- required_m=61 : 5
- required_m=62 : 3
- required_m=63 : 9
- required_m=64 : 2
- required_m=65 : 7
- required_m=66 : 8
- required_m=67 : 6
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 7
- required_m=71 : 8
- required_m=72 : 6
- required_m=73 : 8
- required_m=74 : 5
- required_m=75 : 3
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 3
- required_m=80 : 2
- required_m=81 : 1
- required_m=82 : 2
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=87 : 1
- required_m=90 : 1
- required_m=95 : 1
- required_m=109 : 1
- required_m=114 : 1
- required_m=121 : 1
- required_m=124 : 1
- required_m=127 : 1
- required_m=128 : 2
- required_m=130 : 1
- required_m=136 : 1
Buckets (F only):
- required_m=19 : 47
- required_m=20 : 42
- required_m=21 : 53
- required_m=22 : 52
- required_m=23 : 50
- required_m=24 : 43
- required_m=25 : 42
- required_m=26 : 42
- required_m=27 : 38
- required_m=28 : 43
- required_m=29 : 48
- required_m=30 : 41
- required_m=31 : 35
- required_m=32 : 19
- required_m=33 : 27
- required_m=34 : 31
- required_m=35 : 18
- required_m=36 : 26
- required_m=37 : 31
- required_m=38 : 25
- required_m=39 : 13
- required_m=40 : 9
- required_m=41 : 12
- required_m=42 : 19
- required_m=43 : 12
- required_m=44 : 11
- required_m=45 : 23
- required_m=46 : 16
- required_m=47 : 13
- required_m=48 : 19
- required_m=49 : 10
- required_m=50 : 6
- required_m=51 : 10
- required_m=52 : 8
- required_m=53 : 10
- required_m=54 : 9
- required_m=55 : 5
- required_m=56 : 13
- required_m=57 : 5
- required_m=58 : 8
- required_m=59 : 6
- required_m=60 : 6
- required_m=61 : 7
- required_m=62 : 3
- required_m=63 : 5
- required_m=64 : 4
- required_m=65 : 4
- required_m=66 : 8
- required_m=67 : 4
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 6
- required_m=71 : 7
- required_m=72 : 9
- required_m=73 : 7
- required_m=74 : 2
- required_m=75 : 2
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 1
- required_m=80 : 3
- required_m=82 : 1
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=90 : 1
- required_m=102 : 1
- required_m=114 : 1
- required_m=118 : 1
- required_m=121 : 1
- required_m=127 : 1
- required_m=128 : 1
- required_m=129 : 1
- required_m=130 : 1
- required_m=136 : 1
## Motifs dominants (<=32)
- both_children_no_contracting_D_up_to32 : 8
- both_children_F_blocked_by_deltaF_up_to32 : 7
- both_children_no_contracting_F_up_to32 : 7
## Histogrammes (<=32, agrégés sur les deux enfants)
### first_k_contracting_D_up_to32
- k=10 : 346
- k=11 : 203
- k=12 : 152
- k=13 : 223
- k=14 : 116
- k=15 : 175
- k=16 : 88
- k=17 : 121
- k=18 : 65
- k=19 : 53
- k=20 : 81
- k=21 : 51
- k=22 : 67
- k=23 : 37
- k=24 : 21
- k=25 : 44
- k=26 : 24
- k=27 : 48
- k=28 : 26
- k=29 : 32
- k=30 : 18
- k=31 : 14
- k=32 : 20
### first_k_contracting_D_up_to32 (low child)
- k=10 : 174
- k=11 : 99
- k=12 : 78
- k=13 : 106
- k=14 : 57
- k=15 : 89
- k=16 : 45
- k=17 : 66
- k=18 : 33
- k=19 : 30
- k=20 : 32
- k=21 : 23
- k=22 : 30
- k=23 : 19
- k=24 : 13
- k=25 : 19
- k=26 : 15
- k=27 : 25
- k=28 : 12
- k=29 : 14
- k=30 : 13
- k=31 : 8
- k=32 : 13
### first_k_contracting_D_up_to32 (high child)
- k=10 : 172
- k=11 : 104
- k=12 : 74
- k=13 : 117
- k=14 : 59
- k=15 : 86
- k=16 : 43
- k=17 : 55
- k=18 : 32
- k=19 : 23
- k=20 : 49
- k=21 : 28
- k=22 : 37
- k=23 : 18
- k=24 : 8
- k=25 : 25
- k=26 : 9
- k=27 : 23
- k=28 : 14
- k=29 : 18
- k=30 : 5
- k=31 : 6
- k=32 : 7
### first_t_contracting_F_up_to32
- t=10 : 260
- t=11 : 366
- t=12 : 199
- t=13 : 119
- t=14 : 185
- t=15 : 108
- t=16 : 144
- t=17 : 73
- t=18 : 110
- t=19 : 57
- t=20 : 40
- t=21 : 68
- t=22 : 40
- t=23 : 56
- t=24 : 27
- t=25 : 22
- t=26 : 36
- t=27 : 30
- t=28 : 30
- t=29 : 16
- t=30 : 30
- t=31 : 12
- t=32 : 12
### first_t_y_mod3_nonzero_up_to32
- t=1 : 2202
### y_mod3_zero_count_up_to32
- count=0 : 2202
### y_mod3_zero_count_up_to32 (low child)
- count=0 : 1101
### y_mod3_zero_count_up_to32 (high child)
- count=0 : 1101
## Corrélations (borne inférieure)
### lb_D - lb_F
- diff=-8 : 2
- diff=-7 : 2
- diff=-6 : 5
- diff=-5 : 3
- diff=-4 : 6
- diff=-3 : 17
- diff=-2 : 13
- diff=-1 : 39
- diff=0 : 827
- diff=1 : 9
- diff=2 : 21
- diff=3 : 30
- diff=4 : 14
- diff=5 : 17
- diff=6 : 9
- diff=7 : 20
- diff=8 : 10
- diff=9 : 7
- diff=10 : 5
- diff=11 : 4
- diff=12 : 7
- diff=13 : 2
- diff=14 : 2
- diff=15 : 3
- diff=16 : 2
- diff=17 : 4
- diff=18 : 2
- diff=19 : 1
- diff=20 : 1
- diff=21 : 2
- diff=22 : 2
- diff=24 : 1
- diff=25 : 1
- diff=26 : 2
- diff=28 : 1
- diff=30 : 2
- diff=31 : 2
- diff=38 : 1
- diff=40 : 1
- diff=42 : 1
- diff=44 : 1
### lb_any - lb_D
- diff=-44 : 1
- diff=-42 : 1
- diff=-40 : 1
- diff=-38 : 1
- diff=-31 : 2
- diff=-30 : 2
- diff=-28 : 1
- diff=-26 : 3
- diff=-25 : 1
- diff=-23 : 1
- diff=-22 : 2
- diff=-21 : 1
- diff=-20 : 1
- diff=-19 : 1
- diff=-18 : 2
- diff=-17 : 4
- diff=-16 : 2
- diff=-15 : 3
- diff=-14 : 2
- diff=-13 : 3
- diff=-12 : 7
- diff=-11 : 4
- diff=-10 : 5
- diff=-9 : 7
- diff=-8 : 9
- diff=-7 : 21
- diff=-6 : 10
- diff=-5 : 17
- diff=-4 : 15
- diff=-3 : 30
- diff=-2 : 20
- diff=-1 : 8
- diff=0 : 913
### lb_any - lb_F
- diff=-8 : 2
- diff=-7 : 2
- diff=-6 : 5
- diff=-5 : 3
- diff=-4 : 6
- diff=-3 : 19
- diff=-2 : 20
- diff=-1 : 42
- diff=0 : 1002
## Quantiles (borne inférieure)
| metric | p50 | p75 | p90 | p95 | p99 | max |
| --- | --- | --- | --- | --- | --- | --- |
| lb_any | 30 | 44 | 60 | 70 | 85 | 136 |
| lb_D | 33 | 46 | 63 | 71 | 87 | 136 |
| lb_F | 31 | 44 | 60 | 70 | 85 | 136 |
## Exemples (premières lignes)
| r | child0 | child1 | lb_any | lb_D | lb_F |
| --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | 60 | 60 | 60 |
| 31 | 31 | 32799 | 57 | 57 | 57 |
| 47 | 47 | 32815 | 56 | 56 | 56 |
| 63 | 63 | 32831 | 55 | 55 | 58 |
| 71 | 71 | 32839 | 52 | 52 | 55 |
| 91 | 91 | 32859 | 46 | 46 | 46 |
| 103 | 103 | 32871 | 43 | 43 | 43 |
| 111 | 111 | 32879 | 32 | 32 | 32 |
| 159 | 159 | 32927 | 24 | 24 | 24 |
| 167 | 167 | 32935 | 31 | 31 | 31 |
| 223 | 223 | 32991 | 33 | 33 | 33 |
| 239 | 239 | 33007 | 22 | 22 | 22 |
| 251 | 251 | 33019 | 80 | 80 | 80 |
| 283 | 283 | 33051 | 41 | 41 | 42 |
| 319 | 319 | 33087 | 24 | 24 | 24 |
| 327 | 327 | 33095 | 25 | 25 | 25 |
| 359 | 359 | 33127 | 20 | 23 | 21 |
| 447 | 447 | 33215 | 42 | 42 | 42 |
| 479 | 479 | 33247 | 22 | 22 | 22 |
| 495 | 495 | 33263 | 29 | 29 | 29 |
| 511 | 511 | 33279 | 38 | 38 | 38 |
| 559 | 559 | 33327 | 31 | 34 | 31 |
| 603 | 603 | 33371 | 26 | 38 | 26 |
| 639 | 639 | 33407 | 34 | 34 | 34 |
| 667 | 667 | 33435 | 30 | 30 | 30 |
| 671 | 671 | 33439 | 24 | 41 | 24 |
| 703 | 703 | 33471 | 84 | 84 | 84 |
| 743 | 743 | 33511 | 25 | 25 | 28 |
| 751 | 751 | 33519 | 47 | 47 | 47 |
| 763 | 763 | 33531 | 23 | 23 | 23 |
| 767 | 767 | 33535 | 21 | 21 | 21 |
| 795 | 795 | 33563 | 28 | 28 | 28 |
| 859 | 859 | 33627 | 24 | 24 | 24 |
| 871 | 871 | 33639 | 48 | 48 | 48 |
| 895 | 895 | 33663 | 25 | 25 | 25 |
| 927 | 927 | 33695 | 38 | 38 | 38 |
| 959 | 959 | 33727 | 24 | 24 | 24 |
| 991 | 991 | 33759 | 27 | 27 | 27 |
| 1007 | 1007 | 33775 | 22 | 22 | 22 |
| 1023 | 1023 | 33791 | 36 | 36 | 36 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/open_roots_obstruction_profile_mod2p15_to2p18.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/open_roots_obstruction_profile_mod2p15_to2p18.md`

View File

@ -0,0 +1,156 @@
**Auteur** : Équipe 4NK
# Certificat de raffinement multi-niveaux sur S_M — racine 2^15 vers 2^18
## Domaine
- racine : 2^15
- profondeur max : 2^18
- |S_15| (impairs) : 16384
## Entrées (feuilles terminales)
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k11_u18.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p15/clauses_D_minor_derived_from_brothers_over_Sm_mod2p15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p16/clauses_D_minor_derived_from_brothers_over_Sm_mod2p16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p17/clauses_D_minor_derived_from_brothers_over_Sm_mod2p17.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/derived_brother_dminor/palier2p18/clauses_D_minor_derived_from_brothers_over_Sm_mod2p18.json`
## Fermeture (sur S_M)
- closed_roots : 15283
- open_roots : 1101
- closed_ratio : 0.93280029296875
## Timeline (première profondeur de fermeture)
| cible | newly_closed | closed | open | closed_ratio |
| --- | --- | --- | --- | --- |
| 15 | 15283 | 15283 | 1101 | 0.932800 |
| 16 | 0 | 15283 | 1101 | 0.932800 |
| 17 | 0 | 15283 | 1101 | 0.932800 |
| 18 | 0 | 15283 | 1101 | 0.932800 |
## Audit du résidu (comptes, q_m, parents à un enfant)
| m | open_count | q_m | parents_one_child |
| --- | --- | --- | --- |
| 15 | 1101 | 0.842870118074 | 346 |
| 16 | 1856 | 0.918372844828 | 303 |
| 17 | 3409 | 0.930184804928 | 476 |
| 18 | 6342 | | |
### Racines encore ouvertes (extrait)
- r=27
- r=31
- r=47
- r=63
- r=71
- r=91
- r=103
- r=111
- r=159
- r=167
- r=223
- r=239
- r=251
- r=283
- r=319
- r=327
- r=359
- r=447
- r=479
- r=495
- r=511
- r=559
- r=603
- r=639
- r=667
- r=671
- r=703
- r=743
- r=751
- r=763
- r=767
- r=795
- r=859
- r=871
- r=895
- r=927
- r=959
- r=991
- r=1007
- r=1023
- ... (1061 more)
### Racines fermées (extrait)
- r=1
- r=3
- r=5
- r=7
- r=9
- r=11
- r=13
- r=15
- r=17
- r=19
- r=21
- r=23
- r=25
- r=29
- r=33
- r=35
- r=37
- r=39
- r=41
- r=43
- r=45
- r=49
- r=51
- r=53
- r=55
- r=57
- r=59
- r=61
- r=65
- r=67
- r=69
- r=73
- r=75
- r=77
- r=79
- r=81
- r=83
- r=85
- r=87
- r=89
- ... (15243 more)
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/refinement_certificate_Sm_multilevel_mod2p15_to2p18.json`
- Audit JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_autoderive_brother/audit_refinement_certificate_Sm_multilevel_mod2p15_to2p18.json`

View File

@ -0,0 +1,450 @@
{
"domain": {
"root_palier": 15,
"max_palier": 18,
"S_root_size": 16384
},
"closure": {
"closed_roots": 15283,
"open_roots": 1101,
"closed_ratio": 0.93280029296875,
"closed_roots_sample": [
1,
3,
5,
7,
9,
11,
13,
15,
17,
19,
21,
23,
25,
29,
33,
35,
37,
39,
41,
43,
45,
49,
51,
53,
55,
57,
59,
61,
65,
67,
69,
73,
75,
77,
79,
81,
83,
85,
87,
89,
93,
95,
97,
99,
101,
105,
107,
109,
113,
115,
117,
119,
121,
123,
125,
127,
129,
131,
133,
135,
137,
139,
141,
143,
145,
147,
149,
151,
153,
155,
157,
161,
163,
165,
169,
171,
173,
175,
177,
179,
181,
183,
185,
187,
189,
191,
193,
195,
197,
199,
201,
203,
205,
207,
209,
211,
213,
215,
217,
219,
221,
225,
227,
229,
231,
233,
235,
237,
241,
243,
245,
247,
249,
253,
255,
257,
259,
261,
263,
265,
267,
269,
271,
273,
275,
277,
279,
281,
285,
287,
289,
291,
293,
295,
297,
299,
301,
303,
305,
307,
309,
311,
313,
315,
317,
321,
323,
325,
329,
331,
333,
335,
337,
339,
341,
343,
345,
347,
349,
351,
353,
355,
357,
361,
363,
365,
367,
369,
371,
373,
375,
377,
379,
381,
383,
385,
387,
389,
391,
393,
395,
397,
399,
401,
403,
405,
407,
409,
411,
413,
415,
417,
419,
421,
423,
425,
427,
429,
431,
433
],
"still_open_roots_sample": [
27,
31,
47,
63,
71,
91,
103,
111,
159,
167,
223,
239,
251,
283,
319,
327,
359,
447,
479,
495,
511,
559,
603,
639,
667,
671,
703,
743,
751,
763,
767,
795,
859,
871,
895,
927,
959,
991,
1007,
1023,
1051,
1055,
1115,
1127,
1179,
1183,
1255,
1263,
1279,
1307,
1343,
1383,
1407,
1439,
1471,
1503,
1519,
1535,
1583,
1639,
1663,
1691,
1695,
1767,
1791,
1819,
1883,
1895,
1919,
1951,
1959,
2043,
2047,
2111,
2139,
2151,
2159,
2175,
2207,
2215,
2287,
2367,
2375,
2407,
2463,
2495,
2527,
2543,
2559,
2651,
2671,
2687,
2715,
2751,
2791,
2811,
2843,
2879,
2887,
2919,
2943,
3007,
3055,
3071,
3099,
3103,
3175,
3183,
3199,
3227,
3231,
3263,
3311,
3323,
3327,
3355,
3375,
3391,
3399,
3431,
3487,
3519,
3567,
3583,
3615,
3631,
3711,
3739,
3775,
3815,
3823,
3839,
3867,
3931,
3943,
3999,
4095,
4127,
4167,
4207,
4255,
4263,
4319,
4335,
4347,
4351,
4379,
4399,
4415,
4423,
4511,
4575,
4591,
4607,
4635,
4699,
4719,
4735,
4763,
4767,
4775,
4799,
4839,
4847,
4863,
4891,
4935,
4967,
4991,
5055,
5119,
5147,
5151,
5211,
5223,
5247,
5279,
5287,
5343,
5351,
5359,
5375,
5403,
5423,
5447,
5479,
5503,
5535,
5567,
5659,
5663,
5679,
5735,
5759,
5791,
5823,
5863,
5887,
5915,
5991
]
},
"generated_at": "2026-03-10T07:09:58.427120Z",
"sha256": {
"inputs": {
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json": "efd03bab49da30cb4be9cedc53e0e7fe2cb92e0e87c3e0fd1aa3514a17427fa3",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json": "09629196bfbf1fd5576df72a7a34729b0d19be3febaa64d8a3817438d95e9d35",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json": "07dc98763cc42491c937305fd7d153959c7f54f2e5cfee3a4deebe97744bae7c",
"docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json": "16662d98a05c93a177823c3e44f84b50dff300d53152f9d525ff781e2aa89ac2",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json": "8b437c0a8215f942e0aaf47c387e7e52842ff87886fb7c6a04e9dd7776f738f5",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k9_u15.json": "4086ecee3718de33d1580db99d9f3d68677afe7ba7d6d46739b3c85c9fb77fe0",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k6_u10.json": "342285a5302ea82db64501b4b456fbde9d4335cf114243fa95a955eb5e4f46c6",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k7_u12.json": "d7f5e9e53e09da79bf244a0d9ec30dce2b2c0f21342c765ee5cf68b9300044c9",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k8_u13.json": "954a62a86c3d70f83f224541118d6a4ecf21a194e052650801973aff4a026ad8",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k9_u15.json": "80047d4a01761a80f071d48a0bfd0337826b090af1bca3467d73d918c5de64d6",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k10_u16.json": "386a2aeed2017724682775f0b12567520a603a315682829963fd5ea571f4e31c",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k6_u10.json": "608b13150f7abcdfff3453be52e84db491a958408c3019e512ecf90c081d8328",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k7_u12.json": "78ab06661923d8489810167fb249d0cb87993b8d5fe65fdd56f1f17e73dc8a5d",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k8_u13.json": "4d71267c627e630570c4b226c32bad9e30525da7d160045e2360ee4a2f36199d",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k9_u15.json": "a0f80ac79111ebad80888649d10f51cedb7f6f76c681ba98095fcbb6e6a57bfd",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k10_u16.json": "dcf0de1d69b492f8ea072e1c6045acddf4bd3a6e43e93a1f5313757ac7d430d2",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k6_u10.json": "ae047b4b91858df1ab5ade8d6f619340528fa536a163e42f5d10a92e1ea7176a",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k7_u12.json": "33a4236e7438a8f7f73165083f9d14a21dac0e6c64ac252072d3ff5d053dd5a4",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k8_u13.json": "30f7cf398782508933f0a7ed0be842ce087fc2ee0297f0cf0e1f759d8a0d832e",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k9_u15.json": "c309d9173847b8073a37cf3d62f35b380a7d22cfad4a1aa0d2074f3ae20258e9",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k10_u16.json": "933210e286995000b98b2575847185fc93f9c042ffbebe38a6178053a202cd80",
"docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k11_u18.json": "f6176d0a032c473e638da83c7fcd756aa14cd4e65950fd18e59085016717e268",
"docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p15/clauses_D_minor_derived_from_brothers_over_Sm_mod2p15.json": "3175e951681f1f05ce9bf91423025f7cef003e8e272ca1515253d59e920477d0",
"docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p16/clauses_D_minor_derived_from_brothers_over_Sm_mod2p16.json": "e0944088881af42e7b2569c60702a9162e201e0d9a22dfd9b976cd7c12984bbd",
"docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p17/clauses_D_minor_derived_from_brothers_over_Sm_mod2p17.json": "78a0a9e4afb64333b078e0f88eb4cbb0f6df6516de47c68d936af731cffcdafb",
"docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p18/clauses_D_minor_derived_from_brothers_over_Sm_mod2p18.json": "799d79c423e06d28eac44fc318854c86fd70a924a43bbdb0c61ef56dfd71bfae"
},
"outputs": {
"docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/refinement_certificate_Sm_multilevel_mod2p15_to2p18.json": "1f8e76c003a7a87217740e14216382c5caa54de732146848ccb04cf055202c3e"
}
}
}

View File

@ -0,0 +1,8 @@
**Auteur** : Équipe 4NK
# Audit — raffinement multi-niveaux sur S_M (2^15→2^18)
- closed_roots : 15283
- open_roots : 1101
- closed_ratio : 0.93280029296875

View File

@ -0,0 +1,99 @@
**Auteur** : Équipe 4NK
# Diagnostic — échec targeted leaves — racine 2^15
- tracked_roots_file : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt`
- k_max : 256
- t_max : 256
- search_max_required_m : 256
Table (par racine) :
| root | child_low | child_high | immediate_low@16 | immediate_high@16 | lb_root | lb_low | lb_high |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | no | no | 60 | 60 | 26 |
| 31 | 31 | 32799 | no | no | 57 | 57 | 25 |
| 47 | 47 | 32815 | no | no | 56 | 56 | 42 |
| 63 | 63 | 32831 | no | no | 55 | 55 | 25 |
| 71 | 71 | 32839 | no | no | 52 | 52 | 22 |
| 251 | 251 | 33019 | no | no | 80 | 30 | 80 |
| 703 | 703 | 33471 | no | no | 84 | 84 | 61 |
| 1055 | 1055 | 33823 | no | no | 83 | 83 | 28 |
| 1183 | 1183 | 33951 | no | no | 55 | 17 | 55 |
| 1279 | 1279 | 34047 | no | no | 70 | 25 | 70 |
| 1407 | 1407 | 34175 | no | no | 85 | 85 | 23 |
| 1471 | 1471 | 34239 | no | no | 80 | 32 | 80 |
| 1535 | 1535 | 34303 | no | no | 56 | 20 | 56 |
| 1583 | 1583 | 34351 | no | no | 82 | 82 | 38 |
| 1819 | 1819 | 34587 | no | no | 62 | 62 | 23 |
| 2047 | 2047 | 34815 | no | no | 59 | 59 | 20 |
| 2111 | 2111 | 34879 | no | no | 84 | 84 | 36 |
| 2151 | 2151 | 34919 | no | no | 52 | 42 | 52 |
| 2287 | 2287 | 35055 | no | no | 54 | 54 | 22 |
| 2527 | 2527 | 35295 | no | no | 66 | 28 | 66 |
| 2887 | 2887 | 35655 | no | no | 136 | 17 | 136 |
| 3071 | 3071 | 35839 | no | no | 50 | 50 | 20 |
| 3199 | 3199 | 35967 | no | no | 66 | 18 | 66 |
| 3263 | 3263 | 36031 | no | no | 56 | 20 | 56 |
| 3399 | 3399 | 36167 | no | no | 49 | 49 | 22 |
| 4095 | 4095 | 36863 | no | no | 52 | 52 | 39 |
| 4255 | 4255 | 37023 | no | no | 71 | 71 | 18 |
| 4263 | 4263 | 37031 | no | no | 55 | 55 | 32 |
| 4379 | 4379 | 37147 | no | no | 77 | 17 | 77 |
| 4591 | 4591 | 37359 | no | no | 66 | 66 | 21 |
| 4607 | 4607 | 37375 | no | no | 49 | 49 | 21 |
| 4735 | 4735 | 37503 | no | no | 128 | 18 | 128 |
| 5119 | 5119 | 37887 | no | no | 52 | 39 | 52 |
| 5535 | 5535 | 38303 | no | no | 67 | 28 | 67 |
| 5823 | 5823 | 38591 | no | no | 53 | 24 | 53 |
| 6143 | 6143 | 38911 | no | no | 51 | 51 | 20 |
| 6171 | 6171 | 38939 | no | no | 56 | 56 | 25 |
| 6303 | 6303 | 39071 | no | no | 59 | 29 | 59 |
| 6383 | 6383 | 39151 | no | no | 70 | 70 | 22 |
| 6471 | 6471 | 39239 | no | no | 51 | 51 | 33 |
| 6887 | 6887 | 39655 | no | no | 58 | 58 | 25 |
| 6939 | 6939 | 39707 | no | no | 63 | 29 | 63 |
| 7039 | 7039 | 39807 | no | no | 63 | 18 | 63 |
| 7167 | 7167 | 39935 | no | no | 65 | 34 | 65 |
| 7279 | 7279 | 40047 | no | no | 58 | 58 | 20 |
| 7423 | 7423 | 40191 | no | no | 54 | 39 | 54 |
| 7451 | 7451 | 40219 | no | no | 60 | 17 | 60 |
| 7527 | 7527 | 40295 | no | no | 75 | 75 | 39 |
| 7935 | 7935 | 40703 | no | no | 71 | 43 | 71 |
| 7963 | 7963 | 40731 | no | no | 76 | 76 | 25 |
| 8191 | 8191 | 40959 | no | no | 52 | 45 | 52 |
| 8223 | 8223 | 40991 | no | no | 53 | 29 | 53 |
| 8351 | 8351 | 41119 | no | no | 66 | 36 | 66 |
| 8359 | 8359 | 41127 | no | no | 51 | 51 | 23 |
| 8639 | 8639 | 41407 | no | no | 56 | 35 | 56 |
| 8959 | 8959 | 41727 | no | no | 73 | 73 | 23 |
| 9023 | 9023 | 41791 | no | no | 74 | 18 | 74 |
| 9183 | 9183 | 41951 | no | no | 55 | 55 | 38 |
| 9215 | 9215 | 41983 | no | no | 50 | 50 | 20 |
| 9663 | 9663 | 42431 | no | no | 55 | 55 | 45 |
| 9695 | 9695 | 42463 | no | no | 72 | 24 | 72 |
| 9831 | 9831 | 42599 | no | no | 52 | 18 | 52 |
| 9855 | 9855 | 42623 | no | no | 49 | 29 | 49 |
| 10011 | 10011 | 42779 | no | no | 56 | 56 | 33 |
| 10087 | 10087 | 42855 | no | no | 102 | 102 | 22 |
| 10239 | 10239 | 43007 | no | no | 71 | 35 | 71 |
| 10331 | 10331 | 43099 | no | no | 52 | 52 | 24 |
| 10351 | 10351 | 43119 | no | no | 51 | 30 | 51 |
| 10407 | 10407 | 43175 | no | no | 70 | 29 | 70 |
| 10719 | 10719 | 43487 | no | no | 49 | 23 | 49 |
| 10919 | 10919 | 43687 | no | no | 57 | 57 | 20 |
| 11263 | 11263 | 44031 | no | no | 53 | 53 | 25 |
| 11291 | 11291 | 44059 | no | no | 74 | 74 | 18 |
| 11391 | 11391 | 44159 | no | no | 50 | 50 | 38 |
| 11623 | 11623 | 44391 | no | no | 49 | 49 | 21 |
| 11903 | 11903 | 44671 | no | no | 60 | 42 | 60 |
| 11931 | 11931 | 44699 | no | no | 49 | 49 | 19 |
| 12015 | 12015 | 44783 | no | no | 60 | 23 | 60 |
| 12135 | 12135 | 44903 | no | no | 57 | 40 | 57 |
| 12287 | 12287 | 45055 | no | no | 114 | 44 | 114 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/diagnostic_targeted_leaves_failure_mod2p15.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/diagnostic_targeted_leaves_failure_mod2p15.md`

View File

@ -0,0 +1,522 @@
**Auteur** : Équipe 4NK
# Profil dobstruction — racines ouvertes sur S_15 (raffinement jusquà 2^18)
## Domaine
- racine : 2^15
- max : 2^18
- open_roots : 1101
## Recherche (borne inférieure de profondeur)
- k_max : 256
- t_max : 256
- max_required_m (pruning) : 256
### Buckets — lower_bound_required_m_to_close_root
Buckets (any):
- required_m=19 : 47
- required_m=20 : 50
- required_m=21 : 49
- required_m=22 : 63
- required_m=23 : 42
- required_m=24 : 42
- required_m=25 : 56
- required_m=26 : 39
- required_m=27 : 32
- required_m=28 : 52
- required_m=29 : 44
- required_m=30 : 36
- required_m=31 : 29
- required_m=32 : 18
- required_m=33 : 35
- required_m=34 : 25
- required_m=35 : 18
- required_m=36 : 31
- required_m=37 : 27
- required_m=38 : 23
- required_m=39 : 11
- required_m=40 : 8
- required_m=41 : 17
- required_m=42 : 14
- required_m=43 : 12
- required_m=44 : 14
- required_m=45 : 20
- required_m=46 : 14
- required_m=47 : 17
- required_m=48 : 16
- required_m=49 : 10
- required_m=50 : 6
- required_m=51 : 9
- required_m=52 : 10
- required_m=53 : 9
- required_m=54 : 9
- required_m=55 : 9
- required_m=56 : 10
- required_m=57 : 5
- required_m=58 : 6
- required_m=59 : 6
- required_m=60 : 7
- required_m=61 : 6
- required_m=62 : 3
- required_m=63 : 5
- required_m=64 : 4
- required_m=65 : 4
- required_m=66 : 8
- required_m=67 : 4
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 6
- required_m=71 : 8
- required_m=72 : 8
- required_m=73 : 7
- required_m=74 : 2
- required_m=75 : 2
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 2
- required_m=80 : 2
- required_m=82 : 1
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=90 : 1
- required_m=102 : 1
- required_m=114 : 1
- required_m=118 : 1
- required_m=121 : 1
- required_m=127 : 1
- required_m=128 : 2
- required_m=130 : 1
- required_m=136 : 1
Buckets (D only):
- required_m=19 : 47
- required_m=20 : 27
- required_m=21 : 41
- required_m=22 : 63
- required_m=23 : 37
- required_m=24 : 39
- required_m=25 : 58
- required_m=26 : 34
- required_m=27 : 35
- required_m=28 : 55
- required_m=29 : 24
- required_m=30 : 37
- required_m=31 : 17
- required_m=32 : 25
- required_m=33 : 44
- required_m=34 : 25
- required_m=35 : 23
- required_m=36 : 36
- required_m=37 : 24
- required_m=38 : 28
- required_m=39 : 10
- required_m=40 : 9
- required_m=41 : 20
- required_m=42 : 11
- required_m=43 : 13
- required_m=44 : 20
- required_m=45 : 17
- required_m=46 : 17
- required_m=47 : 25
- required_m=48 : 15
- required_m=49 : 11
- required_m=50 : 5
- required_m=51 : 13
- required_m=52 : 15
- required_m=53 : 6
- required_m=54 : 11
- required_m=55 : 14
- required_m=56 : 4
- required_m=57 : 6
- required_m=58 : 4
- required_m=59 : 7
- required_m=60 : 10
- required_m=61 : 5
- required_m=62 : 3
- required_m=63 : 9
- required_m=64 : 2
- required_m=65 : 7
- required_m=66 : 8
- required_m=67 : 6
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 7
- required_m=71 : 8
- required_m=72 : 6
- required_m=73 : 8
- required_m=74 : 5
- required_m=75 : 3
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 3
- required_m=80 : 2
- required_m=81 : 1
- required_m=82 : 2
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=87 : 1
- required_m=90 : 1
- required_m=95 : 1
- required_m=109 : 1
- required_m=114 : 1
- required_m=121 : 1
- required_m=124 : 1
- required_m=127 : 1
- required_m=128 : 2
- required_m=130 : 1
- required_m=136 : 1
Buckets (F only):
- required_m=19 : 47
- required_m=20 : 42
- required_m=21 : 53
- required_m=22 : 52
- required_m=23 : 50
- required_m=24 : 43
- required_m=25 : 42
- required_m=26 : 42
- required_m=27 : 38
- required_m=28 : 43
- required_m=29 : 48
- required_m=30 : 41
- required_m=31 : 35
- required_m=32 : 19
- required_m=33 : 27
- required_m=34 : 31
- required_m=35 : 18
- required_m=36 : 26
- required_m=37 : 31
- required_m=38 : 25
- required_m=39 : 13
- required_m=40 : 9
- required_m=41 : 12
- required_m=42 : 19
- required_m=43 : 12
- required_m=44 : 11
- required_m=45 : 23
- required_m=46 : 16
- required_m=47 : 13
- required_m=48 : 19
- required_m=49 : 10
- required_m=50 : 6
- required_m=51 : 10
- required_m=52 : 8
- required_m=53 : 10
- required_m=54 : 9
- required_m=55 : 5
- required_m=56 : 13
- required_m=57 : 5
- required_m=58 : 8
- required_m=59 : 6
- required_m=60 : 6
- required_m=61 : 7
- required_m=62 : 3
- required_m=63 : 5
- required_m=64 : 4
- required_m=65 : 4
- required_m=66 : 8
- required_m=67 : 4
- required_m=68 : 5
- required_m=69 : 5
- required_m=70 : 6
- required_m=71 : 7
- required_m=72 : 9
- required_m=73 : 7
- required_m=74 : 2
- required_m=75 : 2
- required_m=76 : 3
- required_m=77 : 1
- required_m=78 : 1
- required_m=79 : 1
- required_m=80 : 3
- required_m=82 : 1
- required_m=83 : 2
- required_m=84 : 3
- required_m=85 : 2
- required_m=90 : 1
- required_m=102 : 1
- required_m=114 : 1
- required_m=118 : 1
- required_m=121 : 1
- required_m=127 : 1
- required_m=128 : 1
- required_m=129 : 1
- required_m=130 : 1
- required_m=136 : 1
## Motifs dominants (<=32)
- both_children_no_contracting_D_up_to32 : 8
- both_children_F_blocked_by_deltaF_up_to32 : 7
- both_children_no_contracting_F_up_to32 : 7
## Histogrammes (<=32, agrégés sur les deux enfants)
### first_k_contracting_D_up_to32
- k=10 : 346
- k=11 : 203
- k=12 : 152
- k=13 : 223
- k=14 : 116
- k=15 : 175
- k=16 : 88
- k=17 : 121
- k=18 : 65
- k=19 : 53
- k=20 : 81
- k=21 : 51
- k=22 : 67
- k=23 : 37
- k=24 : 21
- k=25 : 44
- k=26 : 24
- k=27 : 48
- k=28 : 26
- k=29 : 32
- k=30 : 18
- k=31 : 14
- k=32 : 20
### first_k_contracting_D_up_to32 (low child)
- k=10 : 174
- k=11 : 99
- k=12 : 78
- k=13 : 106
- k=14 : 57
- k=15 : 89
- k=16 : 45
- k=17 : 66
- k=18 : 33
- k=19 : 30
- k=20 : 32
- k=21 : 23
- k=22 : 30
- k=23 : 19
- k=24 : 13
- k=25 : 19
- k=26 : 15
- k=27 : 25
- k=28 : 12
- k=29 : 14
- k=30 : 13
- k=31 : 8
- k=32 : 13
### first_k_contracting_D_up_to32 (high child)
- k=10 : 172
- k=11 : 104
- k=12 : 74
- k=13 : 117
- k=14 : 59
- k=15 : 86
- k=16 : 43
- k=17 : 55
- k=18 : 32
- k=19 : 23
- k=20 : 49
- k=21 : 28
- k=22 : 37
- k=23 : 18
- k=24 : 8
- k=25 : 25
- k=26 : 9
- k=27 : 23
- k=28 : 14
- k=29 : 18
- k=30 : 5
- k=31 : 6
- k=32 : 7
### first_t_contracting_F_up_to32
- t=10 : 260
- t=11 : 366
- t=12 : 199
- t=13 : 119
- t=14 : 185
- t=15 : 108
- t=16 : 144
- t=17 : 73
- t=18 : 110
- t=19 : 57
- t=20 : 40
- t=21 : 68
- t=22 : 40
- t=23 : 56
- t=24 : 27
- t=25 : 22
- t=26 : 36
- t=27 : 30
- t=28 : 30
- t=29 : 16
- t=30 : 30
- t=31 : 12
- t=32 : 12
### first_t_y_mod3_nonzero_up_to32
- t=1 : 2202
### y_mod3_zero_count_up_to32
- count=0 : 2202
### y_mod3_zero_count_up_to32 (low child)
- count=0 : 1101
### y_mod3_zero_count_up_to32 (high child)
- count=0 : 1101
## Corrélations (borne inférieure)
### lb_D - lb_F
- diff=-8 : 2
- diff=-7 : 2
- diff=-6 : 5
- diff=-5 : 3
- diff=-4 : 6
- diff=-3 : 17
- diff=-2 : 13
- diff=-1 : 39
- diff=0 : 827
- diff=1 : 9
- diff=2 : 21
- diff=3 : 30
- diff=4 : 14
- diff=5 : 17
- diff=6 : 9
- diff=7 : 20
- diff=8 : 10
- diff=9 : 7
- diff=10 : 5
- diff=11 : 4
- diff=12 : 7
- diff=13 : 2
- diff=14 : 2
- diff=15 : 3
- diff=16 : 2
- diff=17 : 4
- diff=18 : 2
- diff=19 : 1
- diff=20 : 1
- diff=21 : 2
- diff=22 : 2
- diff=24 : 1
- diff=25 : 1
- diff=26 : 2
- diff=28 : 1
- diff=30 : 2
- diff=31 : 2
- diff=38 : 1
- diff=40 : 1
- diff=42 : 1
- diff=44 : 1
### lb_any - lb_D
- diff=-44 : 1
- diff=-42 : 1
- diff=-40 : 1
- diff=-38 : 1
- diff=-31 : 2
- diff=-30 : 2
- diff=-28 : 1
- diff=-26 : 3
- diff=-25 : 1
- diff=-23 : 1
- diff=-22 : 2
- diff=-21 : 1
- diff=-20 : 1
- diff=-19 : 1
- diff=-18 : 2
- diff=-17 : 4
- diff=-16 : 2
- diff=-15 : 3
- diff=-14 : 2
- diff=-13 : 3
- diff=-12 : 7
- diff=-11 : 4
- diff=-10 : 5
- diff=-9 : 7
- diff=-8 : 9
- diff=-7 : 21
- diff=-6 : 10
- diff=-5 : 17
- diff=-4 : 15
- diff=-3 : 30
- diff=-2 : 20
- diff=-1 : 8
- diff=0 : 913
### lb_any - lb_F
- diff=-8 : 2
- diff=-7 : 2
- diff=-6 : 5
- diff=-5 : 3
- diff=-4 : 6
- diff=-3 : 19
- diff=-2 : 20
- diff=-1 : 42
- diff=0 : 1002
## Quantiles (borne inférieure)
| metric | p50 | p75 | p90 | p95 | p99 | max |
| --- | --- | --- | --- | --- | --- | --- |
| lb_any | 30 | 44 | 60 | 70 | 85 | 136 |
| lb_D | 33 | 46 | 63 | 71 | 87 | 136 |
| lb_F | 31 | 44 | 60 | 70 | 85 | 136 |
## Exemples (premières lignes)
| r | child0 | child1 | lb_any | lb_D | lb_F |
| --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | 60 | 60 | 60 |
| 31 | 31 | 32799 | 57 | 57 | 57 |
| 47 | 47 | 32815 | 56 | 56 | 56 |
| 63 | 63 | 32831 | 55 | 55 | 58 |
| 71 | 71 | 32839 | 52 | 52 | 55 |
| 91 | 91 | 32859 | 46 | 46 | 46 |
| 103 | 103 | 32871 | 43 | 43 | 43 |
| 111 | 111 | 32879 | 32 | 32 | 32 |
| 159 | 159 | 32927 | 24 | 24 | 24 |
| 167 | 167 | 32935 | 31 | 31 | 31 |
| 223 | 223 | 32991 | 33 | 33 | 33 |
| 239 | 239 | 33007 | 22 | 22 | 22 |
| 251 | 251 | 33019 | 80 | 80 | 80 |
| 283 | 283 | 33051 | 41 | 41 | 42 |
| 319 | 319 | 33087 | 24 | 24 | 24 |
| 327 | 327 | 33095 | 25 | 25 | 25 |
| 359 | 359 | 33127 | 20 | 23 | 21 |
| 447 | 447 | 33215 | 42 | 42 | 42 |
| 479 | 479 | 33247 | 22 | 22 | 22 |
| 495 | 495 | 33263 | 29 | 29 | 29 |
| 511 | 511 | 33279 | 38 | 38 | 38 |
| 559 | 559 | 33327 | 31 | 34 | 31 |
| 603 | 603 | 33371 | 26 | 38 | 26 |
| 639 | 639 | 33407 | 34 | 34 | 34 |
| 667 | 667 | 33435 | 30 | 30 | 30 |
| 671 | 671 | 33439 | 24 | 41 | 24 |
| 703 | 703 | 33471 | 84 | 84 | 84 |
| 743 | 743 | 33511 | 25 | 25 | 28 |
| 751 | 751 | 33519 | 47 | 47 | 47 |
| 763 | 763 | 33531 | 23 | 23 | 23 |
| 767 | 767 | 33535 | 21 | 21 | 21 |
| 795 | 795 | 33563 | 28 | 28 | 28 |
| 859 | 859 | 33627 | 24 | 24 | 24 |
| 871 | 871 | 33639 | 48 | 48 | 48 |
| 895 | 895 | 33663 | 25 | 25 | 25 |
| 927 | 927 | 33695 | 38 | 38 | 38 |
| 959 | 959 | 33727 | 24 | 24 | 24 |
| 991 | 991 | 33759 | 27 | 27 | 27 |
| 1007 | 1007 | 33775 | 22 | 22 | 22 |
| 1023 | 1023 | 33791 | 36 | 36 | 36 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/open_roots_obstruction_profile_mod2p15_to2p18.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/open_roots_obstruction_profile_mod2p15_to2p18.md`

View File

@ -0,0 +1,156 @@
**Auteur** : Équipe 4NK
# Certificat de raffinement multi-niveaux sur S_M — racine 2^15 vers 2^18
## Domaine
- racine : 2^15
- profondeur max : 2^18
- |S_15| (impairs) : 16384
## Entrées (feuilles terminales)
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p15/clauses_terminal_over_Sm_mod2p15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p16/clauses_terminal_over_Sm_mod2p16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p17/clauses_terminal_over_Sm_mod2p17.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/terminal_clauses_over_Sm/palier2p18/clauses_terminal_over_Sm_mod2p18.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p16/clauses_D_minor_over_Sm_mod2p16_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p17/clauses_D_minor_over_Sm_mod2p17_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k6_u10.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k7_u12.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k8_u13.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k9_u15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k10_u16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p18/clauses_D_minor_over_Sm_mod2p18_k11_u18.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p15/clauses_D_minor_derived_from_brothers_over_Sm_mod2p15.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p16/clauses_D_minor_derived_from_brothers_over_Sm_mod2p16.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p17/clauses_D_minor_derived_from_brothers_over_Sm_mod2p17.json`
- `/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p18/clauses_D_minor_derived_from_brothers_over_Sm_mod2p18.json`
## Fermeture (sur S_M)
- closed_roots : 15283
- open_roots : 1101
- closed_ratio : 0.93280029296875
## Timeline (première profondeur de fermeture)
| cible | newly_closed | closed | open | closed_ratio |
| --- | --- | --- | --- | --- |
| 15 | 15283 | 15283 | 1101 | 0.932800 |
| 16 | 0 | 15283 | 1101 | 0.932800 |
| 17 | 0 | 15283 | 1101 | 0.932800 |
| 18 | 0 | 15283 | 1101 | 0.932800 |
## Audit du résidu (comptes, q_m, parents à un enfant)
| m | open_count | q_m | parents_one_child |
| --- | --- | --- | --- |
| 15 | 1101 | 0.842870118074 | 346 |
| 16 | 1856 | 0.918372844828 | 303 |
| 17 | 3409 | 0.930184804928 | 476 |
| 18 | 6342 | | |
### Racines encore ouvertes (extrait)
- r=27
- r=31
- r=47
- r=63
- r=71
- r=91
- r=103
- r=111
- r=159
- r=167
- r=223
- r=239
- r=251
- r=283
- r=319
- r=327
- r=359
- r=447
- r=479
- r=495
- r=511
- r=559
- r=603
- r=639
- r=667
- r=671
- r=703
- r=743
- r=751
- r=763
- r=767
- r=795
- r=859
- r=871
- r=895
- r=927
- r=959
- r=991
- r=1007
- r=1023
- ... (1061 more)
### Racines fermées (extrait)
- r=1
- r=3
- r=5
- r=7
- r=9
- r=11
- r=13
- r=15
- r=17
- r=19
- r=21
- r=23
- r=25
- r=29
- r=33
- r=35
- r=37
- r=39
- r=41
- r=43
- r=45
- r=49
- r=51
- r=53
- r=55
- r=57
- r=59
- r=61
- r=65
- r=67
- r=69
- r=73
- r=75
- r=77
- r=79
- r=81
- r=83
- r=85
- r=87
- r=89
- ... (15243 more)
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/refinement_certificate_Sm_multilevel_mod2p15_to2p18.json`
- Audit JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/bundle_mod2p15_to2p18_with_brother_dminor/audit_refinement_certificate_Sm_multilevel_mod2p15_to2p18.json`

View File

@ -0,0 +1,24 @@
{
"domain": {
"palier": 15
},
"inputs": {
"tracked_roots_file": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt"
},
"params": {
"k_chain_max": 80,
"k_leaf_max": 256,
"t_leaf_max": 256
},
"counts": {
"tracked_roots": 200,
"closed_roots": 0,
"failed_roots": 200
},
"clauses": [],
"sha256": {
"inputs": {
"/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt": "d144fe38af97b217cebf444ebaa88fec25525ddab03d89404d62cb971e6bec29"
}
}
}

View File

@ -0,0 +1,217 @@
**Auteur** : Équipe 4NK
# Feuilles “chaîne de Hensel” — racine 2^15
- tracked_roots_file : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt`
- k_chain_max : 80
- k_leaf_max : 256
- t_leaf_max : 256
| root | k | u_min(k) | v2(L_k(root)) | closed | cert |
| --- | --- | --- | --- | --- | --- |
| 27 | 37 | 59 | 59 | no | |
| 31 | 35 | 56 | 56 | no | |
| 47 | 34 | 54 | 55 | no | |
| 63 | 34 | 54 | 54 | no | |
| 71 | 32 | 51 | 51 | no | |
| 251 | 17 | 27 | 29 | no | |
| 703 | 51 | 81 | 83 | no | |
| 1055 | 50 | 80 | 82 | no | |
| 1183 | 10 | 16 | 16 | no | |
| 1279 | 14 | 23 | 24 | no | |
| 1407 | 51 | 81 | 84 | no | |
| 1471 | 19 | 31 | 31 | no | |
| 1535 | 10 | 16 | 19 | no | |
| 1583 | 49 | 78 | 81 | no | |
| 1819 | 38 | 61 | 61 | no | |
| 2047 | 36 | 58 | 58 | no | |
| 2111 | 50 | 80 | 83 | no | |
| 2151 | 27 | 43 | 43 | no | |
| 2287 | 31 | 50 | 53 | no | |
| 2527 | 16 | 26 | 27 | no | |
| 2887 | 10 | 16 | 16 | no | |
| 3071 | 34 | 54 | 54 | no | |
| 3199 | 12 | 20 | 21 | no | |
| 3263 | 11 | 18 | 19 | no | |
| 3399 | 30 | 48 | 48 | no | |
| 4095 | 32 | 51 | 51 | no | |
| 4255 | 44 | 70 | 70 | no | |
| 4263 | 34 | 54 | 54 | no | |
| 4379 | 10 | 16 | 16 | no | |
| 4591 | 41 | 65 | 65 | no | |
| 4607 | 30 | 48 | 48 | no | |
| 4735 | 13 | 21 | 21 | no | |
| 5119 | 25 | 40 | 41 | no | |
| 5535 | 17 | 27 | 27 | no | |
| 5823 | 10 | 16 | 23 | no | |
| 6143 | 31 | 50 | 50 | no | |
| 6171 | 36 | 58 | 58 | no | |
| 6303 | 15 | 24 | 28 | no | |
| 6383 | 43 | 69 | 69 | no | |
| 6471 | 31 | 50 | 50 | no | |
| 6887 | 40 | 64 | 64 | no | |
| 6939 | 15 | 24 | 28 | no | |
| 7039 | 15 | 24 | 25 | no | |
| 7167 | 22 | 35 | 35 | no | |
| 7279 | 48 | 77 | 79 | no | |
| 7423 | 23 | 37 | 38 | no | |
| 7451 | 10 | 16 | 16 | no | |
| 7527 | 46 | 73 | 74 | no | |
| 7935 | 25 | 40 | 42 | no | |
| 7963 | 45 | 72 | 75 | no | |
| 8191 | 27 | 43 | 44 | no | |
| 8223 | 16 | 26 | 28 | no | |
| 8351 | 21 | 34 | 35 | no | |
| 8359 | 30 | 48 | 50 | no | |
| 8639 | 21 | 34 | 34 | no | |
| 8959 | 43 | 69 | 72 | no | |
| 9023 | 12 | 20 | 21 | no | |
| 9183 | 34 | 54 | 54 | no | |
| 9215 | 30 | 48 | 49 | no | |
| 9663 | 34 | 54 | 54 | no | |
| 9695 | 13 | 21 | 23 | no | |
| 9831 | 26 | 42 | 44 | no | |
| 9855 | 20 | 32 | 33 | no | |
| 10011 | 32 | 51 | 55 | no | |
| 10087 | 66 | 105 | 108 | no | |
| 10239 | 21 | 34 | 34 | no | |
| 10331 | 32 | 51 | 51 | no | |
| 10351 | 18 | 29 | 29 | no | |
| 10407 | 24 | 39 | 41 | no | |
| 10719 | 13 | 21 | 22 | no | |
| 10919 | 35 | 56 | 56 | no | |
| 11263 | 30 | 48 | 52 | no | |
| 11291 | 45 | 72 | 73 | no | |
| 11391 | 28 | 45 | 49 | no | |
| 11623 | 30 | 48 | 48 | no | |
| 11903 | 24 | 39 | 41 | no | |
| 11931 | 30 | 48 | 48 | no | |
| 12015 | 18 | 29 | 34 | no | |
| 12135 | 24 | 39 | 39 | no | |
| 12287 | 26 | 42 | 43 | no | |
| 12359 | 14 | 23 | 26 | no | |
| 12399 | 47 | 75 | 75 | no | |
| 12479 | 11 | 18 | 19 | no | |
| 12539 | 29 | 46 | 49 | no | |
| 12703 | 43 | 69 | 70 | no | |
| 12927 | 17 | 27 | 30 | no | |
| 13439 | 42 | 67 | 71 | no | |
| 13551 | 42 | 67 | 67 | no | |
| 13759 | 32 | 51 | 53 | no | |
| 13823 | 29 | 46 | 48 | no | |
| 14247 | 15 | 24 | 24 | no | |
| 14495 | 33 | 53 | 53 | no | |
| 14559 | 36 | 58 | 58 | no | |
| 15003 | 15 | 24 | 24 | no | |
| 15039 | 52 | 83 | 83 | no | |
| 15099 | 15 | 24 | 26 | no | |
| 15131 | 49 | 78 | 78 | no | |
| 15519 | 32 | 51 | 53 | no | |
| 16379 | 34 | 54 | 55 | no | |
| 16495 | 20 | 32 | 32 | no | |
| 16551 | 38 | 61 | 62 | no | |
| 16895 | 29 | 46 | 51 | no | |
| 17023 | 46 | 73 | 73 | no | |
| 17151 | 38 | 61 | 61 | no | |
| 17179 | 36 | 58 | 58 | no | |
| 17439 | 21 | 34 | 34 | no | |
| 17647 | 46 | 73 | 74 | no | |
| 17659 | 10 | 16 | 16 | no | |
| 17691 | 39 | 62 | 64 | no | |
| 18047 | 15 | 24 | 26 | no | |
| 18159 | 10 | 16 | 16 | no | |
| 18203 | 23 | 37 | 38 | no | |
| 18303 | 12 | 20 | 20 | no | |
| 18427 | 32 | 51 | 52 | no | |
| 18431 | 25 | 40 | 42 | no | |
| 18543 | 35 | 56 | 56 | no | |
| 18591 | 39 | 62 | 64 | no | |
| 18943 | 31 | 50 | 50 | no | |
| 19055 | 42 | 67 | 69 | no | |
| 19271 | 11 | 18 | 23 | no | |
| 19327 | 34 | 54 | 55 | no | |
| 19903 | 37 | 59 | 61 | no | |
| 20095 | 32 | 51 | 52 | no | |
| 20327 | 41 | 65 | 66 | no | |
| 20479 | 21 | 34 | 35 | no | |
| 20731 | 30 | 48 | 49 | no | |
| 20895 | 45 | 72 | 72 | no | |
| 20975 | 21 | 34 | 36 | no | |
| 21083 | 17 | 27 | 33 | no | |
| 21183 | 14 | 23 | 23 | no | |
| 21231 | 44 | 70 | 70 | no | |
| 21351 | 42 | 67 | 67 | no | |
| 21503 | 20 | 32 | 33 | no | |
| 21743 | 32 | 51 | 52 | no | |
| 21787 | 30 | 48 | 49 | no | |
| 22559 | 51 | 81 | 82 | no | |
| 23279 | 31 | 50 | 52 | no | |
| 23487 | 13 | 21 | 21 | no | |
| 23719 | 15 | 24 | 30 | no | |
| 24031 | 14 | 23 | 23 | no | |
| 24063 | 16 | 26 | 28 | no | |
| 24091 | 44 | 70 | 71 | no | |
| 24095 | 17 | 27 | 28 | no | |
| 24347 | 14 | 23 | 23 | no | |
| 24575 | 26 | 42 | 44 | no | |
| 24623 | 15 | 24 | 24 | no | |
| 24687 | 18 | 29 | 32 | no | |
| 24799 | 17 | 27 | 27 | no | |
| 24827 | 34 | 54 | 54 | no | |
| 25243 | 37 | 59 | 62 | no | |
| 25407 | 39 | 62 | 62 | no | |
| 25535 | 42 | 67 | 67 | no | |
| 25727 | 37 | 59 | 60 | no | |
| 25839 | 23 | 37 | 37 | no | |
| 26047 | 37 | 59 | 59 | no | |
| 26239 | 26 | 42 | 43 | no | |
| 26471 | 45 | 72 | 73 | no | |
| 26623 | 41 | 65 | 65 | no | |
| 27103 | 42 | 67 | 68 | no | |
| 27135 | 46 | 73 | 73 | no | |
| 27227 | 17 | 27 | 30 | no | |
| 27327 | 33 | 53 | 53 | no | |
| 27367 | 41 | 65 | 66 | no | |
| 27419 | 15 | 24 | 26 | no | |
| 27519 | 30 | 48 | 48 | no | |
| 27647 | 24 | 39 | 41 | no | |
| 27815 | 34 | 54 | 55 | no | |
| 28207 | 14 | 23 | 25 | no | |
| 28287 | 27 | 43 | 45 | no | |
| 28399 | 34 | 54 | 54 | no | |
| 28415 | 30 | 48 | 49 | no | |
| 28583 | 37 | 59 | 59 | no | |
| 28671 | 47 | 75 | 77 | no | |
| 28783 | 44 | 70 | 70 | no | |
| 28911 | 23 | 37 | 37 | no | |
| 28923 | 42 | 67 | 70 | no | |
| 28991 | 33 | 53 | 54 | no | |
| 29311 | 11 | 18 | 23 | no | |
| 29343 | 17 | 27 | 27 | no | |
| 29855 | 36 | 58 | 60 | no | |
| 29919 | 15 | 24 | 24 | no | |
| 29935 | 35 | 56 | 57 | no | |
| 30143 | 31 | 50 | 51 | no | |
| 30463 | 28 | 45 | 50 | no | |
| 30491 | 40 | 64 | 65 | no | |
| 30879 | 36 | 58 | 58 | no | |
| 30971 | 10 | 16 | 16 | no | |
| 31039 | 32 | 51 | 54 | no | |
| 31343 | 44 | 70 | 71 | no | |
| 31463 | 20 | 32 | 35 | no | |
| 31487 | 12 | 20 | 20 | no | |
| 31743 | 29 | 46 | 46 | no | |
| 31847 | 43 | 69 | 69 | no | |
| 31903 | 42 | 67 | 67 | no | |
| 31911 | 37 | 59 | 64 | no | |
| 31995 | 14 | 23 | 25 | no | |
| 32027 | 41 | 65 | 66 | no | |
| 32047 | 12 | 20 | 20 | no | |
| 32539 | 40 | 64 | 67 | no | |
| 32767 | 32 | 51 | 52 | no | |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/hensel_chain_leaves/clauses_hensel_chain_leaves_mod2p15.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/hensel_chain_leaves/clauses_hensel_chain_leaves_mod2p15.md`

View File

@ -0,0 +1,12 @@
{
"domain": {
"palier": 15
},
"counts": {
"total": 0,
"ok": 0,
"errors": 0
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,9 @@
**Auteur** : Équipe 4NK
# Vérification — feuilles “chaîne de Hensel” — 2^15
- total : 0
- ok : 0
- errors : 0
- ok_all : True

View File

@ -0,0 +1,30 @@
{
"domain": {
"palier": 15
},
"inputs": {
"tracked_roots_file": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt",
"obstruction_json": "/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/open_roots_obstruction_profile_mod2p15_to2p18.json",
"dminor_json_paths": [
"/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json"
]
},
"params": {
"target_max_palier_cap": 160,
"k_max": 256,
"t_max": 256
},
"counts": {
"tracked_roots": 200,
"closed_roots": 0,
"failed_roots": 200
},
"clauses": [],
"sha256": {
"inputs": {
"/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt": "d144fe38af97b217cebf444ebaa88fec25525ddab03d89404d62cb971e6bec29",
"/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/open_roots_obstruction_profile_mod2p15_to2p18.json": "c444569a60ee559280b989235e1f6bc2dcf029e5c8ba95c52c264cb5d5c7ec63",
"/home/ncantu/code/algo/docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p15/clauses_D_minor_over_Sm_mod2p15_k8_u13.json": "8b437c0a8215f942e0aaf47c387e7e52842ff87886fb7c6a04e9dd7776f738f5"
}
}
}

View File

@ -0,0 +1,217 @@
**Auteur** : Équipe 4NK
# Feuilles ciblées (raffinement profond local) — racine 2^15
- tracked_roots_file : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt`
- target_max_palier_cap : 160
- k_max : 256
- t_max : 256
| root | lb_any (from obstruction) | target_max | closed | cert |
| --- | --- | --- | --- | --- |
| 27 | 60 | 160 | no | |
| 31 | 57 | 160 | no | |
| 47 | 56 | 160 | no | |
| 63 | 55 | 160 | no | |
| 71 | 52 | 160 | no | |
| 251 | 80 | 160 | no | |
| 703 | 84 | 160 | no | |
| 1055 | 83 | 160 | no | |
| 1183 | 55 | 160 | no | |
| 1279 | 70 | 160 | no | |
| 1407 | 85 | 160 | no | |
| 1471 | 80 | 160 | no | |
| 1535 | 56 | 160 | no | |
| 1583 | 82 | 160 | no | |
| 1819 | 62 | 160 | no | |
| 2047 | 59 | 160 | no | |
| 2111 | 84 | 160 | no | |
| 2151 | 52 | 160 | no | |
| 2287 | 54 | 160 | no | |
| 2527 | 66 | 160 | no | |
| 2887 | 136 | 160 | no | |
| 3071 | 50 | 160 | no | |
| 3199 | 66 | 160 | no | |
| 3263 | 56 | 160 | no | |
| 3399 | 49 | 160 | no | |
| 4095 | 52 | 160 | no | |
| 4255 | 71 | 160 | no | |
| 4263 | 55 | 160 | no | |
| 4379 | 77 | 160 | no | |
| 4591 | 66 | 160 | no | |
| 4607 | 49 | 160 | no | |
| 4735 | 128 | 160 | no | |
| 5119 | 52 | 160 | no | |
| 5535 | 67 | 160 | no | |
| 5823 | 53 | 160 | no | |
| 6143 | 51 | 160 | no | |
| 6171 | 56 | 160 | no | |
| 6303 | 59 | 160 | no | |
| 6383 | 70 | 160 | no | |
| 6471 | 51 | 160 | no | |
| 6887 | 58 | 160 | no | |
| 6939 | 63 | 160 | no | |
| 7039 | 63 | 160 | no | |
| 7167 | 65 | 160 | no | |
| 7279 | 58 | 160 | no | |
| 7423 | 54 | 160 | no | |
| 7451 | 60 | 160 | no | |
| 7527 | 75 | 160 | no | |
| 7935 | 71 | 160 | no | |
| 7963 | 76 | 160 | no | |
| 8191 | 52 | 160 | no | |
| 8223 | 53 | 160 | no | |
| 8351 | 66 | 160 | no | |
| 8359 | 51 | 160 | no | |
| 8639 | 56 | 160 | no | |
| 8959 | 73 | 160 | no | |
| 9023 | 74 | 160 | no | |
| 9183 | 55 | 160 | no | |
| 9215 | 50 | 160 | no | |
| 9663 | 55 | 160 | no | |
| 9695 | 72 | 160 | no | |
| 9831 | 52 | 160 | no | |
| 9855 | 49 | 160 | no | |
| 10011 | 56 | 160 | no | |
| 10087 | 102 | 160 | no | |
| 10239 | 71 | 160 | no | |
| 10331 | 52 | 160 | no | |
| 10351 | 51 | 160 | no | |
| 10407 | 70 | 160 | no | |
| 10719 | 49 | 160 | no | |
| 10919 | 57 | 160 | no | |
| 11263 | 53 | 160 | no | |
| 11291 | 74 | 160 | no | |
| 11391 | 50 | 160 | no | |
| 11623 | 49 | 160 | no | |
| 11903 | 60 | 160 | no | |
| 11931 | 49 | 160 | no | |
| 12015 | 60 | 160 | no | |
| 12135 | 57 | 160 | no | |
| 12287 | 114 | 160 | no | |
| 12359 | 130 | 160 | no | |
| 12399 | 76 | 160 | no | |
| 12479 | 57 | 160 | no | |
| 12539 | 79 | 160 | no | |
| 12703 | 71 | 160 | no | |
| 12927 | 50 | 160 | no | |
| 13439 | 72 | 160 | no | |
| 13551 | 68 | 160 | no | |
| 13759 | 54 | 160 | no | |
| 13823 | 49 | 160 | no | |
| 14247 | 71 | 160 | no | |
| 14495 | 54 | 160 | no | |
| 14559 | 59 | 160 | no | |
| 15003 | 69 | 160 | no | |
| 15039 | 84 | 160 | no | |
| 15099 | 64 | 160 | no | |
| 15131 | 72 | 160 | no | |
| 15519 | 54 | 160 | no | |
| 16379 | 56 | 160 | no | |
| 16495 | 51 | 160 | no | |
| 16551 | 63 | 160 | no | |
| 16895 | 52 | 160 | no | |
| 17023 | 69 | 160 | no | |
| 17151 | 62 | 160 | no | |
| 17179 | 59 | 160 | no | |
| 17439 | 60 | 160 | no | |
| 17647 | 75 | 160 | no | |
| 17659 | 72 | 160 | no | |
| 17691 | 65 | 160 | no | |
| 18047 | 85 | 160 | no | |
| 18159 | 54 | 160 | no | |
| 18203 | 76 | 160 | no | |
| 18303 | 69 | 160 | no | |
| 18427 | 53 | 160 | no | |
| 18431 | 58 | 160 | no | |
| 18543 | 57 | 160 | no | |
| 18591 | 79 | 160 | no | |
| 18943 | 51 | 160 | no | |
| 19055 | 61 | 160 | no | |
| 19271 | 49 | 160 | no | |
| 19327 | 61 | 160 | no | |
| 19903 | 62 | 160 | no | |
| 20095 | 54 | 160 | no | |
| 20327 | 67 | 160 | no | |
| 20479 | 67 | 160 | no | |
| 20731 | 56 | 160 | no | |
| 20895 | 73 | 160 | no | |
| 20975 | 66 | 160 | no | |
| 21083 | 61 | 160 | no | |
| 21183 | 65 | 160 | no | |
| 21231 | 71 | 160 | no | |
| 21351 | 68 | 160 | no | |
| 21503 | 73 | 160 | no | |
| 21743 | 73 | 160 | no | |
| 21787 | 50 | 160 | no | |
| 22559 | 83 | 160 | no | |
| 23279 | 53 | 160 | no | |
| 23487 | 127 | 160 | no | |
| 23719 | 59 | 160 | no | |
| 24031 | 54 | 160 | no | |
| 24063 | 51 | 160 | no | |
| 24091 | 72 | 160 | no | |
| 24095 | 53 | 160 | no | |
| 24347 | 121 | 160 | no | |
| 24575 | 73 | 160 | no | |
| 24623 | 55 | 160 | no | |
| 24687 | 66 | 160 | no | |
| 24799 | 72 | 160 | no | |
| 24827 | 55 | 160 | no | |
| 25243 | 56 | 160 | no | |
| 25407 | 63 | 160 | no | |
| 25535 | 68 | 160 | no | |
| 25727 | 61 | 160 | no | |
| 25839 | 58 | 160 | no | |
| 26047 | 60 | 160 | no | |
| 26239 | 73 | 160 | no | |
| 26471 | 64 | 160 | no | |
| 26623 | 66 | 160 | no | |
| 27103 | 69 | 160 | no | |
| 27135 | 72 | 160 | no | |
| 27227 | 61 | 160 | no | |
| 27327 | 54 | 160 | no | |
| 27367 | 64 | 160 | no | |
| 27419 | 53 | 160 | no | |
| 27519 | 49 | 160 | no | |
| 27647 | 73 | 160 | no | |
| 27815 | 58 | 160 | no | |
| 28207 | 128 | 160 | no | |
| 28287 | 70 | 160 | no | |
| 28399 | 53 | 160 | no | |
| 28415 | 50 | 160 | no | |
| 28583 | 60 | 160 | no | |
| 28671 | 78 | 160 | no | |
| 28783 | 71 | 160 | no | |
| 28911 | 56 | 160 | no | |
| 28923 | 71 | 160 | no | |
| 28991 | 53 | 160 | no | |
| 29311 | 90 | 160 | no | |
| 29343 | 55 | 160 | no | |
| 29855 | 61 | 160 | no | |
| 29919 | 67 | 160 | no | |
| 29935 | 58 | 160 | no | |
| 30143 | 52 | 160 | no | |
| 30463 | 51 | 160 | no | |
| 30491 | 66 | 160 | no | |
| 30879 | 59 | 160 | no | |
| 30971 | 52 | 160 | no | |
| 31039 | 55 | 160 | no | |
| 31343 | 72 | 160 | no | |
| 31463 | 63 | 160 | no | |
| 31487 | 118 | 160 | no | |
| 31743 | 70 | 160 | no | |
| 31847 | 70 | 160 | no | |
| 31903 | 68 | 160 | no | |
| 31911 | 65 | 160 | no | |
| 31995 | 69 | 160 | no | |
| 32027 | 64 | 160 | no | |
| 32047 | 51 | 160 | no | |
| 32539 | 68 | 160 | no | |
| 32767 | 49 | 160 | no | |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/clauses_targeted_refinement_leaves_mod2p15.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/clauses_targeted_refinement_leaves_mod2p15.md`

View File

@ -0,0 +1,99 @@
**Auteur** : Équipe 4NK
# Diagnostic — échec targeted leaves — racine 2^15
- tracked_roots_file : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/incremental_D_minor/tracked_roots_lb_any_top200_mod2p15_to2p18.txt`
- k_max : 256
- t_max : 256
- search_max_required_m : 256
Table (par racine) :
| root | child_low | child_high | immediate_low@16 | immediate_high@16 | lb_root | lb_low | lb_high |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 27 | 27 | 32795 | no | no | 60 | 60 | 26 |
| 31 | 31 | 32799 | no | no | 57 | 57 | 25 |
| 47 | 47 | 32815 | no | no | 56 | 56 | 42 |
| 63 | 63 | 32831 | no | no | 55 | 55 | 25 |
| 71 | 71 | 32839 | no | no | 52 | 52 | 22 |
| 251 | 251 | 33019 | no | no | 80 | 30 | 80 |
| 703 | 703 | 33471 | no | no | 84 | 84 | 61 |
| 1055 | 1055 | 33823 | no | no | 83 | 83 | 28 |
| 1183 | 1183 | 33951 | no | no | 55 | 17 | 55 |
| 1279 | 1279 | 34047 | no | no | 70 | 25 | 70 |
| 1407 | 1407 | 34175 | no | no | 85 | 85 | 23 |
| 1471 | 1471 | 34239 | no | no | 80 | 32 | 80 |
| 1535 | 1535 | 34303 | no | no | 56 | 20 | 56 |
| 1583 | 1583 | 34351 | no | no | 82 | 82 | 38 |
| 1819 | 1819 | 34587 | no | no | 62 | 62 | 23 |
| 2047 | 2047 | 34815 | no | no | 59 | 59 | 20 |
| 2111 | 2111 | 34879 | no | no | 84 | 84 | 36 |
| 2151 | 2151 | 34919 | no | no | 52 | 42 | 52 |
| 2287 | 2287 | 35055 | no | no | 54 | 54 | 22 |
| 2527 | 2527 | 35295 | no | no | 66 | 28 | 66 |
| 2887 | 2887 | 35655 | no | no | 136 | 17 | 136 |
| 3071 | 3071 | 35839 | no | no | 50 | 50 | 20 |
| 3199 | 3199 | 35967 | no | no | 66 | 18 | 66 |
| 3263 | 3263 | 36031 | no | no | 56 | 20 | 56 |
| 3399 | 3399 | 36167 | no | no | 49 | 49 | 22 |
| 4095 | 4095 | 36863 | no | no | 52 | 52 | 39 |
| 4255 | 4255 | 37023 | no | no | 71 | 71 | 18 |
| 4263 | 4263 | 37031 | no | no | 55 | 55 | 32 |
| 4379 | 4379 | 37147 | no | no | 77 | 17 | 77 |
| 4591 | 4591 | 37359 | no | no | 66 | 66 | 21 |
| 4607 | 4607 | 37375 | no | no | 49 | 49 | 21 |
| 4735 | 4735 | 37503 | no | no | 128 | 18 | 128 |
| 5119 | 5119 | 37887 | no | no | 52 | 39 | 52 |
| 5535 | 5535 | 38303 | no | no | 67 | 28 | 67 |
| 5823 | 5823 | 38591 | no | no | 53 | 24 | 53 |
| 6143 | 6143 | 38911 | no | no | 51 | 51 | 20 |
| 6171 | 6171 | 38939 | no | no | 56 | 56 | 25 |
| 6303 | 6303 | 39071 | no | no | 59 | 29 | 59 |
| 6383 | 6383 | 39151 | no | no | 70 | 70 | 22 |
| 6471 | 6471 | 39239 | no | no | 51 | 51 | 33 |
| 6887 | 6887 | 39655 | no | no | 58 | 58 | 25 |
| 6939 | 6939 | 39707 | no | no | 63 | 29 | 63 |
| 7039 | 7039 | 39807 | no | no | 63 | 18 | 63 |
| 7167 | 7167 | 39935 | no | no | 65 | 34 | 65 |
| 7279 | 7279 | 40047 | no | no | 58 | 58 | 20 |
| 7423 | 7423 | 40191 | no | no | 54 | 39 | 54 |
| 7451 | 7451 | 40219 | no | no | 60 | 17 | 60 |
| 7527 | 7527 | 40295 | no | no | 75 | 75 | 39 |
| 7935 | 7935 | 40703 | no | no | 71 | 43 | 71 |
| 7963 | 7963 | 40731 | no | no | 76 | 76 | 25 |
| 8191 | 8191 | 40959 | no | no | 52 | 45 | 52 |
| 8223 | 8223 | 40991 | no | no | 53 | 29 | 53 |
| 8351 | 8351 | 41119 | no | no | 66 | 36 | 66 |
| 8359 | 8359 | 41127 | no | no | 51 | 51 | 23 |
| 8639 | 8639 | 41407 | no | no | 56 | 35 | 56 |
| 8959 | 8959 | 41727 | no | no | 73 | 73 | 23 |
| 9023 | 9023 | 41791 | no | no | 74 | 18 | 74 |
| 9183 | 9183 | 41951 | no | no | 55 | 55 | 38 |
| 9215 | 9215 | 41983 | no | no | 50 | 50 | 20 |
| 9663 | 9663 | 42431 | no | no | 55 | 55 | 45 |
| 9695 | 9695 | 42463 | no | no | 72 | 24 | 72 |
| 9831 | 9831 | 42599 | no | no | 52 | 18 | 52 |
| 9855 | 9855 | 42623 | no | no | 49 | 29 | 49 |
| 10011 | 10011 | 42779 | no | no | 56 | 56 | 33 |
| 10087 | 10087 | 42855 | no | no | 102 | 102 | 22 |
| 10239 | 10239 | 43007 | no | no | 71 | 35 | 71 |
| 10331 | 10331 | 43099 | no | no | 52 | 52 | 24 |
| 10351 | 10351 | 43119 | no | no | 51 | 30 | 51 |
| 10407 | 10407 | 43175 | no | no | 70 | 29 | 70 |
| 10719 | 10719 | 43487 | no | no | 49 | 23 | 49 |
| 10919 | 10919 | 43687 | no | no | 57 | 57 | 20 |
| 11263 | 11263 | 44031 | no | no | 53 | 53 | 25 |
| 11291 | 11291 | 44059 | no | no | 74 | 74 | 18 |
| 11391 | 11391 | 44159 | no | no | 50 | 50 | 38 |
| 11623 | 11623 | 44391 | no | no | 49 | 49 | 21 |
| 11903 | 11903 | 44671 | no | no | 60 | 42 | 60 |
| 11931 | 11931 | 44699 | no | no | 49 | 49 | 19 |
| 12015 | 12015 | 44783 | no | no | 60 | 23 | 60 |
| 12135 | 12135 | 44903 | no | no | 57 | 40 | 57 |
| 12287 | 12287 | 45055 | no | no | 114 | 44 | 114 |
## Sorties
- JSON : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/diagnostic_targeted_leaves_failure_mod2p15.json`
- Markdown : `/home/ncantu/code/algo/docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/diagnostic_targeted_leaves_failure_mod2p15.md`

View File

@ -0,0 +1,17 @@
{
"domain": {
"palier": 15
},
"counts": {
"total": 0,
"ok": 0,
"errors": 0
},
"stats": {
"total_nodes": 0,
"total_leaves": 0,
"max_m_seen": 15
},
"ok": true,
"errors_sample": []
}

View File

@ -0,0 +1,12 @@
**Auteur** : Équipe 4NK
# Vérification — feuilles ciblées (raffinement profond local) — 2^15
- total : 0
- ok : 0
- errors : 0
- ok_all : True
- total_nodes : 0
- total_leaves : 0
- max_m_seen : 15

View File

@ -0,0 +1,116 @@
**Auteur** : Équipe 4NK
# Plan d'implémentation — Extensions de grammaire (cas no/no)
## Alignement avec la thèse (livre_jeune_adulte.md)
Le plan respecte les principes du manuscrit :
- **Définir avant usage** : chaque notion (observable, projection, raffinement) est introduite avec ses hypothèses explicites.
- **Indexer les conclusions** : tout résultat est indexé par les choix (projection \(\Pi\), palier \(M\), grammaire \(\mathcal{K}\), paramètres \(k_{\max}\), \(M_{\max}\)).
- **Dette d'observabilité** : la thèse (Ch. 2, ligne 495) pose que « toute théorie qui prétend exclure la répétition dans un système itératif sur un espace d'états fini ne peut le faire sans introduire une hypothèse supplémentaire (… ou raffinement infini de l'observabilité). Le modèle impose une dette d'hypothèse. » Les extensions de grammaire visent à réduire cette dette par raffinement contrôlé (projection étendue, paliers plus profonds, règles de compression).
- **Stabilité sous raffinement/coarsening** (Ch. 16, Fermeture) : toute extension doit être testée sous variation de granularité (protocoles R1, R2, R3 de conjoncture_collatz.md).
- **Neutralité sémantique** : pas d'auto-évaluation ; formulations factuelles (« On définit… », « On montre… »).
## Objectif
Réduire `tracked.max` et `tracked.p99` sur la liste fixe `tracked_roots_lb_any_top200_mod2p15_to2p18.txt` en introduisant des règles de grammaire capables de fermer les racines où les deux enfants à \(m=16\) n'ont pas de clause immédiatement décidable (cas « no/no »).
## Phases du plan
### Phase 1 : Extension mécanique (Piste 2) — priorité immédiate
**Hypothèses.**
- Les racines extrêmes ont \(lb\in[19,136]\). Une partie peut être fermée par des clauses \(D_{\underline{}}\) à des paliers \(m\in\{19,\ldots,M_{\max}\}\) avec \(k\) plus grand.
- La génération et la vérification sont déjà en place ; seuls les paramètres changent.
**Étapes.**
1. Générer des clauses \(D_{\underline{}}\) pour \(m\in\{19,20,21\}\) et \(k\in\{12,\ldots,16\}\) (ou jusqu'à \(u_{\min}(k)\le m\)).
2. Générer des clauses terminales \(D/F\) pour \(m\in\{19,20,21\}\) via `collatz_generate_terminal_clauses_over_Sm.py` (si \(k_{\max}/t_{\max}\) suffisants).
3. Étendre le bundle de fermeture : `collatz_build_refinement_bundle_over_Sm_multilevel.py` avec `--max-palier 21` et les nouveaux leaf JSON.
4. Relancer `collatz_analyze_open_roots_refinement.py` et comparer `tracked.max`, `tracked.p99` sur la liste fixe.
5. Documenter dans `docs/artefacts/collatz/refinement_K/palier2p15/` les artefacts produits et les métriques.
**Indexation.** Résultats indexés par \(M_{\max}=21\), \(k_{\max}\) des clauses terminales, familles \((k,\underline A)\) des \(D_{\underline{}}\).
**Critère de succès.** \(\Delta\)(tracked.max) ou \(\Delta\)(tracked.p99) strictement négatif.
---
### Phase 2 : Raffinement multi-modulus (Piste 1) — recherche
**Hypothèses.**
- La non-décidabilité de F à \(m=16\) peut venir de \(y\bmod 3\) non constant sur la classe. Une projection \(\Pi_{(M,s)}: n\mapsto (n\bmod 2^M, n\bmod 3^s)\) pourrait stabiliser le choix de fusion.
**Étapes.**
1. Analyser, sur un échantillon de racines « no/no », la distribution de \(y=U^{(t)}(n)\bmod 3\) pour \(n\equiv r\pmod{2^{16}}\) et \(t\) fixé (ex. \(t\le 32\)).
2. Si une partition par \(n\bmod 3^s\) rend \(y\bmod 3\) constant sur des sous-classes, concevoir un arbre de raffinement mixte (split 2-adique puis 3-adique, ou l'inverse).
3. Adapter `collatz_build_refinement_certificate_over_Sm_multilevel.py` pour accepter des feuilles indexées par \((m,r,b)\) avec \(b\in\{0,\ldots,3^s-1\}\).
4. Produire un artefact déterministe et un vérificateur.
**Indexation.** Résultats indexés par \(s\), l'ordre des splits, et la forme des feuilles.
**Critère de succès.** Au moins une racine « no/no » fermée par la nouvelle grammaire.
---
### Phase 3 : Chaîne Hensel avec frères fermables (Piste 3) — raffinement
**Hypothèses.**
- La Piste 3 a échoué car les frères à \(m=16\) ne sont pas fermables. Si on augmente \(M_{\max}\) (Phase 1), certains frères à \(m\ge 19\) pourraient devenir fermables.
- Une stratégie hybride : suivre la chaîne Hensel à partir de \(m=19\) (au lieu de 16) pour les racines dont les enfants à \(m=19\) ont un frère fermable.
**Étapes.**
1. Après Phase 1, identifier les racines encore ouvertes dont un enfant à \(m=19\) a un frère fermé par \(D/F/D_{\underline{}}\).
2. Pour ces racines, implémenter une variante de `collatz_build_hensel_chain_leaves.py` qui démarre la chaîne à \(m=19\) (ou le premier niveau où le frère est fermable).
3. Intégrer les certificats « chaîne Hensel décalée » dans le pipeline de fermeture.
4. Mesurer l'impact sur `tracked.max/p99`.
**Indexation.** Résultats indexés par le niveau de démarrage de la chaîne et la disponibilité des clauses pour les frères.
**Critère de succès.** Au moins une racine fermée par certificat chaîne Hensel.
---
### Phase 4 : Clause \(D\) partielle (Piste 4) — recherche formelle
**Hypothèses.**
- Une condition \(C(n)\) plus faible que la stabilité complète du préfixe pourrait suffire pour minorer \(U^{(k)}(n)\) et obtenir une descente.
**Étapes.**
1. Étudier la littérature et les formes de congruences sur \(n\) qui contraignent \(v_2(L_k(n))\) sans imposer \(A_{k-1}+1\le m\).
2. Proposer une forme explicite de \(C(n)\) (congruence modulo \(2^m\cdot 3^s\) ou combinaison) et un lemme de validité.
3. Si une forme est établie, implémenter un générateur et un vérificateur.
4. Intégrer dans le pipeline et mesurer.
**Indexation.** Résultats indexés par la forme de \(C(n)\) et le protocole de décidabilité.
**Critère de succès.** Lemme formel établi et au moins une racine fermée.
---
## Ordre d'exécution recommandé
1. **Phase 1** (extension mécanique) : effort minimal, réutilisation du code existant ; résultat mesurable rapidement.
2. **Phase 2** (multi-modulus) : nécessite une analyse préalable des distributions \(y\bmod 3\) ; peut être menée en parallèle de la Phase 1.
3. **Phase 3** (chaîne Hensel décalée) : dépend des résultats de la Phase 1 (identification des frères fermables à \(m\ge 19\)).
4. **Phase 4** (clause partielle) : recherche formelle ; peut être reportée si les Phases 13 suffisent.
## Artefacts et traçabilité
Chaque phase produit :
- Scripts (ou modifications) versionnés.
- Artefacts JSON/MD sous `docs/artefacts/collatz/refinement_K/` ou `docs/artefacts/collatz/terminal_clauses_over_Sm/`.
- Mise à jour de `docs/features/` et de `applications/collatz/conjoncture_collatz.md` pour les nouvelles règles et indexations.
- Rapport de métriques (tracked.max, tracked.p99, open_roots, q_m) avant/après.
## Références
- `these/livre_jeune_adulte.md` : Ch. 2 (dette d'hypothèse, raffinement d'observabilité), Ch. 16 (stabilité sous raffinement, indexation)
- `applications/collatz/conjoncture_collatz.md` : Protocoles R1, R2, R3 ; Section « Extensions de grammaire pour les cas no/no »
- `docs/features/collatz_targeted_leaves_and_diagnostics.md` : diagnostic root cause, guidage pour grammaire plus puissante

View File

@ -24,6 +24,10 @@ Cette grammaire vise en particulier les branches dominantes du résidu non couve
- `applications/collatz/collatz_k_scripts/collatz_verify_minorated_descent_clauses_over_Sm.py`
- Vérifie déterministiquement les clauses produites (stabilité du préfixe, cohérence de \(C_k\), congruence \(\bmod 2^{\underline A}\), seuil \(N_0\)).
- `applications/collatz/collatz_k_scripts/collatz_derive_brother_minorated_clauses_from_terminal_over_Sm.py`
- Dérive des clauses `D_minor` pour des frères à partir de clauses `D_exact` sur \(S_m\) (complétion par frères, via le même numérateur affine).
- Sort un JSON de feuilles additionnel, consommable par la fermeture multi-niveaux.
### Artefacts
Par défaut, sortie sous:
@ -32,6 +36,10 @@ Par défaut, sortie sous:
- `docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p<M>/clauses_D_minor_over_Sm_mod2p<M>.md`
- `docs/artefacts/collatz/minorated_clauses_over_Sm/palier2p<M>/verification_D_minor_over_Sm_mod2p<M>.{json,md}`
Clauses dérivées “par frères” :
- `docs/artefacts/collatz/minorated_clauses_over_Sm_derived_from_brothers/palier2p<M>/clauses_D_minor_derived_from_brothers_over_Sm_mod2p<M>.json`
## Modalités danalyse
### Génération (exemple M=15, k=8, underlineA=13)

View File

@ -41,6 +41,9 @@ This feature builds and audits such refinement paths on the instrumented finite
- generates terminal clauses directly decidable at \(2^m\) (criterion \(A+1\le m\)) on the full \(S_m\).
- `applications/collatz/collatz_k_scripts/collatz_build_refinement_certificate_over_Sm_multilevel.py`
- closes roots in \(S_M\) by refinement up to \(2^{M_{max}}\) using leaf sets provided at multiple levels.
- `applications/collatz/collatz_k_scripts/collatz_build_refinement_bundle_over_Sm_multilevel.py`
- wrapper pipeline: multilevel closure + open-roots obstruction profile + optional targeted diagnostic (tracked roots file).
- can optionally include brother-derived `D_minor` leaves (`--include-brother-derived-dminor`) and verify them (`--verify-brother-derived-dminor`).
### Artefacts

View File

@ -0,0 +1,69 @@
**Auteur** : Équipe 4NK
# Targeted leaves (attempt) and diagnostics
## Objectif
Réduire `tracked.max/p99` sur une liste fixe de racines ouvertes (topN par `lb_any`) au palier `2^15`,
en introduisant une grammaire de feuilles capable de **payer localement une dette dobservabilité**,
sans déclencher une explosion combinatoire du raffinement binaire.
## Tentative implémentée
- `applications/collatz/collatz_k_scripts/collatz_build_targeted_refinement_leaves.py`
- `applications/collatz/collatz_k_scripts/collatz_verify_targeted_refinement_leaves.py`
Principe : fermer chaque racine suivie `r0` via un certificat de raffinement profond (cap par défaut 160)
en nautorisant comme feuilles terminales que `D_exact`, `F`, et `D_minor`.
### Résultat
Sur la liste fixe `tracked_roots_lb_any_top200_mod2p15_to2p18.txt`, aucun certificat na été construit (`closed_roots=0`).
Artefacts :
- `docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/clauses_targeted_refinement_leaves_mod2p15.json`
- `docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/verification_targeted_refinement_leaves_mod2p15.json`
## Diagnostic déterministe (root cause)
### Fait structurel mesuré (au premier raffinement 2^15→2^16)
Sur les racines suivies, **les deux enfants** (low/high) au niveau `m=16` nont *pas* de clause terminale immédiatement décidable (`A+1 <= 16`) dans la grammaire `D_exact/F` (avec `k_max=t_max=256`).
Ce fait est mesuré et versionné dans :
- `applications/collatz/collatz_k_scripts/collatz_diagnose_targeted_leaves_failure.py`
- `docs/artefacts/collatz/refinement_K/palier2p15/targeted_leaves/diagnostic_targeted_leaves_failure_mod2p15.md`
Extrait (colonnes `immediate_low@16`, `immediate_high@16`) :
- `root=27` : `no/no`, et `lb_root=60`
- `root=703` : `no/no`, et `lb_root=84`
- `root=2887` : `no/no`, et `lb_root=136`
### Interprétation mathématique
Dans la grammaire de fermeture par raffinement binaire, une racine `r0` est fermée si et seulement si **les deux enfants** à chaque split sont fermables (directement ou récursivement).
Quand `immediate_low@16=no` et `immediate_high@16=no`, fermer `r0` impose mécaniquement de **raffiner plus profond** au moins jusquà une profondeur où une clause terminale devient décidable. Le diagnostic donne des bornes inférieures `lb_root` typiquement dans `[50, 136]` sur les racines extrêmes.
Le point bloquant nest pas “le cap 160” en tant que tel : cest le fait que, sans règle de compression,
la fermeture par scission binaire doit couvrir un arbre de taille \(2^{(lb\_root-16)}\) nœuds au minimum dans le cas défavorable.
Pour `lb_root=136`, cela correspond à une explosion combinatoire hors de portée dun certificat fini exploitable.
### Conclusion (root cause)
Léchec des certificats “targeted leaves” vient de la combinaison :
- **absence de feuilles terminales décidables** au premier niveau de raffinement (m=16) sur les racines extrêmes ;
- **bornes inférieures `lb_root` très élevées**, qui rendent le raffinement binaire naïf exponentiel ;
- grammaire de feuilles **trop faible** (D/F/D_minor) pour “absorber” la dette sans fermer récursivement les deux enfants.
## Formalisation et plan d'implémentation
Les quatre pistes d'extension sont formalisées dans `applications/collatz/conjoncture_collatz.md` (section « Extensions de grammaire pour les cas no/no »). Le plan d'implémentation aligné sur `these/livre_jeune_adulte.md` est dans `docs/features/collatz_grammar_extensions_implementation_plan.md`.
## Guidage pour une grammaire plus puissante
Une grammaire réduisant effectivement `tracked.max/p99` doit introduire une règle/feuille capable de :
- fermer un sous-arbre en **taille linéaire** en la profondeur (compression),
- typiquement en exploitant des structures de type **chaîne henselienne** (un seul embranchement “dur”, le frère se ferme par une clause uniforme),
- ou une règle de “réparation/recombinaison” explicitant comment une branche survivante peut être traitée sans imposer la fermeture complète des deux enfants au même niveau de description.