}\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "Marginales a posteriori (reasoner exact, meme moteur Java que le jumeau Python) :\r\n"
+ "Marginales a posteriori (reasoner exact, meme moteur Java que le jumeau Python) :\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Atome | P(atome)\r\n"
+ " Atome | P(atome)\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " ------------------|---------\r\n"
+ " ------------------|---------\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Smokes(anna) | 1.0000\r\n"
+ " Smokes(anna) | 1.0000\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Smokes(bob) | 0.7294\r\n"
+ " Smokes(bob) | 0.7294\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Smokes(carl) | 0.7294\r\n"
+ " Smokes(carl) | 0.7294\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Cancer(anna) | 0.9526\r\n"
+ " Cancer(anna) | 0.9526\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Cancer(bob) | 0.8301\r\n"
+ " Cancer(bob) | 0.8301\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Cancer(carl) | 0.8301\r\n"
+ " Cancer(carl) | 0.8301\n"
]
}
],
@@ -385,7 +569,16 @@
{
"cell_type": "markdown",
"id": "0c5e37ba",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003234,
+ "end_time": "2026-09-29T17:36:51.730953+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:36:51.727719+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Interprétation : marginales a posteriori du réseau social\n",
"\n",
@@ -406,7 +599,16 @@
{
"cell_type": "markdown",
"id": "91ebc523",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003012,
+ "end_time": "2026-09-29T17:36:51.737074+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:36:51.734062+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Partie 3 : Comment les poids modèlent la croyance\n",
"\n",
@@ -430,130 +632,138 @@
"id": "c0116066",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T14:28:19.261923Z",
- "iopub.status.busy": "2026-07-03T14:28:19.261594Z",
- "iopub.status.idle": "2026-07-03T14:28:19.330208Z",
- "shell.execute_reply": "2026-07-03T14:28:19.329931Z"
- }
+ "iopub.execute_input": "2026-09-29T17:36:51.745161Z",
+ "iopub.status.busy": "2026-09-29T17:36:51.744926Z",
+ "iopub.status.idle": "2026-09-29T17:37:17.978456Z",
+ "shell.execute_reply": "2026-09-29T17:37:17.978194Z"
+ },
+ "papermill": {
+ "duration": 26.238459,
+ "end_time": "2026-09-29T17:37:17.978560+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:36:51.740101+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "A. Spectre 1-atome (forme fermee sigma(w)) :\r\n"
+ "A. Spectre 1-atome (forme fermee sigma(w)) :\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 0.0 -> P(a) = 0.5000 (MLN { })\r\n"
+ " w = 0.0 -> P(a) = 0.5000 (MLN {
})\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 0.5 -> P(a) = 0.6225 (MLN {
})\r\n"
+ " w = 0.5 -> P(a) = 0.6225 (MLN {
})\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 1.0 -> P(a) = 0.7311 (MLN {
})\r\n"
+ " w = 1.0 -> P(a) = 0.7311 (MLN {
})\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 3.0 -> P(a) = 0.9526 (MLN {
})\r\n"
+ " w = 3.0 -> P(a) = 0.9526 (MLN {
})\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 5.0 -> P(a) = 0.9933 (MLN {
})\r\n"
+ " w = 5.0 -> P(a) = 0.9933 (MLN {
})\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "B. Sweep du poids w de 'Smokes=>Cancer' sur P(Cancer(bob)) (reasoner exact) :\r\n"
+ "B. Sweep du poids w de 'Smokes=>Cancer' sur P(Cancer(bob)) (reasoner exact) :\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 0.0 -> P(Cancer(bob)) = 0.5000\r\n"
+ " w = 0.0 -> P(Cancer(bob)) = 0.5000\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 0.5 -> P(Cancer(bob)) = 0.6024\r\n"
+ " w = 0.5 -> P(Cancer(bob)) = 0.6024\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 1.0 -> P(Cancer(bob)) = 0.6850\r\n"
+ " w = 1.0 -> P(Cancer(bob)) = 0.6850\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 2.0 -> P(Cancer(bob)) = 0.7865\r\n"
+ " w = 2.0 -> P(Cancer(bob)) = 0.7865\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 3.0 -> P(Cancer(bob)) = 0.8301\r\n"
+ " w = 3.0 -> P(Cancer(bob)) = 0.8301\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " w = 5.0 -> P(Cancer(bob)) = 0.8535\r\n"
+ " w = 5.0 -> P(Cancer(bob)) = 0.8535\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "Courbe de saturation : w=0 -> 0.5 (aucune contrainte) ; w croissant -> P -> 1\r\n"
+ "Courbe de saturation : w=0 -> 0.5 (aucune contrainte) ; w croissant -> P -> 1\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "(asymptote quasi-logique JAMAIS atteinte : une MLN reste probabiliste).\r\n"
+ "(asymptote quasi-logique JAMAIS atteinte : une MLN reste probabiliste).\n"
]
}
],
@@ -628,7 +838,16 @@
{
"cell_type": "markdown",
"id": "eccbcf7e",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003552,
+ "end_time": "2026-09-29T17:37:17.986866+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:17.983314+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Interprétation : le spectre logique ↔ statistique\n",
"\n",
@@ -648,7 +867,16 @@
{
"cell_type": "markdown",
"id": "3acd4e28",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003989,
+ "end_time": "2026-09-29T17:37:17.994491+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:17.990502+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Partie 4\n",
" : Le paradoxe des exceptions — le pingouin qui ne vole pasVoici le cas où les MLN brillent et où la FOL classique échoue : la **généralisation avec exception**.- **tweety** est un pingouin (et un oiseau)- **robin** est un oiseau (ordinaire)- *Règle stricte* : les pingouins ne volent pas- *Règle pondérée* : la plupart des oiseaux volent (poids 2.0)Comment le MLN gère-t-il ce paradoxe ? La règle stricte `Penguin(X) => !Flies(X)` doit dominer pour tweety, mais pas pour robin."
@@ -660,95 +888,103 @@
"id": "38183d9d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T14:28:19.332287Z",
- "iopub.status.busy": "2026-07-03T14:28:19.331864Z",
- "iopub.status.idle": "2026-07-03T14:28:19.399531Z",
- "shell.execute_reply": "2026-07-03T14:28:19.399222Z"
- }
+ "iopub.execute_input": "2026-09-29T17:37:18.003436Z",
+ "iopub.status.busy": "2026-09-29T17:37:18.002895Z",
+ "iopub.status.idle": "2026-09-29T17:37:18.059976Z",
+ "shell.execute_reply": "2026-09-29T17:37:18.059808Z"
+ },
+ "papermill": {
+ "duration": 0.062025,
+ "end_time": "2026-09-29T17:37:18.060055+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:17.998030+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "MLN paradoxe du pingouin : 5 formules\r\n"
+ "MLN paradoxe du pingouin : 5 formules\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "{ , <(Bird(X)=>Flies(X)), 2.0>, , <(Penguin(X)=>!Flies(X)), null>, }\r\n"
+ "{ , , <(Bird(X)=>Flies(X)), 2.0>, <(Penguin(X)=>!Flies(X)), null>, }\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " tweety : Bird + Penguin | robin : Bird seulement\r\n"
+ " tweety : Bird + Penguin | robin : Bird seulement\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " strict Penguin=>!Flies | pondere Bird=>Flies [w=2]\r\n"
+ " strict Penguin=>!Flies | pondere Bird=>Flies [w=2]\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " P(Flies(tweety)) = 0.0000\r\n"
+ " P(Flies(tweety)) = 0.0000\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " P(Flies(robin)) = 0.7870\r\n"
+ " P(Flies(robin)) = 0.7870\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "=> tweety (pingouin) ne vole pas : 0.0 -- l'exception STRICTE domine (tout monde\r\n"
+ "=> tweety (pingouin) ne vole pas : 0.0 -- l'exception STRICTE domine (tout monde\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " ou un pingouin vole a une probabilite nulle).\r\n"
+ " ou un pingouin vole a une probabilite nulle).\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "=> robin (oiseau ordinaire) vole probablement : ~0.79 (regle ponderee seule).\r\n"
+ "=> robin (oiseau ordinaire) vole probablement : ~0.79 (regle ponderee seule).\n"
]
}
],
@@ -815,7 +1051,16 @@
{
"cell_type": "markdown",
"id": "5c1c0fb3",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003889,
+ "end_time": "2026-09-29T17:37:18.068211+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:18.064322+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Interprétation : la logique pondérée gère les exceptions nativement\n",
"\n",
@@ -842,7 +1087,16 @@
{
"cell_type": "markdown",
"id": "d0968923",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.004118,
+ "end_time": "2026-09-29T17:37:18.076548+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:18.072430+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Partie 5 : Trois familles de raisonneurs MLN\n",
"\n",
@@ -863,67 +1117,75 @@
"id": "01f10d37",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T14:28:19.401905Z",
- "iopub.status.busy": "2026-07-03T14:28:19.401472Z",
- "iopub.status.idle": "2026-07-03T14:28:19.470254Z",
- "shell.execute_reply": "2026-07-03T14:28:19.469863Z"
- }
+ "iopub.execute_input": "2026-09-29T17:37:18.085811Z",
+ "iopub.status.busy": "2026-09-29T17:37:18.085610Z",
+ "iopub.status.idle": "2026-09-29T17:37:27.883884Z",
+ "shell.execute_reply": "2026-09-29T17:37:27.883730Z"
+ },
+ "papermill": {
+ "duration": 9.803676,
+ "end_time": "2026-09-29T17:37:27.884033+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:18.080357+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "Atome requete : P(Cancer(carl))\r\n"
+ "Atome requete : P(Cancer(carl))\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " ApproximateNaive (exact) : 0.8301 en 1.56s\r\n"
+ " ApproximateNaive (exact) : 0.8301 en 9.15s\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " SimpleSampling (approx): 0.8874 en 0.10s\r\n"
+ " SimpleSampling (approx): 0.8633 en 0.60s\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Ecart absolu : 0.0572\r\n"
+ " Ecart absolu : 0.0331\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "=> Le sampling est plus rapide mais legerement imprecis (et fluctue d'un run a l'autre).\r\n"
+ "=> Le sampling est plus rapide mais legerement imprecis (et fluctue d'un run a l'autre).\n"
]
},
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " Pour un domaine petit, l'exact (enumeration) reste preferable.\r\n"
+ " Pour un domaine petit, l'exact (enumeration) reste preferable.\n"
]
}
],
@@ -990,21 +1252,24 @@
{
"cell_type": "markdown",
"id": "556a2203",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.004458,
+ "end_time": "2026-09-29T17:37:27.894101+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:27.889643+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Interprétation : exact vs approximatif\n",
"\n",
- "**Sortie réelle** (mesurée au Stopwatch, domaine ~15 atomes ground) :\n",
- "\n",
- "```\n",
- " ApproximateNaive (exact) : 0.8301 en 1.56s\n",
- " SimpleSampling (approx): 0.8874 en 0.10s\n",
- " Ecart absolu : 0.0572\n",
- "```\n",
+ "**Sortie réelle** : la cellule précédente, mesurée au Stopwatch sur un domaine d'environ 15 atomes ground. Les durées absolues dépendent de la machine ; la valeur exacte, elle, n'en dépend pas.\n",
"\n",
"**Lecture** :\n",
- "- Le reasoner **exact** (`ApproximateNaiveMlnReasoner`) énumère les interprétations de Herbrand et calcule la marginale rigoureuse — ici `P(Cancer(carl)) = 0.8301`, la même valeur que la cell[8] (même modèle). Coût exponentiel en théorie (`2^n` mondes), mais immédiat sur un petit domaine.\n",
- "- Le reasoner **par sampling** (`SimpleSamplingMlnReasoner(0.01, 1000)`) estime la marginale par tirage Monte-Carlo : ~15× plus rapide (0.10s vs 1.56s), mais **approximatif** — et sa valeur **fluctue d'une exécution à l'autre** (variance d'échantillonnage, non seedé). Le jumeau Python a obtenu 0.7722 sur la même requête (écart 0.058 de l'autre côté) ; ce run-ci donne 0.8874 (écart 0.057) : deux tirages légitimes du même estimateur autour de la vraie valeur 0.8301.\n",
+ "- Le reasoner **exact** (`ApproximateNaiveMlnReasoner`) énumère les interprétations de Herbrand et calcule la marginale rigoureuse — ici `P(Cancer(carl)) = 0.8301`, la même valeur que la cell[8] (même modèle). Coût exponentiel en théorie (`2^n` mondes), mais praticable sur un petit domaine.\n",
+ "- Le reasoner **par sampling** (`SimpleSamplingMlnReasoner(0.01, 1000)`) estime la marginale par tirage Monte-Carlo : environ 15× plus rapide que l'énumération (rapport mesuré sur deux machines différentes, dont les durées absolues diffèrent), mais **approximatif** — et sa valeur **fluctue d'une exécution à l'autre** (variance d'échantillonnage, non seedé). Le jumeau Python a obtenu 0.7722 sur la même requête (écart 0.058 sous la vraie valeur) ; ce run-ci donne 0.8633 (écart 0.0331 au-dessus), et une autre exécution de ce notebook donnera une autre valeur : autant de tirages légitimes du même estimateur autour de la vraie valeur 0.8301.\n",
"- **Quand utiliser quoi** : énumération pour le debug, la validation et les petits graphes ; sampling pour les grands domaines où l'énumération explose — en acceptant la variance.\n",
"\n",
"> Comme au notebook 2 (Sat4j portable vs CaDiCaL natif), le choix du reasoner est une **décision d'ingénierie** pilotée par la taille du domaine : exactitude quand elle est atteignable, approximation contrôlée quand elle ne l'est pas.\n"
@@ -1013,7 +1278,16 @@
{
"cell_type": "markdown",
"id": "14efc9df",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.004068,
+ "end_time": "2026-09-29T17:37:27.902347+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:27.898279+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Exercices (#2161 — 3 exos conformes)Les exercices suivent la convention `.claude/rules/three-exercises-per-notebook.md` : ils sont **stubbés** (sans `raise NotImplementedError`, cf règle C.1) et **répartis** dans le notebook, chacun précédé d'un contexte et d'objectifs.### Exercice 1\n",
" : Étendre le réseau social**Contexte** : Le réseau de la partie 2 contient 3 personnes (anna, bob, carl). On veut y ajouter un 4ᵉ individu **dave** et observer la propagation de l'influence.**Objectif** :- Ajouter `dave` à la signature (sort `Person`)- Ajouter le fait que `Friends(carl, dave)` (pondéré ou strict ?)- Requérir `P(Smokes(dave))` et `P(Cancer(dave))` après la propagation**Indice** : il faut propager le tabagisme le long de la chaîne `anna → bob → carl → dave` via la règle d'amitié pondérée.### Exercice 2 : Un MLN de diagnostic médical**Contexte** : On veut modéliser un raisonnement de diagnostic : certaines maladies causent des symptômes, et des tests médicaux confirment/infirment les maladies.**Objectif** :- Créer un MLN avec : `Grippe(X) => Fievre(X)` (poids 2.0), `Covid(X) => Fievre(X)` (poids 2.5), `Fievre(X) => TestPositif(X)` (poids 1.5)- Ajouter le fait : `Fievre(marie)` (observé)- Requérir `P(Grippe(marie))` et `P(Covid(marie))` — quelle maladie est la plus probable ?**Indice** : les deux maladies expliquent la fièvre, mais la Covid a un poids légèrement plus élevé pour `Fievre`. Le MLN doit gérer cette **ambiguïté** correctement.### Exercice 3 : Trouver le seuil où une règle devient « quasi-stricte »**Contexte** : Dans la partie 3, on a vu que `P(Cancer(bob))` augmente avec le poids de la règle `Smokes(X) => Cancer(X)`. On veut déterminer **à partir de quel poids** la règle est *effectivement stricte* (probabilité de violation < 0.01).**Objectif** :- Boucler sur les poids `[3, 5, 7, 10, 15, 20]` et observer `P(¬Cancer(bob))` (i.e. `1 - P(Cancer(bob))`)- Identifier le poids à partir duquel la probabilité de violation passe sous 0.01 (i.e. la règle est quasi-stricte)**Indice** : plus le poids est grand, plus la violation coûte `exp(-w)`. Pour un domaine de 3 personnes, le seuil est autour de `w = 5-7` (cf partie 3)."
@@ -1025,18 +1299,26 @@
"id": "d6d059ee",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T14:28:19.472476Z",
- "iopub.status.busy": "2026-07-03T14:28:19.472103Z",
- "iopub.status.idle": "2026-07-03T14:28:19.527283Z",
- "shell.execute_reply": "2026-07-03T14:28:19.526941Z"
- }
+ "iopub.execute_input": "2026-09-29T17:37:27.912659Z",
+ "iopub.status.busy": "2026-09-29T17:37:27.912399Z",
+ "iopub.status.idle": "2026-09-29T17:37:27.933237Z",
+ "shell.execute_reply": "2026-09-29T17:37:27.933375Z"
+ },
+ "papermill": {
+ "duration": 0.026902,
+ "end_time": "2026-09-29T17:37:27.933481+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:27.906579+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "// --- Exercice 1 : étendre le réseau social à un 4ᵉ individu --- = Exercice a completer\r\n"
+ "// --- Exercice 1 : étendre le réseau social à un 4ᵉ individu --- = Exercice a completer\n"
]
}
],
@@ -1062,18 +1344,26 @@
"id": "d6b456d3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T14:28:19.529356Z",
- "iopub.status.busy": "2026-07-03T14:28:19.528940Z",
- "iopub.status.idle": "2026-07-03T14:28:19.616539Z",
- "shell.execute_reply": "2026-07-03T14:28:19.616313Z"
- }
+ "iopub.execute_input": "2026-09-29T17:37:27.952607Z",
+ "iopub.status.busy": "2026-09-29T17:37:27.952399Z",
+ "iopub.status.idle": "2026-09-29T17:37:27.987132Z",
+ "shell.execute_reply": "2026-09-29T17:37:27.986930Z"
+ },
+ "papermill": {
+ "duration": 0.041952,
+ "end_time": "2026-09-29T17:37:27.987226+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:27.945274+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "// --- Exercice 2 : MLN de diagnostic médical --- = Exercice a completer\r\n"
+ "// --- Exercice 2 : MLN de diagnostic médical --- = Exercice a completer\n"
]
}
],
@@ -1099,18 +1389,26 @@
"id": "44567848",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T14:28:19.618435Z",
- "iopub.status.busy": "2026-07-03T14:28:19.618041Z",
- "iopub.status.idle": "2026-07-03T14:28:19.669410Z",
- "shell.execute_reply": "2026-07-03T14:28:19.669168Z"
- }
+ "iopub.execute_input": "2026-09-29T17:37:27.998441Z",
+ "iopub.status.busy": "2026-09-29T17:37:27.998132Z",
+ "iopub.status.idle": "2026-09-29T17:37:28.015239Z",
+ "shell.execute_reply": "2026-09-29T17:37:28.014868Z"
+ },
+ "papermill": {
+ "duration": 0.023256,
+ "end_time": "2026-09-29T17:37:28.015373+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:27.992117+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "// --- Exercice 3 : seuil où une règle pondérée devient quasi-stricte --- = Exercice a completer\r\n"
+ "// --- Exercice 3 : seuil où une règle pondérée devient quasi-stricte --- = Exercice a completer\n"
]
}
],
@@ -1133,7 +1431,16 @@
{
"cell_type": "markdown",
"id": "b5cf8af4",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.008625,
+ "end_time": "2026-09-29T17:37:28.032008+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:28.023383+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Résumé\n",
"Ce notebook a couvert :\n",
@@ -1172,8 +1479,20 @@
"pygments_lexer": "csharp",
"version": "13.0"
},
+ "papermill": {
+ "default_parameters": {},
+ "duration": 107.731163,
+ "end_time": "2026-09-29T17:37:28.157693+00:00",
+ "environment_variables": {},
+ "exception": null,
+ "input_path": "Tweety-10-MLN-Csharp.ipynb",
+ "output_path": "Tweety-10-MLN-Csharp.ipynb",
+ "parameters": {},
+ "start_time": "2026-09-29T17:35:40.426530+00:00",
+ "version": "2.7.0"
+ },
"title": "Tweety-10 — Markov Logic Networks (MLN) en .NET (C# / IKVM)"
},
"nbformat": 4,
"nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-11-Causal-Csharp.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-11-Causal-Csharp.ipynb
index c431cd2f65..5979952502 100644
--- a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-11-Causal-Csharp.ipynb
+++ b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-11-Causal-Csharp.ipynb
@@ -5,10 +5,10 @@
"id": "22185c95",
"metadata": {
"papermill": {
- "duration": 0.026801,
- "end_time": "2026-08-12T05:14:40.245936+00:00",
+ "duration": 0.003527,
+ "end_time": "2026-09-29T17:37:33.915250+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:40.219135+00:00",
+ "start_time": "2026-09-29T17:37:33.911723+00:00",
"status": "completed"
},
"tags": []
@@ -33,10 +33,10 @@
"id": "613cd651",
"metadata": {
"papermill": {
- "duration": 0.019326,
- "end_time": "2026-08-12T05:14:40.284164+00:00",
+ "duration": 0.003272,
+ "end_time": "2026-09-29T17:37:33.921806+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:40.264838+00:00",
+ "start_time": "2026-09-29T17:37:33.918534+00:00",
"status": "completed"
},
"tags": []
@@ -58,16 +58,16 @@
"id": "27e6a6d2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:40.329520Z",
- "iopub.status.busy": "2026-08-12T05:14:40.318874Z",
- "iopub.status.idle": "2026-08-12T05:14:41.398086Z",
- "shell.execute_reply": "2026-08-12T05:14:41.395983Z"
+ "iopub.execute_input": "2026-09-29T17:37:33.941107Z",
+ "iopub.status.busy": "2026-09-29T17:37:33.933635Z",
+ "iopub.status.idle": "2026-09-29T17:37:35.569214Z",
+ "shell.execute_reply": "2026-09-29T17:37:35.563343Z"
},
"papermill": {
- "duration": 1.10404,
- "end_time": "2026-08-12T05:14:41.398407+00:00",
+ "duration": 1.644738,
+ "end_time": "2026-09-29T17:37:35.569461+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:40.294367+00:00",
+ "start_time": "2026-09-29T17:37:33.924723+00:00",
"status": "completed"
},
"tags": []
@@ -78,10 +78,11 @@
"text/html": [
"\r\n",
"\r\n",
- "
\r\n",
+ "
\r\n",
" The below script needs to be able to find the current output cell; this is an easy method to get it.\r\n",
"
\r\n",
" \r\n",
@@ -205,16 +214,16 @@
"id": "4e8ecb7c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:41.419050Z",
- "iopub.status.busy": "2026-08-12T05:14:41.418670Z",
- "iopub.status.idle": "2026-08-12T05:14:41.946578Z",
- "shell.execute_reply": "2026-08-12T05:14:41.946235Z"
+ "iopub.execute_input": "2026-09-29T17:37:35.586346Z",
+ "iopub.status.busy": "2026-09-29T17:37:35.586034Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.112529Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.110544Z"
},
"papermill": {
- "duration": 0.536343,
- "end_time": "2026-08-12T05:14:41.946695+00:00",
+ "duration": 0.533964,
+ "end_time": "2026-09-29T17:37:36.112646+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:41.410352+00:00",
+ "start_time": "2026-09-29T17:37:35.578682+00:00",
"status": "completed"
},
"tags": []
@@ -400,7 +409,17 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "id": "8f52d2fa",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003253,
+ "end_time": "2026-09-29T17:37:36.119690+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:36.116437+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"**Ce que « from scratch » veut dire ici.** Le moteur définit ci-dessus les trois briques minimales\n",
"d'un modèle causal structural (Pearl) en C# pur : les **variables de fond** (`storm` — des faits\n",
@@ -416,10 +435,10 @@
"id": "1ad2c98d",
"metadata": {
"papermill": {
- "duration": 0.004176,
- "end_time": "2026-08-12T05:14:41.956490+00:00",
+ "duration": 0.003155,
+ "end_time": "2026-09-29T17:37:36.125855+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:41.952314+00:00",
+ "start_time": "2026-09-29T17:37:36.122700+00:00",
"status": "completed"
},
"tags": []
@@ -443,16 +462,16 @@
"id": "e3fc1ddb",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:41.968110Z",
- "iopub.status.busy": "2026-08-12T05:14:41.967770Z",
- "iopub.status.idle": "2026-08-12T05:14:42.120767Z",
- "shell.execute_reply": "2026-08-12T05:14:42.120545Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.134255Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.134034Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.220294Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.220107Z"
},
"papermill": {
- "duration": 0.159258,
- "end_time": "2026-08-12T05:14:42.120873+00:00",
+ "duration": 0.091328,
+ "end_time": "2026-09-29T17:37:36.220387+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:41.961615+00:00",
+ "start_time": "2026-09-29T17:37:36.129059+00:00",
"status": "completed"
},
"tags": []
@@ -543,7 +562,17 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "id": "6976dff8",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003525,
+ "end_time": "2026-09-29T17:37:36.227815+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:36.224290+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"**Les trois modes d'interrogation.** Le `CausalReasoner` exposé ci-dessus distingue exactement les\n",
"trois régimes de requêtes qui structurent la suite du notebook :\n",
@@ -563,10 +592,10 @@
"id": "7f7d8cbd",
"metadata": {
"papermill": {
- "duration": 0.004651,
- "end_time": "2026-08-12T05:14:42.130167+00:00",
+ "duration": 0.003168,
+ "end_time": "2026-09-29T17:37:36.234217+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.125516+00:00",
+ "start_time": "2026-09-29T17:37:36.231049+00:00",
"status": "completed"
},
"tags": []
@@ -586,16 +615,16 @@
"id": "2282ed95",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.146713Z",
- "iopub.status.busy": "2026-08-12T05:14:42.146012Z",
- "iopub.status.idle": "2026-08-12T05:14:42.208815Z",
- "shell.execute_reply": "2026-08-12T05:14:42.208636Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.242487Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.242298Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.325465Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.325217Z"
},
"papermill": {
- "duration": 0.074806,
- "end_time": "2026-08-12T05:14:42.208917+00:00",
+ "duration": 0.088133,
+ "end_time": "2026-09-29T17:37:36.325583+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.134111+00:00",
+ "start_time": "2026-09-29T17:37:36.237450+00:00",
"status": "completed"
},
"tags": []
@@ -613,8 +642,8 @@
{
"data": {
"text/plain": [
- " [fond] storm\r\n",
- " [explique] drops <=> storm\r\n",
+ " [fond] storm\n",
+ " [explique] drops <=> storm\n",
" [explique] rain <=> storm"
]
},
@@ -640,16 +669,16 @@
"id": "3ec954e4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.220675Z",
- "iopub.status.busy": "2026-08-12T05:14:42.220245Z",
- "iopub.status.idle": "2026-08-12T05:14:42.314706Z",
- "shell.execute_reply": "2026-08-12T05:14:42.314421Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.339330Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.339079Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.427533Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.427300Z"
},
"papermill": {
- "duration": 0.101173,
- "end_time": "2026-08-12T05:14:42.314813+00:00",
+ "duration": 0.095858,
+ "end_time": "2026-09-29T17:37:36.427636+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.213640+00:00",
+ "start_time": "2026-09-29T17:37:36.331778+00:00",
"status": "completed"
},
"tags": []
@@ -715,10 +744,10 @@
"id": "84511081",
"metadata": {
"papermill": {
- "duration": 0.004627,
- "end_time": "2026-08-12T05:14:42.324646+00:00",
+ "duration": 0.003603,
+ "end_time": "2026-09-29T17:37:36.435262+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.320019+00:00",
+ "start_time": "2026-09-29T17:37:36.431659+00:00",
"status": "completed"
},
"tags": []
@@ -734,16 +763,16 @@
"id": "61fc580d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.338936Z",
- "iopub.status.busy": "2026-08-12T05:14:42.338150Z",
- "iopub.status.idle": "2026-08-12T05:14:42.397971Z",
- "shell.execute_reply": "2026-08-12T05:14:42.397744Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.448029Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.447219Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.483000Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.482797Z"
},
"papermill": {
- "duration": 0.066094,
- "end_time": "2026-08-12T05:14:42.398138+00:00",
+ "duration": 0.042208,
+ "end_time": "2026-09-29T17:37:36.483089+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.332044+00:00",
+ "start_time": "2026-09-29T17:37:36.440881+00:00",
"status": "completed"
},
"tags": []
@@ -761,8 +790,8 @@
{
"data": {
"text/plain": [
- " [fond] storm\r\n",
- " [explique] drops <=> storm\r\n",
+ " [fond] storm\n",
+ " [explique] drops <=> storm\n",
" [explique] rain <=> storm"
]
},
@@ -782,8 +811,8 @@
{
"data": {
"text/plain": [
- " [fond] storm\r\n",
- " [explique] drops <=> +\r\n",
+ " [fond] storm\n",
+ " [explique] drops <=> +\n",
" [explique] rain <=> storm"
]
},
@@ -826,10 +855,10 @@
"id": "fa30c257",
"metadata": {
"papermill": {
- "duration": 0.010298,
- "end_time": "2026-08-12T05:14:42.415440+00:00",
+ "duration": 0.003633,
+ "end_time": "2026-09-29T17:37:36.490725+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.405142+00:00",
+ "start_time": "2026-09-29T17:37:36.487092+00:00",
"status": "completed"
},
"tags": []
@@ -847,16 +876,16 @@
"id": "f59585fe",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.436566Z",
- "iopub.status.busy": "2026-08-12T05:14:42.436155Z",
- "iopub.status.idle": "2026-08-12T05:14:42.563777Z",
- "shell.execute_reply": "2026-08-12T05:14:42.563584Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.500560Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.500263Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.523759Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.523599Z"
},
"papermill": {
- "duration": 0.137125,
- "end_time": "2026-08-12T05:14:42.563885+00:00",
+ "duration": 0.029376,
+ "end_time": "2026-09-29T17:37:36.523854+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.426760+00:00",
+ "start_time": "2026-09-29T17:37:36.494478+00:00",
"status": "completed"
},
"tags": []
@@ -874,9 +903,9 @@
{
"data": {
"text/plain": [
- " [fond] cloudy\r\n",
- " [explique] sprinkler <=> cloudy\r\n",
- " [explique] rain <=> cloudy\r\n",
+ " [fond] cloudy\n",
+ " [explique] sprinkler <=> cloudy\n",
+ " [explique] rain <=> cloudy\n",
" [explique] wet <=> sprinkler || rain"
]
},
@@ -911,7 +940,17 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "id": "3611b7a6",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003735,
+ "end_time": "2026-09-29T17:37:36.531899+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:36.528164+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"**Lecture du réseau.** Trois différences structurelles avec le baromètre méritent d'être dites avant\n",
"de lancer les requêtes :\n",
@@ -930,16 +969,16 @@
"id": "5fe956b6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.583181Z",
- "iopub.status.busy": "2026-08-12T05:14:42.582635Z",
- "iopub.status.idle": "2026-08-12T05:14:42.729650Z",
- "shell.execute_reply": "2026-08-12T05:14:42.729420Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.541719Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.541442Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.597473Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.597243Z"
},
"papermill": {
- "duration": 0.16066,
- "end_time": "2026-08-12T05:14:42.729777+00:00",
+ "duration": 0.061811,
+ "end_time": "2026-09-29T17:37:36.597587+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.569117+00:00",
+ "start_time": "2026-09-29T17:37:36.535776+00:00",
"status": "completed"
},
"tags": []
@@ -1060,10 +1099,10 @@
"id": "a1b2c3d4",
"metadata": {
"papermill": {
- "duration": 0.007363,
- "end_time": "2026-08-12T05:14:42.745459+00:00",
+ "duration": 0.00718,
+ "end_time": "2026-09-29T17:37:36.612572+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.738096+00:00",
+ "start_time": "2026-09-29T17:37:36.605392+00:00",
"status": "completed"
},
"tags": []
@@ -1081,10 +1120,10 @@
"id": "5571b2be",
"metadata": {
"papermill": {
- "duration": 0.007524,
- "end_time": "2026-08-12T05:14:42.761922+00:00",
+ "duration": 0.007271,
+ "end_time": "2026-09-29T17:37:36.626604+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.754398+00:00",
+ "start_time": "2026-09-29T17:37:36.619333+00:00",
"status": "completed"
},
"tags": []
@@ -1104,16 +1143,16 @@
"id": "55b0ab33",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.779056Z",
- "iopub.status.busy": "2026-08-12T05:14:42.778725Z",
- "iopub.status.idle": "2026-08-12T05:14:42.853165Z",
- "shell.execute_reply": "2026-08-12T05:14:42.852942Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.642862Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.642488Z",
+ "iopub.status.idle": "2026-09-29T17:37:36.677406Z",
+ "shell.execute_reply": "2026-09-29T17:37:36.677238Z"
},
"papermill": {
- "duration": 0.08316,
- "end_time": "2026-08-12T05:14:42.853384+00:00",
+ "duration": 0.044037,
+ "end_time": "2026-09-29T17:37:36.677485+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.770224+00:00",
+ "start_time": "2026-09-29T17:37:36.633448+00:00",
"status": "completed"
},
"tags": []
@@ -1151,7 +1190,17 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "id": "79a9cd00",
+ "metadata": {
+ "papermill": {
+ "duration": 0.004449,
+ "end_time": "2026-09-29T17:37:36.686523+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:36.682074+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"**Les trois temps du contrefactuel.** Le verdict `True` ci-dessus se déroule en trois étapes, toutes\n",
"présentes dans le code de la cellule :\n",
@@ -1173,10 +1222,10 @@
"id": "a3c3afb8",
"metadata": {
"papermill": {
- "duration": 0.00572,
- "end_time": "2026-08-12T05:14:42.865725+00:00",
+ "duration": 0.004339,
+ "end_time": "2026-09-29T17:37:36.695351+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.860005+00:00",
+ "start_time": "2026-09-29T17:37:36.691012+00:00",
"status": "completed"
},
"tags": []
@@ -1203,16 +1252,16 @@
"id": "7af77e3e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:42.890076Z",
- "iopub.status.busy": "2026-08-12T05:14:42.889762Z",
- "iopub.status.idle": "2026-08-12T05:14:43.695405Z",
- "shell.execute_reply": "2026-08-12T05:14:43.695067Z"
+ "iopub.execute_input": "2026-09-29T17:37:36.706099Z",
+ "iopub.status.busy": "2026-09-29T17:37:36.705845Z",
+ "iopub.status.idle": "2026-09-29T17:37:37.166015Z",
+ "shell.execute_reply": "2026-09-29T17:37:37.165762Z"
},
"papermill": {
- "duration": 0.8157,
- "end_time": "2026-08-12T05:14:43.695579+00:00",
+ "duration": 0.466532,
+ "end_time": "2026-09-29T17:37:37.166119+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:42.879879+00:00",
+ "start_time": "2026-09-29T17:37:36.699587+00:00",
"status": "completed"
},
"tags": []
@@ -1241,7 +1290,6 @@
"// Chargement du pont IKVM (TweetyProject v1.30 -> .NET) — recette éprouvée (cf. Tweety-5 §4.1.2).\n",
"#r \"nuget: IKVM, 8.15.0\"\n",
"#r \"nuget: IKVM.Image, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image.runtime.win-x64, 8.15.0\"\n",
"\n",
"#r \"org.tweetyproject.tweety-causal.dll\"\n",
"\n",
@@ -1250,7 +1298,8 @@
"\n",
"// IKVM runtime : home explicite (économie de cold-restart, recette c.758)\n",
"string ikvmVer = \"8.15.0\";\n",
- "string ikvmRid = \"win-x64\";\n",
+ "// RID de la machine courante (win-x64, linux-x64, osx-arm64...) : IKVM.Image tire l'image native de chaque plateforme.\n",
+ "string ikvmRid = (OperatingSystem.IsWindows() ? \"win\" : OperatingSystem.IsMacOS() ? \"osx\" : \"linux\") + \"-\" + System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();\n",
"string nugetRoot = Environment.GetEnvironmentVariable(\"NUGET_PACKAGES\")\n",
" ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), \".nuget\", \"packages\");\n",
"string ikvmBaseAny = Path.Combine(nugetRoot, \"ikvm.image\", ikvmVer, \"ikvm\", \"any\", \"any\");\n",
@@ -1277,16 +1326,16 @@
"id": "18e57bc6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:43.711490Z",
- "iopub.status.busy": "2026-08-12T05:14:43.711100Z",
- "iopub.status.idle": "2026-08-12T05:14:44.845679Z",
- "shell.execute_reply": "2026-08-12T05:14:44.845400Z"
+ "iopub.execute_input": "2026-09-29T17:37:37.181581Z",
+ "iopub.status.busy": "2026-09-29T17:37:37.181210Z",
+ "iopub.status.idle": "2026-09-29T17:37:37.523697Z",
+ "shell.execute_reply": "2026-09-29T17:37:37.523534Z"
},
"papermill": {
- "duration": 1.142313,
- "end_time": "2026-08-12T05:14:44.845818+00:00",
+ "duration": 0.34978,
+ "end_time": "2026-09-29T17:37:37.523783+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:43.703505+00:00",
+ "start_time": "2026-09-29T17:37:37.174003+00:00",
"status": "completed"
},
"tags": []
@@ -1306,9 +1355,9 @@
"text/plain": [
"Background atoms: [cloudy]\n",
"Structural Equations:\n",
- "sprinkler <=> cloudy\r\n",
- "wet <=> sprinkler||rain\r\n",
- "rain <=> cloudy\r\n"
+ "sprinkler <=> cloudy\n",
+ "wet <=> sprinkler||rain\n",
+ "rain <=> cloudy\n"
]
},
"metadata": {},
@@ -1329,9 +1378,9 @@
"text/plain": [
"Background atoms: [cloudy]\n",
"Structural Equations:\n",
- "sprinkler <=> +\r\n",
- "wet <=> sprinkler||rain\r\n",
- "rain <=> cloudy\r\n"
+ "sprinkler <=> +\n",
+ "wet <=> sprinkler||rain\n",
+ "rain <=> cloudy\n"
]
},
"metadata": {},
@@ -1400,10 +1449,10 @@
"id": "7c9dd2d6",
"metadata": {
"papermill": {
- "duration": 0.007856,
- "end_time": "2026-08-12T05:14:44.862857+00:00",
+ "duration": 0.00491,
+ "end_time": "2026-09-29T17:37:37.534264+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:44.855001+00:00",
+ "start_time": "2026-09-29T17:37:37.529354+00:00",
"status": "completed"
},
"tags": []
@@ -1427,7 +1476,16 @@
{
"cell_type": "markdown",
"id": "diag-refuted-10471",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.004744,
+ "end_time": "2026-09-29T17:37:37.544155+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:37:37.539411+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"> **Plafond upstream du pont causal — diagnostic réfuté (PR #10471).**\n",
"> La v1 du shade IKVM ne matérialisait que **5 des 14 classes** du contrat `org.tweetyproject.causal.*` —\n",
@@ -1449,10 +1507,10 @@
"id": "4125a1a9",
"metadata": {
"papermill": {
- "duration": 0.006681,
- "end_time": "2026-08-12T05:14:44.877446+00:00",
+ "duration": 0.004684,
+ "end_time": "2026-09-29T17:37:37.553454+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:44.870765+00:00",
+ "start_time": "2026-09-29T17:37:37.548770+00:00",
"status": "completed"
},
"tags": []
@@ -1475,16 +1533,16 @@
"id": "f46df358",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:44.902104Z",
- "iopub.status.busy": "2026-08-12T05:14:44.901633Z",
- "iopub.status.idle": "2026-08-12T05:14:45.049947Z",
- "shell.execute_reply": "2026-08-12T05:14:45.048889Z"
+ "iopub.execute_input": "2026-09-29T17:37:37.565435Z",
+ "iopub.status.busy": "2026-09-29T17:37:37.565120Z",
+ "iopub.status.idle": "2026-09-29T17:37:37.600383Z",
+ "shell.execute_reply": "2026-09-29T17:37:37.600118Z"
},
"papermill": {
- "duration": 0.163417,
- "end_time": "2026-08-12T05:14:45.050303+00:00",
+ "duration": 0.042185,
+ "end_time": "2026-09-29T17:37:37.600515+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:44.886886+00:00",
+ "start_time": "2026-09-29T17:37:37.558330+00:00",
"status": "completed"
},
"tags": []
@@ -1533,10 +1591,10 @@
"id": "1fbe9474",
"metadata": {
"papermill": {
- "duration": 0.009661,
- "end_time": "2026-08-12T05:14:45.086703+00:00",
+ "duration": 0.008739,
+ "end_time": "2026-09-29T17:37:37.618232+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:45.077042+00:00",
+ "start_time": "2026-09-29T17:37:37.609493+00:00",
"status": "completed"
},
"tags": []
@@ -1554,16 +1612,16 @@
"id": "307c3e0a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:45.111078Z",
- "iopub.status.busy": "2026-08-12T05:14:45.110755Z",
- "iopub.status.idle": "2026-08-12T05:14:45.156449Z",
- "shell.execute_reply": "2026-08-12T05:14:45.156235Z"
+ "iopub.execute_input": "2026-09-29T17:37:37.637277Z",
+ "iopub.status.busy": "2026-09-29T17:37:37.637077Z",
+ "iopub.status.idle": "2026-09-29T17:37:37.661299Z",
+ "shell.execute_reply": "2026-09-29T17:37:37.661118Z"
},
"papermill": {
- "duration": 0.058897,
- "end_time": "2026-08-12T05:14:45.156586+00:00",
+ "duration": 0.034762,
+ "end_time": "2026-09-29T17:37:37.661397+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:45.097689+00:00",
+ "start_time": "2026-09-29T17:37:37.626635+00:00",
"status": "completed"
},
"tags": []
@@ -1595,10 +1653,10 @@
"id": "51d8cf5f",
"metadata": {
"papermill": {
- "duration": 0.007497,
- "end_time": "2026-08-12T05:14:45.172987+00:00",
+ "duration": 0.004981,
+ "end_time": "2026-09-29T17:37:37.671582+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:45.165490+00:00",
+ "start_time": "2026-09-29T17:37:37.666601+00:00",
"status": "completed"
},
"tags": []
@@ -1616,16 +1674,16 @@
"id": "3d4bfc0a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-08-12T05:14:45.189588Z",
- "iopub.status.busy": "2026-08-12T05:14:45.189255Z",
- "iopub.status.idle": "2026-08-12T05:14:45.236480Z",
- "shell.execute_reply": "2026-08-12T05:14:45.236149Z"
+ "iopub.execute_input": "2026-09-29T17:37:37.683866Z",
+ "iopub.status.busy": "2026-09-29T17:37:37.683685Z",
+ "iopub.status.idle": "2026-09-29T17:37:37.709450Z",
+ "shell.execute_reply": "2026-09-29T17:37:37.709287Z"
},
"papermill": {
- "duration": 0.056043,
- "end_time": "2026-08-12T05:14:45.236601+00:00",
+ "duration": 0.0329,
+ "end_time": "2026-09-29T17:37:37.709534+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:45.180558+00:00",
+ "start_time": "2026-09-29T17:37:37.676634+00:00",
"status": "completed"
},
"tags": []
@@ -1665,10 +1723,10 @@
"id": "02c12c96",
"metadata": {
"papermill": {
- "duration": 0.013952,
- "end_time": "2026-08-12T05:14:45.259534+00:00",
+ "duration": 0.004971,
+ "end_time": "2026-09-29T17:37:37.719683+00:00",
"exception": false,
- "start_time": "2026-08-12T05:14:45.245582+00:00",
+ "start_time": "2026-09-29T17:37:37.714712+00:00",
"status": "completed"
},
"tags": []
@@ -1712,17 +1770,17 @@
},
"papermill": {
"default_parameters": {},
- "duration": 7.234131,
- "end_time": "2026-08-12T05:14:45.516064+00:00",
+ "duration": 6.074264,
+ "end_time": "2026-09-29T17:37:37.840815+00:00",
"environment_variables": {},
"exception": null,
"input_path": "Tweety-11-Causal-Csharp.ipynb",
- "output_path": "Tweety-11-executed.ipynb",
+ "output_path": "Tweety-11-Causal-Csharp.ipynb",
"parameters": {},
- "start_time": "2026-08-12T05:14:38.281933+00:00",
+ "start_time": "2026-09-29T17:37:31.766551+00:00",
"version": "2.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Aspic-Csharp.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Aspic-Csharp.ipynb
index da6e062b03..08e7694e3f 100644
--- a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Aspic-Csharp.ipynb
+++ b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Aspic-Csharp.ipynb
@@ -3,7 +3,16 @@
{
"cell_type": "markdown",
"id": "m572265",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.005197,
+ "end_time": "2026-09-29T17:34:51.139556+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:34:51.134359+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"# Tweety-4 — Argumentation structurée ASPIC+ en C#/.NET (port natif IKVM)\n",
"\n",
@@ -55,7 +64,16 @@
{
"cell_type": "markdown",
"id": "m873733",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.002776,
+ "end_time": "2026-09-29T17:34:51.145980+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:34:51.143204+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## 1 — Runtime IKVM : charger le module `arg-aspic`\n",
"\n",
@@ -75,13 +93,136 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:01.049671Z",
- "iopub.status.busy": "2026-07-03T02:56:01.039675Z",
- "iopub.status.idle": "2026-07-03T02:56:03.329709Z",
- "shell.execute_reply": "2026-07-03T02:56:03.322122Z"
- }
+ "iopub.execute_input": "2026-09-29T17:34:51.167889Z",
+ "iopub.status.busy": "2026-09-29T17:34:51.158664Z",
+ "iopub.status.idle": "2026-09-29T17:35:01.524413Z",
+ "shell.execute_reply": "2026-09-29T17:35:01.519378Z"
+ },
+ "papermill": {
+ "duration": 10.37441,
+ "end_time": "2026-09-29T17:35:01.524555+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:34:51.150145+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "
\r\n",
+ "
\r\n",
+ " The below script needs to be able to find the current output cell; this is an easy method to get it.\r\n",
+ "
\r\n",
+ " \r\n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
{
"data": {
"text/html": [
@@ -95,7 +236,6 @@
"source": [
"#r \"nuget: IKVM, 8.15.0\"\n",
"#r \"nuget: IKVM.Image, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image.runtime.win-x64, 8.15.0\"\n",
"\n"
]
},
@@ -108,24 +248,33 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:03.332986Z",
- "iopub.status.busy": "2026-07-03T02:56:03.332610Z",
- "iopub.status.idle": "2026-07-03T02:56:05.014088Z",
- "shell.execute_reply": "2026-07-03T02:56:05.013738Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:01.534042Z",
+ "iopub.status.busy": "2026-09-29T17:35:01.533800Z",
+ "iopub.status.idle": "2026-09-29T17:35:06.455787Z",
+ "shell.execute_reply": "2026-09-29T17:35:06.455559Z"
+ },
+ "papermill": {
+ "duration": 4.927371,
+ "end_time": "2026-09-29T17:35:06.455882+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:01.528511+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "IKVM home=OK\r\n"
+ "IKVM home=OK\n"
]
}
],
"source": [
"using System.IO;\n",
- "string ikvmVer = \"8.15.0\", ikvmRid = \"win-x64\";\n",
+ "// RID de la machine courante (win-x64, linux-x64, osx-arm64...) : IKVM.Image tire l'image native de chaque plateforme.\n",
+ "string ikvmVer = \"8.15.0\", ikvmRid = (OperatingSystem.IsWindows() ? \"win\" : OperatingSystem.IsMacOS() ? \"osx\" : \"linux\") + \"-\" + System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();\n",
"string nugetRoot = Environment.GetEnvironmentVariable(\"NUGET_PACKAGES\")\n",
" ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), \".nuget\", \"packages\");\n",
"string ikvmBaseAny = Path.Combine(nugetRoot, \"ikvm.image\", ikvmVer, \"ikvm\", \"any\", \"any\");\n",
@@ -162,11 +311,19 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:05.016317Z",
- "iopub.status.busy": "2026-07-03T02:56:05.015927Z",
- "iopub.status.idle": "2026-07-03T02:56:05.051444Z",
- "shell.execute_reply": "2026-07-03T02:56:05.051111Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:06.464653Z",
+ "iopub.status.busy": "2026-09-29T17:35:06.464320Z",
+ "iopub.status.idle": "2026-09-29T17:35:07.555791Z",
+ "shell.execute_reply": "2026-09-29T17:35:07.555438Z"
+ },
+ "papermill": {
+ "duration": 1.09645,
+ "end_time": "2026-09-29T17:35:07.555936+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:06.459486+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [],
"source": [
@@ -180,18 +337,26 @@
"id": "7dc5dde1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:05.053491Z",
- "iopub.status.busy": "2026-07-03T02:56:05.053156Z",
- "iopub.status.idle": "2026-07-03T02:56:05.224539Z",
- "shell.execute_reply": "2026-07-03T02:56:05.224281Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:07.567250Z",
+ "iopub.status.busy": "2026-09-29T17:35:07.566926Z",
+ "iopub.status.idle": "2026-09-29T17:35:07.679138Z",
+ "shell.execute_reply": "2026-09-29T17:35:07.678852Z"
+ },
+ "papermill": {
+ "duration": 0.117782,
+ "end_time": "2026-09-29T17:35:07.679261+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:07.561479+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Tweety (IKVM) reference chargee : org.tweetyproject.tweety-aspic v1.30.0.0 (8,0 Mo).\r\n"
+ "Tweety (IKVM) reference chargee : org.tweetyproject.tweety-aspic v1.30.0.0 (8.0 Mo).\n"
]
}
],
@@ -207,7 +372,16 @@
{
"cell_type": "markdown",
"id": "m252181",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.004334,
+ "end_time": "2026-09-29T17:35:07.688885+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:07.684551+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## 2 — Construire une théorie ASPIC+\n",
"\n",
@@ -238,25 +412,33 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:05.226305Z",
- "iopub.status.busy": "2026-07-03T02:56:05.226034Z",
- "iopub.status.idle": "2026-07-03T02:56:06.183332Z",
- "shell.execute_reply": "2026-07-03T02:56:06.182374Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:07.698557Z",
+ "iopub.status.busy": "2026-09-29T17:35:07.698302Z",
+ "iopub.status.idle": "2026-09-29T17:35:10.676172Z",
+ "shell.execute_reply": "2026-09-29T17:35:10.675960Z"
+ },
+ "papermill": {
+ "duration": 2.984475,
+ "end_time": "2026-09-29T17:35:10.676269+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:07.691794+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "theorie = ArgumentationSystem [rules=[ -> a, a -> b]]\r\n"
+ "theorie = ArgumentationSystem [rules=[ -> a, a -> b]]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "strict.isDefeasible() = False (false => STRICT, fleche '->')\r\n"
+ "strict.isDefeasible() = False (false => STRICT, fleche '->')\n"
]
}
],
@@ -286,7 +468,13 @@
"cell_type": "markdown",
"id": "2dc48876",
"metadata": {
- "papermill": {},
+ "papermill": {
+ "duration": 0.003041,
+ "end_time": "2026-09-29T17:35:10.683189+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.680148+00:00",
+ "status": "completed"
+ },
"tags": []
},
"source": [
@@ -298,7 +486,16 @@
{
"cell_type": "markdown",
"id": "m946579",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003318,
+ "end_time": "2026-09-29T17:35:10.690963+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.687645+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 2.2 Règle défaisable\n",
"\n",
@@ -316,25 +513,33 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:06.186089Z",
- "iopub.status.busy": "2026-07-03T02:56:06.185598Z",
- "iopub.status.idle": "2026-07-03T02:56:06.284926Z",
- "shell.execute_reply": "2026-07-03T02:56:06.284549Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:10.699468Z",
+ "iopub.status.busy": "2026-09-29T17:35:10.699234Z",
+ "iopub.status.idle": "2026-09-29T17:35:10.741039Z",
+ "shell.execute_reply": "2026-09-29T17:35:10.740827Z"
+ },
+ "papermill": {
+ "duration": 0.046941,
+ "end_time": "2026-09-29T17:35:10.741129+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.694188+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "theorie = ArgumentationSystem [rules=[ -> a, a => c, a -> b]]\r\n"
+ "theorie = ArgumentationSystem [rules=[ -> a, a => c, a -> b]]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "def.isDefeasible() = True (true => DEFAISABLE, fleche '=>')\r\n"
+ "def.isDefeasible() = True (true => DEFAISABLE, fleche '=>')\n"
]
}
],
@@ -356,7 +561,13 @@
"cell_type": "markdown",
"id": "1917dcf3",
"metadata": {
- "papermill": {},
+ "papermill": {
+ "duration": 0.00493,
+ "end_time": "2026-09-29T17:35:10.749836+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.744906+00:00",
+ "status": "completed"
+ },
"tags": []
},
"source": [
@@ -368,7 +579,16 @@
{
"cell_type": "markdown",
"id": "m305236",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003095,
+ "end_time": "2026-09-29T17:35:10.756027+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.752932+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## 3 — Le pont vers Dung : `asDungTheory()`\n",
"\n",
@@ -391,39 +611,47 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:06.287128Z",
- "iopub.status.busy": "2026-07-03T02:56:06.286802Z",
- "iopub.status.idle": "2026-07-03T02:56:06.503430Z",
- "shell.execute_reply": "2026-07-03T02:56:06.502861Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:10.764533Z",
+ "iopub.status.busy": "2026-09-29T17:35:10.764324Z",
+ "iopub.status.idle": "2026-09-29T17:35:10.838003Z",
+ "shell.execute_reply": "2026-09-29T17:35:10.837774Z"
+ },
+ "papermill": {
+ "duration": 0.078499,
+ "end_time": "2026-09-29T17:35:10.838098+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.759599+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "AAF generee = <{ -> a, a => c [ -> a], a -> b [ -> a] },[]>\r\n"
+ "AAF generee = <{ -> a, a => c [ -> a], a -> b [ -> a] },[]>\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "nb arguments = 3\r\n"
+ "nb arguments = 3\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "attaques = []\r\n"
+ "attaques = []\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "extension fondee = { -> a,a => c [ -> a],a -> b [ -> a]}\r\n"
+ "extension fondee = { -> a,a => c [ -> a],a -> b [ -> a]}\n"
]
}
],
@@ -448,7 +676,13 @@
"cell_type": "markdown",
"id": "60e94bf6",
"metadata": {
- "papermill": {},
+ "papermill": {
+ "duration": 0.003117,
+ "end_time": "2026-09-29T17:35:10.844941+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.841824+00:00",
+ "status": "completed"
+ },
"tags": []
},
"source": [
@@ -460,7 +694,16 @@
{
"cell_type": "markdown",
"id": "m552452",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003005,
+ "end_time": "2026-09-29T17:35:10.851085+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.848080+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 3.1 D'où vient une attaque ? La nécessité d'une vraie contradiction\n",
"\n",
@@ -477,7 +720,16 @@
{
"cell_type": "markdown",
"id": "m830688",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.002999,
+ "end_time": "2026-09-29T17:35:10.857541+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.854542+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## 4 — L'exemple canonique : Tweety le pingouin\n",
"\n",
@@ -503,11 +755,19 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:06.507310Z",
- "iopub.status.busy": "2026-07-03T02:56:06.506688Z",
- "iopub.status.idle": "2026-07-03T02:56:06.653151Z",
- "shell.execute_reply": "2026-07-03T02:56:06.652614Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:10.866102Z",
+ "iopub.status.busy": "2026-09-29T17:35:10.865746Z",
+ "iopub.status.idle": "2026-09-29T17:35:10.900953Z",
+ "shell.execute_reply": "2026-09-29T17:35:10.900773Z"
+ },
+ "papermill": {
+ "duration": 0.040451,
+ "end_time": "2026-09-29T17:35:10.901051+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.860600+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
@@ -515,7 +775,7 @@
"output_type": "stream",
"text": [
"=== Theorie ASPIC+ ===\n",
- "ArgumentationSystem [rules=[ -> penguin, -> bird, bird => flies, penguin => !flies, penguin -> bird]]\r\n"
+ "ArgumentationSystem [rules=[ -> penguin, -> bird, bird => flies, penguin => !flies, penguin -> bird]]\n"
]
},
{
@@ -524,7 +784,7 @@
"text": [
"\n",
"=== AAF generee ===\n",
- "<{ -> bird, bird => flies [ -> bird], penguin => !flies [ -> penguin], -> penguin, penguin -> bird [ -> penguin], bird => flies [penguin -> bird [ -> penguin]] },[(bird => flies [ -> bird],penguin => !flies [ -> penguin]), (penguin => !flies [ -> penguin],bird => flies [ -> bird]), (penguin => !flies [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]), (bird => flies [penguin -> bird [ -> penguin]],penguin => !flies [ -> penguin])]>\r\n"
+ "<{ -> bird, bird => flies [ -> bird], penguin => !flies [ -> penguin], -> penguin, penguin -> bird [ -> penguin], bird => flies [penguin -> bird [ -> penguin]] },[(bird => flies [ -> bird],penguin => !flies [ -> penguin]), (penguin => !flies [ -> penguin],bird => flies [ -> bird]), (penguin => !flies [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]), (bird => flies [penguin -> bird [ -> penguin]],penguin => !flies [ -> penguin])]>\n"
]
},
{
@@ -532,7 +792,7 @@
"output_type": "stream",
"text": [
"\n",
- "attaques = [(bird => flies [ -> bird],penguin => !flies [ -> penguin]), (penguin => !flies [ -> penguin],bird => flies [ -> bird]), (penguin => !flies [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]), (bird => flies [penguin -> bird [ -> penguin]],penguin => !flies [ -> penguin])]\r\n"
+ "attaques = [(bird => flies [ -> bird],penguin => !flies [ -> penguin]), (penguin => !flies [ -> penguin],bird => flies [ -> bird]), (penguin => !flies [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]), (bird => flies [penguin -> bird [ -> penguin]],penguin => !flies [ -> penguin])]\n"
]
}
],
@@ -568,7 +828,13 @@
"cell_type": "markdown",
"id": "afb7bc3f",
"metadata": {
- "papermill": {},
+ "papermill": {
+ "duration": 0.003431,
+ "end_time": "2026-09-29T17:35:10.908858+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.905427+00:00",
+ "status": "completed"
+ },
"tags": []
},
"source": [
@@ -580,7 +846,16 @@
{
"cell_type": "markdown",
"id": "m350443",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003402,
+ "end_time": "2026-09-29T17:35:10.915459+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.912057+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 4.1 Divergence des sémantiques\n",
"\n",
@@ -603,67 +878,75 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:06.656185Z",
- "iopub.status.busy": "2026-07-03T02:56:06.655654Z",
- "iopub.status.idle": "2026-07-03T02:56:06.877511Z",
- "shell.execute_reply": "2026-07-03T02:56:06.877226Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:10.923975Z",
+ "iopub.status.busy": "2026-09-29T17:35:10.923786Z",
+ "iopub.status.idle": "2026-09-29T17:35:10.995971Z",
+ "shell.execute_reply": "2026-09-29T17:35:10.995800Z"
+ },
+ "papermill": {
+ "duration": 0.077246,
+ "end_time": "2026-09-29T17:35:10.996058+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:10.918812+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Tweety fondée :\r\n"
+ "Tweety fondée :\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " { -> bird, -> penguin,penguin -> bird [ -> penguin]}\r\n"
+ " { -> bird, -> penguin,penguin -> bird [ -> penguin]}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Tweety préférée :\r\n"
+ "Tweety préférée :\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " { -> bird,bird => flies [ -> bird], -> penguin,penguin -> bird [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]}\r\n"
+ " { -> bird,bird => flies [ -> bird], -> penguin,penguin -> bird [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " { -> bird,penguin => !flies [ -> penguin], -> penguin,penguin -> bird [ -> penguin]}\r\n"
+ " { -> bird,penguin => !flies [ -> penguin], -> penguin,penguin -> bird [ -> penguin]}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Tweety stable :\r\n"
+ "Tweety stable :\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " { -> bird,bird => flies [ -> bird], -> penguin,penguin -> bird [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]}\r\n"
+ " { -> bird,bird => flies [ -> bird], -> penguin,penguin -> bird [ -> penguin],bird => flies [penguin -> bird [ -> penguin]]}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " { -> bird,penguin => !flies [ -> penguin], -> penguin,penguin -> bird [ -> penguin]}\r\n"
+ " { -> bird,penguin => !flies [ -> penguin], -> penguin,penguin -> bird [ -> penguin]}\n"
]
},
{
@@ -671,21 +954,21 @@
"output_type": "stream",
"text": [
"\n",
- "-- Lecture --\r\n"
+ "-- Lecture --\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Fondee : Tweety vole-t-il ? -> non tranche (flies ET !flies absents)\r\n"
+ "Fondee : Tweety vole-t-il ? -> non tranche (flies ET !flies absents)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Preferee : deux mondes possibles (flies OU !flies), il faut choisir\r\n"
+ "Preferee : deux mondes possibles (flies OU !flies), il faut choisir\n"
]
}
],
@@ -711,7 +994,13 @@
"cell_type": "markdown",
"id": "bced66a4",
"metadata": {
- "papermill": {},
+ "papermill": {
+ "duration": 0.004568,
+ "end_time": "2026-09-29T17:35:11.005062+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.000494+00:00",
+ "status": "completed"
+ },
"tags": []
},
"source": [
@@ -723,7 +1012,16 @@
{
"cell_type": "markdown",
"id": "m276161",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.004107,
+ "end_time": "2026-09-29T17:35:11.013108+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.009001+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"***\n",
"\n",
@@ -736,7 +1034,16 @@
{
"cell_type": "markdown",
"id": "m673499",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003985,
+ "end_time": "2026-09-29T17:35:11.020938+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.016953+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Exercice 1 — Lever l'indétermination par une règle stricte\n",
"\n",
@@ -762,18 +1069,26 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:06.880103Z",
- "iopub.status.busy": "2026-07-03T02:56:06.879600Z",
- "iopub.status.idle": "2026-07-03T02:56:06.946164Z",
- "shell.execute_reply": "2026-07-03T02:56:06.945648Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:11.030353Z",
+ "iopub.status.busy": "2026-09-29T17:35:11.030059Z",
+ "iopub.status.idle": "2026-09-29T17:35:11.054286Z",
+ "shell.execute_reply": "2026-09-29T17:35:11.054068Z"
+ },
+ "papermill": {
+ "duration": 0.030015,
+ "end_time": "2026-09-29T17:35:11.054373+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.024358+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "!flies skeptiquement accepte ? Exercice a completer\r\n"
+ "!flies skeptiquement accepte ? Exercice a completer\n"
]
}
],
@@ -788,7 +1103,16 @@
{
"cell_type": "markdown",
"id": "m113544",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.00377,
+ "end_time": "2026-09-29T17:35:11.062205+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.058435+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Exercice 2 — Cycle défaisable à trois\n",
"\n",
@@ -813,18 +1137,26 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:06.948870Z",
- "iopub.status.busy": "2026-07-03T02:56:06.948365Z",
- "iopub.status.idle": "2026-07-03T02:56:07.022344Z",
- "shell.execute_reply": "2026-07-03T02:56:07.022033Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:11.071537Z",
+ "iopub.status.busy": "2026-09-29T17:35:11.071364Z",
+ "iopub.status.idle": "2026-09-29T17:35:11.105928Z",
+ "shell.execute_reply": "2026-09-29T17:35:11.105627Z"
+ },
+ "papermill": {
+ "duration": 0.040165,
+ "end_time": "2026-09-29T17:35:11.106024+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.065859+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "extensions preferees du cycle = Exercice a completer\r\n"
+ "extensions preferees du cycle = Exercice a completer\n"
]
}
],
@@ -839,7 +1171,16 @@
{
"cell_type": "markdown",
"id": "m351445",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003644,
+ "end_time": "2026-09-29T17:35:11.115975+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.112331+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### Exercice 3 — Votre propre mini-théorie (débat juridique ou médical)\n",
"\n",
@@ -865,18 +1206,26 @@
"language": "csharp"
},
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:07.024703Z",
- "iopub.status.busy": "2026-07-03T02:56:07.024231Z",
- "iopub.status.idle": "2026-07-03T02:56:07.083734Z",
- "shell.execute_reply": "2026-07-03T02:56:07.083257Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:11.126211Z",
+ "iopub.status.busy": "2026-09-29T17:35:11.126021Z",
+ "iopub.status.idle": "2026-09-29T17:35:11.162385Z",
+ "shell.execute_reply": "2026-09-29T17:35:11.162185Z"
+ },
+ "papermill": {
+ "duration": 0.041999,
+ "end_time": "2026-09-29T17:35:11.162464+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.120465+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "verdict fondee prédit = Exercice a completer\r\n"
+ "verdict fondee prédit = Exercice a completer\n"
]
}
],
@@ -891,7 +1240,16 @@
{
"cell_type": "markdown",
"id": "m28626",
- "metadata": {},
+ "metadata": {
+ "papermill": {
+ "duration": 0.003582,
+ "end_time": "2026-09-29T17:35:11.170478+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:11.166896+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"***\n",
"\n",
@@ -933,6 +1291,23 @@
}
],
"metadata": {
+ "cost": {
+ "api_provider": "none",
+ "api_usd_est": 0.0,
+ "cpu_min": 8,
+ "external_account": null,
+ "free_alternative": null,
+ "gpu_min": 0,
+ "gpu_required": false,
+ "metadata_written": "2026-08-02",
+ "network": false,
+ "notes": "Formal-logic solving via local Tweety (TweetyProject, Java via IKVM). No API, no GPU; deterministic logic reasoning. Requires a configured Java env (JAVA_HOME + Tweety jars) to execute, but the solving itself is deterministic -> reproducibility HIGH. Self-contained (no external account).",
+ "reduced_pedagogical": null,
+ "reproducibility": "HIGH",
+ "validator": "manual",
+ "vram_gb": 0,
+ "vram_tier": "NONE"
+ },
"kernelspec": {
"display_name": ".NET (C#)",
"language": "C#",
@@ -945,24 +1320,19 @@
"pygments_lexer": "csharp",
"version": "13.0"
},
- "cost": {
- "api_usd_est": 0.0,
- "api_provider": "none",
- "cpu_min": 8,
- "gpu_min": 0,
- "gpu_required": false,
- "vram_gb": 0,
- "vram_tier": "NONE",
- "network": false,
- "external_account": null,
- "free_alternative": null,
- "reduced_pedagogical": null,
- "reproducibility": "HIGH",
- "metadata_written": "2026-08-02",
- "validator": "manual",
- "notes": "Formal-logic solving via local Tweety (TweetyProject, Java via IKVM). No API, no GPU; deterministic logic reasoning. Requires a configured Java env (JAVA_HOME + Tweety jars) to execute, but the solving itself is deterministic -> reproducibility HIGH. Self-contained (no external account)."
+ "papermill": {
+ "default_parameters": {},
+ "duration": 48.349115,
+ "end_time": "2026-09-29T17:35:11.291008+00:00",
+ "environment_variables": {},
+ "exception": null,
+ "input_path": "Tweety-4-Aspic-Csharp.ipynb",
+ "output_path": "Tweety-4-Aspic-Csharp.ipynb",
+ "parameters": {},
+ "start_time": "2026-09-29T17:34:22.941893+00:00",
+ "version": "2.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Belief-Revision-Csharp.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Belief-Revision-Csharp.ipynb
index 2fe788ad0e..dea724df06 100644
--- a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Belief-Revision-Csharp.ipynb
+++ b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-4-Belief-Revision-Csharp.ipynb
@@ -2,8 +2,17 @@
"cells": [
{
"cell_type": "markdown",
- "id": "title",
- "metadata": {},
+ "id": "5cdaab35",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003159,
+ "end_time": "2026-09-29T17:35:16.880907+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:16.877748+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"# Tweety C# / IKVM - Revision de Croyances (Port .NET du notebook Python)\n",
"\n",
@@ -17,8 +26,17 @@
},
{
"cell_type": "markdown",
- "id": "intro",
- "metadata": {},
+ "id": "ab3c32f4",
+ "metadata": {
+ "papermill": {
+ "duration": 0.002345,
+ "end_time": "2026-09-29T17:35:16.886096+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:16.883751+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## De quoi parle la revision de croyances ?\n",
"\n",
@@ -46,17 +64,27 @@
},
{
"cell_type": "markdown",
- "id": "sec1",
- "metadata": {},
+ "id": "35da4b6d",
+ "metadata": {
+ "papermill": {
+ "duration": 0.002195,
+ "end_time": "2026-09-29T17:35:16.890708+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:16.888513+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 1. Configuration du runtime IKVM\n",
"\n",
"IKVM est un runtime **Java sur .NET** : il réimplémente la JVM et les bibliothèques de classes\n",
"Java en bytecode .NET, ce qui permet de consommer un JAR Java (ici Tweety) **sans installer de\n",
"JVM** — les types Java (`java.util.HashSet`, etc.) deviennent des types .NET utilisables\n",
- "directement depuis C#. La configuration exige trois paquets NuGet : le noyau `IKVM`, l'image\n",
- "de base `IKVM.Image` (les classes Java standard), et le runtime natif `IKVM.Image.runtime.win-x64`\n",
- "(les binaires spécifiques à la plateforme). La cellule suivante vérifie l'installation en\n",
+ "directement depuis C#. La configuration référence deux paquets NuGet : le noyau `IKVM` et l'image\n",
+ "de base `IKVM.Image` (les classes Java standard). `IKVM.Image` tire à son tour le runtime natif\n",
+ "de chaque plateforme (`IKVM.Image.runtime.
`, par exemple `win-x64` ou `linux-x64`), et la\n",
+ "cellule suivante choisit celui de la machine courante. La cellule suivante vérifie l'installation en\n",
"reconstruisant le `home` d'IKVM — le témoin décisif étant le chargement de la base **tzdb**\n",
"(fuseaux horaires Java) : si elle vaut `True`, le runtime est complet et fonctionnel."
]
@@ -64,16 +92,139 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "ikvm-ref",
+ "id": "b399c734",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:17.803330Z",
- "iopub.status.busy": "2026-07-03T02:56:17.793474Z",
- "iopub.status.idle": "2026-07-03T02:56:19.762331Z",
- "shell.execute_reply": "2026-07-03T02:56:19.755968Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:16.911517Z",
+ "iopub.status.busy": "2026-09-29T17:35:16.902070Z",
+ "iopub.status.idle": "2026-09-29T17:35:19.124875Z",
+ "shell.execute_reply": "2026-09-29T17:35:19.120173Z"
+ },
+ "papermill": {
+ "duration": 2.231978,
+ "end_time": "2026-09-29T17:35:19.125032+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:16.893054+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n",
+ "
\r\n",
+ " The below script needs to be able to find the current output cell; this is an easy method to get it.\r\n",
+ "
\r\n",
+ " \r\n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
{
"data": {
"text/html": [
@@ -86,35 +237,43 @@
],
"source": [
"#r \"nuget: IKVM, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image.runtime.win-x64, 8.15.0\""
+ "#r \"nuget: IKVM.Image, 8.15.0\""
]
},
{
"cell_type": "code",
"execution_count": 2,
- "id": "ikvm-home",
+ "id": "ab9f27f3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:19.764755Z",
- "iopub.status.busy": "2026-07-03T02:56:19.764472Z",
- "iopub.status.idle": "2026-07-03T02:56:21.445646Z",
- "shell.execute_reply": "2026-07-03T02:56:21.445197Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:19.133932Z",
+ "iopub.status.busy": "2026-09-29T17:35:19.133720Z",
+ "iopub.status.idle": "2026-09-29T17:35:20.335947Z",
+ "shell.execute_reply": "2026-09-29T17:35:20.335640Z"
+ },
+ "papermill": {
+ "duration": 1.207613,
+ "end_time": "2026-09-29T17:35:20.336075+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:19.128462+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "IKVM 8.15.0 pret (home=ikvm-home-8.15.0-win-x64, tzdb=True)\r\n"
+ "IKVM 8.15.0 pret (home=ikvm-home-8.15.0-linux-x64, tzdb=True)\n"
]
}
],
"source": [
"using System.IO;\n",
"\n",
- "string ikvmVer = \"8.15.0\", ikvmRid = \"win-x64\";\n",
+ "// RID de la machine courante (win-x64, linux-x64, osx-arm64...) : IKVM.Image tire l'image native de chaque plateforme.\n",
+ "string ikvmVer = \"8.15.0\", ikvmRid = (OperatingSystem.IsWindows() ? \"win\" : OperatingSystem.IsMacOS() ? \"osx\" : \"linux\") + \"-\" + System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();\n",
"string nugetRoot = Environment.GetEnvironmentVariable(\"NUGET_PACKAGES\")\n",
" ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), \".nuget\", \"packages\");\n",
"string ikvmBaseAny = Path.Combine(nugetRoot, \"ikvm.image\", ikvmVer, \"ikvm\", \"any\", \"any\");\n",
@@ -147,13 +306,22 @@
},
{
"cell_type": "markdown",
- "id": "",
- "metadata": {},
+ "id": "528f0642",
+ "metadata": {
+ "papermill": {
+ "duration": 0.004418,
+ "end_time": "2026-09-29T17:35:20.346659+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:20.342241+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
- "**Lecture du setup IKVM** — la sortie `IKVM 8.15.0 pret (home=ikvm-home-8.15.0-win-x64, tzdb=True)`\n",
+ "**Lecture du setup IKVM** — la sortie `IKVM 8.15.0 pret (home=ikvm-home-8.15.0-, tzdb=True)`\n",
"valide les trois étages du runtime : la **version** (8.15.0, alignée sur les directives `#r`\n",
"de la cellule précédente), le **home** (le répertoire où IKVM dépose ses données — isolé par\n",
- "version et par plateforme, ici `win-x64`), et surtout `tzdb=True` : la base des **fuseaux\n",
+ "version et par plateforme, par exemple `win-x64` sous Windows ou `linux-x64` sous Linux), et surtout `tzdb=True` : la base des **fuseaux\n",
"horaires Java** (timezone database) a été chargée. C'est le témoin le plus fin de la santé du\n",
"runtime : `tzdb` n'est pas une dépendance de Tweety, c'est une composante profonde de l'image\n",
"Java — si elle charge, l'émulation JVM est complète, pas seulement démarrée. Sans ce témoin,\n",
@@ -162,8 +330,17 @@
},
{
"cell_type": "markdown",
- "id": "sec2",
- "metadata": {},
+ "id": "711d7876",
+ "metadata": {
+ "papermill": {
+ "duration": 0.004171,
+ "end_time": "2026-09-29T17:35:20.355303+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:20.351132+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 2. Chargement de la DLL Tweety beliefdynamics\n",
"\n",
@@ -177,14 +354,22 @@
{
"cell_type": "code",
"execution_count": 3,
- "id": "load-dll",
+ "id": "6dfd96c0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:21.448359Z",
- "iopub.status.busy": "2026-07-03T02:56:21.447877Z",
- "iopub.status.idle": "2026-07-03T02:56:21.490857Z",
- "shell.execute_reply": "2026-07-03T02:56:21.490099Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:20.366296Z",
+ "iopub.status.busy": "2026-09-29T17:35:20.365928Z",
+ "iopub.status.idle": "2026-09-29T17:35:21.137131Z",
+ "shell.execute_reply": "2026-09-29T17:35:21.136251Z"
+ },
+ "papermill": {
+ "duration": 0.777689,
+ "end_time": "2026-09-29T17:35:21.137264+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:20.359575+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [],
"source": [
@@ -194,20 +379,29 @@
{
"cell_type": "code",
"execution_count": 4,
+ "id": "ecfa9519",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:21.493632Z",
- "iopub.status.busy": "2026-07-03T02:56:21.493064Z",
- "iopub.status.idle": "2026-07-03T02:56:21.597928Z",
- "shell.execute_reply": "2026-07-03T02:56:21.597579Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:21.149071Z",
+ "iopub.status.busy": "2026-09-29T17:35:21.148827Z",
+ "iopub.status.idle": "2026-09-29T17:35:21.219741Z",
+ "shell.execute_reply": "2026-09-29T17:35:21.219456Z"
+ },
+ "papermill": {
+ "duration": 0.077401,
+ "end_time": "2026-09-29T17:35:21.219836+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.142435+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Tweety (IKVM) reference chargee : org.tweetyproject.tweety-beliefdynamics v1.30.0.0 (9,0 Mo).\r\n"
+ "Tweety (IKVM) reference chargee : org.tweetyproject.tweety-beliefdynamics v1.30.0.0 (9.0 Mo).\n"
]
}
],
@@ -222,8 +416,17 @@
},
{
"cell_type": "markdown",
- "id": "",
- "metadata": {},
+ "id": "fb4e6349",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003819,
+ "end_time": "2026-09-29T17:35:21.227043+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.223224+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"**Lecture du chargement de la DLL** — la sortie `Tweety (IKVM) reference chargee :\n",
"org.tweetyproject.tweety-beliefdynamics v1.30.0.0 (9,0 Mo)` fait deux vérifications en une.\n",
@@ -240,8 +443,17 @@
},
{
"cell_type": "markdown",
- "id": "sec3",
- "metadata": {},
+ "id": "deff320b",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003673,
+ "end_time": "2026-09-29T17:35:21.233686+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.230013+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 3. Le problème : une base de croyances incohérente\n",
"\n",
@@ -258,42 +470,50 @@
{
"cell_type": "code",
"execution_count": 5,
- "id": "incoherent",
+ "id": "386f902e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:21.600119Z",
- "iopub.status.busy": "2026-07-03T02:56:21.599756Z",
- "iopub.status.idle": "2026-07-03T02:56:22.427306Z",
- "shell.execute_reply": "2026-07-03T02:56:22.426943Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:21.245607Z",
+ "iopub.status.busy": "2026-09-29T17:35:21.245249Z",
+ "iopub.status.idle": "2026-09-29T17:35:21.817999Z",
+ "shell.execute_reply": "2026-09-29T17:35:21.817802Z"
+ },
+ "papermill": {
+ "duration": 0.579686,
+ "end_time": "2026-09-29T17:35:21.818084+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.238398+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Base initiale K = { (a=>b), a, !c }\r\n"
+ "Base initiale K = { (a=>b), a, !c }\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "K incoherente ? false\r\n"
+ "K incoherente ? false\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Union naive K + [!b] = { (a=>b), a, !b, !c }\r\n"
+ "Union naive K + [!b] = { (a=>b), a, !b, !c }\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Union naive incoherente ? true\r\n"
+ "Union naive incoherente ? true\n"
]
}
],
@@ -331,8 +551,17 @@
},
{
"cell_type": "markdown",
- "id": "interp3",
- "metadata": {},
+ "id": "6fa95c31",
+ "metadata": {
+ "papermill": {
+ "duration": 0.002771,
+ "end_time": "2026-09-29T17:35:21.824288+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.821517+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"#### Interpretation\n",
"\n",
@@ -348,8 +577,17 @@
},
{
"cell_type": "markdown",
- "id": "sec4",
- "metadata": {},
+ "id": "0173a0e0",
+ "metadata": {
+ "papermill": {
+ "duration": 0.002535,
+ "end_time": "2026-09-29T17:35:21.829503+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.826968+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 4. Contraction par noyaux (kernel contraction)\n",
"\n",
@@ -366,28 +604,36 @@
{
"cell_type": "code",
"execution_count": 6,
- "id": "contraction",
+ "id": "7110e117",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:22.430132Z",
- "iopub.status.busy": "2026-07-03T02:56:22.429624Z",
- "iopub.status.idle": "2026-07-03T02:56:22.580769Z",
- "shell.execute_reply": "2026-07-03T02:56:22.580001Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:21.837013Z",
+ "iopub.status.busy": "2026-09-29T17:35:21.836814Z",
+ "iopub.status.idle": "2026-09-29T17:35:21.976584Z",
+ "shell.execute_reply": "2026-09-29T17:35:21.925340Z"
+ },
+ "papermill": {
+ "duration": 0.144595,
+ "end_time": "2026-09-29T17:35:21.976710+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.832115+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "K contractee par b = [a, !c]\r\n"
+ "K contractee par b = [a, !c]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Entraine encore b ? false\r\n"
+ "Entraine encore b ? false\n"
]
}
],
@@ -423,8 +669,17 @@
},
{
"cell_type": "markdown",
- "id": "interp4",
- "metadata": {},
+ "id": "2d4c0a34",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003195,
+ "end_time": "2026-09-29T17:35:21.983835+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.980640+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"#### Interpretation\n",
"\n",
@@ -442,8 +697,17 @@
},
{
"cell_type": "markdown",
- "id": "sec5",
- "metadata": {},
+ "id": "9d5bb045",
+ "metadata": {
+ "papermill": {
+ "duration": 0.002682,
+ "end_time": "2026-09-29T17:35:21.989262+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.986580+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 5. Révision par l'identité de Levi\n",
"\n",
@@ -460,35 +724,43 @@
{
"cell_type": "code",
"execution_count": 7,
- "id": "levi",
+ "id": "3a4d03c2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:22.583647Z",
- "iopub.status.busy": "2026-07-03T02:56:22.583227Z",
- "iopub.status.idle": "2026-07-03T02:56:22.718078Z",
- "shell.execute_reply": "2026-07-03T02:56:22.717753Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:21.997927Z",
+ "iopub.status.busy": "2026-09-29T17:35:21.997643Z",
+ "iopub.status.idle": "2026-09-29T17:35:22.055315Z",
+ "shell.execute_reply": "2026-09-29T17:35:22.055107Z"
+ },
+ "papermill": {
+ "duration": 0.06331,
+ "end_time": "2026-09-29T17:35:22.055399+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:21.992089+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "K revisee par !b (Levi) = [a, !b, !c]\r\n"
+ "K revisee par !b (Levi) = [a, !b, !c]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Resultat incoherent ? false\r\n"
+ "Resultat incoherent ? false\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Contient bien !b ? True\r\n"
+ "Contient bien !b ? True\n"
]
}
],
@@ -516,8 +788,17 @@
},
{
"cell_type": "markdown",
- "id": "interp5",
- "metadata": {},
+ "id": "9d926859",
+ "metadata": {
+ "papermill": {
+ "duration": 0.004475,
+ "end_time": "2026-09-29T17:35:22.063657+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.059182+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"#### Interpretation\n",
"\n",
@@ -534,8 +815,17 @@
},
{
"cell_type": "markdown",
- "id": "sec6",
- "metadata": {},
+ "id": "57558d59",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003274,
+ "end_time": "2026-09-29T17:35:22.070988+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.067714+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"### 6. Exemple guide : le pingouin Tweety (raisonnement non-monotone)\n",
"\n",
@@ -555,70 +845,78 @@
{
"cell_type": "code",
"execution_count": 8,
- "id": "guided",
+ "id": "e3acd3ad",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:22.720189Z",
- "iopub.status.busy": "2026-07-03T02:56:22.719872Z",
- "iopub.status.idle": "2026-07-03T02:56:22.908278Z",
- "shell.execute_reply": "2026-07-03T02:56:22.907798Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:22.080071Z",
+ "iopub.status.busy": "2026-09-29T17:35:22.079795Z",
+ "iopub.status.idle": "2026-09-29T17:35:22.191856Z",
+ "shell.execute_reply": "2026-09-29T17:35:22.191654Z"
+ },
+ "papermill": {
+ "duration": 0.117143,
+ "end_time": "2026-09-29T17:35:22.191943+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.074800+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "K conclut que Tweety vole (f) ? true\r\n"
+ "K conclut que Tweety vole (f) ? true\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "K revisee par !f = [(b=>f), p, !f]\r\n"
+ "K revisee par !f = [(b=>f), p, !f]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Resultat incoherent ? false\r\n"
+ "Resultat incoherent ? false\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Conclut desormais !f (ne vole pas) ? True\r\n"
+ "Conclut desormais !f (ne vole pas) ? True\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Croyance(s) abandonnee(s) par la revision : [(p=>b)]\r\n"
+ "Croyance(s) abandonnee(s) par la revision : [(p=>b)]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "La revision a du abandonner une regle par defaut de la chaine p=>b=>f pour\r\n"
+ "La revision a du abandonner une regle par defaut de la chaine p=>b=>f pour\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "integrer l'observation !f sans contradiction : c'est le coeur de l'AGM.\r\n"
+ "integrer l'observation !f sans contradiction : c'est le coeur de l'AGM.\n"
]
}
],
@@ -665,8 +963,17 @@
},
{
"cell_type": "markdown",
- "id": "",
- "metadata": {},
+ "id": "083b1646",
+ "metadata": {
+ "papermill": {
+ "duration": 0.00314,
+ "end_time": "2026-09-29T17:35:22.198811+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.195671+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"**Lecture de la révision du pingouin** — la sortie raconte l'intégralité du compromis AGM\n",
"en cinq lignes : `K conclut que Tweety vole (f) ? true` (la base initiale raisonne sainement —\n",
@@ -688,8 +995,17 @@
},
{
"cell_type": "markdown",
- "id": "conclusion",
- "metadata": {},
+ "id": "dc4419ac",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003089,
+ "end_time": "2026-09-29T17:35:22.205003+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.201914+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Conclusion\n",
"\n",
@@ -719,8 +1035,17 @@
},
{
"cell_type": "markdown",
- "id": "exos",
- "metadata": {},
+ "id": "c0581039",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003029,
+ "end_time": "2026-09-29T17:35:22.211441+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.208412+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"## Exercices\n",
"\n",
@@ -746,21 +1071,29 @@
{
"cell_type": "code",
"execution_count": 9,
- "id": "ex1",
+ "id": "ef90be5e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:22.910569Z",
- "iopub.status.busy": "2026-07-03T02:56:22.910261Z",
- "iopub.status.idle": "2026-07-03T02:56:23.019108Z",
- "shell.execute_reply": "2026-07-03T02:56:23.018753Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:22.219688Z",
+ "iopub.status.busy": "2026-09-29T17:35:22.219328Z",
+ "iopub.status.idle": "2026-09-29T17:35:22.274697Z",
+ "shell.execute_reply": "2026-09-29T17:35:22.274291Z"
+ },
+ "papermill": {
+ "duration": 0.060419,
+ "end_time": "2026-09-29T17:35:22.274901+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.214482+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Exercice 1 a completer\r\n"
+ "Exercice 1 a completer\n"
]
}
],
@@ -780,21 +1113,29 @@
{
"cell_type": "code",
"execution_count": 10,
- "id": "ex2",
+ "id": "0412fd3e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:23.020977Z",
- "iopub.status.busy": "2026-07-03T02:56:23.020674Z",
- "iopub.status.idle": "2026-07-03T02:56:23.074817Z",
- "shell.execute_reply": "2026-07-03T02:56:23.074488Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:22.284215Z",
+ "iopub.status.busy": "2026-09-29T17:35:22.283914Z",
+ "iopub.status.idle": "2026-09-29T17:35:22.312885Z",
+ "shell.execute_reply": "2026-09-29T17:35:22.312616Z"
+ },
+ "papermill": {
+ "duration": 0.034427,
+ "end_time": "2026-09-29T17:35:22.313001+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.278574+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Exercice 2 a completer\r\n"
+ "Exercice 2 a completer\n"
]
}
],
@@ -813,21 +1154,29 @@
{
"cell_type": "code",
"execution_count": 11,
- "id": "ex3",
+ "id": "72bb6747",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-03T02:56:23.076858Z",
- "iopub.status.busy": "2026-07-03T02:56:23.076522Z",
- "iopub.status.idle": "2026-07-03T02:56:23.140389Z",
- "shell.execute_reply": "2026-07-03T02:56:23.140064Z"
- }
+ "iopub.execute_input": "2026-09-29T17:35:22.326913Z",
+ "iopub.status.busy": "2026-09-29T17:35:22.326534Z",
+ "iopub.status.idle": "2026-09-29T17:35:22.370809Z",
+ "shell.execute_reply": "2026-09-29T17:35:22.370500Z"
+ },
+ "papermill": {
+ "duration": 0.051736,
+ "end_time": "2026-09-29T17:35:22.370908+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:22.319172+00:00",
+ "status": "completed"
+ },
+ "tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Exercice 3 a completer\r\n"
+ "Exercice 3 a completer\n"
]
}
],
@@ -857,8 +1206,20 @@
"name": "C#",
"pygments_lexer": "csharp",
"version": "13.0"
+ },
+ "papermill": {
+ "default_parameters": {},
+ "duration": 7.808136,
+ "end_time": "2026-09-29T17:35:22.492066+00:00",
+ "environment_variables": {},
+ "exception": null,
+ "input_path": "Tweety-4-Belief-Revision-Csharp.ipynb",
+ "output_path": "Tweety-4-Belief-Revision-Csharp.ipynb",
+ "parameters": {},
+ "start_time": "2026-09-29T17:35:14.683930+00:00",
+ "version": "2.7.0"
}
},
"nbformat": 4,
- "nbformat_minor": 2
-}
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-5-Abstract-Argumentation-Csharp.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-5-Abstract-Argumentation-Csharp.ipynb
index 36240815be..cbd1d2304c 100644
--- a/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-5-Abstract-Argumentation-Csharp.ipynb
+++ b/MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-5-Abstract-Argumentation-Csharp.ipynb
@@ -5,10 +5,10 @@
"id": "tw5c01",
"metadata": {
"papermill": {
- "duration": 0.003289,
- "end_time": "2026-07-06T03:13:53.315139",
+ "duration": 0.003596,
+ "end_time": "2026-09-29T17:35:28.750916+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:53.311850",
+ "start_time": "2026-09-29T17:35:28.747320+00:00",
"status": "completed"
},
"tags": []
@@ -54,21 +54,136 @@
"id": "tw5c02",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:53.332617Z",
- "iopub.status.busy": "2026-07-06T03:13:53.324837Z",
- "iopub.status.idle": "2026-07-06T03:13:55.796233Z",
- "shell.execute_reply": "2026-07-06T03:13:55.790924Z"
+ "iopub.execute_input": "2026-09-29T17:35:28.771221Z",
+ "iopub.status.busy": "2026-09-29T17:35:28.764157Z",
+ "iopub.status.idle": "2026-09-29T17:35:30.765890Z",
+ "shell.execute_reply": "2026-09-29T17:35:30.761693Z"
},
"papermill": {
- "duration": 2.478393,
- "end_time": "2026-07-06T03:13:55.796370",
+ "duration": 2.011543,
+ "end_time": "2026-09-29T17:35:30.766031+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:53.317977",
+ "start_time": "2026-09-29T17:35:28.754488+00:00",
"status": "completed"
},
"tags": []
},
"outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n",
+ "
\r\n",
+ " The below script needs to be able to find the current output cell; this is an easy method to get it.\r\n",
+ "
\r\n",
+ " \r\n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
{
"data": {
"text/plain": [
@@ -97,10 +212,10 @@
"id": "tw5c03",
"metadata": {
"papermill": {
- "duration": 0.002991,
- "end_time": "2026-07-06T03:13:55.805715",
+ "duration": 0.003363,
+ "end_time": "2026-09-29T17:35:30.773743+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:55.802724",
+ "start_time": "2026-09-29T17:35:30.770380+00:00",
"status": "completed"
},
"tags": []
@@ -139,16 +254,16 @@
"id": "tw5c04",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:55.814012Z",
- "iopub.status.busy": "2026-07-06T03:13:55.813753Z",
- "iopub.status.idle": "2026-07-06T03:13:56.437990Z",
- "shell.execute_reply": "2026-07-06T03:13:56.437702Z"
+ "iopub.execute_input": "2026-09-29T17:35:30.782140Z",
+ "iopub.status.busy": "2026-09-29T17:35:30.781932Z",
+ "iopub.status.idle": "2026-09-29T17:35:31.252353Z",
+ "shell.execute_reply": "2026-09-29T17:35:31.252118Z"
},
"papermill": {
- "duration": 0.629379,
- "end_time": "2026-07-06T03:13:56.438081",
+ "duration": 0.475517,
+ "end_time": "2026-09-29T17:35:31.252450+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:55.808702",
+ "start_time": "2026-09-29T17:35:30.776933+00:00",
"status": "completed"
},
"tags": []
@@ -208,10 +323,10 @@
"id": "tw5c05",
"metadata": {
"papermill": {
- "duration": 0.00286,
- "end_time": "2026-07-06T03:13:56.444057",
+ "duration": 0.003189,
+ "end_time": "2026-09-29T17:35:31.259418+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.441197",
+ "start_time": "2026-09-29T17:35:31.256229+00:00",
"status": "completed"
},
"tags": []
@@ -230,16 +345,16 @@
"id": "tw5c06",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:56.452289Z",
- "iopub.status.busy": "2026-07-06T03:13:56.451882Z",
- "iopub.status.idle": "2026-07-06T03:13:56.673628Z",
- "shell.execute_reply": "2026-07-06T03:13:56.673348Z"
+ "iopub.execute_input": "2026-09-29T17:35:31.268230Z",
+ "iopub.status.busy": "2026-09-29T17:35:31.267990Z",
+ "iopub.status.idle": "2026-09-29T17:35:31.386243Z",
+ "shell.execute_reply": "2026-09-29T17:35:31.386053Z"
},
"papermill": {
- "duration": 0.22666,
- "end_time": "2026-07-06T03:13:56.673762",
+ "duration": 0.123536,
+ "end_time": "2026-09-29T17:35:31.386384+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.447102",
+ "start_time": "2026-09-29T17:35:31.262848+00:00",
"status": "completed"
},
"tags": []
@@ -248,9 +363,9 @@
{
"data": {
"text/plain": [
- "Cadre : AF(args={A, B, C, D}, attacks={A->B, B->C, C->D})\r\n",
- "F(∅) = {A} (arguments sans attaquant = defendus par ∅)\r\n",
- "F(F(∅)) = {A, C} (A defense par ∅, C defense par A qui contre-attaque B)\r\n"
+ "Cadre : AF(args={A, B, C, D}, attacks={A->B, B->C, C->D})\n",
+ "F(∅) = {A} (arguments sans attaquant = defendus par ∅)\n",
+ "F(F(∅)) = {A, C} (A defense par ∅, C defense par A qui contre-attaque B)\n"
]
},
"metadata": {},
@@ -296,10 +411,10 @@
"id": "tw5c07",
"metadata": {
"papermill": {
- "duration": 0.005511,
- "end_time": "2026-07-06T03:13:56.684565",
+ "duration": 0.003388,
+ "end_time": "2026-09-29T17:35:31.393649+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.679054",
+ "start_time": "2026-09-29T17:35:31.390261+00:00",
"status": "completed"
},
"tags": []
@@ -320,16 +435,16 @@
"id": "tw5c08",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:56.698611Z",
- "iopub.status.busy": "2026-07-06T03:13:56.698345Z",
- "iopub.status.idle": "2026-07-06T03:13:56.840396Z",
- "shell.execute_reply": "2026-07-06T03:13:56.839968Z"
+ "iopub.execute_input": "2026-09-29T17:35:31.403069Z",
+ "iopub.status.busy": "2026-09-29T17:35:31.402849Z",
+ "iopub.status.idle": "2026-09-29T17:35:31.508855Z",
+ "shell.execute_reply": "2026-09-29T17:35:31.508592Z"
},
"papermill": {
- "duration": 0.149969,
- "end_time": "2026-07-06T03:13:56.840565",
+ "duration": 0.111968,
+ "end_time": "2026-09-29T17:35:31.508959+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.690596",
+ "start_time": "2026-09-29T17:35:31.396991+00:00",
"status": "completed"
},
"tags": []
@@ -397,10 +512,10 @@
"id": "tw5c09",
"metadata": {
"papermill": {
- "duration": 0.00332,
- "end_time": "2026-07-06T03:13:56.847842",
+ "duration": 0.003577,
+ "end_time": "2026-09-29T17:35:31.517006+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.844522",
+ "start_time": "2026-09-29T17:35:31.513429+00:00",
"status": "completed"
},
"tags": []
@@ -421,16 +536,16 @@
"id": "tw5c10",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:56.856712Z",
- "iopub.status.busy": "2026-07-06T03:13:56.856269Z",
- "iopub.status.idle": "2026-07-06T03:13:56.943914Z",
- "shell.execute_reply": "2026-07-06T03:13:56.943765Z"
+ "iopub.execute_input": "2026-09-29T17:35:31.526096Z",
+ "iopub.status.busy": "2026-09-29T17:35:31.525664Z",
+ "iopub.status.idle": "2026-09-29T17:35:31.586900Z",
+ "shell.execute_reply": "2026-09-29T17:35:31.586518Z"
},
"papermill": {
- "duration": 0.092741,
- "end_time": "2026-07-06T03:13:56.943984",
+ "duration": 0.066712,
+ "end_time": "2026-09-29T17:35:31.587042+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.851243",
+ "start_time": "2026-09-29T17:35:31.520330+00:00",
"status": "completed"
},
"tags": []
@@ -439,10 +554,10 @@
{
"data": {
"text/plain": [
- "=== Chaine A -> B -> C -> D ===\r\n",
- "AF : AF(args={A, B, C, D}, attacks={A->B, B->C, C->D})\r\n",
- "Extension grounded = {A, C}\r\n",
- " (A : aucun attaquant, accepte. C : attaquant B contre-attaque par A. B et D exclus.)\r\n"
+ "=== Chaine A -> B -> C -> D ===\n",
+ "AF : AF(args={A, B, C, D}, attacks={A->B, B->C, C->D})\n",
+ "Extension grounded = {A, C}\n",
+ " (A : aucun attaquant, accepte. C : attaquant B contre-attaque par A. B et D exclus.)\n"
]
},
"metadata": {},
@@ -479,10 +594,10 @@
"id": "tw5c11",
"metadata": {
"papermill": {
- "duration": 0.002763,
- "end_time": "2026-07-06T03:13:56.949593",
+ "duration": 0.00347,
+ "end_time": "2026-09-29T17:35:31.595083+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.946830",
+ "start_time": "2026-09-29T17:35:31.591613+00:00",
"status": "completed"
},
"tags": []
@@ -502,16 +617,16 @@
"id": "tw5c12",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:56.956727Z",
- "iopub.status.busy": "2026-07-06T03:13:56.956289Z",
- "iopub.status.idle": "2026-07-06T03:13:57.061330Z",
- "shell.execute_reply": "2026-07-06T03:13:57.061057Z"
+ "iopub.execute_input": "2026-09-29T17:35:31.603963Z",
+ "iopub.status.busy": "2026-09-29T17:35:31.603721Z",
+ "iopub.status.idle": "2026-09-29T17:35:31.725670Z",
+ "shell.execute_reply": "2026-09-29T17:35:31.725357Z"
},
"papermill": {
- "duration": 0.109245,
- "end_time": "2026-07-06T03:13:57.061468",
+ "duration": 0.127245,
+ "end_time": "2026-09-29T17:35:31.725788+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:56.952223",
+ "start_time": "2026-09-29T17:35:31.598543+00:00",
"status": "completed"
},
"tags": []
@@ -520,12 +635,12 @@
{
"data": {
"text/plain": [
- "=== Attaque mutuelle a <-> b ===\r\n",
- "AF : AF(args={a, b}, attacks={a->b, b->a})\r\n",
- "Grounded = {} (aucun des deux n'est defendu par ∅)\r\n",
- "Stable = {a}, {b} (deux extensions : 'a' attaque b, ou l'inverse)\r\n",
- "Preferred = {a}, {b}\r\n",
- "Complete = {}, {a}, {b} (∅ inclus : complete trivial)\r\n"
+ "=== Attaque mutuelle a <-> b ===\n",
+ "AF : AF(args={a, b}, attacks={a->b, b->a})\n",
+ "Grounded = {} (aucun des deux n'est defendu par ∅)\n",
+ "Stable = {a}, {b} (deux extensions : 'a' attaque b, ou l'inverse)\n",
+ "Preferred = {a}, {b}\n",
+ "Complete = {}, {a}, {b} (∅ inclus : complete trivial)\n"
]
},
"metadata": {},
@@ -591,18 +706,25 @@
"cell_type": "markdown",
"id": "tw5intp01",
"metadata": {
+ "papermill": {
+ "duration": 0.005447,
+ "end_time": "2026-09-29T17:35:31.737631+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:31.732184+00:00",
+ "status": "completed"
+ },
"tags": []
},
"source": [
- "### Interpr\u00e9tation : Grounded unique vs Stable/Preferred multiples\n",
+ "### Interprétation : Grounded unique vs Stable/Preferred multiples\n",
"\n",
- "Le tableau ci-dessus est **le r\u00e9sultat-pivot** de toute la th\u00e9orie de Dung : sur une simple attaque mutuelle $a \\leftrightarrow b$, les quatre s\u00e9mantiques divergent.\n",
+ "Le tableau ci-dessus est **le résultat-pivot** de toute la théorie de Dung : sur une simple attaque mutuelle $a \\leftrightarrow b$, les quatre sémantiques divergent.\n",
"\n",
- "- **Grounded $= \\emptyset$** : ni $a$ ni $b$ n'a de d\u00e9fenseur contre l'autre, donc le plus petit point fixe de $F$ partant de $\\emptyset$ reste $\\emptyset$. La s\u00e9mantique grounded est **toujours unique** \u2014 c'est sa robustesse, et ici elle co\u00efncide avec l'absence d'argument accept\u00e9.\n",
- "- **Stable $= \\{a\\}, \\{b\\}$** et **Preferred $= \\{a\\}, \\{b\\}$** : cette fois-ci **deux** extensions. Chaque argument, pris seul, est sans conflit (avec lui-m\u00eame) et attaque l'autre. Stable et Preferred co\u00efncident **quand la stable existe** (une extension stable est toujours preferred). C'est pr\u00e9cis\u00e9ment le cas o\u00f9 la s\u00e9mantique n'est plus unique \u2014 il faut un **crit\u00e8re externe** pour choisir entre $\\{a\\}$ et $\\{b\\}$.\n",
- "- **Complete $= \\emptyset, \\{a\\}, \\{b\\}$** : **trois** extensions. C'est l'interm\u00e9diaire : elle contient le trivial $\\emptyset$ (toujours compl\u00e8te), plus les deux preferred. Relations d'inclusion : la grounded est l'**intersection** de toutes les compl\u00e8tes ($\\emptyset \\cap \\{a\\} \\cap \\{b\\} = \\emptyset$), et les preferred sont les compl\u00e8tes **maximales** par inclusion.\n",
+ "- **Grounded $= \\emptyset$** : ni $a$ ni $b$ n'a de défenseur contre l'autre, donc le plus petit point fixe de $F$ partant de $\\emptyset$ reste $\\emptyset$. La sémantique grounded est **toujours unique** — c'est sa robustesse, et ici elle coïncide avec l'absence d'argument accepté.\n",
+ "- **Stable $= \\{a\\}, \\{b\\}$** et **Preferred $= \\{a\\}, \\{b\\}$** : cette fois-ci **deux** extensions. Chaque argument, pris seul, est sans conflit (avec lui-même) et attaque l'autre. Stable et Preferred coïncident **quand la stable existe** (une extension stable est toujours preferred). C'est précisément le cas où la sémantique n'est plus unique — il faut un **critère externe** pour choisir entre $\\{a\\}$ et $\\{b\\}$.\n",
+ "- **Complete $= \\emptyset, \\{a\\}, \\{b\\}$** : **trois** extensions. C'est l'intermédiaire : elle contient le trivial $\\emptyset$ (toujours complète), plus les deux preferred. Relations d'inclusion : la grounded est l'**intersection** de toutes les complètes ($\\emptyset \\cap \\{a\\} \\cap \\{b\\} = \\emptyset$), et les preferred sont les complètes **maximales** par inclusion.\n",
"\n",
- "**Le\u00e7on centrale** : grounded est **d\u00e9terministe** (un seul r\u00e9sultat, calculable en point fixe) mais potentiellement **vide** ; stable/preferred peuvent \u00eatre **multiples** et exigent alors une d\u00e9cision (pr\u00e9f\u00e9rence, valeur, audience). C'est exactement ce que la section suivante (cycle impair) pousse \u00e0 l'extr\u00eame : un AF o\u00f9 la stable **n'existe m\u00eame plus**, ne laissant que la grounded comme refuge toujours d\u00e9fini."
+ "**Leçon centrale** : grounded est **déterministe** (un seul résultat, calculable en point fixe) mais potentiellement **vide** ; stable/preferred peuvent être **multiples** et exigent alors une décision (préférence, valeur, audience). C'est exactement ce que la section suivante (cycle impair) pousse à l'extrême : un AF où la stable **n'existe même plus**, ne laissant que la grounded comme refuge toujours défini."
]
},
{
@@ -610,10 +732,10 @@
"id": "tw5c13",
"metadata": {
"papermill": {
- "duration": 0.005261,
- "end_time": "2026-07-06T03:13:57.072035",
+ "duration": 0.005211,
+ "end_time": "2026-09-29T17:35:31.746628+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.066774",
+ "start_time": "2026-09-29T17:35:31.741417+00:00",
"status": "completed"
},
"tags": []
@@ -630,16 +752,16 @@
"id": "tw5c14",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:57.080888Z",
- "iopub.status.busy": "2026-07-06T03:13:57.080490Z",
- "iopub.status.idle": "2026-07-06T03:13:57.201077Z",
- "shell.execute_reply": "2026-07-06T03:13:57.200826Z"
+ "iopub.execute_input": "2026-09-29T17:35:31.759366Z",
+ "iopub.status.busy": "2026-09-29T17:35:31.758930Z",
+ "iopub.status.idle": "2026-09-29T17:35:31.848672Z",
+ "shell.execute_reply": "2026-09-29T17:35:31.848326Z"
},
"papermill": {
- "duration": 0.126124,
- "end_time": "2026-07-06T03:13:57.201169",
+ "duration": 0.096986,
+ "end_time": "2026-09-29T17:35:31.848808+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.075045",
+ "start_time": "2026-09-29T17:35:31.751822+00:00",
"status": "completed"
},
"tags": []
@@ -648,14 +770,14 @@
{
"data": {
"text/plain": [
- "=== Cycle impair a -> b -> c -> a ===\r\n",
- "AF : AF(args={a, b, c}, attacks={a->b, b->c, c->a})\r\n",
- "Grounded = {}\r\n",
- "Stable = (aucune — le cycle impair n'a pas d'extension stable)\r\n",
- "Preferred = {} (∅ seul : rien n'est defendu)\r\n",
- "Complete = {}\r\n",
- "\r\n",
- ">>> La semantique grounded (ici ∅) est TOUJOURS definie — sa robustesse face aux cycles.\r\n"
+ "=== Cycle impair a -> b -> c -> a ===\n",
+ "AF : AF(args={a, b, c}, attacks={a->b, b->c, c->a})\n",
+ "Grounded = {}\n",
+ "Stable = (aucune — le cycle impair n'a pas d'extension stable)\n",
+ "Preferred = {} (∅ seul : rien n'est defendu)\n",
+ "Complete = {}\n",
+ "\n",
+ ">>> La semantique grounded (ici ∅) est TOUJOURS definie — sa robustesse face aux cycles.\n"
]
},
"metadata": {},
@@ -684,10 +806,10 @@
"id": "tw5c15",
"metadata": {
"papermill": {
- "duration": 0.003384,
- "end_time": "2026-07-06T03:13:57.208624",
+ "duration": 0.006621,
+ "end_time": "2026-09-29T17:35:31.862487+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.205240",
+ "start_time": "2026-09-29T17:35:31.855866+00:00",
"status": "completed"
},
"tags": []
@@ -709,16 +831,16 @@
"id": "tw5c16",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:57.217762Z",
- "iopub.status.busy": "2026-07-06T03:13:57.217287Z",
- "iopub.status.idle": "2026-07-06T03:13:57.471245Z",
- "shell.execute_reply": "2026-07-06T03:13:57.471031Z"
+ "iopub.execute_input": "2026-09-29T17:35:31.877836Z",
+ "iopub.status.busy": "2026-09-29T17:35:31.877478Z",
+ "iopub.status.idle": "2026-09-29T17:35:32.075738Z",
+ "shell.execute_reply": "2026-09-29T17:35:32.075531Z"
},
"papermill": {
- "duration": 0.259366,
- "end_time": "2026-07-06T03:13:57.471325",
+ "duration": 0.206952,
+ "end_time": "2026-09-29T17:35:32.075840+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.211959",
+ "start_time": "2026-09-29T17:35:31.868888+00:00",
"status": "completed"
},
"tags": []
@@ -727,12 +849,12 @@
{
"data": {
"text/plain": [
- "Chaine A->B->C->D, extension grounded = {A, C}\r\n",
- " in = {A, C} (acceptes)\r\n",
- " out = {B, D} (rejetes : attaques par A ou C)\r\n",
- " undec = {} (indécis)\r\n",
- "\r\n",
- ">>> B et D sont 'out' (attaqus), aucun 'undec' ici. Sur le cycle impair, tout serait 'undec'.\r\n"
+ "Chaine A->B->C->D, extension grounded = {A, C}\n",
+ " in = {A, C} (acceptes)\n",
+ " out = {B, D} (rejetes : attaques par A ou C)\n",
+ " undec = {} (indécis)\n",
+ "\n",
+ ">>> B et D sont 'out' (attaqus), aucun 'undec' ici. Sur le cycle impair, tout serait 'undec'.\n"
]
},
"metadata": {},
@@ -776,10 +898,10 @@
"id": "tw5c17",
"metadata": {
"papermill": {
- "duration": 0.004163,
- "end_time": "2026-07-06T03:13:57.478711",
+ "duration": 0.00387,
+ "end_time": "2026-09-29T17:35:32.083827+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.474548",
+ "start_time": "2026-09-29T17:35:32.079957+00:00",
"status": "completed"
},
"tags": []
@@ -798,16 +920,16 @@
"id": "tw5c18",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:57.490457Z",
- "iopub.status.busy": "2026-07-06T03:13:57.490104Z",
- "iopub.status.idle": "2026-07-06T03:13:57.810735Z",
- "shell.execute_reply": "2026-07-06T03:13:57.810424Z"
+ "iopub.execute_input": "2026-09-29T17:35:32.092308Z",
+ "iopub.status.busy": "2026-09-29T17:35:32.091945Z",
+ "iopub.status.idle": "2026-09-29T17:35:32.443462Z",
+ "shell.execute_reply": "2026-09-29T17:35:32.443211Z"
},
"papermill": {
- "duration": 0.327796,
- "end_time": "2026-07-06T03:13:57.810859",
+ "duration": 0.356349,
+ "end_time": "2026-09-29T17:35:32.443552+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.483063",
+ "start_time": "2026-09-29T17:35:32.087203+00:00",
"status": "completed"
},
"tags": []
@@ -816,16 +938,16 @@
{
"data": {
"text/plain": [
- "=== Taille grounded vs densite (n=6 args, 200 AF aleatoires) ===\r\n",
- " p grounded moyen AF sans stable\r\n",
- " 0,1 4,03 1 %\r\n",
- " 0,3 1,75 6 %\r\n",
- " 0,5 0,28 7 %\r\n",
- " 0,7 0,02 6 %\r\n",
- " 0,9 0,00 0 %\r\n",
- "\r\n",
- ">>> A p=0.1 (peu d'attaques) la grounded est large ; a p=0.9 elle s'effondre.\r\n",
- ">>> La proportion d'AF sans extension stable croit avec la densite (cycles impairs).\r\n"
+ "=== Taille grounded vs densite (n=6 args, 200 AF aleatoires) ===\n",
+ " p grounded moyen AF sans stable\n",
+ " 0.1 4.03 1 %\n",
+ " 0.3 1.75 6 %\n",
+ " 0.5 0.28 7 %\n",
+ " 0.7 0.02 6 %\n",
+ " 0.9 0.00 0 %\n",
+ "\n",
+ ">>> A p=0.1 (peu d'attaques) la grounded est large ; a p=0.9 elle s'effondre.\n",
+ ">>> La proportion d'AF sans extension stable croit avec la densite (cycles impairs).\n"
]
},
"metadata": {},
@@ -873,10 +995,10 @@
"id": "tw5c19",
"metadata": {
"papermill": {
- "duration": 0.005694,
- "end_time": "2026-07-06T03:13:57.822286",
+ "duration": 0.00344,
+ "end_time": "2026-09-29T17:35:32.450974+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.816592",
+ "start_time": "2026-09-29T17:35:32.447534+00:00",
"status": "completed"
},
"tags": []
@@ -893,16 +1015,16 @@
"id": "tw5c20",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:57.833004Z",
- "iopub.status.busy": "2026-07-06T03:13:57.832759Z",
- "iopub.status.idle": "2026-07-06T03:13:57.936073Z",
- "shell.execute_reply": "2026-07-06T03:13:57.935737Z"
+ "iopub.execute_input": "2026-09-29T17:35:32.459446Z",
+ "iopub.status.busy": "2026-09-29T17:35:32.459191Z",
+ "iopub.status.idle": "2026-09-29T17:35:32.485312Z",
+ "shell.execute_reply": "2026-09-29T17:35:32.485053Z"
},
"papermill": {
- "duration": 0.108727,
- "end_time": "2026-07-06T03:13:57.936209",
+ "duration": 0.03106,
+ "end_time": "2026-09-29T17:35:32.485412+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.827482",
+ "start_time": "2026-09-29T17:35:32.454352+00:00",
"status": "completed"
},
"tags": []
@@ -933,10 +1055,10 @@
"id": "tw5c21",
"metadata": {
"papermill": {
- "duration": 0.006648,
- "end_time": "2026-07-06T03:13:57.949506",
+ "duration": 0.003436,
+ "end_time": "2026-09-29T17:35:32.492756+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.942858",
+ "start_time": "2026-09-29T17:35:32.489320+00:00",
"status": "completed"
},
"tags": []
@@ -953,16 +1075,16 @@
"id": "tw5c22",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:57.964524Z",
- "iopub.status.busy": "2026-07-06T03:13:57.964059Z",
- "iopub.status.idle": "2026-07-06T03:13:58.065823Z",
- "shell.execute_reply": "2026-07-06T03:13:58.065553Z"
+ "iopub.execute_input": "2026-09-29T17:35:32.502352Z",
+ "iopub.status.busy": "2026-09-29T17:35:32.502113Z",
+ "iopub.status.idle": "2026-09-29T17:35:32.521038Z",
+ "shell.execute_reply": "2026-09-29T17:35:32.520868Z"
},
"papermill": {
- "duration": 0.110603,
- "end_time": "2026-07-06T03:13:58.065941",
+ "duration": 0.024644,
+ "end_time": "2026-09-29T17:35:32.521119+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:57.955338",
+ "start_time": "2026-09-29T17:35:32.496475+00:00",
"status": "completed"
},
"tags": []
@@ -991,10 +1113,10 @@
"id": "tw5c23",
"metadata": {
"papermill": {
- "duration": 0.006825,
- "end_time": "2026-07-06T03:13:58.079005",
+ "duration": 0.004382,
+ "end_time": "2026-09-29T17:35:32.529484+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:58.072180",
+ "start_time": "2026-09-29T17:35:32.525102+00:00",
"status": "completed"
},
"tags": []
@@ -1011,16 +1133,16 @@
"id": "tw5c24",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-06T03:13:58.096697Z",
- "iopub.status.busy": "2026-07-06T03:13:58.096235Z",
- "iopub.status.idle": "2026-07-06T03:13:58.202040Z",
- "shell.execute_reply": "2026-07-06T03:13:58.201677Z"
+ "iopub.execute_input": "2026-09-29T17:35:32.538929Z",
+ "iopub.status.busy": "2026-09-29T17:35:32.538680Z",
+ "iopub.status.idle": "2026-09-29T17:35:32.566503Z",
+ "shell.execute_reply": "2026-09-29T17:35:32.566342Z"
},
"papermill": {
- "duration": 0.115448,
- "end_time": "2026-07-06T03:13:58.202182",
+ "duration": 0.033343,
+ "end_time": "2026-09-29T17:35:32.566585+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:58.086734",
+ "start_time": "2026-09-29T17:35:32.533242+00:00",
"status": "completed"
},
"tags": []
@@ -1046,6 +1168,17 @@
},
{
"cell_type": "markdown",
+ "id": "560f0ef2",
+ "metadata": {
+ "papermill": {
+ "duration": 0.003636,
+ "end_time": "2026-09-29T17:35:32.574167+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:32.570531+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"---\n",
"\n",
@@ -1069,11 +1202,112 @@
"- **§4.4 Raisonnement causal** (`ArgumentationBasedCausalReasoner`, `StructuralCausalModel`) — necessite shade `tweety-causal-shade.dll`. Couvert pedagogiquement côté C# par le notebook séparé [`Tweety-11-Causal-Csharp.ipynb`](Tweety-11-Causal-Csharp.ipynb) (from-scratch BCL .NET 9, moteur causal booléen, do-calculus, contrefactuels).\n",
"\n",
"**Substance pédagogique tranche 2** : on consomme la **même lib** que le notebook Python (mêmes classes `org.tweetyproject.arg.dung.*` IKVM-compilées), on garde la from-scratch pédagogique des cells 1–23 comme implémentation de référence, et on démontre que les résultats concordent sur les scenarios classiques (CF2 sur cycle impair, équivalence sur AF1 vs AF3 identiques).\n"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
+ "execution_count": 13,
+ "id": "4d7c1028",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-09-29T17:35:32.583639Z",
+ "iopub.status.busy": "2026-09-29T17:35:32.583247Z",
+ "iopub.status.idle": "2026-09-29T17:35:35.388825Z",
+ "shell.execute_reply": "2026-09-29T17:35:35.388492Z"
+ },
+ "papermill": {
+ "duration": 2.810983,
+ "end_time": "2026-09-29T17:35:35.388959+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:32.577976+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Installed Packages- IKVM, 8.15.0
- IKVM.Image, 8.15.0
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "DLL tweety-dung chargée : org.tweetyproject.tweety-dung, Version=1.30.0.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58 (8.67 Mo)\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "--- AF pour CF2 : cycle a->b->c->d->e->a + e->f ---\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Cadre : <{ a, b, c, d, e, f },[(b,c), (d,e), (e,a), (a,b), (c,d), (e,f)]>\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Extensions CF2 calculees :\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " - extension 1 : {b,e}\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " - extension 2 : {c,e}\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " - extension 3 : {a,c,f}\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " - extension 4 : {a,d,f}\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " - extension 5 : {b,d,f}\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " (5 extension(s) CF2 trouvee(s))\n",
+ "\n"
+ ]
+ }
+ ],
"source": [
"// ============================================================\n",
"// §4.1.2 Sémantique CF2 via IKVM (SccCF2Reasoner, Tweety v1.30)\n",
@@ -1085,7 +1319,6 @@
"\n",
"#r \"nuget: IKVM, 8.15.0\"\n",
"#r \"nuget: IKVM.Image, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image.runtime.win-x64, 8.15.0\"\n",
"\n",
"#r \"org.tweetyproject.tweety-dung.dll\"\n",
"\n",
@@ -1094,7 +1327,8 @@
"\n",
"// IKVM runtime : home explicite comme dans c.758 (économie de cold-restart)\n",
"string ikvmVer = \"8.15.0\";\n",
- "string ikvmRid = \"win-x64\";\n",
+ "// RID de la machine courante (win-x64, linux-x64, osx-arm64...) : IKVM.Image tire l'image native de chaque plateforme.\n",
+ "string ikvmRid = (OperatingSystem.IsWindows() ? \"win\" : OperatingSystem.IsMacOS() ? \"osx\" : \"linux\") + \"-\" + System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();\n",
"string nugetRoot = Environment.GetEnvironmentVariable(\"NUGET_PACKAGES\")\n",
" ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), \".nuget\", \"packages\");\n",
"string ikvmBaseAny = Path.Combine(nugetRoot, \"ikvm.image\", ikvmVer, \"ikvm\", \"any\", \"any\");\n",
@@ -1171,96 +1405,21 @@
" count++;\n",
"}\n",
"Console.WriteLine($\" ({count} extension(s) CF2 trouvee(s))\\n\");\n"
- ],
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "Installed Packages- IKVM, 8.15.0
- IKVM.Image, 8.15.0
"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "DLL tweety-dung chargée : org.tweetyproject.tweety-dung, Version=1.30.0.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58 (8,67 Mo)\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "--- AF pour CF2 : cycle a->b->c->d->e->a + e->f ---\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Cadre : <{ a, b, c, d, e, f },[(b,c), (d,e), (e,a), (a,b), (c,d), (e,f)]>\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "Extensions CF2 calculees :\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " - extension 1 : {b,e}\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " - extension 2 : {c,e}\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " - extension 3 : {a,c,f}\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " - extension 4 : {a,d,f}\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " - extension 5 : {b,d,f}\r\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " (5 extension(s) CF2 trouvee(s))\n",
- "\r\n"
- ]
- }
- ],
- "execution_count": 13
+ ]
},
{
"cell_type": "markdown",
+ "id": "f2f87e8c",
+ "metadata": {
+ "papermill": {
+ "duration": 0.008261,
+ "end_time": "2026-09-29T17:35:35.405928+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:35.397667+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"source": [
"---\n",
"\n",
@@ -1277,161 +1436,62 @@
"C'est un probleme classique en argumentation abstraite (Oikarinen & Woltran 2011) qui evalue **quand deux formalismes decrivent en fait la meme situation de debat**.\n",
"\n",
"**Diagnostic c.760 (substance de cette cellule 27)** : la lib IKVM-shadee expose les 11 classes via reflection (`Assembly.GetTypes() + t.IsClass`). La pedagogie de cette cellule est **structurelle** : on enumere les 11 types, on inspecte leurs constructeurs publics (certains no-arg, d'autres avec `Semantics` ou `DungTheory` cache), et on identifie ceux qu'on peut instancier directement en C# via IKVM. L'appel direct `isEquivalent(DungTheory, DungTheory)` necessite un wrapper C# dedie (encapsulation des constructeurs Java plus complexes, certain needing a `DungTheory` cache non-Java-default-constructible) — **defere a la tranche 3** avec une note pedagogique specifique sur chaque notion. La theorie est documentee dans ce notebook et le twin Python.\n"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "source": [
- "// ============================================================\n",
- "// §4.2 Équivalence de frameworks (11 notions via IKVM rpcl.dll)\n",
- "// ============================================================\n",
- "using System.Reflection;\n",
- "using System.Collections.Generic;\n",
- "\n",
- "// NB : les 11 notions d'equivalence sont bundlees dans tweety-rpcl.dll\n",
- "// (shade Maven RP-CL deps transitives). On charge les 2 DLLs pour\n",
- "// avoir dung.syntax.* (DungTheory, Argument) ET dung.equivalence.*.\n",
- "var dungAsm = Assembly.LoadFrom(\"org.tweetyproject.tweety-dung.dll\");\n",
- "var rpclAsm = Assembly.LoadFrom(\"org.tweetyproject.tweety-rpcl.dll\");\n",
- "\n",
- "Console.WriteLine($\"DLLs chargees : dung={dungAsm.GetName().Name}, rpcl={rpclAsm.GetName().Name}\");\n",
- "\n",
- "var DungTheory = dungAsm.GetType(\"org.tweetyproject.arg.dung.syntax.DungTheory\");\n",
- "var Argument = dungAsm.GetType(\"org.tweetyproject.arg.dung.syntax.Argument\");\n",
- "var Semantics = dungAsm.GetType(\"org.tweetyproject.arg.dung.semantics.Semantics\");\n",
- "\n",
- "// Les 11 notions sont dans rpcl.dll\n",
- "var Syn = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.SyntacticEquivalence\");\n",
- "var StrongEquiv = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.StrongEquivalence\");\n",
- "var StandardEq = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.StandardEquivalence\");\n",
- "var StrongExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.StrongExpansionEquivalence\");\n",
- "var NormalExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.NormalExpansionEquivalence\");\n",
- "var WeakExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.WeakExpansionEquivalence\");\n",
- "var LocalExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.LocalExpansionEquivalence\");\n",
- "var NormalDel = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.NormalDeletionEquivalence\");\n",
- "var Serial = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.SerialisationEquivalence\");\n",
- "\n",
- "// Valeurs de l'enum Semantics : CO, GR, PR, ST, ... (static fields enum)\n",
- "// En IKVM, les enum Java sont stockés comme static fields sur la classe parente.\n",
- "object FindSem(string name) {\n",
- " var f = Semantics.GetField(name, BindingFlags.Public | BindingFlags.Static);\n",
- " if (f != null) return f.GetValue(null);\n",
- " var semEnum = rpclAsm.GetType(\"org.tweetyproject.arg.dung.semantics.Semantics+__Enum\")\n",
- " ?? dungAsm.GetType(\"org.tweetyproject.arg.dung.semantics.Semantics+__Enum\");\n",
- " if (semEnum != null) return Enum.Parse(semEnum, name);\n",
- " return null;\n",
- "}\n",
- "object CO = FindSem(\"CO\");\n",
- "object GR = FindSem(\"GR\");\n",
- "object PR = FindSem(\"PR\");\n",
- "Console.WriteLine($\"Semantics resolues : CO={CO}, GR={GR}, PR={PR}\");\n",
- "\n",
- "// Helpers de construction (Argument(String) est le seul ctor public,\n",
- "// cf. diagnostic c.760 via Assembly.GetConstructors())\n",
- "var argCtor = Argument.GetConstructor(new[] { typeof(string) });\n",
- "object NewArg(string name) => argCtor.Invoke(new object[] { name });\n",
- "void AddAtk(object af, string s, string t, Dictionary cache)\n",
- "{\n",
- " if (!cache.ContainsKey(s)) cache[s] = NewArg(s);\n",
- " if (!cache.ContainsKey(t)) cache[t] = NewArg(t);\n",
- " DungTheory.GetMethod(\"add\", new[] { Argument }).Invoke(af, new object[] { cache[s] });\n",
- " DungTheory.GetMethod(\"add\", new[] { Argument }).Invoke(af, new object[] { cache[t] });\n",
- " DungTheory.GetMethod(\"addAttack\", new[] { Argument, Argument }).Invoke(af, new object[] { cache[s], cache[t] });\n",
- "}\n",
- "\n",
- "// AF1 : a -> b -> c ; AF2 : c -> b -> a ; AF3 : identique AF1\n",
- "var cache1 = new Dictionary();\n",
- "var cache2 = new Dictionary();\n",
- "var cache3 = new Dictionary();\n",
- "var af1 = DungTheory.GetConstructor(Type.EmptyTypes).Invoke(null);\n",
- "AddAtk(af1, \"a\", \"b\", cache1); AddAtk(af1, \"b\", \"c\", cache1);\n",
- "var af2 = DungTheory.GetConstructor(Type.EmptyTypes).Invoke(null);\n",
- "AddAtk(af2, \"c\", \"b\", cache2); AddAtk(af2, \"b\", \"a\", cache2);\n",
- "var af3 = DungTheory.GetConstructor(Type.EmptyTypes).Invoke(null);\n",
- "AddAtk(af3, \"a\", \"b\", cache3); AddAtk(af3, \"b\", \"c\", cache3);\n",
- "\n",
- "Console.WriteLine($\"AF1: {af1}\");\n",
- "Console.WriteLine($\"AF2: {af2}\");\n",
- "Console.WriteLine($\"AF3: {af3}\");\n",
- "\n",
- "// Construction + invocation de chaque notion d'equivalence\n",
- "// Note : SyntacticEquivalence() sans argument ; les autres prennent (Semantics)\n",
- "var notionList = new (string name, Type t, object ctorArg)[] {\n",
- " (\"Syntactic\", Syn, null),\n",
- " (\"Strong(CO)\", StrongEquiv, CO),\n",
- " (\"Strong(GR)\", StrongEquiv, GR),\n",
- " (\"Standard(PR)\", StandardEq, PR),\n",
- " (\"Standard(CO)\", StandardEq, CO),\n",
- " (\"StrongExp(GR)\", StrongExp, GR),\n",
- " (\"NormalExp(CO)\", NormalExp, CO),\n",
- " (\"WeakExp(CO)\", WeakExp, CO),\n",
- " (\"LocalExp(GR)\", LocalExp, GR),\n",
- " (\"NormalDel(CO)\", NormalDel, CO),\n",
- " (\"Serialisation(CO)\", Serial, CO),\n",
- "};\n",
- "\n",
- "void Test(string label, object afA, object afB)\n",
- "{\n",
- " Console.WriteLine($\"\\n--- {label} ---\");\n",
- " foreach (var (name, t, ctorArg) in notionList)\n",
- " {\n",
- " try {\n",
- " object eqInstance = ctorArg == null\n",
- " ? t.GetConstructor(Type.EmptyTypes).Invoke(null)\n",
- " : t.GetConstructor(new[] { Semantics }).Invoke(new object[] { ctorArg });\n",
- " var mi = t.GetMethod(\"isEquivalent\", new[] { DungTheory, DungTheory });\n",
- " bool res = (bool)mi.Invoke(eqInstance, new object[] { afA, afB });\n",
- " Console.WriteLine($\" {name,-22} : {res}\");\n",
- " } catch (Exception ex) {\n",
- " Console.WriteLine($\" {name,-22} : ERROR ({ex.GetType().Name})\");\n",
- " }\n",
- " }\n",
- "}\n",
- "Test(\"Comparaison AF1 vs AF3 (structure identique, esperes equivalents)\", af1, af3);\n",
- "Test(\"Comparaison AF1 vs AF2 (structure inversee, esperes non-equivalents)\", af1, af2);\n",
- "\n",
- "// Note pedagogique : AF1 vs AF3 doit retourner True pour TOUTES les notions\n",
- "// (meme structure). AF1 vs AF2 doit retourner False pour Syntactic / Weak /\n",
- "// Standard mais peut-etre True pour certaines expansions (StrongExpansion par ex.)\n",
- "// -> d'ou l'interet des 11 notions distinctes : on peut affiner la definition\n",
- "// de « essentiellement equivalent » selon le contexte d'usage.\n"
- ],
- "metadata": {},
+ "execution_count": 14,
+ "id": "b8ab81af",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-09-29T17:35:35.425375Z",
+ "iopub.status.busy": "2026-09-29T17:35:35.424648Z",
+ "iopub.status.idle": "2026-09-29T17:35:36.450495Z",
+ "shell.execute_reply": "2026-09-29T17:35:36.450293Z"
+ },
+ "papermill": {
+ "duration": 1.036439,
+ "end_time": "2026-09-29T17:35:36.450584+00:00",
+ "exception": false,
+ "start_time": "2026-09-29T17:35:35.414145+00:00",
+ "status": "completed"
+ },
+ "tags": []
+ },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "DLLs chargees : dung=org.tweetyproject.tweety-dung, rpcl=org.tweetyproject.tweety-rpcl\r\n"
+ "DLLs chargees : dung=org.tweetyproject.tweety-dung, rpcl=org.tweetyproject.tweety-rpcl\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Semantics resolues : CO=CO, GR=GR, PR=PR\r\n"
+ "Semantics resolues : CO=CO, GR=GR, PR=PR\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "AF1: <{ a, b, c },[(b,c), (a,b)]>\r\n"
+ "AF1: <{ a, b, c },[(b,c), (a,b)]>\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "AF2: <{ a, b, c },[(c,b), (b,a)]>\r\n"
+ "AF2: <{ a, b, c },[(c,b), (b,a)]>\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "AF3: <{ a, b, c },[(b,c), (a,b)]>\r\n"
+ "AF3: <{ a, b, c },[(b,c), (a,b)]>\n"
]
},
{
@@ -1439,84 +1499,84 @@
"output_type": "stream",
"text": [
"\n",
- "--- Comparaison AF1 vs AF3 (structure identique, esperes equivalents) ---\r\n"
+ "--- Comparaison AF1 vs AF3 (structure identique, esperes equivalents) ---\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Syntactic : ERROR (TargetInvocationException)\r\n"
+ " Syntactic : ERROR (TargetInvocationException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Strong(CO) : ERROR (NullReferenceException)\r\n"
+ " Strong(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Strong(GR) : ERROR (NullReferenceException)\r\n"
+ " Strong(GR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Standard(PR) : ERROR (NullReferenceException)\r\n"
+ " Standard(PR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Standard(CO) : ERROR (NullReferenceException)\r\n"
+ " Standard(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " StrongExp(GR) : ERROR (NullReferenceException)\r\n"
+ " StrongExp(GR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " NormalExp(CO) : ERROR (NullReferenceException)\r\n"
+ " NormalExp(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " WeakExp(CO) : ERROR (NullReferenceException)\r\n"
+ " WeakExp(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " LocalExp(GR) : ERROR (NullReferenceException)\r\n"
+ " LocalExp(GR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " NormalDel(CO) : ERROR (NullReferenceException)\r\n"
+ " NormalDel(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Serialisation(CO) : ERROR (NullReferenceException)\r\n"
+ " Serialisation(CO) : ERROR (NullReferenceException)\n"
]
},
{
@@ -1524,98 +1584,212 @@
"output_type": "stream",
"text": [
"\n",
- "--- Comparaison AF1 vs AF2 (structure inversee, esperes non-equivalents) ---\r\n"
+ "--- Comparaison AF1 vs AF2 (structure inversee, esperes non-equivalents) ---\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Syntactic : ERROR (TargetInvocationException)\r\n"
+ " Syntactic : ERROR (TargetInvocationException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Strong(CO) : ERROR (NullReferenceException)\r\n"
+ " Strong(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Strong(GR) : ERROR (NullReferenceException)\r\n"
+ " Strong(GR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Standard(PR) : ERROR (NullReferenceException)\r\n"
+ " Standard(PR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Standard(CO) : ERROR (NullReferenceException)\r\n"
+ " Standard(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " StrongExp(GR) : ERROR (NullReferenceException)\r\n"
+ " StrongExp(GR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " NormalExp(CO) : ERROR (NullReferenceException)\r\n"
+ " NormalExp(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " WeakExp(CO) : ERROR (NullReferenceException)\r\n"
+ " WeakExp(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " LocalExp(GR) : ERROR (NullReferenceException)\r\n"
+ " LocalExp(GR) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " NormalDel(CO) : ERROR (NullReferenceException)\r\n"
+ " NormalDel(CO) : ERROR (NullReferenceException)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " Serialisation(CO) : ERROR (NullReferenceException)\r\n"
+ " Serialisation(CO) : ERROR (NullReferenceException)\n"
]
}
],
- "execution_count": 14
+ "source": [
+ "// ============================================================\n",
+ "// §4.2 Équivalence de frameworks (11 notions via IKVM rpcl.dll)\n",
+ "// ============================================================\n",
+ "using System.Reflection;\n",
+ "using System.Collections.Generic;\n",
+ "\n",
+ "// NB : les 11 notions d'equivalence sont bundlees dans tweety-rpcl.dll\n",
+ "// (shade Maven RP-CL deps transitives). On charge les 2 DLLs pour\n",
+ "// avoir dung.syntax.* (DungTheory, Argument) ET dung.equivalence.*.\n",
+ "var dungAsm = Assembly.LoadFrom(\"org.tweetyproject.tweety-dung.dll\");\n",
+ "var rpclAsm = Assembly.LoadFrom(\"org.tweetyproject.tweety-rpcl.dll\");\n",
+ "\n",
+ "Console.WriteLine($\"DLLs chargees : dung={dungAsm.GetName().Name}, rpcl={rpclAsm.GetName().Name}\");\n",
+ "\n",
+ "var DungTheory = dungAsm.GetType(\"org.tweetyproject.arg.dung.syntax.DungTheory\");\n",
+ "var Argument = dungAsm.GetType(\"org.tweetyproject.arg.dung.syntax.Argument\");\n",
+ "var Semantics = dungAsm.GetType(\"org.tweetyproject.arg.dung.semantics.Semantics\");\n",
+ "\n",
+ "// Les 11 notions sont dans rpcl.dll\n",
+ "var Syn = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.SyntacticEquivalence\");\n",
+ "var StrongEquiv = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.StrongEquivalence\");\n",
+ "var StandardEq = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.StandardEquivalence\");\n",
+ "var StrongExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.StrongExpansionEquivalence\");\n",
+ "var NormalExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.NormalExpansionEquivalence\");\n",
+ "var WeakExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.WeakExpansionEquivalence\");\n",
+ "var LocalExp = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.LocalExpansionEquivalence\");\n",
+ "var NormalDel = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.NormalDeletionEquivalence\");\n",
+ "var Serial = rpclAsm.GetType(\"org.tweetyproject.arg.dung.equivalence.SerialisationEquivalence\");\n",
+ "\n",
+ "// Valeurs de l'enum Semantics : CO, GR, PR, ST, ... (static fields enum)\n",
+ "// En IKVM, les enum Java sont stockés comme static fields sur la classe parente.\n",
+ "object FindSem(string name) {\n",
+ " var f = Semantics.GetField(name, BindingFlags.Public | BindingFlags.Static);\n",
+ " if (f != null) return f.GetValue(null);\n",
+ " var semEnum = rpclAsm.GetType(\"org.tweetyproject.arg.dung.semantics.Semantics+__Enum\")\n",
+ " ?? dungAsm.GetType(\"org.tweetyproject.arg.dung.semantics.Semantics+__Enum\");\n",
+ " if (semEnum != null) return Enum.Parse(semEnum, name);\n",
+ " return null;\n",
+ "}\n",
+ "object CO = FindSem(\"CO\");\n",
+ "object GR = FindSem(\"GR\");\n",
+ "object PR = FindSem(\"PR\");\n",
+ "Console.WriteLine($\"Semantics resolues : CO={CO}, GR={GR}, PR={PR}\");\n",
+ "\n",
+ "// Helpers de construction (Argument(String) est le seul ctor public,\n",
+ "// cf. diagnostic c.760 via Assembly.GetConstructors())\n",
+ "var argCtor = Argument.GetConstructor(new[] { typeof(string) });\n",
+ "object NewArg(string name) => argCtor.Invoke(new object[] { name });\n",
+ "void AddAtk(object af, string s, string t, Dictionary cache)\n",
+ "{\n",
+ " if (!cache.ContainsKey(s)) cache[s] = NewArg(s);\n",
+ " if (!cache.ContainsKey(t)) cache[t] = NewArg(t);\n",
+ " DungTheory.GetMethod(\"add\", new[] { Argument }).Invoke(af, new object[] { cache[s] });\n",
+ " DungTheory.GetMethod(\"add\", new[] { Argument }).Invoke(af, new object[] { cache[t] });\n",
+ " DungTheory.GetMethod(\"addAttack\", new[] { Argument, Argument }).Invoke(af, new object[] { cache[s], cache[t] });\n",
+ "}\n",
+ "\n",
+ "// AF1 : a -> b -> c ; AF2 : c -> b -> a ; AF3 : identique AF1\n",
+ "var cache1 = new Dictionary();\n",
+ "var cache2 = new Dictionary();\n",
+ "var cache3 = new Dictionary();\n",
+ "var af1 = DungTheory.GetConstructor(Type.EmptyTypes).Invoke(null);\n",
+ "AddAtk(af1, \"a\", \"b\", cache1); AddAtk(af1, \"b\", \"c\", cache1);\n",
+ "var af2 = DungTheory.GetConstructor(Type.EmptyTypes).Invoke(null);\n",
+ "AddAtk(af2, \"c\", \"b\", cache2); AddAtk(af2, \"b\", \"a\", cache2);\n",
+ "var af3 = DungTheory.GetConstructor(Type.EmptyTypes).Invoke(null);\n",
+ "AddAtk(af3, \"a\", \"b\", cache3); AddAtk(af3, \"b\", \"c\", cache3);\n",
+ "\n",
+ "Console.WriteLine($\"AF1: {af1}\");\n",
+ "Console.WriteLine($\"AF2: {af2}\");\n",
+ "Console.WriteLine($\"AF3: {af3}\");\n",
+ "\n",
+ "// Construction + invocation de chaque notion d'equivalence\n",
+ "// Note : SyntacticEquivalence() sans argument ; les autres prennent (Semantics)\n",
+ "var notionList = new (string name, Type t, object ctorArg)[] {\n",
+ " (\"Syntactic\", Syn, null),\n",
+ " (\"Strong(CO)\", StrongEquiv, CO),\n",
+ " (\"Strong(GR)\", StrongEquiv, GR),\n",
+ " (\"Standard(PR)\", StandardEq, PR),\n",
+ " (\"Standard(CO)\", StandardEq, CO),\n",
+ " (\"StrongExp(GR)\", StrongExp, GR),\n",
+ " (\"NormalExp(CO)\", NormalExp, CO),\n",
+ " (\"WeakExp(CO)\", WeakExp, CO),\n",
+ " (\"LocalExp(GR)\", LocalExp, GR),\n",
+ " (\"NormalDel(CO)\", NormalDel, CO),\n",
+ " (\"Serialisation(CO)\", Serial, CO),\n",
+ "};\n",
+ "\n",
+ "void Test(string label, object afA, object afB)\n",
+ "{\n",
+ " Console.WriteLine($\"\\n--- {label} ---\");\n",
+ " foreach (var (name, t, ctorArg) in notionList)\n",
+ " {\n",
+ " try {\n",
+ " object eqInstance = ctorArg == null\n",
+ " ? t.GetConstructor(Type.EmptyTypes).Invoke(null)\n",
+ " : t.GetConstructor(new[] { Semantics }).Invoke(new object[] { ctorArg });\n",
+ " var mi = t.GetMethod(\"isEquivalent\", new[] { DungTheory, DungTheory });\n",
+ " bool res = (bool)mi.Invoke(eqInstance, new object[] { afA, afB });\n",
+ " Console.WriteLine($\" {name,-22} : {res}\");\n",
+ " } catch (Exception ex) {\n",
+ " Console.WriteLine($\" {name,-22} : ERROR ({ex.GetType().Name})\");\n",
+ " }\n",
+ " }\n",
+ "}\n",
+ "Test(\"Comparaison AF1 vs AF3 (structure identique, esperes equivalents)\", af1, af3);\n",
+ "Test(\"Comparaison AF1 vs AF2 (structure inversee, esperes non-equivalents)\", af1, af2);\n",
+ "\n",
+ "// Note pedagogique : AF1 vs AF3 doit retourner True pour TOUTES les notions\n",
+ "// (meme structure). AF1 vs AF2 doit retourner False pour Syntactic / Weak /\n",
+ "// Standard mais peut-etre True pour certaines expansions (StrongExpansion par ex.)\n",
+ "// -> d'ou l'interet des 11 notions distinctes : on peut affiner la definition\n",
+ "// de « essentiellement equivalent » selon le contexte d'usage.\n"
+ ]
},
{
"cell_type": "markdown",
"id": "tw5c25",
"metadata": {
"papermill": {
- "duration": 0.006714,
- "end_time": "2026-07-06T03:13:58.216046",
+ "duration": 0.005439,
+ "end_time": "2026-09-29T17:35:36.463075+00:00",
"exception": false,
- "start_time": "2026-07-06T03:13:58.209332",
+ "start_time": "2026-09-29T17:35:36.457636+00:00",
"status": "completed"
},
"tags": []
@@ -1687,17 +1861,17 @@
},
"papermill": {
"default_parameters": {},
- "duration": 8.157361,
- "end_time": "2026-07-06T03:13:58.465801",
+ "duration": 10.178031,
+ "end_time": "2026-09-29T17:35:36.585659+00:00",
"environment_variables": {},
"exception": null,
"input_path": "Tweety-5-Abstract-Argumentation-Csharp.ipynb",
- "output_path": "tweety5_exec.ipynb",
+ "output_path": "Tweety-5-Abstract-Argumentation-Csharp.ipynb",
"parameters": {},
- "start_time": "2026-07-06T03:13:50.308440",
+ "start_time": "2026-09-29T17:35:26.407628+00:00",
"version": "2.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/MyIA.AI.Notebooks/SymbolicAI/Tweety/_probes/Tweety-IKVM-Init-Probe.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Tweety/_probes/Tweety-IKVM-Init-Probe.ipynb
index a4127eb324..d661c10144 100644
--- a/MyIA.AI.Notebooks/SymbolicAI/Tweety/_probes/Tweety-IKVM-Init-Probe.ipynb
+++ b/MyIA.AI.Notebooks/SymbolicAI/Tweety/_probes/Tweety-IKVM-Init-Probe.ipynb
@@ -5,10 +5,10 @@
"id": "m1",
"metadata": {
"papermill": {
- "duration": 0.004235,
- "end_time": "2026-07-02T05:22:26.504446+00:00",
+ "duration": 0.001918,
+ "end_time": "2026-09-29T17:37:43.773938+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:26.500211+00:00",
+ "start_time": "2026-09-29T17:37:43.772020+00:00",
"status": "completed"
},
"tags": []
@@ -75,10 +75,10 @@
"id": "m2",
"metadata": {
"papermill": {
- "duration": 0.002768,
- "end_time": "2026-07-02T05:22:26.512865+00:00",
+ "duration": 0.001271,
+ "end_time": "2026-09-29T17:37:43.777069+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:26.510097+00:00",
+ "start_time": "2026-09-29T17:37:43.775798+00:00",
"status": "completed"
},
"tags": []
@@ -86,7 +86,7 @@
"source": [
"## 1. Configuration du runtime IKVM\n",
"\n",
- "Cette cellule restaure les paquets NuGet IKVM et assemble le `IKVM_HOME` qui contient les binaires OpenJDK (`any/any` + `win-x64`) fusionnes avec les DLL .NET IKVM (`IKVM.CoreLib`, `IKVM.Java`, `IKVM.Runtime`, `IKVM.ByteCode`). **Duree** : ~30-60 s la première fois (cache NuGet vide), instantanee ensuite."
+ "Cette cellule restaure les paquets NuGet IKVM et assemble le `IKVM_HOME` qui contient les binaires OpenJDK (`any/any` + le RID de la machine, par exemple `win-x64` ou `linux-x64`) fusionnes avec les DLL .NET IKVM (`IKVM.CoreLib`, `IKVM.Java`, `IKVM.Runtime`, `IKVM.ByteCode`). **Duree** : ~30-60 s la première fois (cache NuGet vide), instantanee ensuite."
]
},
{
@@ -95,21 +95,136 @@
"id": "c1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-02T05:22:26.561168Z",
- "iopub.status.busy": "2026-07-02T05:22:26.523957Z",
- "iopub.status.idle": "2026-07-02T05:22:28.886967Z",
- "shell.execute_reply": "2026-07-02T05:22:28.877028Z"
+ "iopub.execute_input": "2026-09-29T17:37:43.792404Z",
+ "iopub.status.busy": "2026-09-29T17:37:43.785306Z",
+ "iopub.status.idle": "2026-09-29T17:37:45.046188Z",
+ "shell.execute_reply": "2026-09-29T17:37:45.042817Z"
},
"papermill": {
- "duration": 2.371711,
- "end_time": "2026-07-02T05:22:28.887156+00:00",
+ "duration": 1.268029,
+ "end_time": "2026-09-29T17:37:45.046375+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:26.515445+00:00",
+ "start_time": "2026-09-29T17:37:43.778346+00:00",
"status": "completed"
},
"tags": []
},
"outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n",
+ "
\r\n",
+ " The below script needs to be able to find the current output cell; this is an easy method to get it.\r\n",
+ "
\r\n",
+ " \r\n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
{
"data": {
"text/html": [
@@ -122,8 +237,7 @@
],
"source": [
"#r \"nuget: IKVM, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image, 8.15.0\"\n",
- "#r \"nuget: IKVM.Image.runtime.win-x64, 8.15.0\""
+ "#r \"nuget: IKVM.Image, 8.15.0\""
]
},
{
@@ -132,16 +246,16 @@
"id": "c2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-02T05:22:28.895221Z",
- "iopub.status.busy": "2026-07-02T05:22:28.894820Z",
- "iopub.status.idle": "2026-07-02T05:22:30.706023Z",
- "shell.execute_reply": "2026-07-02T05:22:30.705791Z"
+ "iopub.execute_input": "2026-09-29T17:37:45.055221Z",
+ "iopub.status.busy": "2026-09-29T17:37:45.054819Z",
+ "iopub.status.idle": "2026-09-29T17:37:51.370311Z",
+ "shell.execute_reply": "2026-09-29T17:37:51.370102Z"
},
"papermill": {
- "duration": 1.815932,
- "end_time": "2026-07-02T05:22:30.706127+00:00",
+ "duration": 6.320874,
+ "end_time": "2026-09-29T17:37:51.370412+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:28.890195+00:00",
+ "start_time": "2026-09-29T17:37:45.049538+00:00",
"status": "completed"
},
"tags": []
@@ -151,56 +265,57 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "IKVM_HOME = \\AppData\\Local\\Temp\\ikvm-home-8.15.0-win-x64\r\n"
+ "IKVM_HOME = /tmp/ikvm-home-8.15.0-linux-x64\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " bin/ikvm.properties: True\r\n"
+ " bin/ikvm.properties: True\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " lib/tzdb.dat: True\r\n"
+ " lib/tzdb.dat: True\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " lib/IKVM.CoreLib.dll: True\r\n"
+ " lib/IKVM.CoreLib.dll: True\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " lib/IKVM.Java.dll: True\r\n"
+ " lib/IKVM.Java.dll: True\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " lib/IKVM.Runtime.dll: True\r\n"
+ " lib/IKVM.Runtime.dll: True\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- " lib/IKVM.ByteCode.dll: True\r\n"
+ " lib/IKVM.ByteCode.dll: True\n"
]
}
],
"source": [
"using System.IO;\n",
"\n",
- "string ikvmVer = \"8.15.0\", ikvmRid = \"win-x64\";\n",
+ "// RID de la machine courante (win-x64, linux-x64, osx-arm64...) : IKVM.Image tire l'image native de chaque plateforme.\n",
+ "string ikvmVer = \"8.15.0\", ikvmRid = (OperatingSystem.IsWindows() ? \"win\" : OperatingSystem.IsMacOS() ? \"osx\" : \"linux\") + \"-\" + System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();\n",
"string nugetRoot = Environment.GetEnvironmentVariable(\"NUGET_PACKAGES\")\n",
" ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), \".nuget\", \"packages\");\n",
"\n",
@@ -225,7 +340,7 @@
" }\n",
"}\n",
"\n",
- "// 1. Fusion any/any + win-x64 (binaires OpenJDK + tzdb.dat)\n",
+ "// 1. Fusion any/any + RID de la machine (binaires OpenJDK + tzdb.dat)\n",
"if (Directory.Exists(ikvmBaseAny) && Directory.Exists(ikvmArchDir))\n",
"{\n",
" Directory.CreateDirectory(ikvmHome);\n",
@@ -269,10 +384,10 @@
"id": "m3",
"metadata": {
"papermill": {
- "duration": 0.00354,
- "end_time": "2026-07-02T05:22:30.712516+00:00",
+ "duration": 0.001991,
+ "end_time": "2026-09-29T17:37:51.375715+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:30.708976+00:00",
+ "start_time": "2026-09-29T17:37:51.373724+00:00",
"status": "completed"
},
"tags": []
@@ -289,16 +404,16 @@
"id": "c3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-02T05:22:30.720308Z",
- "iopub.status.busy": "2026-07-02T05:22:30.720039Z",
- "iopub.status.idle": "2026-07-02T05:22:31.289546Z",
- "shell.execute_reply": "2026-07-02T05:22:31.289379Z"
+ "iopub.execute_input": "2026-09-29T17:37:51.381199Z",
+ "iopub.status.busy": "2026-09-29T17:37:51.380986Z",
+ "iopub.status.idle": "2026-09-29T17:37:51.766043Z",
+ "shell.execute_reply": "2026-09-29T17:37:51.765819Z"
},
"papermill": {
- "duration": 0.573596,
- "end_time": "2026-07-02T05:22:31.289631+00:00",
+ "duration": 0.388668,
+ "end_time": "2026-09-29T17:37:51.766147+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:30.716035+00:00",
+ "start_time": "2026-09-29T17:37:51.377479+00:00",
"status": "completed"
},
"tags": []
@@ -308,7 +423,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "JVM IKVM amorcee : java.version = 1.8.0_472-b08\r\n"
+ "JVM IKVM amorcee : java.version = 1.8.0_472-b08\n"
]
}
],
@@ -328,10 +443,10 @@
"id": "m4",
"metadata": {
"papermill": {
- "duration": 0.002271,
- "end_time": "2026-07-02T05:22:31.294469+00:00",
+ "duration": 0.002527,
+ "end_time": "2026-09-29T17:37:51.772313+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:31.292198+00:00",
+ "start_time": "2026-09-29T17:37:51.769786+00:00",
"status": "completed"
},
"tags": []
@@ -348,16 +463,16 @@
"id": "c4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-02T05:22:31.300673Z",
- "iopub.status.busy": "2026-07-02T05:22:31.300443Z",
- "iopub.status.idle": "2026-07-02T05:22:31.312569Z",
- "shell.execute_reply": "2026-07-02T05:22:31.312399Z"
+ "iopub.execute_input": "2026-09-29T17:37:51.779025Z",
+ "iopub.status.busy": "2026-09-29T17:37:51.778597Z",
+ "iopub.status.idle": "2026-09-29T17:37:51.803862Z",
+ "shell.execute_reply": "2026-09-29T17:37:51.803493Z"
},
"papermill": {
- "duration": 0.016076,
- "end_time": "2026-07-02T05:22:31.312673+00:00",
+ "duration": 0.02928,
+ "end_time": "2026-09-29T17:37:51.803997+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:31.296597+00:00",
+ "start_time": "2026-09-29T17:37:51.774717+00:00",
"status": "completed"
},
"tags": []
@@ -373,10 +488,10 @@
"id": "m5",
"metadata": {
"papermill": {
- "duration": 0.002151,
- "end_time": "2026-07-02T05:22:31.317244+00:00",
+ "duration": 0.003046,
+ "end_time": "2026-09-29T17:37:51.810569+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:31.315093+00:00",
+ "start_time": "2026-09-29T17:37:51.807523+00:00",
"status": "completed"
},
"tags": []
@@ -393,16 +508,16 @@
"id": "c5",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-07-02T05:22:31.323360Z",
- "iopub.status.busy": "2026-07-02T05:22:31.323123Z",
- "iopub.status.idle": "2026-07-02T05:22:31.393407Z",
- "shell.execute_reply": "2026-07-02T05:22:31.393183Z"
+ "iopub.execute_input": "2026-09-29T17:37:51.819049Z",
+ "iopub.status.busy": "2026-09-29T17:37:51.818596Z",
+ "iopub.status.idle": "2026-09-29T17:37:51.960368Z",
+ "shell.execute_reply": "2026-09-29T17:37:51.960188Z"
},
"papermill": {
- "duration": 0.073965,
- "end_time": "2026-07-02T05:22:31.393499+00:00",
+ "duration": 0.146686,
+ "end_time": "2026-09-29T17:37:51.960451+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:31.319534+00:00",
+ "start_time": "2026-09-29T17:37:51.813765+00:00",
"status": "completed"
},
"tags": []
@@ -412,56 +527,56 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "probe.Probe.hello() = IKVM-OK via 1.8.0_472-b08\r\n"
+ "probe.Probe.hello() = IKVM-OK via 1.8.0_472-b08\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "probe.Probe.sqrt2() = 1,4142135623730951\r\n"
+ "probe.Probe.sqrt2() = 1.4142135623730951\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "\r\n"
+ "\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "=== PHASE 1 (axe 2) VALIDEE ===\r\n"
+ "=== PHASE 1 (axe 2) VALIDEE ===\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Le runtime IKVM s'initialise dans dotnet-interactive et execute du bytecode Java 8.\r\n"
+ "Le runtime IKVM s'initialise dans dotnet-interactive et execute du bytecode Java 8.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Le pattern est reproductible : NuGet + IKVM_HOME + DLL pre-compile par ikvmc.\r\n"
+ "Le pattern est reproductible : NuGet + IKVM_HOME + DLL pre-compile par ikvmc.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "La voie notebook est VIABLE pour les JARs Java 8 (Tweety 1.12, etc.) - Cf Phase 0.5.\r\n"
+ "La voie notebook est VIABLE pour les JARs Java 8 (Tweety 1.12, etc.) - Cf Phase 0.5.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Voir issue #4667 pour le verdict complet.\r\n"
+ "Voir issue #4667 pour le verdict complet.\n"
]
}
],
@@ -485,10 +600,10 @@
"id": "m6",
"metadata": {
"papermill": {
- "duration": 0.002636,
- "end_time": "2026-07-02T05:22:31.399223+00:00",
+ "duration": 0.002068,
+ "end_time": "2026-09-29T17:37:51.965150+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:31.396587+00:00",
+ "start_time": "2026-09-29T17:37:51.963082+00:00",
"status": "completed"
},
"tags": []
@@ -526,10 +641,10 @@
"id": "m7",
"metadata": {
"papermill": {
- "duration": 0.002289,
- "end_time": "2026-07-02T05:22:31.404041+00:00",
+ "duration": 0.001923,
+ "end_time": "2026-09-29T17:37:51.969143+00:00",
"exception": false,
- "start_time": "2026-07-02T05:22:31.401752+00:00",
+ "start_time": "2026-09-29T17:37:51.967220+00:00",
"status": "completed"
},
"tags": []
@@ -560,17 +675,17 @@
},
"papermill": {
"default_parameters": {},
- "duration": 9.887936,
- "end_time": "2026-07-02T05:22:31.643375+00:00",
+ "duration": 10.464638,
+ "end_time": "2026-09-29T17:37:52.090321+00:00",
"environment_variables": {},
"exception": null,
"input_path": "Tweety-IKVM-Init-Probe.ipynb",
- "output_path": "_papermill-output.ipynb",
+ "output_path": "Tweety-IKVM-Init-Probe.ipynb",
"parameters": {},
- "start_time": "2026-07-02T05:22:21.755439+00:00",
+ "start_time": "2026-09-29T17:37:41.625683+00:00",
"version": "2.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/scripts/notebook_tools/twin_pairs.d/tweety-10-mln/0012-2026-09-29-claude-cloud-hors-flotte.yaml b/scripts/notebook_tools/twin_pairs.d/tweety-10-mln/0012-2026-09-29-claude-cloud-hors-flotte.yaml
new file mode 100644
index 0000000000..b0a1ab1743
--- /dev/null
+++ b/scripts/notebook_tools/twin_pairs.d/tweety-10-mln/0012-2026-09-29-claude-cloud-hors-flotte.yaml
@@ -0,0 +1,6 @@
+date: '2026-09-29'
+by: claude-cloud:hors-flotte
+python_sha: a6bf19bf81508d804911fca837e30cdf8f0ee512
+csharp_sha: 9f7f17b6e10679094805bc74de6665c3a2b65262
+content_python_sha: 4b365ff8e47f0790049bb2f5a58449e5484fbd11e498e55a3a554d7014ec1920
+content_csharp_sha: 4da42746c64112de130e29728afe5ef3dacfe1f89471d38f074464e018436691
diff --git a/scripts/notebook_tools/twin_pairs.d/tweety-11-causal/0012-2026-09-29-claude-cloud-hors-flotte.yaml b/scripts/notebook_tools/twin_pairs.d/tweety-11-causal/0012-2026-09-29-claude-cloud-hors-flotte.yaml
new file mode 100644
index 0000000000..3118b7a83e
--- /dev/null
+++ b/scripts/notebook_tools/twin_pairs.d/tweety-11-causal/0012-2026-09-29-claude-cloud-hors-flotte.yaml
@@ -0,0 +1,6 @@
+date: '2026-09-29'
+by: claude-cloud:hors-flotte
+python_sha: 31af5d293d415afd765bad5163f120d5afec8ad1
+csharp_sha: 597995250249178300447cee59dec225c85d289b
+content_python_sha: 0aac270d1addf04051129029a59e070afb362893d1d490eb1c6bfbc0dd4d5a87
+content_csharp_sha: ea693e6e1157e28011bd00af39be0f33003adb44e6f4048243aba27ebf237c94
diff --git a/scripts/notebook_tools/twin_pairs.d/tweety-4-belief-revision/0010-2026-09-29-claude-cloud-hors-flotte.yaml b/scripts/notebook_tools/twin_pairs.d/tweety-4-belief-revision/0010-2026-09-29-claude-cloud-hors-flotte.yaml
new file mode 100644
index 0000000000..ab1c5a68c1
--- /dev/null
+++ b/scripts/notebook_tools/twin_pairs.d/tweety-4-belief-revision/0010-2026-09-29-claude-cloud-hors-flotte.yaml
@@ -0,0 +1,6 @@
+date: '2026-09-29'
+by: claude-cloud:hors-flotte
+python_sha: 5073b3dce3e9bcadbc978e23ad784d93daaf5580
+csharp_sha: dea724df0611765a6eebe47e793093c2077e2ca3
+content_python_sha: ac5977613ae5b4ffe056789ebd4979a0044b5320e566b7c619c1374a38de32aa
+content_csharp_sha: 702860cda81d9c8b0b2814eb98d3542d754a2a213d6bd015da0895c226e3ceb2
diff --git a/scripts/notebook_tools/twin_pairs.d/tweety-5-abstract-argumentation/0011-2026-09-29-claude-cloud-hors-flotte.yaml b/scripts/notebook_tools/twin_pairs.d/tweety-5-abstract-argumentation/0011-2026-09-29-claude-cloud-hors-flotte.yaml
new file mode 100644
index 0000000000..2e0b1a6eaa
--- /dev/null
+++ b/scripts/notebook_tools/twin_pairs.d/tweety-5-abstract-argumentation/0011-2026-09-29-claude-cloud-hors-flotte.yaml
@@ -0,0 +1,6 @@
+date: '2026-09-29'
+by: claude-cloud:hors-flotte
+python_sha: 83b9e7b159f96230b463e871d1bbef9cf71a3ea5
+csharp_sha: cbd1d2304cad8ba34064a2e94e9c326bc8913c56
+content_python_sha: 579033f011ad2a828488323e4cc11a71a9026ce4c4a0e8e4c1486922bebf1f92
+content_csharp_sha: 5e2fa75bfb52a8a924216929a92eb98bb9981e88abbdfc984231cfc4f48074f3