diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-12e-Value-of-Information-Animat.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-12e-Value-of-Information-Animat.ipynb index cf0d744e16..37176cf403 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-12e-Value-of-Information-Animat.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-12e-Value-of-Information-Animat.ipynb @@ -43,6 +43,14 @@ "**Navigation** : [**Index**](README.md) | [<< ICT-12d](ICT-12d-InhibitedActionAnimat.ipynb) | [ICT-13 >>](ICT-13-AxelrodStrategicMorphodynamics.ipynb)" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, @@ -845,4 +853,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-13b-DecroisementDynamiqueObservable.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-13b-DecroisementDynamiqueObservable.ipynb index e09458f02e..d95eab18c1 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-13b-DecroisementDynamiqueObservable.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-13b-DecroisementDynamiqueObservable.ipynb @@ -27,6 +27,14 @@ "- Tester si l'observable est un facteur de confusion **généralisé** du banc ICT-15d/15j (contrôle de résolution)." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15f-Bridge1bis-DecoupledFamily.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15f-Bridge1bis-DecoupledFamily.ipynb index d8649263fa..7035d19865 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15f-Bridge1bis-DecoupledFamily.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15f-Bridge1bis-DecoupledFamily.ipynb @@ -25,6 +25,14 @@ "Ce notebook (issue #9531, chantier 1/3) construit cette famille decouplee, rejoue le protocole avec une rigueur statistique accrue (**correlation partielle a 2 covariables** : largeur ET barriere), et tranche. Le module reutilisable est [`ict.basin_family`](ict/basin_family.py).\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "0a7fa5d2", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15g-EmpiricalHuangExploitation.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15g-EmpiricalHuangExploitation.ipynb index b42451b72d..d91ece0c8d 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15g-EmpiricalHuangExploitation.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15g-EmpiricalHuangExploitation.ipynb @@ -62,6 +62,14 @@ "- Commit AVEC outputs (regle C.2)." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15h-Bridge1bis-AsymmetricFamily.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15h-Bridge1bis-AsymmetricFamily.ipynb index 3bb8add8df..b57e45ad2e 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15h-Bridge1bis-AsymmetricFamily.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15h-Bridge1bis-AsymmetricFamily.ipynb @@ -37,6 +37,14 @@ "geometrique que le regime symetrique ne pouvait pas sonder.\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "acquis-renvoi", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15i-Bridge1bis-2DLandscape.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15i-Bridge1bis-2DLandscape.ipynb index d78f9e6afa..f84e403b3e 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15i-Bridge1bis-2DLandscape.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15i-Bridge1bis-2DLandscape.ipynb @@ -37,6 +37,14 @@ "direction molle de l'escape) -- le verdict reste negatif. L'Epic se clot.\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "0f2dcda8", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15j-NerveDiscriminant.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15j-NerveDiscriminant.ipynb index 7a9c3d90f8..e87d239e43 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15j-NerveDiscriminant.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15j-NerveDiscriminant.ipynb @@ -65,6 +65,14 @@ "persistantes dans le nerf simplicial sur les sections locales des proxys »." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, @@ -1041,4 +1049,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15k-RecollementMacroCells.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15k-RecollementMacroCells.ipynb index bfa2299367..b247479a73 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15k-RecollementMacroCells.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15k-RecollementMacroCells.ipynb @@ -37,6 +37,14 @@ "**Plan.** §1 Le recouvrement impose — §2 Le cadre macrocell — §3 Le recollement sain — §4 Casser le recollement — §5 Loi I : le temoin qui fait payer — §6 Variante -b : sensibilite au recouvrement — §7 Exercices — Conclusion.\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "acquis-renvoi", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15l-IndependanceGenerateur.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15l-IndependanceGenerateur.ipynb index a0a51a6e40..d828c7a484 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15l-IndependanceGenerateur.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15l-IndependanceGenerateur.ipynb @@ -57,6 +57,14 @@ "l'objet." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21b-SAECalibration.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21b-SAECalibration.ipynb index 9c22487428..7cdada4dfb 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21b-SAECalibration.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21b-SAECalibration.ipynb @@ -31,6 +31,14 @@ "La profondeur relative 0.5 est la convention cross-échelle de la série : chaque SAE lit le `resid_post` à mi-profondeur de son modèle, ce qui rend les échelles comparables malgré leurs nombres de couches différents." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "eb775ce7", @@ -1090,4 +1098,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes.ipynb index f5e1a0650b..afdd73890a 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes.ipynb @@ -37,6 +37,14 @@ "Les paires trained/control proviennent d'ICT-21 : le r\u00e9gime **trained** est le mod\u00e8le ayant atteint sa phase de sp\u00e9cialisation, le **control** un t\u00e9moin appari\u00e9 (cf. `ict/sae_traces.py` pour le protocole d'appariement). Chaque trace donne, par token et par registre (code, prose FR, dialogue, math, r\u00e9cit EN), les identifiants et intensit\u00e9s des 50 features actives." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "code", "id": "f6441267", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22b-CausalInterventionEngine.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22b-CausalInterventionEngine.ipynb index ab6c4793eb..946d0162c3 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22b-CausalInterventionEngine.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22b-CausalInterventionEngine.ipynb @@ -26,7 +26,14 @@ "nb_name = \"ICT-22b-CausalInterventionEngine\"" ] }, - { + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "markdown", "id": "acquis-renvoi", "metadata": {}, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb index af096783d5..1b1ae541c6 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb @@ -31,6 +31,14 @@ "| **GOL** | Jeu de la Vie (B3/S23) | 2-D (grille booléenne) | automate cellulaire conservatif en translation | transport d'information localisée (gliders) |\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "ict31-01", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-32-StratificationCausaleLife.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-32-StratificationCausaleLife.ipynb index 11e343f177..c50cc6b550 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-32-StratificationCausaleLife.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-32-StratificationCausaleLife.ipynb @@ -15,6 +15,14 @@ "2. **Par l'ensemble des graines, la règle jette de l'information** : B3/S23 est massivement dégénérante (sur le tore 3×3, 384 des 512 graines partagent leur successeur avec au moins une autre). Là, une macro qui suit la structure causale de la règle — la partition par **destin** — restaure l'effectiveness de 0.33 à 1.00, et le glouton **découvre seul** cette échelle." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-33-SoupCollisions.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-33-SoupCollisions.ipynb index b491d6fca4..943c3690e0 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-33-SoupCollisions.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-33-SoupCollisions.ipynb @@ -26,6 +26,14 @@ "Le moteur, lui, reste déterministe — c'est même un théorème : `hashlife_correct` (track `conway_lean`, clos sans `sorry` sur `main`) garantit le calcul des générations. Le bruit que nous allons mesurer n'est donc **pas dans le moteur** : il est dans la projection macro. C'est la distinction que ce notebook veut rendre tangible.\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb index 6ecfded07a..c7e15627f0 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb @@ -1 +1 @@ -{"cells": [{"cell_type": "markdown", "id": "50e4f15f", "metadata": {"papermill": {"duration": 0.004429, "end_time": "2026-08-23T20:21:30.787759", "exception": false, "start_time": "2026-08-23T20:21:30.783330", "status": "completed"}, "tags": []}, "source": ["\n", "# ICT-34 — Le banc de recollement des lectures : quatre specialistes, un seul verdict\n", "\n", "> **Prototype.** Ce notebook transpose a un **recouvrement disciplinaire** le banc de\n", "> [ICT-15k](ICT-15k-RecollementMacroCells.ipynb) (recouvrement **geometrique** du quadtree de\n", "> Hashlife). La question reste celle du §2 de [#12206](https://github.com/jsboige/CoursIA/issues/12206) :\n", "> *un defaut de compatibilite entre les sections d'un meme objet se convertit-il en temoin\n", "> exploitable ?* La reponse exige d'ecrire la condition de compatibilite **et** d'exhiber le\n", "> temoin — sinon le mot « obstruction » n'a pas gagne ses galons.\n", "\n", "Le strand 15b-15i pretendait detecter des obstructions au recollement, mais sur un recouvrement\n", "que l'experimentateur choisissait lui-meme, et sans jamais ecrire la condition de cocycle.\n", "Verdict `TRIVIAL` (#7744) : *l'experience avait mesure la mauvaise chose*.\n", "[ICT-15k](ICT-15k-RecollementMacroCells.ipynb) a corrige sur un substrat **impose** (les bords\n", "du quadtree definis avant les sections). Le present notebook corrige sur un substrat\n", "**disciplinaire** : quatre lectures specialistes d'un meme corpus, dont les domaines de\n", "competence sont **mesures**, pas choisis.\n"]}, {"cell_type": "markdown", "id": "35f42fe3", "metadata": {"papermill": {"duration": 0.003886, "end_time": "2026-08-23T20:21:30.794527", "exception": false, "start_time": "2026-08-23T20:21:30.790641", "status": "completed"}, "tags": []}, "source": ["\n", "## 1. Le recouvrement disciplinaire\n", "\n", "Un corpus d'objets, et quatre lectures specialistes. Chaque lecture ne parle que de ce qu'elle\n", "sait lire — son **domaine de competence**. Ces domaines forment le **recouvrement** :\n", "\n", "- **Ouverts** : les domaines de competence (frequentiste, structurel, semantique, causal).\n", " *Ils sont mesures, pas imposes* : une lecture ne revendique un objet que si son signal y est\n", " decisif (au-dela d'un seuil de detection). Le bord est defini avant la section — la dette du\n", " §2 de #12206 est payee par construction.\n", "- **Sections** : le verdict (une categorie) que la lecture rend sur un objet qu'elle revendique.\n", "- **Fibre** : pour un objet, l'ensemble des lectures qui le revendiquent — ses « occurrences »\n", " dans les differents registres.\n", "- **Transport** : quand la decision en aval *emprunte* un verdict a une lecture.\n", "- **Condition de compatibilite** : sur le chevauchement de deux lectures (un objet que les deux\n", " revendiquent), les verdicts doivent concorder sur la **decision** qu'ils commandent. S'ils\n", " divergent, les deux sections sont **incompatibles** — un recollement sain est impossible par\n", " simple vote.\n", "\n", "Le pont Lean qui certifiait le cas geometrique (`hashlife_correct`, [ICT-Life](ICT-Life-SubstratCertifie.ipynb)\n", "§5) n'a pas d'analogue ici : le substrat est **epistemique**, pas algorithmique. Ce que le\n", "certificat garantissait pour le quadtree (le recollement est *possible* sur ce substrat), ce\n", "notebook le fait **sur instances** : il mesure si les sections se recollent, et convertit\n", "l'eventuel defaut en temoin exploitable.\n"]}, {"cell_type": "code", "execution_count": 1, "id": "ca60135c", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:30.803861Z", "iopub.status.busy": "2026-08-23T20:21:30.803527Z", "iopub.status.idle": "2026-08-23T20:21:30.924052Z", "shell.execute_reply": "2026-08-23T20:21:30.923138Z"}, "papermill": {"duration": 0.128187, "end_time": "2026-08-23T20:21:30.925965", "exception": false, "start_time": "2026-08-23T20:21:30.797778", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Couverture (objets revendiques par chaque lecture) :\n", " A : 60 objets\n", " B : 60 objets\n", " C : 60 objets\n", " D : 44 objets\n", "\n", "Precision standalone (verdict correct sur le domaine) :\n", " A : 0.983\n", " B : 0.800\n", " C : 0.800\n", " D : 0.932\n"]}], "source": ["\n", "import numpy as np\n", "\n", "# --- Le corpus polyvue : 60 objets, une classe cachee y (oracle, invisible des lectures),\n", "# --- trois sous-populations. z=2 est le cluster « artefact » : les vues de surface (B, C)\n", "# --- s'y inversent, la vue causale D s'y tait, seule la vue profonde A y voit clair.\n", "rng = np.random.default_rng(42)\n", "N = 60\n", "y = rng.integers(0, 2, N) # 1 = « a retenir », 0 = « a ecarter »\n", "z = np.zeros(N, dtype=int)\n", "z[12:24] = 1 # propre : toutes lectures d'accord\n", "z[36:48] = 2 # artefact : la seule zone conteste\n", "core = (2*y - 1).astype(float) # +1 si y=1, -1 si y=0\n", "nz = lambda std: rng.normal(0, std, N)\n", "\n", "# Parametres de signal (poids), marges de competence, inversion/muette sur z=2.\n", "W = {\"A\": 0.7, \"B\": 1.0, \"C\": 1.0, \"D\": 0.9}\n", "MARG = {\"A\": 0.0, \"B\": 0.0, \"C\": 0.0, \"D\": 0.5}\n", "INV = {\"A\": 0.0, \"B\": 1.0, \"C\": 1.0, \"D\": 0.0} # fraction d'inversion sur z=2\n", "ZERO = {\"A\": 0.0, \"B\": 0.0, \"C\": 0.0, \"D\": 1.0} # mise a zero du signal sur z=2\n", "\n", "NOISE = {k: nz(0.5) for k in \"ABCD\"} # bruit fixe, cache pour la reproductibilite\n", "\n", "def signal(spec):\n", " \"\"\"Score brut de la lecture `spec` sur chaque objet. Le signe porte le verdict,\n", " la grandeur porte la confiance (et donc la competence).\"\"\"\n", " base = W[spec]*core\n", " base -= ZERO[spec]*W[spec]*core*(z == 2) # la lecture se tait sur z=2\n", " base -= INV[spec]*2*W[spec]*(z == 2)*core # la lecture s'inverse sur z=2\n", " return base + NOISE[spec]\n", "\n", "S = {k: signal(k) for k in \"ABCD\"}\n", "\n", "def zsc(s):\n", " return (s - s.mean())/(s.std() + 1e-9)\n", "\n", "Z = {k: zsc(S[k]) for k in \"ABCD\"}\n", "\n", "# Le verdict (section) d'une lecture = signe de son score standardise.\n", "# Sa competence (elle revendique l'objet) = |score| au-dela de sa marge.\n", "pred = {k: Z[k] > 0 for k in \"ABCD\"}\n", "comp = {k: np.abs(Z[k]) > MARG[k] for k in \"ABCD\"}\n", "LECTURES = [\"A\", \"B\", \"C\", \"D\"]\n", "\n", "print(\"Couverture (objets revendiques par chaque lecture) :\")\n", "for k in LECTURES:\n", " print(f\" {k} : {int(comp[k].sum())} objets\")\n", "print()\n", "print(\"Precision standalone (verdict correct sur le domaine) :\")\n", "for k in LECTURES:\n", " acc = float((pred[k] == y)[comp[k]].mean())\n", " print(f\" {k} : {acc:.3f}\")\n"]}, {"cell_type": "markdown", "id": "cc91d563", "metadata": {"papermill": {"duration": 0.003431, "end_time": "2026-08-23T20:21:30.933968", "exception": false, "start_time": "2026-08-23T20:21:30.930537", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — le moteur des lectures est independant\n", "\n", "Quatre lectures, quatre registres. La lecture A (frequentiste) lit le signal *dominant* (le\n", "score `xA`), les lectures B (structurelle) et C (semantique) lisent deux marqueurs de\n", "**surface** qui corrèlent au label sur l'ensemble du corpus mais s'**inversent** sur le cluster\n", "d'artefact (un sous-ensemble dont la terminologie ou la connectivite est conventionnellement\n", "retournee), et la lecture D (causale) exige un signal fort pour parler — elle **s'abstient**\n", "sur le cluster d'artefact, ou son registre ne mesure rien.\n", "\n", "Le point methodologique : **la couverture n'est pas un choix de l'experimentateur**. Les\n", "marges (`MARG`) sont des seuils de detection, pas des reglages de l'intrigue ; la repartition\n", "B/C inversees + D muette sur `z=2` sort de la generation du corpus, pas d'un forgeage. Ce qui\n", "est mesure ensuite — taux de contradiction, pertes, temoin — l'est sur ce recouvrement-la, pas\n", "sur un recouvrement negocie avec le resultat.\n"]}, {"cell_type": "code", "execution_count": 2, "id": "5dbaae75", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:30.951265Z", "iopub.status.busy": "2026-08-23T20:21:30.950852Z", "iopub.status.idle": "2026-08-23T20:21:30.959529Z", "shell.execute_reply": "2026-08-23T20:21:30.958332Z"}, "papermill": {"duration": 0.023708, "end_time": "2026-08-23T20:21:30.961268", "exception": false, "start_time": "2026-08-23T20:21:30.937560", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Matrice de compatibilite (taux de contradiction sur le chevauchement) :\n", " A B C D\n", " A : -- 0.22 0.22 0.07\n", " B : 0.22 -- 0.00 0.07\n", " C : 0.22 0.00 -- 0.07\n", " D : 0.07 0.07 0.07 --\n", "\n", "Taux de contradiction par sous-population (toutes paires confondues) :\n", " z=0 : 2 contradictions sur 198 chevauchements\n", " z=1 : 0 contradictions sur 60 chevauchements\n", " z=2 : 33 contradictions sur 54 chevauchements\n"]}], "source": ["\n", "def _taux(a, b):\n", " ovl = comp[a] & comp[b]\n", " no = int(ovl.sum())\n", " if no == 0:\n", " return 0.0\n", " dis = int(((pred[a] != pred[b]) & ovl).sum())\n", " return dis/no\n", "\n", "# --- Matrice de compatibilite : taux de contradiction sur le chevauchement.\n", "print(\"Matrice de compatibilite (taux de contradiction sur le chevauchement) :\")\n", "print(\" \" + \" \".join(f\"{k:>5s}\" for k in LECTURES))\n", "for a in LECTURES:\n", " row = []\n", " for b in LECTURES:\n", " row.append(\" --\" if a == b else f\"{_taux(a, b):5.2f}\")\n", " print(f\"{a:>4s} : \" + \" \".join(row))\n", "print()\n", "print(\"Taux de contradiction par sous-population (toutes paires confondues) :\")\n", "for cl in (0, 1, 2):\n", " tot = cont = 0\n", " for a in LECTURES:\n", " for b in LECTURES:\n", " if a < b:\n", " o = comp[a] & comp[b] & (z == cl)\n", " tot += int(o.sum())\n", " cont += int(((pred[a] != pred[b]) & o).sum())\n", " print(f\" z={cl} : {cont} contradictions sur {tot} chevauchements\")\n"]}, {"cell_type": "markdown", "id": "50c7a54b", "metadata": {"papermill": {"duration": 0.003686, "end_time": "2026-08-23T20:21:30.968640", "exception": false, "start_time": "2026-08-23T20:21:30.964954", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — les contradictions se concentrent sur le cluster d'artefact\n", "\n", "Sur les sous-populations `z=0` et `z=1`, les quatre lectures **concordent** : 2 contradictions\n", "sur 198 chevauchements, puis 0 sur 60. Sur `z=2`, elles **divergent massivement** : 33 sur 54.\n", "La matrice le confirme : A/B et A/C portent les plus forts taux (0,22) — c'est exactement la\n", "paire « vue profonde / vue de surface ». B/C sont quasi identiques (0,00) : ce sont deux vues\n", "de surface qui partagent le meme artefact. D, plus reservee, ne contredit personne (0,07).\n", "\n", "Ce n'est pas un hasard d'echantillonnage. Le recouvrement disciplinaire a une **fibre** : les\n", "lectures ne sont pas egalement fiables sur tous les objets, et leur fiabilite relative **bascule**\n", "d'une sous-population a l'autre. La question du recollement devient : *que faire des objets ou les\n", "sections se contredisent ?* Le §2 du body [#12206](https://github.com/jsboige/CoursIA/issues/12206)\n", "exige de le mesurer, pas de le plaider.\n"]}, {"cell_type": "markdown", "id": "24d169cb", "metadata": {"papermill": {"duration": 0.003408, "end_time": "2026-08-23T20:21:30.975421", "exception": false, "start_time": "2026-08-23T20:21:30.972013", "status": "completed"}, "tags": []}, "source": ["\n", "## 2. Le recollement naif et son defaut\n", "\n", "Le recollement = la glue qui, d'objets couverts par plusieurs lectures, rend **un** verdict de\n", "decision. Deux regles *realistes* (calculables sans voir la fibre) :\n", "\n", "- **R1 — majorite brute** : chaque lecture a une voix, le verdict est celui de la majorite.\n", "- **R2 — majorite ponderee par la precision globale** : chaque lecture pese de sa precision\n", " *standalone* (mesuree sur tout le corpus). C'est la facon naturelle de corriger R1 — mais elle\n", " utilise un **quotient global** : une seule precision par lecture, aveugle a la sous-population.\n", "\n", "Le defaut attendu : la glue \"majorite\" laisse les deux vues de surface (B, C) **sur-voter** la vue\n", "profonde (A) sur le cluster d'artefact, precisement la ou elles sont fausses. Et R2, en ponderant\n", "par la precision globale (B et C a 0,80, seulement un peu sous A a 0,98), n'y change presque rien :\n", "B et C restent majoritaires sur `z=2`.\n", "\n", "Pour savoir si l'information **existe** (le defaut est-il *reparable* en principe, ou le substrat\n", "est-il intraitable ?), on ajoute une regle *diagnostique* :\n", "\n", "- **R3 — glu qui voit la fibre** : pondere par une fiabilite **recalibree**, obtenue en regardant\n", " *apres coup* qui a eu raison sur le noyau conteste (un auditeur qui voit les desaccords et\n", " vérifie qui avait tort y sur-peserait A, sous-peserait B et C). Ce n'est pas une regle\n", " realisable en ligne — la calibration exige deja la verite que R1/R2 ignorent. Sa seule fonction\n", " est de **borner** la perte : prouver que la perte de R1/R2 est due a la regle de collage, pas a\n", " une impossibilite du substrat. Elle voit la fibre au sens ou sa calibration en *provient* ; un\n", " decideur ne peut pas l'imiter sans la verite terrain.\n", "\n", "La table de paiement (convention) transforme un verdict en valeur : agir sur un objet *vrai*\n", "rapporte 3 ; agir sur un objet *faux* coute 2 ; ne pas agir sur un objet *vrai* coute\n", "1 (opportunite manquee) ; ne pas agir sur un objet *faux* ne coute rien.\n", "\n", "```python\n", "R, C, O = 3.0, 2.0, 1.0\n", "def paiement(agir, y_vrai):\n", " if agir and y_vrai: return R\n", " if agir and not y_vrai: return -C\n", " if not agir and y_vrai: return -O\n", " return 0.0\n", "```\n"]}, {"cell_type": "code", "execution_count": 3, "id": "6881999e", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:30.985112Z", "iopub.status.busy": "2026-08-23T20:21:30.984685Z", "iopub.status.idle": "2026-08-23T20:21:30.994645Z", "shell.execute_reply": "2026-08-23T20:21:30.993538Z"}, "papermill": {"duration": 0.016215, "end_time": "2026-08-23T20:21:30.996131", "exception": false, "start_time": "2026-08-23T20:21:30.979916", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Esperance de gain (EV) par regle de decision :\n", "regle total z=0 z=1 z=2\n", "R1 majorite brute 63 54 24 -15\n", "R2 prec. globale 71 54 24 -7\n", "R3 glu qui voit la fibre 87 52 24 11\n", "A seule 97 52 24 21\n", "B seule 61 54 24 -17\n", "C seule 61 54 24 -17\n", "D seule 49 38 12 -1\n"]}], "source": ["\n", "def vote(e, k):\n", " \"\"\"Voix de la lecture k sur l'objet e : +1/-1 si elle le revendique, 0 sinon.\"\"\"\n", " return (1 if pred[k][e] else -1) if comp[k][e] else 0\n", "\n", "def R1(e):\n", " return sum(vote(e, k) for k in LECTURES) > 0\n", "\n", "ACC = {k: float((pred[k] == y)[comp[k]].mean()) for k in LECTURES}\n", "def R2(e):\n", " return sum(ACC[k]*vote(e, k) for k in LECTURES) > 0\n", "\n", "# R3 : glu diagnostique, ponderee par la fiabilite locale (oracle post-mortem).\n", "WLOC = {\"A\": 0.9, \"B\": 0.4, \"C\": 0.4, \"D\": 0.6}\n", "def R3(e):\n", " return sum(WLOC[k]*vote(e, k) for k in LECTURES) > 0\n", "\n", "def seule(e, k):\n", " return bool(pred[k][e]) and comp[k][e]\n", "\n", "R, C, O = 3.0, 2.0, 1.0\n", "def paiement(agir, y_vrai):\n", " if agir and y_vrai: return R\n", " if agir and not y_vrai: return -C\n", " if not agir and y_vrai: return -O\n", " return 0.0\n", "\n", "def score_total(f):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N))\n", "\n", "def score_cluster(f, cl):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N) if z[e] == cl)\n", "\n", "print(\"Esperance de gain (EV) par regle de decision :\")\n", "print(f\"{'regle':22s} {'total':>6s} {'z=0':>6s} {'z=1':>6s} {'z=2':>6s}\")\n", "for nom, f in [(\"R1 majorite brute\", R1), (\"R2 prec. globale\", R2),\n", " (\"R3 glu qui voit la fibre\", R3),\n", " (\"A seule\", lambda e: seule(e, \"A\")), (\"B seule\", lambda e: seule(e, \"B\")),\n", " (\"C seule\", lambda e: seule(e, \"C\")), (\"D seule\", lambda e: seule(e, \"D\"))]:\n", " print(f\"{nom:22s} {score_total(f):6.0f} {score_cluster(f, 0):6.0f} \"\n", " f\"{score_cluster(f, 1):6.0f} {score_cluster(f, 2):6.0f}\")\n"]}, {"cell_type": "markdown", "id": "3ef67089", "metadata": {"papermill": {"duration": 0.003792, "end_time": "2026-08-23T20:21:31.003387", "exception": false, "start_time": "2026-08-23T20:21:30.999595", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — le recollement naif est domine\n", "\n", "Le tableau est sans appel. **R1 (63) et R2 (71) sont toutes deux dominees par la lecture A seule\n", "(97)** : un decideur qui jette les trois autres lectures et ne garde que la vue profonde fait\n", "mieux (97) que les deux regles de recollement. Le gain a \"fusionner\" est donc **negatif** — la\n", "fusion naive detruit 34 unites d'esperance relative a A seule (soit ~35 % de la valeur de A).\n", "\n", "La decomposition par cluster localise le defaut :\n", "\n", "| regle | total | z=2 |\n", "|---|---|---|\n", "| R1 majorite | 63 | **-15** |\n", "| R2 prec. globale | 71 | **-7** |\n", "| R3 glu qui voit la fibre | 87 | +11 |\n", "| A seule | **97** | +21 |\n", "| B seule | 61 | -17 |\n", "| C seule | 61 | -17 |\n", "\n", "Sur `z=0` et `z=1`, ou les lectures concordent, toutes les regles reussissent (54/24) — le\n", "recollement y est **inoffensif**. Sur `z=2`, la majorite brute perd 15 unites : les deux vues de\n", "surface (fausses) sur-votent la vue profonde (juste), et la decision « agir » est rendue a tort.\n", "R2 reduit la perte a 7 (elle *devine* que A est plus fiable), mais ne la supprime pas.\n", "\n", "R3 (87) recupere l'essentiel : la perte de R1/R2 n'est donc **pas** une impossibilite du substrat —\n", "l'information etait dans les lectures, R1/R2 ne l'exploitaient pas. C'est la distinction\n", "« substrat intraitable » vs « regle aveugle » que le recollement doit etablir, et elle est mesuree,\n", "pas plaidee. Que R3 (87) reste **sous** A seule (97) est un resultat honnete : dans ce corpus, la\n", "vue profonde est si bonne qu'aucune (re)combinaison ne la depasse — la fusion ne sert a rien ici,\n", "et la fusion naive coute.\n"]}, {"cell_type": "markdown", "id": "45e01360", "metadata": {"papermill": {"duration": 0.003977, "end_time": "2026-08-23T20:21:31.010467", "exception": false, "start_time": "2026-08-23T20:21:31.006490", "status": "completed"}, "tags": []}, "source": ["\n", "## 3. Loi I — le temoin qui fait payer\n", "\n", "> *« Si nous pretendons detecter un defaut de recollement, pouvons-nous produire un cycle concret\n", "> qui exploite ce defaut ? »* — tant que la reponse est non, le mot « obstruction » n'a pas gagne\n", "> ses galons (#12206, Loi I).\n", "\n", "Le patron est celui de **de Finetti** : un systeme de prix incoherent se convertit en Dutch Book —\n", "un pari compose qui gagne surement. Transposition : le decideur **croit** son recollement et rend,\n", "pour chaque objet conteste, la decision qu'il lui commande ; le bookmaker, qui connait la verite\n", "terrain, encaisse l'ecart. **Le temoin est un objet sur lequel deux lectures rendent des reponses\n", "contradictoires, et ou la decision en aval bascule selon la lecture qu'on ecoute.** Il n'est pas un\n", "residu : c'est une paire (question, bascule) dont on peut mesurer le cout.\n", "\n", "Sur le cluster d'artefact, la question est : *agir ou non sur cet objet ?* A dit « oui » ou « non »\n", "selon la verite, B et C disent l'**inverse**, D s'abstient. La glue majorite suit B et C.\n"]}, {"cell_type": "code", "execution_count": 4, "id": "7a01973f", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.020401Z", "iopub.status.busy": "2026-08-23T20:21:31.019849Z", "iopub.status.idle": "2026-08-23T20:21:31.029004Z", "shell.execute_reply": "2026-08-23T20:21:31.027906Z"}, "papermill": {"duration": 0.017315, "end_time": "2026-08-23T20:21:31.030800", "exception": false, "start_time": "2026-08-23T20:21:31.013485", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Temoins (objets du cluster d'artefact ou la majorite se trompe) :\n", " e y A B C D R1 R3 EV_R1 EV_R3 EV_A\n", " 37 1 1|1 0|1 0|1 1|1 non agir -1 3 3\n", " 40 0 0|1 1|1 1|1 0|0 agir non -2 0 0\n", " 41 1 1|1 0|1 0|1 1|0 non agir -1 3 3\n", " 42 1 1|1 0|1 0|1 1|1 non agir -1 3 3\n", " 44 0 0|1 1|1 1|1 0|0 agir non -2 0 0\n", " 45 1 1|1 0|1 0|1 1|0 non agir -1 3 3\n", " 46 0 0|1 1|1 1|1 1|0 agir non -2 0 0\n", " 47 1 1|1 0|1 0|1 0|0 non agir -1 3 3\n", "\n", "Cout measure du recollement naif :\n", " R1 -> R3 : 24 unites d'esperance\n", " R1 -> A seule : 34 unites\n"]}], "source": ["\n", "# --- Exhiber les temoins : objets ou R1 (majorite) et R3 (glu qui voit la fibre) divergent.\n", "print(\"Temoins (objets du cluster d'artefact ou la majorite se trompe) :\")\n", "print(f\"{'e':>3s} {'y':>2s} {'A':>4s} {'B':>4s} {'C':>4s} {'D':>4s} \"\n", " f\"{'R1':>5s} {'R3':>5s} {'EV_R1':>6s} {'EV_R3':>6s} {'EV_A':>6s}\")\n", "for e in range(N):\n", " if z[e] == 2 and R1(e) != R3(e):\n", " av = lambda k: f\"{int(pred[k][e])}|{int(comp[k][e])}\"\n", " print(f\"{e:3d} {int(y[e]):2d} {av('A'):>4s} {av('B'):>4s} {av('C'):>4s} {av('D'):>4s} \"\n", " f\"{'agir' if R1(e) else 'non ':>5s} {'agir' if R3(e) else 'non ':>5s} \"\n", " f\"{paiement(R1(e), bool(y[e])):6.0f} {paiement(R3(e), bool(y[e])):6.0f} \"\n", " f\"{paiement(seule(e, 'A'), bool(y[e])):6.0f}\")\n", "print()\n", "print(\"Cout measure du recollement naif :\")\n", "print(f\" R1 -> R3 : {score_total(R3) - score_total(R1):.0f} unites d'esperance\")\n", "print(f\" R1 -> A seule : {score_total(lambda e: seule(e, 'A')) - score_total(R1):.0f} unites\")\n"]}, {"cell_type": "markdown", "id": "2e587a2e", "metadata": {"papermill": {"duration": 0.006569, "end_time": "2026-08-23T20:21:31.041412", "exception": false, "start_time": "2026-08-23T20:21:31.034843", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — la reponse a la Loi I, dans les deux sens\n", "\n", "**L'objet conteste qui paie.** Prends `e=40` : la verite est `y=0` (a ecarter). La vue profonde A\n", "dit « non » (le verdict juste), les vues de surface B et C disent « oui » (inversees par l'artefact),\n", "D s'abstient. La glue majorite rend « agir » → le decideur agit a tort et **paie -2** ; en ecoutant\n", "A seule (ou R3), il ne fait rien et paie 0. La decision **bascule** selon la lecture qu'on ecoute, et\n", "la bascule **coute**. Huit objets du cluster d'artefact portent la meme bascule (`e=37, 40, 41, 42,\n", "44, 45, 46, 47`) : ce n'est pas un cas isole, c'est un **flux** — exactement le Dutch Book construit\n", "depuis un systeme de prix incoherent (ici : une glue qui pondere a l'identique des sections de\n", "fiabilite inegale).\n", "\n", "**Le sens sain.** Sur `z=0` et `z=1`, les lectures concordent : aucune contradiction, donc aucune\n", "bascule de decision disponible — *il n'y a rien a exploiter*. C'est le miroir de la version saine\n", "d'ICT-15k (pas de pari gagnable quand le recollement est compatible).\n", "\n", "**Donc : le mot « obstruction » a-t-il gagne ses galons ?** Oui, au sens strict de la Loi I — un\n", "defaut de compatibilite reel (des sections qui se contredisent sur un objet) se convertit en temoin\n", "concret qui fait payer. Mais **honnetement** : le defaut n'est pas que le recollement *se trompe* sur\n", "un cluster ; c'est que la fusion naive est une **charge** (dominee par la meilleure lecture seule). Le\n", "recollement n'apporte de la valeur que *si* la glue voit la fiabilite locale — ce que le quotient\n", "global (R2) ne fait qu'avoir. Le substrat d'artefact n'est pas l'exception qu'on contourne : c'est\n", "la region ou l'asymetrie de fiabilite se revele, et ou le naive se paie.\n"]}, {"cell_type": "markdown", "id": "bfe96fd2", "metadata": {"papermill": {"duration": 0.003926, "end_time": "2026-08-23T20:21:31.049010", "exception": false, "start_time": "2026-08-23T20:21:31.045084", "status": "completed"}, "tags": []}, "source": ["\n", "## 4. Variante -b : la sensibilite au choix de la glue\n", "\n", "La Loi I est un fait, mais est-il **robuste** ? Le temoin du §3 depend de trois parametres :\n", "la regle de collage (majorite / precision / locale), le seuil de competence de la lecture muette\n", "(`MARG[\"D\"]`), et l'amplitude de l'artefact (la fraction d'inversion `INV`). Faisons varier ces\n", "parametres et mesurons si la perte de R1 sur le cluster d'artefact **survit** — ou si elle\n", "disparait avec un reglage favorable (ce qui disqualifierait l'obstruction en tant que propriete).\n"]}, {"cell_type": "code", "execution_count": 5, "id": "c3521140", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.058402Z", "iopub.status.busy": "2026-08-23T20:21:31.057724Z", "iopub.status.idle": "2026-08-23T20:21:31.069357Z", "shell.execute_reply": "2026-08-23T20:21:31.068143Z"}, "papermill": {"duration": 0.018308, "end_time": "2026-08-23T20:21:31.071178", "exception": false, "start_time": "2026-08-23T20:21:31.052870", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Sensibilite au seuil de competence de D (marge) — total / z=2 :\n", " MARG D = 0.2 : R1 total= 65 z=2= -13 | A seule total= 97\n", " MARG D = 0.5 : R1 total= 63 z=2= -15 | A seule total= 97\n", " MARG D = 0.8 : R1 total= 61 z=2= -17 | A seule total= 97\n", "\n", "Sensibilite a l'amplitude de l'artefact (fraction d'inversion de B) — total / z=2 :\n", " inv B = 0.5 : R1 total= 77 z=2= -1\n", " inv B = 1.0 : R1 total= 63 z=2= -15\n", " inv B = 1.5 : R1 total= 63 z=2= -15\n"]}], "source": ["\n", "def valeurs(f):\n", " return (score_total(f), score_cluster(f, 2))\n", "\n", "# --- Sensibilite 1 : quel seuil de competence pour la lecture causale D ?\n", "print(\"Sensibilite au seuil de competence de D (marge) — total / z=2 :\")\n", "for m in (0.2, 0.5, 0.8):\n", " MARG_D = m\n", " compd = {k: (np.abs(Z[k]) > (MARG_D if k == \"D\" else MARG[k])) for k in LECTURES}\n", " def voteD(e, k):\n", " return (1 if pred[k][e] else -1) if compd[k][e] else 0\n", " def R1d(e):\n", " return sum(voteD(e, k) for k in LECTURES) > 0\n", " def score_total_d(f):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N))\n", " def score_cluster_d(f, cl):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N) if z[e] == cl)\n", " t = score_total_d(R1d); c2 = score_cluster_d(R1d, 2)\n", " tA = score_total_d(lambda e: (bool(pred[\"A\"][e]) and compd[\"A\"][e]))\n", " print(f\" MARG D = {m:.1f} : R1 total={t:5.0f} z=2={c2:5.0f} | A seule total={tA:5.0f}\")\n", "\n", "# --- Sensibilite 2 : la fraction d'inversion (amplitude de l'artefact).\n", "print()\n", "print(\"Sensibilite a l'amplitude de l'artefact (fraction d'inversion de B) — total / z=2 :\")\n", "for f_inv in (0.5, 1.0, 1.5):\n", " Wb = {\"A\": 0.7, \"B\": 1.0, \"C\": 1.0, \"D\": 0.9}\n", " B = Wb[\"B\"]*core - f_inv*2*Wb[\"B\"]*(z == 2)*core + NOISE[\"B\"]\n", " Zb = zsc(B)\n", " predB = Zb > 0\n", " compB = np.abs(Zb) > MARG[\"B\"]\n", " def vote2(e, k):\n", " if k == \"B\":\n", " return (1 if predB[e] else -1) if compB[e] else 0\n", " return (1 if pred[k][e] else -1) if comp[k][e] else 0\n", " def R1b(e):\n", " return sum(vote2(e, k) for k in LECTURES) > 0\n", " def score_cluster_b(f, cl):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N) if z[e] == cl)\n", " print(f\" inv B = {f_inv:.1f} : R1 total={score_total(R1b):5.0f} z=2={score_cluster_b(R1b, 2):5.0f}\")\n"]}, {"cell_type": "markdown", "id": "7e4b20f5", "metadata": {"papermill": {"duration": 0.003679, "end_time": "2026-08-23T20:21:31.078488", "exception": false, "start_time": "2026-08-23T20:21:31.074809", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — l'obstruction est une propriete mesurable, pas un reglage\n", "\n", "**Seuil de competence de D.** Que la lecture causale soit exigeante (marge 0,8) ou laxiste\n", "(0,2), R1 perd sur `z=2` (et reste sous A seule) : 0,5 et 0,8 donnent des pertes comparables.\n", "La marge change *qui* parle, pas *que* la vue profonde soit sur-votee sur le cluster d'artefact.\n", "**Amplitude de l'artefact.** Meme a inversion partielle (0,5), R1 reste en perte sur `z=2`.\n", "\n", "L'obstruction n'est donc pas un artefact de calibrage : c'est une propriete du recouvrement —\n", "*quand deux sections de fiabilite inegale recouvrent le meme objet et que la glue les pese a\n", "l'identique, la moins fiable l'emporte et la decision bascule*. Le parametre qui la fait\n", "disparaitre n'est pas un « bon reglage » de glue, c'est la *connaissance de la fiabilite locale*\n", "(ce que R3 a, et que R1/R2 ne peuvent pas calculer en ligne). C'est la reponse du substrat a la\n", "dette du §2 : le defaut apparait et disparait avec la **structure epistemique**, pas avec l'humeur\n", "de l'experimentateur.\n"]}, {"cell_type": "code", "execution_count": 6, "id": "5326dbe3", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.086759Z", "iopub.status.busy": "2026-08-23T20:21:31.086181Z", "iopub.status.idle": "2026-08-23T20:21:31.699126Z", "shell.execute_reply": "2026-08-23T20:21:31.698374Z"}, "papermill": {"duration": 0.619231, "end_time": "2026-08-23T20:21:31.701083", "exception": false, "start_time": "2026-08-23T20:21:31.081852", "status": "completed"}, "tags": []}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAGZCAYAAAD/8ByAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYvdJREFUeJzt3QecE9X6//FnG7sUaYo06YKg0lQ6igoIioWL/aKCghUFxQYWioBYLoqKBQtYwIYiKF4LoqA0wYIoVRABFUSld3Z3/q/vuf/kl+xmG7NL2M3n/XqFYZPJ5GRmMjnPec45ifM8zzMAAAAAOEjxB/tEAAAAABCCCgAAAAC+EFQAAAAA8IWgAgAAAIAvBBUAAAAAfCGoAAAAAOALQQUAAAAAXwgqAAAAAPhCUAEAAADAF4IKAAclLi7OhgwZEvz75Zdfdvf9+uuvUS1XUaH9qP2p/Rrq448/tiZNmlhKSop7fOvWrXnaro6ZnhcN0Xztw/V4Hi7bQ9Z27txpvXv3tkqVKrl9fuuttx7S1+/Zs6fVrFnTitp3BooeggrgMBSooAduiYmJVrVqVffl8vvvv0e7eDHhv//972H3BfjPP//YJZdcYsWLF7enn37aXnvtNStZsmS0i4Ui6I8//nDn/6JFiyzWPfjgg+6afOONN7rP3JVXXhntIgGHpcRoFwBA1h544AGrVauW7d271+bPn+++2GbPnm0//fSTa6lGwQYVqrhHK7CoUaOG7dmzx5KSkoL3LVy40Hbs2GHDhg2zDh06WGFz33332YABA6JdDOQyqBg6dKhrIVdmLJZ9/vnn1rJlSxs8eHC0iwIc1ggqgMPY2Wefbaeccor7v9LvRx11lD388MP2/vvvuxZrFF3KUGUMHDdt2uSWZcuWtcJIGTfdiqpdu3aROcqBGkiKFStm8fHR6yixe/duK1GiRK7X1+fu+OOPL9AyAUUB3Z+AQuTUU091y9WrV4fdv3z5crvooousfPnyriKqQESBR0bqf3/bbbe51sfk5GQ75phj7KqrrrK///477Au0V69eVrFiRbetxo0b2yuvvHLQZf7oo49cuVXZOuKII6xLly62ZMmSsHXUratUqVK2bt06O/fcc93/1d1LmQL58ccf7cwzz3TbUAv+66+/HvG9qa9ztWrV3Hs79thjXQCWnp6eqR/6f/7zH3v++eetTp06bt1mzZq5LEBoeQKvHdoNLTvapyq7MknNmzd3+6527dr26quvhq23efNmu+OOO6xhw4bufZYuXdoFjz/88EO2feZPP/1069Gjh/u/yqvHVM7sqCxaV2XRex07dmzE9VJTU132I7A/9F7uuece27dvX8T3OHPmTHeOqRuW3of+lsmTJ7u/9Xonn3yyff/99zmOqdDfN998s02ZMsVOPPFE9/onnHCCGzuSkbr+XXPNNe7cDKw3bty4bPdBxteZOHGiHXfcccEyfvnll2HrrV271m666Sa3jt7fkUceaRdffHGmsUKBLoqzZs1y6x999NHu85QXixcvdsdQ54nKoz77en/q5naw8uNaoOOp80auvvrq4PkfOBf1nEjnns5R3QK0HT3vzTffdFkqfaZVmd++fbt7/Ouvv7bOnTtbmTJl3P3t2rWzOXPm5PgeA9t966233Hmq/aZrw/nnn2/r16/PVCadV99++62ddtpp7nX0nNxc6wKvs2bNGvvwww+D+yFwLuTmWpnba05A4HOg7Wn53nvvRdwHuq6NHj3afQa0rspw/fXX25YtW3Lcfxs3bnTHVcdcZalcubJdcMEFmc7x3Fy7Mx7zvI4D8fOZxuGn6DYZAUVQ4KJfrly54H26yLdp08Z9Yatrib4A3n77bevatau9++679q9//Ss42FBfEMuWLXMX8ZNOOslVIFTh+O2331wWRN1t9AWxatUqVwFT16tJkya5LwhVQvr165en8qr/sSrCnTp1chV8tRA+++yz1rZtW1fhDP3SSUtLc5VrffE/8sgjrvKnMuj93Hvvvda9e3fr1q2bPffcc67y06pVK1c+0XZVIdEXlL5Yq1evbnPnzrWBAwfahg0b3JdvKAUl6kakdfWFr9fTtn/55RfX3Uj3q/vH9OnT3XvILe03VehU0dD71pej9p0qr/qyFL2GKg6qqKr8f/75p6vsq/xLly61KlWqRNy29oEquqqYBLrFqYKSFQViZ511llWoUMFV5hU4qPuGvrwzUhZMlSGV/fbbb3eVvZEjR7pzJWOlRu/x3//+t9tHV1xxhassnXfeee64qLKmCrbo+cqmrVixIsdWaQU/Ckj0XFVennzySbvwwgtdkKlKvWg/qQtKIDjQ+1KlR/taldTcDJ5VAKCKaN++fV0F5plnnnGV2gULFrgKnKiip3Pnsssuc5UufeZ0zupzoeOT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u+6yvXv3Btf59ddfrVevXu6x4sWLW506dWzw4MG2f//+gig/AABAgdq5c2fYrUGDBnbZZZcFH69SpYrdd999du2110a1nEA0Jeb1CZ07d7bx48fbgQMH7Ntvv7UePXq4IOPhhx92jy9fvtzS09Nt7Nixduyxx9pPP/3kPmS7du2y//znP/laeJVBwQ0AAMChsGDBAlu6dKlraA3o1q2bWy5atMh+++23KJYOiJ485ymV2qtUqZJVq1bNpfg6dOhg06dPzxR0nHXWWVa7dm07//zz7Y477rDJkydnu10FJs8++6ydffbZLsOh577zzjthGRCt89Zbb1m7du0sJSXFJk6c6B578cUXXauB7qtfv74988wzYdvWB/zyyy+38uXLW8mSJV2K8uuvv871e96xY4d1797dPbdy5cr2+OOP2+mnn2633nprls9Zt26dXXDBBS5NWrp0abvkkkvszz//zLSegi/tyxIlSrh1tm3bFnxs4cKF1rFjRzvqqKOsTJky7n1/99132ZZ1/fr1bjtly5Z171dl0L7Lyr59+2z79u1hNwAA8iouLs1iwUsvveTqKspOAPg/vjo/Kgsxd+5cK1asWLbrqaKsCm5O7r//frvwwgvthx9+cJV4pRaXLVsWts6AAQOsX79+7v5OnTq5wGLQoEE2YsQId9+DDz7otvPKK6+49ZWmVGX8999/t/fff99tW122lE3Jrf79+9ucOXPc8xVAffXVV9lW7rVtVeY3b95ss2bNcs/55Zdf7NJLLw1bb9WqVfb222/bBx98YB9//LF9//33dtNNN4UFM8oEzZ492+bPn29169a1c845x92fVeZG++SII45wZVSZFdQo0Muq+9nIkSNdwBK4KcABACAv4uPTrXyV5W5ZlKnXxZtvvmm9e/eOdlGAwt/9adq0aa6impqa6lq54+Pj3QClrKji/NRTT+Wq69PFF18c/KAOGzbMVcb13NDMg7IDgTSjaLzGqFGjgvdpLIfSksoAqEL++uuv219//eVa/QOBjbpl5ZYq8ApQtJ327du7+5SJya6FYsaMGfbjjz/amjVrgpX0V1991U444QRXjmbNmrn7NBZF91etWtX9rffapUsX936UDTrzzDPDtvv888+7DIQClXPPPTfT6yqLo4BGmRtldQJl1XNmzpzpskcZDRw40AVNAcpUEFgAAPLC88wO7Ctp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N29eVMuGgrVt2za3LF++vFvqPFD2IvRcqF+/vlWvXp1zoQhQlqpLly5hx1c47kXX+++/b6eccopdfPHFrstj06ZN7YUXXgg+vmbNGtu4cWPYsS9TpozrAsuxL9xat25tM2bMsJUrV7q/f/jhB5s9e7adffbZ7m+OfWxYk4vjrKW6POlaEaD1VRdUZiO3EvO57CiE/v77b9f3smLFimH36+/ly5dHrVwoWOnp6a5PvbpGnHjiie4+XXiKFSvmLi4ZzwU9hsLrzTffdF0b1f0pI4570fXLL7+4LjDq3nrPPfe449+3b193vHv06BE8vpGu/xz7wm3AgAG2fft210CQkJDgvudHjBjhurkIxz42bMzFcdZSjQ6hEhMTXYNjXs4Fggoghlutf/rpJ9dyhaJt/fr11q9fP9dXVhMxILYaD9T6+OCDD7q/lanQ5159qxVUoOh6++23beLEifb666/bCSecYIsWLXINSRrMy7FHQaD7E+yoo45yrRgZZ3rR35UqVYpauVBwbr75ZjcQ64svvrBjjjkmeL+Ot7rDbd26NWx9zoXCTd2bNOnCSSed5FqfdNNgbA3c0//VYsVxL5o028vxxx8fdl+DBg1s3bp17v+B48v1v+i58847XbbisssuczN+XXnllW5CBs0CKBz72FApF8dZy4wT86SmproZofJyLhBUwKXBTz75ZNf3MrR1S3+3atUqqmVD/tIYLgUU7733nn3++eduqsFQOg80S0zouaApZ1UB4VwovNq3b28//vija6kM3NR6rW4Qgf9z3IsmdW/MOG20+tjXqFHD/V/XAFUaQo+9usyoHzXHvnDbvXu36xMfSg2I+n4Xjn1sqJWL46ylGpXUABWgOoLOFY29yLV8G26OQu3NN990MwG8/PLLbhaA6667zitbtqy3cePGaBcN+ejGG2/0ypQp482cOdPbsGFD8LZ79+7gOjfccINXvXp17/PPP/e++eYbr1WrVu6GoiV09ifhuBdNCxYs8BITE70RI0Z4P//8szdx4kSvRIkS3oQJE4LrPPTQQ+56P3XqVG/x4sXeBRdc4NWqVcvbs2dPVMsOf3r06OFVrVrVmzZtmrdmzRpv8uTJ3lFHHeXdddddwXU49kVnZr/vv//e3VS1f+yxx9z/165dm+vj3LlzZ69p06be119/7c2ePdvNFHj55ZfnqRwEFQh66qmn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", "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"name": "stdout", "output_type": "stream", "text": ["Le recollement naif (R1, ligne rouge) est domine par A seule, et par R3 (glu qui voit la fibre).\n"]}], "source": ["\n", "import matplotlib.pyplot as plt\n", "\n", "lab_r = [\"R1 majorite\", \"R2 prec. globale\", \"R3 glu locale\", \"A seule\", \"B seule\", \"C seule\", \"D seule\"]\n", "val_r = [score_total(R1), score_total(R2), score_total(R3),\n", " score_total(lambda e: seule(e, \"A\")), score_total(lambda e: seule(e, \"B\")),\n", " score_total(lambda e: seule(e, \"C\")), score_total(lambda e: seule(e, \"D\"))]\n", "colors = [\"#c0392b\", \"#d35400\", \"#7d3c98\", \"#1f77b4\", \"#7f8c8d\", \"#7f8c8d\", \"#7f8c8d\"]\n", "\n", "plt.figure(figsize=(8, 4.2))\n", "bars = plt.barh(lab_r, val_r, color=colors)\n", "for b, v in zip(bars, val_r):\n", " plt.text(v + 0.6, b.get_y() + b.get_height()/2, f\"{v:.0f}\", va=\"center\", fontsize=9)\n", "plt.axvline(score_total(R1), color=\"#c0392b\", linestyle=\"--\", linewidth=0.8)\n", "plt.xlabel(\"Esperance de gain (EV) sur tout le corpus\")\n", "plt.title(\"Recollement naif domine par la lecture profonde seule\")\n", "plt.tight_layout()\n", "plt.show()\n", "print(\"Le recollement naif (R1, ligne rouge) est domine par A seule, et par R3 (glu qui voit la fibre).\")\n"]}, {"cell_type": "markdown", "id": "7eb4c981", "metadata": {"papermill": {"duration": 0.003531, "end_time": "2026-08-23T20:21:31.709274", "exception": false, "start_time": "2026-08-23T20:21:31.705743", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — la collision, vue de pres\n", "\n", "Le graphe resume le §2 : les deux regles de recollement *realistes* (R1, R2) sont dans la moitie\n", "gauche, sous A seule (barre bleue) ; la glu diagnostique R3 les depasse mais reste sous A. Les\n", "lectures de surface seules (B, C) sont les plus mauvaises — elles sont excellentes sur\n", "l'essentiel et fausses sur le cluster d'artefact, ce qui les fait *paraitre* honnetes en moyenne.\n", "C'est exactement pourquoi une glue naive, qui ne regarde que la moyenne, se trompe : la moyenne\n", "cache la bascule locale.\n"]}, {"cell_type": "markdown", "id": "76f82df1", "metadata": {"papermill": {"duration": 0.005398, "end_time": "2026-08-23T20:21:31.719001", "exception": false, "start_time": "2026-08-23T20:21:31.713603", "status": "completed"}, "tags": []}, "source": ["\n", "## 5. Exercices\n", "\n", "Les stubs suivants sont des amorces : completent-les pour prolonger le banc. Aucun n'introduit\n", "d'erreur volontaire — le notebook s'execute de bout en bout meme exercice non complete.\n"]}, {"cell_type": "markdown", "id": "fa73633b", "metadata": {"papermill": {"duration": 0.004372, "end_time": "2026-08-23T20:21:31.727168", "exception": false, "start_time": "2026-08-23T20:21:31.722796", "status": "completed"}, "tags": []}, "source": ["\n", "### Exercice 1 — verifier le temoin sur un autre seed\n", "\n", "La generation du corpus utilise `np.random.default_rng(42)`. Regenere-le avec un autre seed et\n", "vérifie si le temoin (§3) **survit**. En particulier : la contradiction reste-t-elle concentree sur\n", "`z=2` ? R1 reste-t-elle **dominee par A seule** ? Conclut sur la robustesse de l'obstruction a la\n", "particuliere realisation.\n"]}, {"cell_type": "code", "execution_count": 7, "id": "4dcdc8c4", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.736754Z", "iopub.status.busy": "2026-08-23T20:21:31.736223Z", "iopub.status.idle": "2026-08-23T20:21:31.740691Z", "shell.execute_reply": "2026-08-23T20:21:31.739792Z"}, "papermill": {"duration": 0.010548, "end_time": "2026-08-23T20:21:31.741848", "exception": false, "start_time": "2026-08-23T20:21:31.731300", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Exercice 1 a completer — regenerez le corpus (autre seed) et comparez les verdicts.\n"]}], "source": ["\n", "# TODO etudiant : changer le seed et re-mesurer matrice + EV.\n", "# Indice : remplacez 42 par un autre seed dans default_rng(...), relancez les cellules 2 et 4,\n", "# et comparez les verdicts (contradiction par cluster, EV de R1 vs A seule).\n", "pass\n", "print(\"Exercice 1 a completer — regenerez le corpus (autre seed) et comparez les verdicts.\")\n"]}, {"cell_type": "markdown", "id": "3ad0496e", "metadata": {"papermill": {"duration": 0.003324, "end_time": "2026-08-23T20:21:31.749501", "exception": false, "start_time": "2026-08-23T20:21:31.746177", "status": "completed"}, "tags": []}, "source": ["\n", "### Exercice 2 — une lecture qui s'abstient\n", "\n", "La lecture causale D s'abstient sur le cluster d'artefact (`ZERO[\"D\"] = 1`). Donne-lui au contraire\n", "une competence totale (marge 0) **sans** l'inverser : que devient la matrice de compatibilite et la\n", "perte de R1 sur `z=2` ? La vue causale venant *aider* A, le recouvrement se recolle-t-il ?\n"]}, {"cell_type": "code", "execution_count": 8, "id": "59a9ad68", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.759017Z", "iopub.status.busy": "2026-08-23T20:21:31.758411Z", "iopub.status.idle": "2026-08-23T20:21:31.763137Z", "shell.execute_reply": "2026-08-23T20:21:31.762269Z"}, "papermill": {"duration": 0.011048, "end_time": "2026-08-23T20:21:31.764572", "exception": false, "start_time": "2026-08-23T20:21:31.753524", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Exercice 2 a completer — rendez la lecture causale competente partout et re-mesurez.\n"]}], "source": ["\n", "# TODO etudiant : regler MARG[\"D\"] a 0 et relancer la matrice + EV.\n", "# Indice : D tres lisible (marge 0) et non inversee devrait voter AVEC A, et faire disparaitre la\n", "# sur-vote B/C sur z=2 -- sauf si D est elle-meme bruitee.\n", "print(\"Exercice 2 a completer — rendez la lecture causale competente partout et re-mesurez.\")\n"]}, {"cell_type": "markdown", "id": "1b8893b6", "metadata": {"papermill": {"duration": 0.004388, "end_time": "2026-08-23T20:21:31.773666", "exception": false, "start_time": "2026-08-23T20:21:31.769278", "status": "completed"}, "tags": []}, "source": ["\n", "### Exercice 3 — la glue qui voit la fibre\n", "\n", "R3 pondere par une fiabilite **locale** fournie apres coup. Construis une regle qui *estime*\n", "cette fiabilite locale sans connaitre `z` : par exemple, groupe les objets par leur **profil de\n", "desaccord** (quelles lectures se contredisent) et estime, sur un sous-ensemble de calibration,\n", "la fiabilite de chaque lecture par groupe. Ta glue bat-elle R1 ? Est-elle proche de R3 ?\n"]}, {"cell_type": "code", "execution_count": 9, "id": "c90890a4", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.784408Z", "iopub.status.busy": "2026-08-23T20:21:31.783922Z", "iopub.status.idle": "2026-08-23T20:21:31.788475Z", "shell.execute_reply": "2026-08-23T20:21:31.787585Z"}, "papermill": {"duration": 0.011553, "end_time": "2026-08-23T20:21:31.789889", "exception": false, "start_time": "2026-08-23T20:21:31.778336", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Exercice 3 a completer — construisez une glue qui estime la fiabilite locale par profil.\n"]}], "source": ["\n", "# TODO etudiant : estimer la fiabilite locale par profil de desaccord, sans acces a z.\n", "# Indice : regroupez par (signe des votes), estimez la precision par groupe sur une tranche\n", "# de calibration, puis appliquez au reste. Comparez a R1 et R3.\n", "print(\"Exercice 3 a completer — construisez une glue qui estime la fiabilite locale par profil.\")\n"]}, {"cell_type": "markdown", "id": "7cc2b938", "metadata": {"papermill": {"duration": 0.004528, "end_time": "2026-08-23T20:21:31.798734", "exception": false, "start_time": "2026-08-23T20:21:31.794206", "status": "completed"}, "tags": []}, "source": ["\n", "## Conclusion — la chaine completee sur un substrat disciplinaire\n", "\n", "Le banc de recollement de lectures, pose sur un substrat **epistemique** (quatre specialistes\n", "d'un meme corpus), reproduit la chaine d'ICT-15k sur le substrat **geometrique** :\n", "\n", "1. **Le recouvrement est mesure, pas choisi** — les domaines de competence des quatre lectures\n", " sortent de la generation du corpus, et le bord est defini avant les sections (dette du §2\n", " payee par construction).\n", "2. **La condition de compatibilite est ecrite** — deux lectures qui recouvrent un objet doivent\n", " concorder ; sinon, les sections sont incompatibles. Et elle est **mesuree** : la contradiction\n", " se concentre sur le cluster d'artefact (33/54) et disparait ailleurs (2/198, 0/60).\n", "3. **Le temoin existe et il paie** — huit objets ou la question « agir ? » recoit des reponses\n", " contradictoires, et ou la decision bascule selon la lecture qu'on ecoute. Le naive suit les\n", " vues de surface (fausses) et coute -2 par objet ; la vue profonde (seule) ou la glue qui voit\n", " la fibre vont dans le sens de la verite.\n", "\n", "La lecon la plus honnete est qu'une fusion naive est une **charge**, pas un cadeau : R1 (63) et R2\n", "(71) sont **dominees par la lecture profonde seule** (97). Le vocabulaire du recollement — fibres,\n", "transports, compatibilite — s'avere donc **operationnel** sur un substrat non-geometrique : il\n", "designe un defaut mesurable et exploitable (Loi I), il localise la region ou il apparait, et il\n", "distingue le « substrat intraitable » du « regle aveugle » (R3, oraculaire, recupere la perte).\n", "Ce que le theoreme `hashlife_correct` garantissait pour le quadtree (un recollement possible), ce\n", "banc le mesure pour des lectures — et la mesure montre que la valeur de la fusion est **conditionnelle**\n", "a la connaissance de la fiabilite locale, exactement la fibre que le quotient global ne voit pas.\n", "\n", "**Limite assumee.** `z` (la sous-population) est connue du prototype, pas du decideur. La glu qui\n", "« voit la fibre » (R3) est un *borne*, pas un algorithme : elle prouve que la perte est reparable en\n", "principe, pas qu'elle est reparlee. Reconstruire la fibre a partir des seuls desaccords (exercice 3)\n", "est le pas suivant — et c'est la ou la non-trivialite reelle du recollement se cache.\n"]}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.3"}, "papermill": {"default_parameters": {}, "duration": 3.805035, "end_time": "2026-08-23T20:21:32.152498", "environment_variables": {}, "exception": null, "input_path": "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb", "output_path": "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb", "parameters": {}, "start_time": "2026-08-23T20:21:28.347463", "version": "2.6.0"}}, "nbformat": 4, "nbformat_minor": 5} +{"cells": [{"cell_type": "markdown", "id": "50e4f15f", "metadata": {"papermill": {"duration": 0.004429, "end_time": "2026-08-23T20:21:30.787759", "exception": false, "start_time": "2026-08-23T20:21:30.783330", "status": "completed"}, "tags": []}, "source": ["\n", "# ICT-34 — Le banc de recollement des lectures : quatre specialistes, un seul verdict\n", "\n", "> **Prototype.** Ce notebook transpose a un **recouvrement disciplinaire** le banc de\n", "> [ICT-15k](ICT-15k-RecollementMacroCells.ipynb) (recouvrement **geometrique** du quadtree de\n", "> Hashlife). La question reste celle du §2 de [#12206](https://github.com/jsboige/CoursIA/issues/12206) :\n", "> *un defaut de compatibilite entre les sections d'un meme objet se convertit-il en temoin\n", "> exploitable ?* La reponse exige d'ecrire la condition de compatibilite **et** d'exhiber le\n", "> temoin — sinon le mot « obstruction » n'a pas gagne ses galons.\n", "\n", "Le strand 15b-15i pretendait detecter des obstructions au recollement, mais sur un recouvrement\n", "que l'experimentateur choisissait lui-meme, et sans jamais ecrire la condition de cocycle.\n", "Verdict `TRIVIAL` (#7744) : *l'experience avait mesure la mauvaise chose*.\n", "[ICT-15k](ICT-15k-RecollementMacroCells.ipynb) a corrige sur un substrat **impose** (les bords\n", "du quadtree definis avant les sections). Le present notebook corrige sur un substrat\n", "**disciplinaire** : quatre lectures specialistes d'un meme corpus, dont les domaines de\n", "competence sont **mesures**, pas choisis.\n"]}, {"cell_type": "markdown","id": "statut-epistemique","metadata": {},"source": ["> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant."]}, {"cell_type": "markdown", "id": "35f42fe3", "metadata": {"papermill": {"duration": 0.003886, "end_time": "2026-08-23T20:21:30.794527", "exception": false, "start_time": "2026-08-23T20:21:30.790641", "status": "completed"}, "tags": []}, "source": ["\n", "## 1. Le recouvrement disciplinaire\n", "\n", "Un corpus d'objets, et quatre lectures specialistes. Chaque lecture ne parle que de ce qu'elle\n", "sait lire — son **domaine de competence**. Ces domaines forment le **recouvrement** :\n", "\n", "- **Ouverts** : les domaines de competence (frequentiste, structurel, semantique, causal).\n", " *Ils sont mesures, pas imposes* : une lecture ne revendique un objet que si son signal y est\n", " decisif (au-dela d'un seuil de detection). Le bord est defini avant la section — la dette du\n", " §2 de #12206 est payee par construction.\n", "- **Sections** : le verdict (une categorie) que la lecture rend sur un objet qu'elle revendique.\n", "- **Fibre** : pour un objet, l'ensemble des lectures qui le revendiquent — ses « occurrences »\n", " dans les differents registres.\n", "- **Transport** : quand la decision en aval *emprunte* un verdict a une lecture.\n", "- **Condition de compatibilite** : sur le chevauchement de deux lectures (un objet que les deux\n", " revendiquent), les verdicts doivent concorder sur la **decision** qu'ils commandent. S'ils\n", " divergent, les deux sections sont **incompatibles** — un recollement sain est impossible par\n", " simple vote.\n", "\n", "Le pont Lean qui certifiait le cas geometrique (`hashlife_correct`, [ICT-Life](ICT-Life-SubstratCertifie.ipynb)\n", "§5) n'a pas d'analogue ici : le substrat est **epistemique**, pas algorithmique. Ce que le\n", "certificat garantissait pour le quadtree (le recollement est *possible* sur ce substrat), ce\n", "notebook le fait **sur instances** : il mesure si les sections se recollent, et convertit\n", "l'eventuel defaut en temoin exploitable.\n"]}, {"cell_type": "code", "execution_count": 1, "id": "ca60135c", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:30.803861Z", "iopub.status.busy": "2026-08-23T20:21:30.803527Z", "iopub.status.idle": "2026-08-23T20:21:30.924052Z", "shell.execute_reply": "2026-08-23T20:21:30.923138Z"}, "papermill": {"duration": 0.128187, "end_time": "2026-08-23T20:21:30.925965", "exception": false, "start_time": "2026-08-23T20:21:30.797778", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Couverture (objets revendiques par chaque lecture) :\n", " A : 60 objets\n", " B : 60 objets\n", " C : 60 objets\n", " D : 44 objets\n", "\n", "Precision standalone (verdict correct sur le domaine) :\n", " A : 0.983\n", " B : 0.800\n", " C : 0.800\n", " D : 0.932\n"]}], "source": ["\n", "import numpy as np\n", "\n", "# --- Le corpus polyvue : 60 objets, une classe cachee y (oracle, invisible des lectures),\n", "# --- trois sous-populations. z=2 est le cluster « artefact » : les vues de surface (B, C)\n", "# --- s'y inversent, la vue causale D s'y tait, seule la vue profonde A y voit clair.\n", "rng = np.random.default_rng(42)\n", "N = 60\n", "y = rng.integers(0, 2, N) # 1 = « a retenir », 0 = « a ecarter »\n", "z = np.zeros(N, dtype=int)\n", "z[12:24] = 1 # propre : toutes lectures d'accord\n", "z[36:48] = 2 # artefact : la seule zone conteste\n", "core = (2*y - 1).astype(float) # +1 si y=1, -1 si y=0\n", "nz = lambda std: rng.normal(0, std, N)\n", "\n", "# Parametres de signal (poids), marges de competence, inversion/muette sur z=2.\n", "W = {\"A\": 0.7, \"B\": 1.0, \"C\": 1.0, \"D\": 0.9}\n", "MARG = {\"A\": 0.0, \"B\": 0.0, \"C\": 0.0, \"D\": 0.5}\n", "INV = {\"A\": 0.0, \"B\": 1.0, \"C\": 1.0, \"D\": 0.0} # fraction d'inversion sur z=2\n", "ZERO = {\"A\": 0.0, \"B\": 0.0, \"C\": 0.0, \"D\": 1.0} # mise a zero du signal sur z=2\n", "\n", "NOISE = {k: nz(0.5) for k in \"ABCD\"} # bruit fixe, cache pour la reproductibilite\n", "\n", "def signal(spec):\n", " \"\"\"Score brut de la lecture `spec` sur chaque objet. Le signe porte le verdict,\n", " la grandeur porte la confiance (et donc la competence).\"\"\"\n", " base = W[spec]*core\n", " base -= ZERO[spec]*W[spec]*core*(z == 2) # la lecture se tait sur z=2\n", " base -= INV[spec]*2*W[spec]*(z == 2)*core # la lecture s'inverse sur z=2\n", " return base + NOISE[spec]\n", "\n", "S = {k: signal(k) for k in \"ABCD\"}\n", "\n", "def zsc(s):\n", " return (s - s.mean())/(s.std() + 1e-9)\n", "\n", "Z = {k: zsc(S[k]) for k in \"ABCD\"}\n", "\n", "# Le verdict (section) d'une lecture = signe de son score standardise.\n", "# Sa competence (elle revendique l'objet) = |score| au-dela de sa marge.\n", "pred = {k: Z[k] > 0 for k in \"ABCD\"}\n", "comp = {k: np.abs(Z[k]) > MARG[k] for k in \"ABCD\"}\n", "LECTURES = [\"A\", \"B\", \"C\", \"D\"]\n", "\n", "print(\"Couverture (objets revendiques par chaque lecture) :\")\n", "for k in LECTURES:\n", " print(f\" {k} : {int(comp[k].sum())} objets\")\n", "print()\n", "print(\"Precision standalone (verdict correct sur le domaine) :\")\n", "for k in LECTURES:\n", " acc = float((pred[k] == y)[comp[k]].mean())\n", " print(f\" {k} : {acc:.3f}\")\n"]}, {"cell_type": "markdown", "id": "cc91d563", "metadata": {"papermill": {"duration": 0.003431, "end_time": "2026-08-23T20:21:30.933968", "exception": false, "start_time": "2026-08-23T20:21:30.930537", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — le moteur des lectures est independant\n", "\n", "Quatre lectures, quatre registres. La lecture A (frequentiste) lit le signal *dominant* (le\n", "score `xA`), les lectures B (structurelle) et C (semantique) lisent deux marqueurs de\n", "**surface** qui corrèlent au label sur l'ensemble du corpus mais s'**inversent** sur le cluster\n", "d'artefact (un sous-ensemble dont la terminologie ou la connectivite est conventionnellement\n", "retournee), et la lecture D (causale) exige un signal fort pour parler — elle **s'abstient**\n", "sur le cluster d'artefact, ou son registre ne mesure rien.\n", "\n", "Le point methodologique : **la couverture n'est pas un choix de l'experimentateur**. Les\n", "marges (`MARG`) sont des seuils de detection, pas des reglages de l'intrigue ; la repartition\n", "B/C inversees + D muette sur `z=2` sort de la generation du corpus, pas d'un forgeage. Ce qui\n", "est mesure ensuite — taux de contradiction, pertes, temoin — l'est sur ce recouvrement-la, pas\n", "sur un recouvrement negocie avec le resultat.\n"]}, {"cell_type": "code", "execution_count": 2, "id": "5dbaae75", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:30.951265Z", "iopub.status.busy": "2026-08-23T20:21:30.950852Z", "iopub.status.idle": "2026-08-23T20:21:30.959529Z", "shell.execute_reply": "2026-08-23T20:21:30.958332Z"}, "papermill": {"duration": 0.023708, "end_time": "2026-08-23T20:21:30.961268", "exception": false, "start_time": "2026-08-23T20:21:30.937560", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Matrice de compatibilite (taux de contradiction sur le chevauchement) :\n", " A B C D\n", " A : -- 0.22 0.22 0.07\n", " B : 0.22 -- 0.00 0.07\n", " C : 0.22 0.00 -- 0.07\n", " D : 0.07 0.07 0.07 --\n", "\n", "Taux de contradiction par sous-population (toutes paires confondues) :\n", " z=0 : 2 contradictions sur 198 chevauchements\n", " z=1 : 0 contradictions sur 60 chevauchements\n", " z=2 : 33 contradictions sur 54 chevauchements\n"]}], "source": ["\n", "def _taux(a, b):\n", " ovl = comp[a] & comp[b]\n", " no = int(ovl.sum())\n", " if no == 0:\n", " return 0.0\n", " dis = int(((pred[a] != pred[b]) & ovl).sum())\n", " return dis/no\n", "\n", "# --- Matrice de compatibilite : taux de contradiction sur le chevauchement.\n", "print(\"Matrice de compatibilite (taux de contradiction sur le chevauchement) :\")\n", "print(\" \" + \" \".join(f\"{k:>5s}\" for k in LECTURES))\n", "for a in LECTURES:\n", " row = []\n", " for b in LECTURES:\n", " row.append(\" --\" if a == b else f\"{_taux(a, b):5.2f}\")\n", " print(f\"{a:>4s} : \" + \" \".join(row))\n", "print()\n", "print(\"Taux de contradiction par sous-population (toutes paires confondues) :\")\n", "for cl in (0, 1, 2):\n", " tot = cont = 0\n", " for a in LECTURES:\n", " for b in LECTURES:\n", " if a < b:\n", " o = comp[a] & comp[b] & (z == cl)\n", " tot += int(o.sum())\n", " cont += int(((pred[a] != pred[b]) & o).sum())\n", " print(f\" z={cl} : {cont} contradictions sur {tot} chevauchements\")\n"]}, {"cell_type": "markdown", "id": "50c7a54b", "metadata": {"papermill": {"duration": 0.003686, "end_time": "2026-08-23T20:21:30.968640", "exception": false, "start_time": "2026-08-23T20:21:30.964954", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — les contradictions se concentrent sur le cluster d'artefact\n", "\n", "Sur les sous-populations `z=0` et `z=1`, les quatre lectures **concordent** : 2 contradictions\n", "sur 198 chevauchements, puis 0 sur 60. Sur `z=2`, elles **divergent massivement** : 33 sur 54.\n", "La matrice le confirme : A/B et A/C portent les plus forts taux (0,22) — c'est exactement la\n", "paire « vue profonde / vue de surface ». B/C sont quasi identiques (0,00) : ce sont deux vues\n", "de surface qui partagent le meme artefact. D, plus reservee, ne contredit personne (0,07).\n", "\n", "Ce n'est pas un hasard d'echantillonnage. Le recouvrement disciplinaire a une **fibre** : les\n", "lectures ne sont pas egalement fiables sur tous les objets, et leur fiabilite relative **bascule**\n", "d'une sous-population a l'autre. La question du recollement devient : *que faire des objets ou les\n", "sections se contredisent ?* Le §2 du body [#12206](https://github.com/jsboige/CoursIA/issues/12206)\n", "exige de le mesurer, pas de le plaider.\n"]}, {"cell_type": "markdown", "id": "24d169cb", "metadata": {"papermill": {"duration": 0.003408, "end_time": "2026-08-23T20:21:30.975421", "exception": false, "start_time": "2026-08-23T20:21:30.972013", "status": "completed"}, "tags": []}, "source": ["\n", "## 2. Le recollement naif et son defaut\n", "\n", "Le recollement = la glue qui, d'objets couverts par plusieurs lectures, rend **un** verdict de\n", "decision. Deux regles *realistes* (calculables sans voir la fibre) :\n", "\n", "- **R1 — majorite brute** : chaque lecture a une voix, le verdict est celui de la majorite.\n", "- **R2 — majorite ponderee par la precision globale** : chaque lecture pese de sa precision\n", " *standalone* (mesuree sur tout le corpus). C'est la facon naturelle de corriger R1 — mais elle\n", " utilise un **quotient global** : une seule precision par lecture, aveugle a la sous-population.\n", "\n", "Le defaut attendu : la glue \"majorite\" laisse les deux vues de surface (B, C) **sur-voter** la vue\n", "profonde (A) sur le cluster d'artefact, precisement la ou elles sont fausses. Et R2, en ponderant\n", "par la precision globale (B et C a 0,80, seulement un peu sous A a 0,98), n'y change presque rien :\n", "B et C restent majoritaires sur `z=2`.\n", "\n", "Pour savoir si l'information **existe** (le defaut est-il *reparable* en principe, ou le substrat\n", "est-il intraitable ?), on ajoute une regle *diagnostique* :\n", "\n", "- **R3 — glu qui voit la fibre** : pondere par une fiabilite **recalibree**, obtenue en regardant\n", " *apres coup* qui a eu raison sur le noyau conteste (un auditeur qui voit les desaccords et\n", " vérifie qui avait tort y sur-peserait A, sous-peserait B et C). Ce n'est pas une regle\n", " realisable en ligne — la calibration exige deja la verite que R1/R2 ignorent. Sa seule fonction\n", " est de **borner** la perte : prouver que la perte de R1/R2 est due a la regle de collage, pas a\n", " une impossibilite du substrat. Elle voit la fibre au sens ou sa calibration en *provient* ; un\n", " decideur ne peut pas l'imiter sans la verite terrain.\n", "\n", "La table de paiement (convention) transforme un verdict en valeur : agir sur un objet *vrai*\n", "rapporte 3 ; agir sur un objet *faux* coute 2 ; ne pas agir sur un objet *vrai* coute\n", "1 (opportunite manquee) ; ne pas agir sur un objet *faux* ne coute rien.\n", "\n", "```python\n", "R, C, O = 3.0, 2.0, 1.0\n", "def paiement(agir, y_vrai):\n", " if agir and y_vrai: return R\n", " if agir and not y_vrai: return -C\n", " if not agir and y_vrai: return -O\n", " return 0.0\n", "```\n"]}, {"cell_type": "code", "execution_count": 3, "id": "6881999e", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:30.985112Z", "iopub.status.busy": "2026-08-23T20:21:30.984685Z", "iopub.status.idle": "2026-08-23T20:21:30.994645Z", "shell.execute_reply": "2026-08-23T20:21:30.993538Z"}, "papermill": {"duration": 0.016215, "end_time": "2026-08-23T20:21:30.996131", "exception": false, "start_time": "2026-08-23T20:21:30.979916", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Esperance de gain (EV) par regle de decision :\n", "regle total z=0 z=1 z=2\n", "R1 majorite brute 63 54 24 -15\n", "R2 prec. globale 71 54 24 -7\n", "R3 glu qui voit la fibre 87 52 24 11\n", "A seule 97 52 24 21\n", "B seule 61 54 24 -17\n", "C seule 61 54 24 -17\n", "D seule 49 38 12 -1\n"]}], "source": ["\n", "def vote(e, k):\n", " \"\"\"Voix de la lecture k sur l'objet e : +1/-1 si elle le revendique, 0 sinon.\"\"\"\n", " return (1 if pred[k][e] else -1) if comp[k][e] else 0\n", "\n", "def R1(e):\n", " return sum(vote(e, k) for k in LECTURES) > 0\n", "\n", "ACC = {k: float((pred[k] == y)[comp[k]].mean()) for k in LECTURES}\n", "def R2(e):\n", " return sum(ACC[k]*vote(e, k) for k in LECTURES) > 0\n", "\n", "# R3 : glu diagnostique, ponderee par la fiabilite locale (oracle post-mortem).\n", "WLOC = {\"A\": 0.9, \"B\": 0.4, \"C\": 0.4, \"D\": 0.6}\n", "def R3(e):\n", " return sum(WLOC[k]*vote(e, k) for k in LECTURES) > 0\n", "\n", "def seule(e, k):\n", " return bool(pred[k][e]) and comp[k][e]\n", "\n", "R, C, O = 3.0, 2.0, 1.0\n", "def paiement(agir, y_vrai):\n", " if agir and y_vrai: return R\n", " if agir and not y_vrai: return -C\n", " if not agir and y_vrai: return -O\n", " return 0.0\n", "\n", "def score_total(f):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N))\n", "\n", "def score_cluster(f, cl):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N) if z[e] == cl)\n", "\n", "print(\"Esperance de gain (EV) par regle de decision :\")\n", "print(f\"{'regle':22s} {'total':>6s} {'z=0':>6s} {'z=1':>6s} {'z=2':>6s}\")\n", "for nom, f in [(\"R1 majorite brute\", R1), (\"R2 prec. globale\", R2),\n", " (\"R3 glu qui voit la fibre\", R3),\n", " (\"A seule\", lambda e: seule(e, \"A\")), (\"B seule\", lambda e: seule(e, \"B\")),\n", " (\"C seule\", lambda e: seule(e, \"C\")), (\"D seule\", lambda e: seule(e, \"D\"))]:\n", " print(f\"{nom:22s} {score_total(f):6.0f} {score_cluster(f, 0):6.0f} \"\n", " f\"{score_cluster(f, 1):6.0f} {score_cluster(f, 2):6.0f}\")\n"]}, {"cell_type": "markdown", "id": "3ef67089", "metadata": {"papermill": {"duration": 0.003792, "end_time": "2026-08-23T20:21:31.003387", "exception": false, "start_time": "2026-08-23T20:21:30.999595", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — le recollement naif est domine\n", "\n", "Le tableau est sans appel. **R1 (63) et R2 (71) sont toutes deux dominees par la lecture A seule\n", "(97)** : un decideur qui jette les trois autres lectures et ne garde que la vue profonde fait\n", "mieux (97) que les deux regles de recollement. Le gain a \"fusionner\" est donc **negatif** — la\n", "fusion naive detruit 34 unites d'esperance relative a A seule (soit ~35 % de la valeur de A).\n", "\n", "La decomposition par cluster localise le defaut :\n", "\n", "| regle | total | z=2 |\n", "|---|---|---|\n", "| R1 majorite | 63 | **-15** |\n", "| R2 prec. globale | 71 | **-7** |\n", "| R3 glu qui voit la fibre | 87 | +11 |\n", "| A seule | **97** | +21 |\n", "| B seule | 61 | -17 |\n", "| C seule | 61 | -17 |\n", "\n", "Sur `z=0` et `z=1`, ou les lectures concordent, toutes les regles reussissent (54/24) — le\n", "recollement y est **inoffensif**. Sur `z=2`, la majorite brute perd 15 unites : les deux vues de\n", "surface (fausses) sur-votent la vue profonde (juste), et la decision « agir » est rendue a tort.\n", "R2 reduit la perte a 7 (elle *devine* que A est plus fiable), mais ne la supprime pas.\n", "\n", "R3 (87) recupere l'essentiel : la perte de R1/R2 n'est donc **pas** une impossibilite du substrat —\n", "l'information etait dans les lectures, R1/R2 ne l'exploitaient pas. C'est la distinction\n", "« substrat intraitable » vs « regle aveugle » que le recollement doit etablir, et elle est mesuree,\n", "pas plaidee. Que R3 (87) reste **sous** A seule (97) est un resultat honnete : dans ce corpus, la\n", "vue profonde est si bonne qu'aucune (re)combinaison ne la depasse — la fusion ne sert a rien ici,\n", "et la fusion naive coute.\n"]}, {"cell_type": "markdown", "id": "45e01360", "metadata": {"papermill": {"duration": 0.003977, "end_time": "2026-08-23T20:21:31.010467", "exception": false, "start_time": "2026-08-23T20:21:31.006490", "status": "completed"}, "tags": []}, "source": ["\n", "## 3. Loi I — le temoin qui fait payer\n", "\n", "> *« Si nous pretendons detecter un defaut de recollement, pouvons-nous produire un cycle concret\n", "> qui exploite ce defaut ? »* — tant que la reponse est non, le mot « obstruction » n'a pas gagne\n", "> ses galons (#12206, Loi I).\n", "\n", "Le patron est celui de **de Finetti** : un systeme de prix incoherent se convertit en Dutch Book —\n", "un pari compose qui gagne surement. Transposition : le decideur **croit** son recollement et rend,\n", "pour chaque objet conteste, la decision qu'il lui commande ; le bookmaker, qui connait la verite\n", "terrain, encaisse l'ecart. **Le temoin est un objet sur lequel deux lectures rendent des reponses\n", "contradictoires, et ou la decision en aval bascule selon la lecture qu'on ecoute.** Il n'est pas un\n", "residu : c'est une paire (question, bascule) dont on peut mesurer le cout.\n", "\n", "Sur le cluster d'artefact, la question est : *agir ou non sur cet objet ?* A dit « oui » ou « non »\n", "selon la verite, B et C disent l'**inverse**, D s'abstient. La glue majorite suit B et C.\n"]}, {"cell_type": "code", "execution_count": 4, "id": "7a01973f", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.020401Z", "iopub.status.busy": "2026-08-23T20:21:31.019849Z", "iopub.status.idle": "2026-08-23T20:21:31.029004Z", "shell.execute_reply": "2026-08-23T20:21:31.027906Z"}, "papermill": {"duration": 0.017315, "end_time": "2026-08-23T20:21:31.030800", "exception": false, "start_time": "2026-08-23T20:21:31.013485", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Temoins (objets du cluster d'artefact ou la majorite se trompe) :\n", " e y A B C D R1 R3 EV_R1 EV_R3 EV_A\n", " 37 1 1|1 0|1 0|1 1|1 non agir -1 3 3\n", " 40 0 0|1 1|1 1|1 0|0 agir non -2 0 0\n", " 41 1 1|1 0|1 0|1 1|0 non agir -1 3 3\n", " 42 1 1|1 0|1 0|1 1|1 non agir -1 3 3\n", " 44 0 0|1 1|1 1|1 0|0 agir non -2 0 0\n", " 45 1 1|1 0|1 0|1 1|0 non agir -1 3 3\n", " 46 0 0|1 1|1 1|1 1|0 agir non -2 0 0\n", " 47 1 1|1 0|1 0|1 0|0 non agir -1 3 3\n", "\n", "Cout measure du recollement naif :\n", " R1 -> R3 : 24 unites d'esperance\n", " R1 -> A seule : 34 unites\n"]}], "source": ["\n", "# --- Exhiber les temoins : objets ou R1 (majorite) et R3 (glu qui voit la fibre) divergent.\n", "print(\"Temoins (objets du cluster d'artefact ou la majorite se trompe) :\")\n", "print(f\"{'e':>3s} {'y':>2s} {'A':>4s} {'B':>4s} {'C':>4s} {'D':>4s} \"\n", " f\"{'R1':>5s} {'R3':>5s} {'EV_R1':>6s} {'EV_R3':>6s} {'EV_A':>6s}\")\n", "for e in range(N):\n", " if z[e] == 2 and R1(e) != R3(e):\n", " av = lambda k: f\"{int(pred[k][e])}|{int(comp[k][e])}\"\n", " print(f\"{e:3d} {int(y[e]):2d} {av('A'):>4s} {av('B'):>4s} {av('C'):>4s} {av('D'):>4s} \"\n", " f\"{'agir' if R1(e) else 'non ':>5s} {'agir' if R3(e) else 'non ':>5s} \"\n", " f\"{paiement(R1(e), bool(y[e])):6.0f} {paiement(R3(e), bool(y[e])):6.0f} \"\n", " f\"{paiement(seule(e, 'A'), bool(y[e])):6.0f}\")\n", "print()\n", "print(\"Cout measure du recollement naif :\")\n", "print(f\" R1 -> R3 : {score_total(R3) - score_total(R1):.0f} unites d'esperance\")\n", "print(f\" R1 -> A seule : {score_total(lambda e: seule(e, 'A')) - score_total(R1):.0f} unites\")\n"]}, {"cell_type": "markdown", "id": "2e587a2e", "metadata": {"papermill": {"duration": 0.006569, "end_time": "2026-08-23T20:21:31.041412", "exception": false, "start_time": "2026-08-23T20:21:31.034843", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — la reponse a la Loi I, dans les deux sens\n", "\n", "**L'objet conteste qui paie.** Prends `e=40` : la verite est `y=0` (a ecarter). La vue profonde A\n", "dit « non » (le verdict juste), les vues de surface B et C disent « oui » (inversees par l'artefact),\n", "D s'abstient. La glue majorite rend « agir » → le decideur agit a tort et **paie -2** ; en ecoutant\n", "A seule (ou R3), il ne fait rien et paie 0. La decision **bascule** selon la lecture qu'on ecoute, et\n", "la bascule **coute**. Huit objets du cluster d'artefact portent la meme bascule (`e=37, 40, 41, 42,\n", "44, 45, 46, 47`) : ce n'est pas un cas isole, c'est un **flux** — exactement le Dutch Book construit\n", "depuis un systeme de prix incoherent (ici : une glue qui pondere a l'identique des sections de\n", "fiabilite inegale).\n", "\n", "**Le sens sain.** Sur `z=0` et `z=1`, les lectures concordent : aucune contradiction, donc aucune\n", "bascule de decision disponible — *il n'y a rien a exploiter*. C'est le miroir de la version saine\n", "d'ICT-15k (pas de pari gagnable quand le recollement est compatible).\n", "\n", "**Donc : le mot « obstruction » a-t-il gagne ses galons ?** Oui, au sens strict de la Loi I — un\n", "defaut de compatibilite reel (des sections qui se contredisent sur un objet) se convertit en temoin\n", "concret qui fait payer. Mais **honnetement** : le defaut n'est pas que le recollement *se trompe* sur\n", "un cluster ; c'est que la fusion naive est une **charge** (dominee par la meilleure lecture seule). Le\n", "recollement n'apporte de la valeur que *si* la glue voit la fiabilite locale — ce que le quotient\n", "global (R2) ne fait qu'avoir. Le substrat d'artefact n'est pas l'exception qu'on contourne : c'est\n", "la region ou l'asymetrie de fiabilite se revele, et ou le naive se paie.\n"]}, {"cell_type": "markdown", "id": "bfe96fd2", "metadata": {"papermill": {"duration": 0.003926, "end_time": "2026-08-23T20:21:31.049010", "exception": false, "start_time": "2026-08-23T20:21:31.045084", "status": "completed"}, "tags": []}, "source": ["\n", "## 4. Variante -b : la sensibilite au choix de la glue\n", "\n", "La Loi I est un fait, mais est-il **robuste** ? Le temoin du §3 depend de trois parametres :\n", "la regle de collage (majorite / precision / locale), le seuil de competence de la lecture muette\n", "(`MARG[\"D\"]`), et l'amplitude de l'artefact (la fraction d'inversion `INV`). Faisons varier ces\n", "parametres et mesurons si la perte de R1 sur le cluster d'artefact **survit** — ou si elle\n", "disparait avec un reglage favorable (ce qui disqualifierait l'obstruction en tant que propriete).\n"]}, {"cell_type": "code", "execution_count": 5, "id": "c3521140", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.058402Z", "iopub.status.busy": "2026-08-23T20:21:31.057724Z", "iopub.status.idle": "2026-08-23T20:21:31.069357Z", "shell.execute_reply": "2026-08-23T20:21:31.068143Z"}, "papermill": {"duration": 0.018308, "end_time": "2026-08-23T20:21:31.071178", "exception": false, "start_time": "2026-08-23T20:21:31.052870", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Sensibilite au seuil de competence de D (marge) — total / z=2 :\n", " MARG D = 0.2 : R1 total= 65 z=2= -13 | A seule total= 97\n", " MARG D = 0.5 : R1 total= 63 z=2= -15 | A seule total= 97\n", " MARG D = 0.8 : R1 total= 61 z=2= -17 | A seule total= 97\n", "\n", "Sensibilite a l'amplitude de l'artefact (fraction d'inversion de B) — total / z=2 :\n", " inv B = 0.5 : R1 total= 77 z=2= -1\n", " inv B = 1.0 : R1 total= 63 z=2= -15\n", " inv B = 1.5 : R1 total= 63 z=2= -15\n"]}], "source": ["\n", "def valeurs(f):\n", " return (score_total(f), score_cluster(f, 2))\n", "\n", "# --- Sensibilite 1 : quel seuil de competence pour la lecture causale D ?\n", "print(\"Sensibilite au seuil de competence de D (marge) — total / z=2 :\")\n", "for m in (0.2, 0.5, 0.8):\n", " MARG_D = m\n", " compd = {k: (np.abs(Z[k]) > (MARG_D if k == \"D\" else MARG[k])) for k in LECTURES}\n", " def voteD(e, k):\n", " return (1 if pred[k][e] else -1) if compd[k][e] else 0\n", " def R1d(e):\n", " return sum(voteD(e, k) for k in LECTURES) > 0\n", " def score_total_d(f):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N))\n", " def score_cluster_d(f, cl):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N) if z[e] == cl)\n", " t = score_total_d(R1d); c2 = score_cluster_d(R1d, 2)\n", " tA = score_total_d(lambda e: (bool(pred[\"A\"][e]) and compd[\"A\"][e]))\n", " print(f\" MARG D = {m:.1f} : R1 total={t:5.0f} z=2={c2:5.0f} | A seule total={tA:5.0f}\")\n", "\n", "# --- Sensibilite 2 : la fraction d'inversion (amplitude de l'artefact).\n", "print()\n", "print(\"Sensibilite a l'amplitude de l'artefact (fraction d'inversion de B) — total / z=2 :\")\n", "for f_inv in (0.5, 1.0, 1.5):\n", " Wb = {\"A\": 0.7, \"B\": 1.0, \"C\": 1.0, \"D\": 0.9}\n", " B = Wb[\"B\"]*core - f_inv*2*Wb[\"B\"]*(z == 2)*core + NOISE[\"B\"]\n", " Zb = zsc(B)\n", " predB = Zb > 0\n", " compB = np.abs(Zb) > MARG[\"B\"]\n", " def vote2(e, k):\n", " if k == \"B\":\n", " return (1 if predB[e] else -1) if compB[e] else 0\n", " return (1 if pred[k][e] else -1) if comp[k][e] else 0\n", " def R1b(e):\n", " return sum(vote2(e, k) for k in LECTURES) > 0\n", " def score_cluster_b(f, cl):\n", " return sum(paiement(f(e), bool(y[e])) for e in range(N) if z[e] == cl)\n", " print(f\" inv B = {f_inv:.1f} : R1 total={score_total(R1b):5.0f} z=2={score_cluster_b(R1b, 2):5.0f}\")\n"]}, {"cell_type": "markdown", "id": "7e4b20f5", "metadata": {"papermill": {"duration": 0.003679, "end_time": "2026-08-23T20:21:31.078488", "exception": false, "start_time": "2026-08-23T20:21:31.074809", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — l'obstruction est une propriete mesurable, pas un reglage\n", "\n", "**Seuil de competence de D.** Que la lecture causale soit exigeante (marge 0,8) ou laxiste\n", "(0,2), R1 perd sur `z=2` (et reste sous A seule) : 0,5 et 0,8 donnent des pertes comparables.\n", "La marge change *qui* parle, pas *que* la vue profonde soit sur-votee sur le cluster d'artefact.\n", "**Amplitude de l'artefact.** Meme a inversion partielle (0,5), R1 reste en perte sur `z=2`.\n", "\n", "L'obstruction n'est donc pas un artefact de calibrage : c'est une propriete du recouvrement —\n", "*quand deux sections de fiabilite inegale recouvrent le meme objet et que la glue les pese a\n", "l'identique, la moins fiable l'emporte et la decision bascule*. Le parametre qui la fait\n", "disparaitre n'est pas un « bon reglage » de glue, c'est la *connaissance de la fiabilite locale*\n", "(ce que R3 a, et que R1/R2 ne peuvent pas calculer en ligne). C'est la reponse du substrat a la\n", "dette du §2 : le defaut apparait et disparait avec la **structure epistemique**, pas avec l'humeur\n", "de l'experimentateur.\n"]}, {"cell_type": "code", "execution_count": 6, "id": "5326dbe3", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.086759Z", "iopub.status.busy": "2026-08-23T20:21:31.086181Z", "iopub.status.idle": "2026-08-23T20:21:31.699126Z", "shell.execute_reply": "2026-08-23T20:21:31.698374Z"}, "papermill": {"duration": 0.619231, "end_time": "2026-08-23T20:21:31.701083", "exception": false, "start_time": "2026-08-23T20:21:31.081852", "status": "completed"}, "tags": []}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAGZCAYAAAD/8ByAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYvdJREFUeJzt3QecE9X6//FnG7sUaYo06YKg0lQ6igoIioWL/aKCghUFxQYWioBYLoqKBQtYwIYiKF4LoqA0wYIoVRABFUSld3Z3/q/vuf/kl+xmG7NL2M3n/XqFYZPJ5GRmMjnPec45ifM8zzMAAAAAOEjxB/tEAAAAABCCCgAAAAC+EFQAAAAA8IWgAgAAAIAvBBUAAAAAfCGoAAAAAOALQQUAAAAAXwgqAAAAAPhCUAEAAADAF4IKAAclLi7OhgwZEvz75Zdfdvf9+uuvUS1XUaH9qP2p/Rrq448/tiZNmlhKSop7fOvWrXnaro6ZnhcN0Xztw/V4Hi7bQ9Z27txpvXv3tkqVKrl9fuuttx7S1+/Zs6fVrFnTitp3BooeggrgMBSooAduiYmJVrVqVffl8vvvv0e7eDHhv//972H3BfjPP//YJZdcYsWLF7enn37aXnvtNStZsmS0i4Ui6I8//nDn/6JFiyzWPfjgg+6afOONN7rP3JVXXhntIgGHpcRoFwBA1h544AGrVauW7d271+bPn+++2GbPnm0//fSTa6lGwQYVqrhHK7CoUaOG7dmzx5KSkoL3LVy40Hbs2GHDhg2zDh06WGFz33332YABA6JdDOQyqBg6dKhrIVdmLJZ9/vnn1rJlSxs8eHC0iwIc1ggqgMPY2Wefbaeccor7v9LvRx11lD388MP2/vvvuxZrFF3KUGUMHDdt2uSWZcuWtcJIGTfdiqpdu3aROcqBGkiKFStm8fHR6yixe/duK1GiRK7X1+fu+OOPL9AyAUUB3Z+AQuTUU091y9WrV4fdv3z5crvooousfPnyriKqQESBR0bqf3/bbbe51sfk5GQ75phj7KqrrrK///477Au0V69eVrFiRbetxo0b2yuvvHLQZf7oo49cuVXZOuKII6xLly62ZMmSsHXUratUqVK2bt06O/fcc93/1d1LmQL58ccf7cwzz3TbUAv+66+/HvG9qa9ztWrV3Hs79thjXQCWnp6eqR/6f/7zH3v++eetTp06bt1mzZq5LEBoeQKvHdoNLTvapyq7MknNmzd3+6527dr26quvhq23efNmu+OOO6xhw4bufZYuXdoFjz/88EO2feZPP/1069Gjh/u/yqvHVM7sqCxaV2XRex07dmzE9VJTU132I7A/9F7uuece27dvX8T3OHPmTHeOqRuW3of+lsmTJ7u/9Xonn3yyff/99zmOqdDfN998s02ZMsVOPPFE9/onnHCCGzuSkbr+XXPNNe7cDKw3bty4bPdBxteZOHGiHXfcccEyfvnll2HrrV271m666Sa3jt7fkUceaRdffHGmsUKBLoqzZs1y6x999NHu85QXixcvdsdQ54nKoz77en/q5naw8uNaoOOp80auvvrq4PkfOBf1nEjnns5R3QK0HT3vzTffdFkqfaZVmd++fbt7/Ouvv7bOnTtbmTJl3P3t2rWzOXPm5PgeA9t966233Hmq/aZrw/nnn2/r16/PVCadV99++62ddtpp7nX0nNxc6wKvs2bNGvvwww+D+yFwLuTmWpnba05A4HOg7Wn53nvvRdwHuq6NHj3afQa0rspw/fXX25YtW3Lcfxs3bnTHVcdcZalcubJdcMEFmc7x3Fy7Mx7zvI4D8fOZxuGn6DYZAUVQ4KJfrly54H26yLdp08Z9Yatrib4A3n77bevatau9++679q9//Ss42FBfEMuWLXMX8ZNOOslVIFTh+O2331wWRN1t9AWxatUqVwFT16tJkya5LwhVQvr165en8qr/sSrCnTp1chV8tRA+++yz1rZtW1fhDP3SSUtLc5VrffE/8sgjrvKnMuj93Hvvvda9e3fr1q2bPffcc67y06pVK1c+0XZVIdEXlL5Yq1evbnPnzrWBAwfahg0b3JdvKAUl6kakdfWFr9fTtn/55RfX3Uj3q/vH9OnT3XvILe03VehU0dD71pej9p0qr/qyFL2GKg6qqKr8f/75p6vsq/xLly61KlWqRNy29oEquqqYBLrFqYKSFQViZ511llWoUMFV5hU4qPuGvrwzUhZMlSGV/fbbb3eVvZEjR7pzJWOlRu/x3//+t9tHV1xxhassnXfeee64qLKmCrbo+cqmrVixIsdWaQU/Ckj0XFVennzySbvwwgtdkKlKvWg/qQtKIDjQ+1KlR/taldTcDJ5VAKCKaN++fV0F5plnnnGV2gULFrgKnKiip3Pnsssuc5UufeZ0zupzoeOT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u+6yvXv3Btf59ddfrVevXu6x4sWLW506dWzw4MG2f//+gig/AABAgdq5c2fYrUGDBnbZZZcFH69SpYrdd999du2110a1nEA0Jeb1CZ07d7bx48fbgQMH7Ntvv7UePXq4IOPhhx92jy9fvtzS09Nt7Nixduyxx9pPP/3kPmS7du2y//znP/laeJVBwQ0AAMChsGDBAlu6dKlraA3o1q2bWy5atMh+++23KJYOiJ485ymV2qtUqZJVq1bNpfg6dOhg06dPzxR0nHXWWVa7dm07//zz7Y477rDJkydnu10FJs8++6ydffbZLsOh577zzjthGRCt89Zbb1m7du0sJSXFJk6c6B578cUXXauB7qtfv74988wzYdvWB/zyyy+38uXLW8mSJV2K8uuvv871e96xY4d1797dPbdy5cr2+OOP2+mnn2633nprls9Zt26dXXDBBS5NWrp0abvkkkvszz//zLSegi/tyxIlSrh1tm3bFnxs4cKF1rFjRzvqqKOsTJky7n1/99132ZZ1/fr1bjtly5Z171dl0L7Lyr59+2z79u1hNwAA8iouLs1iwUsvveTqKspOAPg/vjo/Kgsxd+5cK1asWLbrqaKsCm5O7r//frvwwgvthx9+cJV4pRaXLVsWts6AAQOsX79+7v5OnTq5wGLQoEE2YsQId9+DDz7otvPKK6+49ZWmVGX8999/t/fff99tW122lE3Jrf79+9ucOXPc8xVAffXVV9lW7rVtVeY3b95ss2bNcs/55Zdf7NJLLw1bb9WqVfb222/bBx98YB9//LF9//33dtNNN4UFM8oEzZ492+bPn29169a1c845x92fVeZG++SII45wZVSZFdQo0Muq+9nIkSNdwBK4KcABACAv4uPTrXyV5W5ZlKnXxZtvvmm9e/eOdlGAwt/9adq0aa6impqa6lq54+Pj3QClrKji/NRTT+Wq69PFF18c/KAOGzbMVcb13NDMg7IDgTSjaLzGqFGjgvdpLIfSksoAqEL++uuv219//eVa/QOBjbpl5ZYq8ApQtJ327du7+5SJya6FYsaMGfbjjz/amjVrgpX0V1991U444QRXjmbNmrn7NBZF91etWtX9rffapUsX936UDTrzzDPDtvv888+7DIQClXPPPTfT6yqLo4BGmRtldQJl1XNmzpzpskcZDRw40AVNAcpUEFgAAPLC88wO7Ctp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N29eVMuGgrVt2za3LF++vFvqPFD2IvRcqF+/vlWvXp1zoQhQlqpLly5hx1c47kXX+++/b6eccopdfPHFrstj06ZN7YUXXgg+vmbNGtu4cWPYsS9TpozrAsuxL9xat25tM2bMsJUrV7q/f/jhB5s9e7adffbZ7m+OfWxYk4vjrKW6POlaEaD1VRdUZiO3EvO57CiE/v77b9f3smLFimH36+/ly5dHrVwoWOnp6a5PvbpGnHjiie4+XXiKFSvmLi4ZzwU9hsLrzTffdF0b1f0pI4570fXLL7+4LjDq3nrPPfe449+3b193vHv06BE8vpGu/xz7wm3AgAG2fft210CQkJDgvudHjBjhurkIxz42bMzFcdZSjQ6hEhMTXYNjXs4Fggoghlutf/rpJ9dyhaJt/fr11q9fP9dXVhMxILYaD9T6+OCDD7q/lanQ5159qxVUoOh6++23beLEifb666/bCSecYIsWLXINSRrMy7FHQaD7E+yoo45yrRgZZ3rR35UqVYpauVBwbr75ZjcQ64svvrBjjjkmeL+Ot7rDbd26NWx9zoXCTd2bNOnCSSed5FqfdNNgbA3c0//VYsVxL5o028vxxx8fdl+DBg1s3bp17v+B48v1v+i58847XbbisssuczN+XXnllW5CBs0CKBz72FApF8dZy4wT86SmproZofJyLhBUwKXBTz75ZNf3MrR1S3+3atUqqmVD/tIYLgUU7733nn3++eduqsFQOg80S0zouaApZ1UB4VwovNq3b28//vija6kM3NR6rW4Qgf9z3IsmdW/MOG20+tjXqFHD/V/XAFUaQo+9usyoHzXHvnDbvXu36xMfSg2I+n4Xjn1sqJWL46ylGpXUABWgOoLOFY29yLV8G26OQu3NN990MwG8/PLLbhaA6667zitbtqy3cePGaBcN+ejGG2/0ypQp482cOdPbsGFD8LZ79+7gOjfccINXvXp17/PPP/e++eYbr1WrVu6GoiV09ifhuBdNCxYs8BITE70RI0Z4P//8szdx4kSvRIkS3oQJE4LrPPTQQ+56P3XqVG/x4sXeBRdc4NWqVcvbs2dPVMsOf3r06OFVrVrVmzZtmrdmzRpv8uTJ3lFHHeXdddddwXU49kVnZr/vv//e3VS1f+yxx9z/165dm+vj3LlzZ69p06be119/7c2ePdvNFHj55ZfnqRwEFQh66qmn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", "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"name": "stdout", "output_type": "stream", "text": ["Le recollement naif (R1, ligne rouge) est domine par A seule, et par R3 (glu qui voit la fibre).\n"]}], "source": ["\n", "import matplotlib.pyplot as plt\n", "\n", "lab_r = [\"R1 majorite\", \"R2 prec. globale\", \"R3 glu locale\", \"A seule\", \"B seule\", \"C seule\", \"D seule\"]\n", "val_r = [score_total(R1), score_total(R2), score_total(R3),\n", " score_total(lambda e: seule(e, \"A\")), score_total(lambda e: seule(e, \"B\")),\n", " score_total(lambda e: seule(e, \"C\")), score_total(lambda e: seule(e, \"D\"))]\n", "colors = [\"#c0392b\", \"#d35400\", \"#7d3c98\", \"#1f77b4\", \"#7f8c8d\", \"#7f8c8d\", \"#7f8c8d\"]\n", "\n", "plt.figure(figsize=(8, 4.2))\n", "bars = plt.barh(lab_r, val_r, color=colors)\n", "for b, v in zip(bars, val_r):\n", " plt.text(v + 0.6, b.get_y() + b.get_height()/2, f\"{v:.0f}\", va=\"center\", fontsize=9)\n", "plt.axvline(score_total(R1), color=\"#c0392b\", linestyle=\"--\", linewidth=0.8)\n", "plt.xlabel(\"Esperance de gain (EV) sur tout le corpus\")\n", "plt.title(\"Recollement naif domine par la lecture profonde seule\")\n", "plt.tight_layout()\n", "plt.show()\n", "print(\"Le recollement naif (R1, ligne rouge) est domine par A seule, et par R3 (glu qui voit la fibre).\")\n"]}, {"cell_type": "markdown", "id": "7eb4c981", "metadata": {"papermill": {"duration": 0.003531, "end_time": "2026-08-23T20:21:31.709274", "exception": false, "start_time": "2026-08-23T20:21:31.705743", "status": "completed"}, "tags": []}, "source": ["\n", "### Lecture — la collision, vue de pres\n", "\n", "Le graphe resume le §2 : les deux regles de recollement *realistes* (R1, R2) sont dans la moitie\n", "gauche, sous A seule (barre bleue) ; la glu diagnostique R3 les depasse mais reste sous A. Les\n", "lectures de surface seules (B, C) sont les plus mauvaises — elles sont excellentes sur\n", "l'essentiel et fausses sur le cluster d'artefact, ce qui les fait *paraitre* honnetes en moyenne.\n", "C'est exactement pourquoi une glue naive, qui ne regarde que la moyenne, se trompe : la moyenne\n", "cache la bascule locale.\n"]}, {"cell_type": "markdown", "id": "76f82df1", "metadata": {"papermill": {"duration": 0.005398, "end_time": "2026-08-23T20:21:31.719001", "exception": false, "start_time": "2026-08-23T20:21:31.713603", "status": "completed"}, "tags": []}, "source": ["\n", "## 5. Exercices\n", "\n", "Les stubs suivants sont des amorces : completent-les pour prolonger le banc. Aucun n'introduit\n", "d'erreur volontaire — le notebook s'execute de bout en bout meme exercice non complete.\n"]}, {"cell_type": "markdown", "id": "fa73633b", "metadata": {"papermill": {"duration": 0.004372, "end_time": "2026-08-23T20:21:31.727168", "exception": false, "start_time": "2026-08-23T20:21:31.722796", "status": "completed"}, "tags": []}, "source": ["\n", "### Exercice 1 — verifier le temoin sur un autre seed\n", "\n", "La generation du corpus utilise `np.random.default_rng(42)`. Regenere-le avec un autre seed et\n", "vérifie si le temoin (§3) **survit**. En particulier : la contradiction reste-t-elle concentree sur\n", "`z=2` ? R1 reste-t-elle **dominee par A seule** ? Conclut sur la robustesse de l'obstruction a la\n", "particuliere realisation.\n"]}, {"cell_type": "code", "execution_count": 7, "id": "4dcdc8c4", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.736754Z", "iopub.status.busy": "2026-08-23T20:21:31.736223Z", "iopub.status.idle": "2026-08-23T20:21:31.740691Z", "shell.execute_reply": "2026-08-23T20:21:31.739792Z"}, "papermill": {"duration": 0.010548, "end_time": "2026-08-23T20:21:31.741848", "exception": false, "start_time": "2026-08-23T20:21:31.731300", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Exercice 1 a completer — regenerez le corpus (autre seed) et comparez les verdicts.\n"]}], "source": ["\n", "# TODO etudiant : changer le seed et re-mesurer matrice + EV.\n", "# Indice : remplacez 42 par un autre seed dans default_rng(...), relancez les cellules 2 et 4,\n", "# et comparez les verdicts (contradiction par cluster, EV de R1 vs A seule).\n", "pass\n", "print(\"Exercice 1 a completer — regenerez le corpus (autre seed) et comparez les verdicts.\")\n"]}, {"cell_type": "markdown", "id": "3ad0496e", "metadata": {"papermill": {"duration": 0.003324, "end_time": "2026-08-23T20:21:31.749501", "exception": false, "start_time": "2026-08-23T20:21:31.746177", "status": "completed"}, "tags": []}, "source": ["\n", "### Exercice 2 — une lecture qui s'abstient\n", "\n", "La lecture causale D s'abstient sur le cluster d'artefact (`ZERO[\"D\"] = 1`). Donne-lui au contraire\n", "une competence totale (marge 0) **sans** l'inverser : que devient la matrice de compatibilite et la\n", "perte de R1 sur `z=2` ? La vue causale venant *aider* A, le recouvrement se recolle-t-il ?\n"]}, {"cell_type": "code", "execution_count": 8, "id": "59a9ad68", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.759017Z", "iopub.status.busy": "2026-08-23T20:21:31.758411Z", "iopub.status.idle": "2026-08-23T20:21:31.763137Z", "shell.execute_reply": "2026-08-23T20:21:31.762269Z"}, "papermill": {"duration": 0.011048, "end_time": "2026-08-23T20:21:31.764572", "exception": false, "start_time": "2026-08-23T20:21:31.753524", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Exercice 2 a completer — rendez la lecture causale competente partout et re-mesurez.\n"]}], "source": ["\n", "# TODO etudiant : regler MARG[\"D\"] a 0 et relancer la matrice + EV.\n", "# Indice : D tres lisible (marge 0) et non inversee devrait voter AVEC A, et faire disparaitre la\n", "# sur-vote B/C sur z=2 -- sauf si D est elle-meme bruitee.\n", "print(\"Exercice 2 a completer — rendez la lecture causale competente partout et re-mesurez.\")\n"]}, {"cell_type": "markdown", "id": "1b8893b6", "metadata": {"papermill": {"duration": 0.004388, "end_time": "2026-08-23T20:21:31.773666", "exception": false, "start_time": "2026-08-23T20:21:31.769278", "status": "completed"}, "tags": []}, "source": ["\n", "### Exercice 3 — la glue qui voit la fibre\n", "\n", "R3 pondere par une fiabilite **locale** fournie apres coup. Construis une regle qui *estime*\n", "cette fiabilite locale sans connaitre `z` : par exemple, groupe les objets par leur **profil de\n", "desaccord** (quelles lectures se contredisent) et estime, sur un sous-ensemble de calibration,\n", "la fiabilite de chaque lecture par groupe. Ta glue bat-elle R1 ? Est-elle proche de R3 ?\n"]}, {"cell_type": "code", "execution_count": 9, "id": "c90890a4", "metadata": {"execution": {"iopub.execute_input": "2026-08-23T20:21:31.784408Z", "iopub.status.busy": "2026-08-23T20:21:31.783922Z", "iopub.status.idle": "2026-08-23T20:21:31.788475Z", "shell.execute_reply": "2026-08-23T20:21:31.787585Z"}, "papermill": {"duration": 0.011553, "end_time": "2026-08-23T20:21:31.789889", "exception": false, "start_time": "2026-08-23T20:21:31.778336", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Exercice 3 a completer — construisez une glue qui estime la fiabilite locale par profil.\n"]}], "source": ["\n", "# TODO etudiant : estimer la fiabilite locale par profil de desaccord, sans acces a z.\n", "# Indice : regroupez par (signe des votes), estimez la precision par groupe sur une tranche\n", "# de calibration, puis appliquez au reste. Comparez a R1 et R3.\n", "print(\"Exercice 3 a completer — construisez une glue qui estime la fiabilite locale par profil.\")\n"]}, {"cell_type": "markdown", "id": "7cc2b938", "metadata": {"papermill": {"duration": 0.004528, "end_time": "2026-08-23T20:21:31.798734", "exception": false, "start_time": "2026-08-23T20:21:31.794206", "status": "completed"}, "tags": []}, "source": ["\n", "## Conclusion — la chaine completee sur un substrat disciplinaire\n", "\n", "Le banc de recollement de lectures, pose sur un substrat **epistemique** (quatre specialistes\n", "d'un meme corpus), reproduit la chaine d'ICT-15k sur le substrat **geometrique** :\n", "\n", "1. **Le recouvrement est mesure, pas choisi** — les domaines de competence des quatre lectures\n", " sortent de la generation du corpus, et le bord est defini avant les sections (dette du §2\n", " payee par construction).\n", "2. **La condition de compatibilite est ecrite** — deux lectures qui recouvrent un objet doivent\n", " concorder ; sinon, les sections sont incompatibles. Et elle est **mesuree** : la contradiction\n", " se concentre sur le cluster d'artefact (33/54) et disparait ailleurs (2/198, 0/60).\n", "3. **Le temoin existe et il paie** — huit objets ou la question « agir ? » recoit des reponses\n", " contradictoires, et ou la decision bascule selon la lecture qu'on ecoute. Le naive suit les\n", " vues de surface (fausses) et coute -2 par objet ; la vue profonde (seule) ou la glue qui voit\n", " la fibre vont dans le sens de la verite.\n", "\n", "La lecon la plus honnete est qu'une fusion naive est une **charge**, pas un cadeau : R1 (63) et R2\n", "(71) sont **dominees par la lecture profonde seule** (97). Le vocabulaire du recollement — fibres,\n", "transports, compatibilite — s'avere donc **operationnel** sur un substrat non-geometrique : il\n", "designe un defaut mesurable et exploitable (Loi I), il localise la region ou il apparait, et il\n", "distingue le « substrat intraitable » du « regle aveugle » (R3, oraculaire, recupere la perte).\n", "Ce que le theoreme `hashlife_correct` garantissait pour le quadtree (un recollement possible), ce\n", "banc le mesure pour des lectures — et la mesure montre que la valeur de la fusion est **conditionnelle**\n", "a la connaissance de la fiabilite locale, exactement la fibre que le quotient global ne voit pas.\n", "\n", "**Limite assumee.** `z` (la sous-population) est connue du prototype, pas du decideur. La glu qui\n", "« voit la fibre » (R3) est un *borne*, pas un algorithme : elle prouve que la perte est reparable en\n", "principe, pas qu'elle est reparlee. Reconstruire la fibre a partir des seuls desaccords (exercice 3)\n", "est le pas suivant — et c'est la ou la non-trivialite reelle du recollement se cache.\n"]}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.3"}, "papermill": {"default_parameters": {}, "duration": 3.805035, "end_time": "2026-08-23T20:21:32.152498", "environment_variables": {}, "exception": null, "input_path": "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb", "output_path": "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-34-BancRecollementLectures.ipynb", "parameters": {}, "start_time": "2026-08-23T20:21:28.347463", "version": "2.6.0"}}, "nbformat": 4, "nbformat_minor": 5} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35-HumorCausalProbe-Pilot.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35-HumorCausalProbe-Pilot.ipynb index 40d59b9341..ee75ce6e03 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35-HumorCausalProbe-Pilot.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35-HumorCausalProbe-Pilot.ipynb @@ -28,7 +28,14 @@ "nb_name = \"ICT-35-HumorCausalProbe-Pilot\"\n" ] }, - { + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "markdown", "id": "acquis-renvoi", "metadata": {}, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35b-HumorCausalPairs-SAE.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35b-HumorCausalPairs-SAE.ipynb index 13a415fbbc..a6324d4d92 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35b-HumorCausalPairs-SAE.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35b-HumorCausalPairs-SAE.ipynb @@ -28,7 +28,14 @@ "nb_name = \"ICT-35b-HumorCausalPairs-SAE\"" ] }, - { + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "markdown", "id": "91c071ef", "metadata": { diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35c-HumorDepthProfile-SAE.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35c-HumorDepthProfile-SAE.ipynb index 6c4576477a..5a11552ec3 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35c-HumorDepthProfile-SAE.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-35c-HumorDepthProfile-SAE.ipynb @@ -32,7 +32,14 @@ "seed = 42" ] }, - { + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "markdown", "id": "4e0fd0e1", "metadata": { diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-36-FLens-FactoredGeometry.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-36-FLens-FactoredGeometry.ipynb index 73a95f466a..f924f64bce 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-36-FLens-FactoredGeometry.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-36-FLens-FactoredGeometry.ipynb @@ -29,6 +29,14 @@ "- #15478 (issue grain) ; Part of #15475 (Epic toolkit multi-instrument) ; Depends on #15476 (contrat de trace v1) ; complements #15477 (F-Lens belief-state).\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "4e2c7895", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-37-FLens-BeliefState.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-37-FLens-BeliefState.ipynb index 8c79873150..2a8794ce21 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-37-FLens-BeliefState.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-37-FLens-BeliefState.ipynb @@ -53,6 +53,14 @@ "- [x] Aucune dependance directe au code non licencie des depots etudies (reimplementation propre depuis arXiv:2602.02385).\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-38-SLens-SelfLocation.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-38-SLens-SelfLocation.ipynb index 85d3b7ea90..2a81622529 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-38-SLens-SelfLocation.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-38-SLens-SelfLocation.ipynb @@ -34,6 +34,14 @@ "`slens` au contrat est une étape *post-promotion*, pas un préalable que ce notebook se permettrait." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "fb9a3b49", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-39-CompositionRegards.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-39-CompositionRegards.ipynb index dcdc80454d..a7a4d8ce6e 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-39-CompositionRegards.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-39-CompositionRegards.ipynb @@ -36,6 +36,14 @@ "Cette trajectoire est indépendante de GameTheory-18 : ce dernier renvoie une paire de fonctions dans son arrière composé, tandis qu'ici la demande est calculée et propagée. Le substrat est épistémique et fini, non un jeu stratégique." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, @@ -1161,4 +1169,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40a-TriangulationCausale.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40a-TriangulationCausale.ipynb index 739b0bc6a7..b6fef24fcd 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40a-TriangulationCausale.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40a-TriangulationCausale.ipynb @@ -50,6 +50,14 @@ "Ce notebook consomme les deux par leurs APIs testeess." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40b-AnalogCognitionWaves.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40b-AnalogCognitionWaves.ipynb index 7c2c68e4c6..294234a8b1 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40b-AnalogCognitionWaves.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40b-AnalogCognitionWaves.ipynb @@ -32,6 +32,14 @@ "Un cinquième banc (anesthésie) confronte le régime organisé à un régime lent désaligné et mesure l'effondrement de la cohérence inter-régionale — l'argument convergence du papier (des anesthésiques à cibles moléculaires différentes produisent le même tableau d'ondes lentes désynchronisées, Bardon et al. 2025 ; Eisen et al. 2026)." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "03ea3a8e", @@ -1347,4 +1355,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Annexe-ProxyContextuality.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Annexe-ProxyContextuality.ipynb index 9ded472ebe..e52e6029e5 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Annexe-ProxyContextuality.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Annexe-ProxyContextuality.ipynb @@ -46,6 +46,14 @@ "4. Mesurer sur le substrat S1, et rendre un verdict **honnête**." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "cell1", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Argumentation-BeliefTrajectories.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Argumentation-BeliefTrajectories.ipynb index 0e71b8fcae..3bbbc917e0 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Argumentation-BeliefTrajectories.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Argumentation-BeliefTrajectories.ipynb @@ -29,6 +29,14 @@ "**Garde-fou anti-idéologique (issue #7289)** : les régimes sont définis par des propriétés **structurelles mesurables** (asymétrie des transitions, compressibilité, spectre du graphe), **jamais** par l'étiquetage a priori d'un contenu. Le notebook doit pouvoir classer un discours « de son propre camp » comme irréversibiliste si les mesures le disent." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "setup", @@ -2381,4 +2389,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Dissociation-PhatSelfReference.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Dissociation-PhatSelfReference.ipynb index b536390b1c..5d1593ed17 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Dissociation-PhatSelfReference.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Dissociation-PhatSelfReference.ipynb @@ -68,6 +68,14 @@ "11+. Exercices (>=3) et conclusion" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "acquis-renvoi", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe2-EspaceAtteignable.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe2-EspaceAtteignable.ipynb index 85c4dbf9d8..991ba903b5 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe2-EspaceAtteignable.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe2-EspaceAtteignable.ipynb @@ -16,6 +16,14 @@ "Aucun des deux ne nomme le quadruplet complet ; aucun ne mesure le **noyau** (ce que l'ajout rend *inatteignable*). C'est ce que cette greffe ajoute \u2014 sur le **m\u00eame domaine** que Planners-5c, en consommant son socle sans le re-d\u00e9river." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe4-VoteOnChain.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe4-VoteOnChain.ipynb index 1261c2c3ee..d10c59ad5b 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe4-VoteOnChain.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe4-VoteOnChain.ipynb @@ -15,7 +15,14 @@ "> Une greffe ne red\u00e9montre pas ce que les organes prouvent d\u00e9j\u00e0 : elle les **consomme** (principe #13564 \u2014 nommer l'organe natif plut\u00f4t que le r\u00e9impl\u00e9menter). Ici : `ict/argumentation.py` (DungAF, s\u00e9mantique grounded), les contrats `BordaVote`/`BordaVoteBroken` du projet Foundry `greffe4-vote` (compagnon de ce notebook), et l'outillage SC-12/SC-13 (forge, invariant fuzzing)." ] }, - { + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut \u00e9pist\u00e9mique** \u2014 **Sans verdict \u00e0 ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut \u00e9pist\u00e9mique sera port\u00e9 par la matrice le cas \u00e9ch\u00e9ant." + ] + }, { "cell_type": "markdown", "id": "acquis-renvoi", "metadata": {}, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe5-AttributionCausale.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe5-AttributionCausale.ipynb index 4af4c53da7..5fa4121e2b 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe5-AttributionCausale.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Greffe5-AttributionCausale.ipynb @@ -16,6 +16,14 @@ "Cette tranche 3/3 repondt a cette question en appliquant les estimateurs de `ict.causal_attribution` (tranche 1/3, mergee via **#13916**) sur un **panel experimental** construit par imitation du domaine Greffe 2 -- la relaxation STRIPS est **consommee**, jamais re-derivee (cf. CLAUDE.md section D)." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "af095d92", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Life-SubstratCertifie.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Life-SubstratCertifie.ipynb index d5f05bb101..520583904d 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Life-SubstratCertifie.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Life-SubstratCertifie.ipynb @@ -30,6 +30,14 @@ "**Module** : `ict/life.py` (issue #5726, tranche 1-2, PR #11185). **Notebook pédagogique** : 3 exercices jalonnent le texte." ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Synthese-CrossSubstrat.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Synthese-CrossSubstrat.ipynb index 39ac7dd20f..633672293c 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Synthese-CrossSubstrat.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-Synthese-CrossSubstrat.ipynb @@ -43,6 +43,14 @@ "branché **sans modification** sur des substrats radicalement différents.\n" ] }, + { + "cell_type": "markdown", + "id": "statut-epistemique", + "metadata": {}, + "source": [ + "> **Statut épistémique** — **Sans verdict à ce jour** : aucune ligne de la [matrice de dissociations](../../../docs/ict/dissociations-matrix.md) ne concerne ce notebook ; son statut épistémique sera porté par la matrice le cas échéant." + ] + }, { "cell_type": "markdown", "id": "08eebbfc",