Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 44 additions & 1 deletion docs/research/cartier-miller-p1-plus-results.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,47 @@ Le script est **auto-suffisant** : il n'importe ni `pilot.py` ni `elliptic_prefi

Tranche Python-only **PASS** : 92 premiers dérivés, 10809 stopping indices calculés, 2130 exact_binomial_checks vérifiés, 43 quarter_cross_checks validés, **0 désaccord** entre les deux implémentations Python indépendantes. Harvey C++ (passe 2) doit confirmer la cohérence 4-voies avec les backends Python + BSGS.

— Rapport rédigé par `myia-po-2023:CoursIA-2`, c.1101, lane worker, 2026-10-06.
— Rapport rédigé par `myia-po-2023:CoursIA-2`, c.1101, lane worker, 2026-10-06.
---

## 7. Passe 2 Harvey C++ — PASS (2026-10-22, lane myia-po-2024:CoursIA, claim c.6344755635)

**Tranche** : backend Harvey C++/NTL du P1+ ground truth 92, exécuté **sur Windows natif** via la voie documentée par l'auteur (`run_windows.py` : MSYS2 UCRT64) — le verdict RECOVERABLE-MACHINE du scoping est réduit à une installation locale (règle F).

### 7.1 Outillage (reproductible)

- MSYS2 UCRT64 installé **user-scope sans UAC** : `msys2-base-x86_64-latest.tar.xz` extrait vers `D:\Dev\tools\msys64`, puis `pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-ntl`.
- Toolchain mesurée : GCC **16.2.0** (Rev6), NTL **11.6.0**, 1 thread (`--version` : `{"ntl":"11.6.0","compiler":"16.2.0","ntl_threads":1}`).
- Build : mêmes flags que `run_windows.py` (`-O3 -std=c++17 -pthread -I<ucrt64>/include -L<ucrt64>/lib`), sources = `harvey_adapter.cpp` + `upstream/recurrences_ntl.cpp` + `upstream/hypellfrob.cpp` **vendorisées au pin `37a9b72`** (aucun accès `/opt/sage` requis — le dépôt embarque les deux sources Sage hypellfrob avec leur provenance). Binaire 288 127 octets, SHA-256 `2ce5d768b430102c5efff804d08e3048be69066a746a240ce257b927668357cb` (consigné dans le JSON).
- **Piège reproductibilité (muet)** : sans `ucrt64/bin` dans le `PATH`, `cc1plus` meurt au chargement de ses DLL (libgmp/libmpfr/libisl) **sans écrire un seul octet d'erreur** — le driver g++ rend rc=1 silencieux, y compris sur erreur de syntaxe triviale. Le diagnostic passe par l'export du PATH avant tout appel.

#### 7.1.1 Ce que l'empreinte du binaire ancre, et ce qu'elle n'ancre pas

Le binaire n'est **pas** committé : il est construit localement, hors dépôt. La SHA-256 consignée n'est donc pas re-dérivable depuis le seul arbre Git — elle sert d'**ancre de comparaison** pour l'artefact exact qui a produit le JSON, pas d'une preuve de reproductibilité au bit près. Ce que la chaîne permet effectivement de refaire :

1. **Reconstruire fonctionnellement** depuis les sources vendorisées au pin `37a9b72`, avec la commande exacte consignée ci-dessus — `build.sh` du dépôt amont émet en outre `bin/build_metadata.json` (version compilateur, commande, horodatage UTC), garde de reproductibilité que cette passe a reproduite à la main.
2. **Comparer l'empreinte** : `sha256sum harvey_adapter.exe` doit rendre `2ce5d768b430102c5efff804d08e3048be69066a746a240ce257b927668357cb` et `stat -c %s` rendre 288 127 octets. Re-mesuré firsthand sur le siège de build **le 2026-10-22** : identique au chiffre du JSON.
3. **Rejouer la validation** si l'empreinte diffère : `run_harvey_p1_plus.py` recroise les 10 809 stopping indices contre les récurrences Python indépendantes ; c'est cette croisée comportementale, et non l'empreinte, qui porte le résultat.

Une reconstruction avec un autre jeu de correctifs GCC/MSYS2 ne sera **pas** bit-identique — c'est la raison pour laquelle l'empreinte est présentée comme une ancre et non comme un critère de reproduction.

### 7.2 Résultats (`example_results/p1_plus_harvey_validation.json`, driver `scripts/cartier_miller/run_harvey_p1_plus.py`)

| Critère | Attendu (upstream) | Mesuré | Verdict |
|---|---|---|---|
| Stopping-point queries | 10 809 (92 premiers) | **10 809, 92 premiers** | ✓ |
| Mismatches Harvey ↔ récurrences Python | 0 | **0** (`B`, `a`, `U` par L, tous stopping indices) | ✓ |
| Forced arbitrary-precision | 26 | **43** (quarter-points de tous les p ≤ 199, sur-ensemble), 0 mismatch | ✓ |
| Invalid inputs | 3 | **3/3** fail-closed (module composé, L > (p−1)/2, reps < 1) | ✓ |
| `status` | passed | **passed** | ✓ |

Comparaison : pour **chaque** stopping index L ∈ [0, (p−1)/2] de **chacun** des 92 premiers, la sortie Harvey `calculate(p, L)` est confrontée aux récurrences Python indépendantes `prefix_values`/`original_values` vendorigées (passe 1, #19523) — la même croisée que `benchmark_engine.py` (clé `Harvey/Miller answer mismatch`), généralisée du seul quarter-point à tous les indices.

### 7.3 Périmètre et résiduel

- **Large-modulus (p ≈ 10⁸)** : non rejoués ici — déjà livrés par P1 integration #19510 côté Python ; la référence Python des récurrences coûte ~1 min/premier à cette taille. À prendre en note pour une éventuelle passe Harvey large-modulus.
- **Schoof + BSGS (§5)** : restent « à exécuter passe 2 » — backends Python purs, sans dépendance outillage ; le present document ne couvre que le backend C++.

### 7.4 Ce que ça établit

La cohérence **identité ↔ code ↔ validation** du manuscript est désormais croisée sur ce siège par le **backend C++/NTL de Harvey** contre les récurrences Python indépendantes, sur l'intégralité du ground truth 92 (10 809 requêtes). Rappel des gardes de l'issue : corroboration computationnelle, pas démonstration — le statut *unrefereed draft* du manuscript est inchangé.
Loading
Loading