**Auteur** : Équipe 4NK # Optimisation mémoire — génération clauses terminales ## Contexte La génération des clauses terminales pour les paliers élevés (m ≥ 22) provoquait des plantages par manque de mémoire (2^m résidus impairs, chaque clause ~100 octets). ## Optimisations appliquées ### collatz_generate_terminal_clauses_over_Sm.py 1. **Itérateur au lieu de liste** : `range(1, mod, 2)` instead of `list(range(...))` — évite d'allouer ~64 Mo pour m=24. 2. **Mode streaming** (automatique si `total_roots > 500_000`) : - Écriture des clauses dans un fichier JSONL temporaire au fur et à mesure - Assemblage du JSON final sans garder toutes les clauses en mémoire - Pas de liste `clauses` en mémoire pendant la génération 3. **Écriture JSON** : `json.dump(obj, f)` au lieu de `json.dumps()` puis `write()` — évite la duplication du string de sortie. 4. **Option `--streaming`** : force le mode streaming même pour les petits paliers. ### collatz_generate_minorated_descent_clauses_over_Sm.py - `json.dump()` vers fichier au lieu de `json.dumps()`. ### collatz_build_refinement_certificate_over_Sm_multilevel.py - `json.load(f)` au lieu de `json.loads(path.read_text())` — évite de charger la chaîne complète en mémoire avant parsing. ## Format compact .residues.json Pour les paliers élevés (m ≥ 20), un fichier `.residues.json` compact est généré ou extrait. Le chargeur multilevel (`collatz_build_refinement_certificate_over_Sm_multilevel.py`) utilise ce fichier lorsqu'il existe, évitant de charger les JSON de clauses complets (ex. 1,3 Go pour m=24). - **Génération** : en mode streaming, le script terminal écrit automatiquement `.residues.json`. - **Extraction** : `collatz_extract_residues_from_clauses_json.py` extrait les résidus d'un JSON existant (par regex en flux pour les fichiers > 100 Mo). ## Recommandations pour m=23, m=24 Le mode streaming s'active automatiquement pour m ≥ 20 (2^19 = 524_288 > 500_000). Pour m=23 et m=24, le script peut être exécuté avec : ```bash python3 applications/collatz/collatz_k_scripts/collatz_generate_terminal_clauses_over_Sm.py \ --repo-root . --palier 23 --k-max 16 --t-max 16 ``` Les temps d'exécution sont approximativement : m=22 ~3 min, m=23 ~6 min, m=24 ~12 min (selon la machine).