diff --git a/MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynb b/MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynb
index 5259fcf610..68fcbdbde1 100644
--- a/MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynb
+++ b/MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynb
@@ -5,10 +5,10 @@
"id": "5f6b425b",
"metadata": {
"papermill": {
- "duration": 0.003124,
- "end_time": "2026-09-06T18:08:49.496273+00:00",
+ "duration": 0.006283,
+ "end_time": "2026-09-25T08:57:31.479272+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:49.493149+00:00",
+ "start_time": "2026-09-25T08:57:31.472989+00:00",
"status": "completed"
},
"tags": []
@@ -40,10 +40,10 @@
"id": "b31fddc6",
"metadata": {
"papermill": {
- "duration": 0.002276,
- "end_time": "2026-09-06T18:08:49.501530+00:00",
+ "duration": 0.004369,
+ "end_time": "2026-09-25T08:57:31.489007+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:49.499254+00:00",
+ "start_time": "2026-09-25T08:57:31.484638+00:00",
"status": "completed"
},
"tags": []
@@ -71,16 +71,16 @@
"id": "8c4d7384",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:49.510084Z",
- "iopub.status.busy": "2026-09-06T18:08:49.509689Z",
- "iopub.status.idle": "2026-09-06T18:08:50.532529Z",
- "shell.execute_reply": "2026-09-06T18:08:50.531174Z"
+ "iopub.execute_input": "2026-09-25T08:57:31.500921Z",
+ "iopub.status.busy": "2026-09-25T08:57:31.500678Z",
+ "iopub.status.idle": "2026-09-25T08:57:35.293681Z",
+ "shell.execute_reply": "2026-09-25T08:57:35.292686Z"
},
"papermill": {
- "duration": 1.028582,
- "end_time": "2026-09-06T18:08:50.532546+00:00",
+ "duration": 3.801081,
+ "end_time": "2026-09-25T08:57:35.295795+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:49.503964+00:00",
+ "start_time": "2026-09-25T08:57:31.494714+00:00",
"status": "completed"
},
"tags": []
@@ -222,16 +222,16 @@
"id": "64b453c5",
"metadata": {
"papermill": {
- "duration": 0.004464,
- "end_time": "2026-09-06T18:08:50.542775+00:00",
+ "duration": 0.004988,
+ "end_time": "2026-09-25T08:57:35.308712+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.538311+00:00",
+ "start_time": "2026-09-25T08:57:35.303724+00:00",
"status": "completed"
},
"tags": []
},
"source": [
- "**Lecture.** Le `#check` confirme que le lake expose les cinq briques du modèle — `Edge` (les arêtes d'un graphe fini), `openAdj` (adjacence ouverte = adjacence de `G` **plus** appartenance à `ω`), `openEdgeClosed` (ω-fermé), `Component` (composante ouverte d'un sommet), `boundary` (frontière ∂A). Chaque signature porte la structure du modèle : `openAdj` prend la configuration `ω` en argument — l'adjacence dépend de l'état du monde ; `boundary` retourne un `Finset (Edge G)` (pas une `Set`), ce qui rend la frontière **cardinalisable** et calculable — c'est elle qui portera le profil isopérimétrique de la section 5. Notez que `Component` est une `Set V` définie par connexité ouverte ; on verra en section 3 qu'elle est ω-fermé, et même le **plus grand** ω-fermé contenant son sommet."
+ "**Lecture.** Le `#check` confirme que le lake expose les cinq briques du modèle — `Edge` (les arêtes d'un graphe fini), `openAdj` (adjacence ouverte = adjacence de `G` **plus** appartenance à `ω`), `openEdgeClosed` (ω-fermé), `Component` (composante ouverte d'un sommet), `boundary` (frontière ∂A). Chaque signature porte la structure du modèle : `openAdj` prend la configuration `ω` en argument — l'adjacence dépend de l'état du monde ; `boundary` retourne un `Finset (Edge G)` (pas une `Set`), ce qui rend la frontière **cardinalisable** et calculable — c'est elle qui portera le profil isopérimétrique de la section 5. Notez que `Component` est une `Set V` définie par connexité ouverte ; on verra en section 4 qu'elle est ω-fermé, et même le **plus grand** ω-fermé contenant son sommet."
]
},
{
@@ -239,10 +239,10 @@
"id": "c81bf454",
"metadata": {
"papermill": {
- "duration": 0.003088,
- "end_time": "2026-09-06T18:08:50.549808+00:00",
+ "duration": 0.006554,
+ "end_time": "2026-09-25T08:57:35.321919+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.546720+00:00",
+ "start_time": "2026-09-25T08:57:35.315365+00:00",
"status": "completed"
},
"tags": []
@@ -271,16 +271,16 @@
"id": "475d4f67",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:50.559105Z",
- "iopub.status.busy": "2026-09-06T18:08:50.558921Z",
- "iopub.status.idle": "2026-09-06T18:08:50.729361Z",
- "shell.execute_reply": "2026-09-06T18:08:50.728705Z"
+ "iopub.execute_input": "2026-09-25T08:57:35.335687Z",
+ "iopub.status.busy": "2026-09-25T08:57:35.335446Z",
+ "iopub.status.idle": "2026-09-25T08:57:35.493096Z",
+ "shell.execute_reply": "2026-09-25T08:57:35.492316Z"
},
"papermill": {
- "duration": 0.176499,
- "end_time": "2026-09-06T18:08:50.729343+00:00",
+ "duration": 0.165379,
+ "end_time": "2026-09-25T08:57:35.494174+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.552844+00:00",
+ "start_time": "2026-09-25T08:57:35.328795+00:00",
"status": "completed"
},
"tags": []
@@ -388,10 +388,10 @@
"id": "b77344ae",
"metadata": {
"papermill": {
- "duration": 0.004254,
- "end_time": "2026-09-06T18:08:50.737770+00:00",
+ "duration": 0.002638,
+ "end_time": "2026-09-25T08:57:35.499924+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.733516+00:00",
+ "start_time": "2026-09-25T08:57:35.497286+00:00",
"status": "completed"
},
"tags": []
@@ -411,10 +411,10 @@
"id": "0fdcb427",
"metadata": {
"papermill": {
- "duration": 0.00275,
- "end_time": "2026-09-06T18:08:50.743499+00:00",
+ "duration": 0.003603,
+ "end_time": "2026-09-25T08:57:35.507154+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.740749+00:00",
+ "start_time": "2026-09-25T08:57:35.503551+00:00",
"status": "completed"
},
"tags": []
@@ -441,16 +441,16 @@
"id": "efc83852",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:50.753907Z",
- "iopub.status.busy": "2026-09-06T18:08:50.753749Z",
- "iopub.status.idle": "2026-09-06T18:08:50.932929Z",
- "shell.execute_reply": "2026-09-06T18:08:50.932128Z"
+ "iopub.execute_input": "2026-09-25T08:57:35.515567Z",
+ "iopub.status.busy": "2026-09-25T08:57:35.515417Z",
+ "iopub.status.idle": "2026-09-25T08:57:35.695655Z",
+ "shell.execute_reply": "2026-09-25T08:57:35.694916Z"
},
"papermill": {
- "duration": 0.185453,
- "end_time": "2026-09-06T18:08:50.932720+00:00",
+ "duration": 0.186498,
+ "end_time": "2026-09-25T08:57:35.697187+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.747267+00:00",
+ "start_time": "2026-09-25T08:57:35.510689+00:00",
"status": "completed"
},
"tags": []
@@ -591,10 +591,10 @@
"id": "e6360062",
"metadata": {
"papermill": {
- "duration": 0.003216,
- "end_time": "2026-09-06T18:08:50.940210+00:00",
+ "duration": 0.005986,
+ "end_time": "2026-09-25T08:57:35.709592+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.936994+00:00",
+ "start_time": "2026-09-25T08:57:35.703606+00:00",
"status": "completed"
},
"tags": []
@@ -608,10 +608,10 @@
"id": "6cf2b94a",
"metadata": {
"papermill": {
- "duration": 0.003001,
- "end_time": "2026-09-06T18:08:50.946422+00:00",
+ "duration": 0.006387,
+ "end_time": "2026-09-25T08:57:35.721917+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.943421+00:00",
+ "start_time": "2026-09-25T08:57:35.715530+00:00",
"status": "completed"
},
"tags": []
@@ -636,16 +636,16 @@
"id": "a28f3fce",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:50.956527Z",
- "iopub.status.busy": "2026-09-06T18:08:50.956230Z",
- "iopub.status.idle": "2026-09-06T18:08:51.131489Z",
- "shell.execute_reply": "2026-09-06T18:08:51.130732Z"
+ "iopub.execute_input": "2026-09-25T08:57:35.739100Z",
+ "iopub.status.busy": "2026-09-25T08:57:35.738758Z",
+ "iopub.status.idle": "2026-09-25T08:57:35.911761Z",
+ "shell.execute_reply": "2026-09-25T08:57:35.910903Z"
},
"papermill": {
- "duration": 0.18103,
- "end_time": "2026-09-06T18:08:51.130994+00:00",
+ "duration": 0.185077,
+ "end_time": "2026-09-25T08:57:35.914147+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:50.949964+00:00",
+ "start_time": "2026-09-25T08:57:35.729070+00:00",
"status": "completed"
},
"tags": []
@@ -807,10 +807,10 @@
"id": "ee797190",
"metadata": {
"papermill": {
- "duration": 0.003477,
- "end_time": "2026-09-06T18:08:51.138705+00:00",
+ "duration": 0.007628,
+ "end_time": "2026-09-25T08:57:35.930571+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.135228+00:00",
+ "start_time": "2026-09-25T08:57:35.922943+00:00",
"status": "completed"
},
"tags": []
@@ -824,10 +824,10 @@
"id": "001333ec",
"metadata": {
"papermill": {
- "duration": 0.003977,
- "end_time": "2026-09-06T18:08:51.146672+00:00",
+ "duration": 0.005737,
+ "end_time": "2026-09-25T08:57:35.943314+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.142695+00:00",
+ "start_time": "2026-09-25T08:57:35.937577+00:00",
"status": "completed"
},
"tags": []
@@ -853,16 +853,16 @@
"id": "50d6bc5d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:51.156905Z",
- "iopub.status.busy": "2026-09-06T18:08:51.156735Z",
- "iopub.status.idle": "2026-09-06T18:08:51.320159Z",
- "shell.execute_reply": "2026-09-06T18:08:51.319337Z"
+ "iopub.execute_input": "2026-09-25T08:57:35.958890Z",
+ "iopub.status.busy": "2026-09-25T08:57:35.958647Z",
+ "iopub.status.idle": "2026-09-25T08:57:36.139939Z",
+ "shell.execute_reply": "2026-09-25T08:57:36.139142Z"
},
"papermill": {
- "duration": 0.1695,
- "end_time": "2026-09-06T18:08:51.319602+00:00",
+ "duration": 0.191338,
+ "end_time": "2026-09-25T08:57:36.141056+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.150102+00:00",
+ "start_time": "2026-09-25T08:57:35.949718+00:00",
"status": "completed"
},
"tags": []
@@ -1006,10 +1006,10 @@
"id": "4ef7396d",
"metadata": {
"papermill": {
- "duration": 0.00409,
- "end_time": "2026-09-06T18:08:51.328809+00:00",
+ "duration": 0.003351,
+ "end_time": "2026-09-25T08:57:36.148349+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.324719+00:00",
+ "start_time": "2026-09-25T08:57:36.144998+00:00",
"status": "completed"
},
"tags": []
@@ -1023,10 +1023,10 @@
"id": "9b6b2a62",
"metadata": {
"papermill": {
- "duration": 0.00403,
- "end_time": "2026-09-06T18:08:51.337579+00:00",
+ "duration": 0.003374,
+ "end_time": "2026-09-25T08:57:36.155187+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.333549+00:00",
+ "start_time": "2026-09-25T08:57:36.151813+00:00",
"status": "completed"
},
"tags": []
@@ -1054,16 +1054,16 @@
"id": "c4545c71",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:51.353697Z",
- "iopub.status.busy": "2026-09-06T18:08:51.353405Z",
- "iopub.status.idle": "2026-09-06T18:08:51.562824Z",
- "shell.execute_reply": "2026-09-06T18:08:51.561868Z"
+ "iopub.execute_input": "2026-09-25T08:57:36.163825Z",
+ "iopub.status.busy": "2026-09-25T08:57:36.163566Z",
+ "iopub.status.idle": "2026-09-25T08:57:36.415689Z",
+ "shell.execute_reply": "2026-09-25T08:57:36.414906Z"
},
"papermill": {
- "duration": 0.218663,
- "end_time": "2026-09-06T18:08:51.562331+00:00",
+ "duration": 0.259392,
+ "end_time": "2026-09-25T08:57:36.417866+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.343668+00:00",
+ "start_time": "2026-09-25T08:57:36.158474+00:00",
"status": "completed"
},
"tags": []
@@ -1082,21 +1082,27 @@
" \n",
"
\n",
"
-- Le profil isopérimétrique exact, en théorèmes puis en valeurs calculées :
\n",
- "
two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card
\n",
- "
two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card
\n",
- "
boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2
\n",
- "
boundary_card_C4_triple : (boundary C4 full4 {0, 1, 2}).card = 2
\n",
- "
boundary_card_C4_opposite : (boundary C4 full4 {0, 2}).card = 4
\n",
+ "
boundary_card_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → (boundary C3 full3 A).card = 2
\n",
+ "
two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card
\n",
+ "
two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card
\n",
+ "
boundary_attains_min_C4 : ∃ A, A.Nonempty ∧ A ≠ Finset.univ ∧ (boundary C4 full4 A).card = 2
\n",
+ "
boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2
\n",
+ "
boundary_card_C4_triple : (boundary C4 full4 {0, 1, 2}).card = 2
\n",
+ "
boundary_card_C4_opposite : (boundary C4 full4 {0, 2}).card = 4
\n",
"
\n",
"
-- Les mêmes valeurs, calculées par évaluation native du kernel :
\n",
- "
\n",
- "
\n",
- "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
"
--% env 5
\n",
"
\n",
" \n",
" Raw input
\n",
- " {\"cmd\": \"-- Le profil isop\\u00e9rim\\u00e9trique exact, en th\\u00e9or\\u00e8mes puis en valeurs calcul\\u00e9es :\\n#check @two_le_boundary_C3 -- borne universelle sur C\\u2083\\n#check @two_le_boundary_C4 -- borne universelle sur C\\u2084\\n#check @boundary_card_C4_adjacent -- #(\\u2202{0,1}) = 2\\n#check @boundary_card_C4_triple -- #(\\u2202{0,1,2}) = 2\\n#check @boundary_card_C4_opposite -- #(\\u2202{0,2}) = 4 (les deux faces du carr\\u00e9)\\n\\n-- Les m\\u00eames valeurs, calcul\\u00e9es par \\u00e9valuation native du kernel :\\n#eval Fintype.card (Edge C3) -- 3 ar\\u00eates au triangle\\n#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- fronti\\u00e8re du singleton\\n#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- fronti\\u00e8re des oppos\\u00e9s\", \"env\": 4}\n",
+ " {\"cmd\": \"-- Le profil isop\\u00e9rim\\u00e9trique exact, en th\\u00e9or\\u00e8mes puis en valeurs calcul\\u00e9es :\\n#check @boundary_card_C3 -- #(\\u2202A) = 2 exactement sur C\\u2083 (parties propres non vides)\\n#check @two_le_boundary_C3 -- borne universelle sur C\\u2083\\n#check @two_le_boundary_C4 -- borne universelle sur C\\u2084\\n#check @boundary_attains_min_C4 -- le minimum est atteint sur C\\u2084 (t\\u00e9moin {0})\\n#check @boundary_card_C4_adjacent -- #(\\u2202{0,1}) = 2\\n#check @boundary_card_C4_triple -- #(\\u2202{0,1,2}) = 2\\n#check @boundary_card_C4_opposite -- #(\\u2202{0,2}) = 4 (les deux faces du carr\\u00e9)\\n\\n-- Les m\\u00eames valeurs, calcul\\u00e9es par \\u00e9valuation native du kernel :\\n#eval Fintype.card (Edge C3) -- 3 ar\\u00eates au triangle\\n#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- fronti\\u00e8re du singleton de C\\u2083\\n#eval (boundary C4 full4 ({0} : Finset (Fin 4))).card -- singleton du carr\\u00e9\\n#eval (boundary C4 full4 ({0, 1} : Finset (Fin 4))).card -- adjacents du carr\\u00e9\\n#eval (boundary C4 full4 ({0, 1, 2} : Finset (Fin 4))).card -- triple du carr\\u00e9\\n#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- fronti\\u00e8re des oppos\\u00e9s\\n\", \"env\": 4}\n",
" \n",
" \n",
" Raw output
\n",
@@ -1105,35 +1111,57 @@
" \"pos\": {\"line\": 2, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 2, \"column\": 6},\r\n",
" \"data\":\r\n",
- " \"two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card\"},\r\n",
+ " \"boundary_card_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → (boundary C3 full3 A).card = 2\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 3, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 3, \"column\": 6},\r\n",
" \"data\":\r\n",
- " \"two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card\"},\r\n",
+ " \"two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 4, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 4, \"column\": 6},\r\n",
- " \"data\": \"boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2\"},\r\n",
+ " \"data\":\r\n",
+ " \"two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 5, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 5, \"column\": 6},\r\n",
- " \"data\": \"boundary_card_C4_triple : (boundary C4 full4 {0, 1, 2}).card = 2\"},\r\n",
+ " \"data\":\r\n",
+ " \"boundary_attains_min_C4 : ∃ A, A.Nonempty ∧ A ≠ Finset.univ ∧ (boundary C4 full4 A).card = 2\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 6, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 6, \"column\": 6},\r\n",
+ " \"data\": \"boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 7, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 7, \"column\": 6},\r\n",
+ " \"data\": \"boundary_card_C4_triple : (boundary C4 full4 {0, 1, 2}).card = 2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 8, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 8, \"column\": 6},\r\n",
" \"data\": \"boundary_card_C4_opposite : (boundary C4 full4 {0, 2}).card = 4\"},\r\n",
" {\"severity\": \"info\",\r\n",
- " \"pos\": {\"line\": 9, \"column\": 0},\r\n",
- " \"endPos\": {\"line\": 9, \"column\": 5},\r\n",
+ " \"pos\": {\"line\": 11, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 11, \"column\": 5},\r\n",
" \"data\": \"3\"},\r\n",
" {\"severity\": \"info\",\r\n",
- " \"pos\": {\"line\": 10, \"column\": 0},\r\n",
- " \"endPos\": {\"line\": 10, \"column\": 5},\r\n",
+ " \"pos\": {\"line\": 12, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 12, \"column\": 5},\r\n",
" \"data\": \"2\"},\r\n",
" {\"severity\": \"info\",\r\n",
- " \"pos\": {\"line\": 11, \"column\": 0},\r\n",
- " \"endPos\": {\"line\": 11, \"column\": 5},\r\n",
+ " \"pos\": {\"line\": 13, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 13, \"column\": 5},\r\n",
+ " \"data\": \"2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 14, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 14, \"column\": 5},\r\n",
+ " \"data\": \"2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 15, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 15, \"column\": 5},\r\n",
+ " \"data\": \"2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 16, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 16, \"column\": 5},\r\n",
" \"data\": \"4\"}],\r\n",
" \"env\": 5}\n",
" \n",
@@ -1141,10 +1169,14 @@
],
"text/plain": [
"-- Le profil isopérimétrique exact, en théorèmes puis en valeurs calculées :\n",
+ "#check @boundary_card_C3 -- #(∂A) = 2 exactement sur C₃ (parties propres non vides)\n",
+ "──────▶ boundary_card_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → (boundary C3 full3 A).card = 2\n",
"#check @two_le_boundary_C3 -- borne universelle sur C₃\n",
"──────▶ two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card\n",
"#check @two_le_boundary_C4 -- borne universelle sur C₄\n",
"──────▶ two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card\n",
+ "#check @boundary_attains_min_C4 -- le minimum est atteint sur C₄ (témoin {0})\n",
+ "──────▶ boundary_attains_min_C4 : ∃ A, A.Nonempty ∧ A ≠ Finset.univ ∧ (boundary C4 full4 A).card = 2\n",
"#check @boundary_card_C4_adjacent -- #(∂{0,1}) = 2\n",
"──────▶ boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2\n",
"#check @boundary_card_C4_triple -- #(∂{0,1,2}) = 2\n",
@@ -1155,49 +1187,78 @@
"-- Les mêmes valeurs, calculées par évaluation native du kernel :\n",
"#eval Fintype.card (Edge C3) -- 3 arêtes au triangle\n",
"─────▶ 3\n",
- "#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- frontière du singleton\n",
+ "#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- frontière du singleton de C₃\n",
+ "─────▶ 2\n",
+ "#eval (boundary C4 full4 ({0} : Finset (Fin 4))).card -- singleton du carré\n",
+ "─────▶ 2\n",
+ "#eval (boundary C4 full4 ({0, 1} : Finset (Fin 4))).card -- adjacents du carré\n",
+ "─────▶ 2\n",
+ "#eval (boundary C4 full4 ({0, 1, 2} : Finset (Fin 4))).card -- triple du carré\n",
"─────▶ 2\n",
"#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- frontière des opposés\n",
"─────▶ 4\n",
+ "\n",
"--% env 5\n",
"\n",
"Raw input:\n",
- "{\"cmd\": \"-- Le profil isop\\u00e9rim\\u00e9trique exact, en th\\u00e9or\\u00e8mes puis en valeurs calcul\\u00e9es :\\n#check @two_le_boundary_C3 -- borne universelle sur C\\u2083\\n#check @two_le_boundary_C4 -- borne universelle sur C\\u2084\\n#check @boundary_card_C4_adjacent -- #(\\u2202{0,1}) = 2\\n#check @boundary_card_C4_triple -- #(\\u2202{0,1,2}) = 2\\n#check @boundary_card_C4_opposite -- #(\\u2202{0,2}) = 4 (les deux faces du carr\\u00e9)\\n\\n-- Les m\\u00eames valeurs, calcul\\u00e9es par \\u00e9valuation native du kernel :\\n#eval Fintype.card (Edge C3) -- 3 ar\\u00eates au triangle\\n#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- fronti\\u00e8re du singleton\\n#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- fronti\\u00e8re des oppos\\u00e9s\", \"env\": 4}\n",
+ "{\"cmd\": \"-- Le profil isop\\u00e9rim\\u00e9trique exact, en th\\u00e9or\\u00e8mes puis en valeurs calcul\\u00e9es :\\n#check @boundary_card_C3 -- #(\\u2202A) = 2 exactement sur C\\u2083 (parties propres non vides)\\n#check @two_le_boundary_C3 -- borne universelle sur C\\u2083\\n#check @two_le_boundary_C4 -- borne universelle sur C\\u2084\\n#check @boundary_attains_min_C4 -- le minimum est atteint sur C\\u2084 (t\\u00e9moin {0})\\n#check @boundary_card_C4_adjacent -- #(\\u2202{0,1}) = 2\\n#check @boundary_card_C4_triple -- #(\\u2202{0,1,2}) = 2\\n#check @boundary_card_C4_opposite -- #(\\u2202{0,2}) = 4 (les deux faces du carr\\u00e9)\\n\\n-- Les m\\u00eames valeurs, calcul\\u00e9es par \\u00e9valuation native du kernel :\\n#eval Fintype.card (Edge C3) -- 3 ar\\u00eates au triangle\\n#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- fronti\\u00e8re du singleton de C\\u2083\\n#eval (boundary C4 full4 ({0} : Finset (Fin 4))).card -- singleton du carr\\u00e9\\n#eval (boundary C4 full4 ({0, 1} : Finset (Fin 4))).card -- adjacents du carr\\u00e9\\n#eval (boundary C4 full4 ({0, 1, 2} : Finset (Fin 4))).card -- triple du carr\\u00e9\\n#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- fronti\\u00e8re des oppos\\u00e9s\\n\", \"env\": 4}\n",
"Raw output:\n",
"{\"messages\":\r\n",
" [{\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 2, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 2, \"column\": 6},\r\n",
" \"data\":\r\n",
- " \"two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card\"},\r\n",
+ " \"boundary_card_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → (boundary C3 full3 A).card = 2\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 3, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 3, \"column\": 6},\r\n",
" \"data\":\r\n",
- " \"two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card\"},\r\n",
+ " \"two_le_boundary_C3 : ∀ (A : Finset (Fin 3)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C3 full3 A).card\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 4, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 4, \"column\": 6},\r\n",
- " \"data\": \"boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2\"},\r\n",
+ " \"data\":\r\n",
+ " \"two_le_boundary_C4 : ∀ (A : Finset (Fin 4)), A.Nonempty → A ≠ Finset.univ → 2 ≤ (boundary C4 full4 A).card\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 5, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 5, \"column\": 6},\r\n",
- " \"data\": \"boundary_card_C4_triple : (boundary C4 full4 {0, 1, 2}).card = 2\"},\r\n",
+ " \"data\":\r\n",
+ " \"boundary_attains_min_C4 : ∃ A, A.Nonempty ∧ A ≠ Finset.univ ∧ (boundary C4 full4 A).card = 2\"},\r\n",
" {\"severity\": \"info\",\r\n",
" \"pos\": {\"line\": 6, \"column\": 0},\r\n",
" \"endPos\": {\"line\": 6, \"column\": 6},\r\n",
+ " \"data\": \"boundary_card_C4_adjacent : (boundary C4 full4 {0, 1}).card = 2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 7, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 7, \"column\": 6},\r\n",
+ " \"data\": \"boundary_card_C4_triple : (boundary C4 full4 {0, 1, 2}).card = 2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 8, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 8, \"column\": 6},\r\n",
" \"data\": \"boundary_card_C4_opposite : (boundary C4 full4 {0, 2}).card = 4\"},\r\n",
" {\"severity\": \"info\",\r\n",
- " \"pos\": {\"line\": 9, \"column\": 0},\r\n",
- " \"endPos\": {\"line\": 9, \"column\": 5},\r\n",
+ " \"pos\": {\"line\": 11, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 11, \"column\": 5},\r\n",
" \"data\": \"3\"},\r\n",
" {\"severity\": \"info\",\r\n",
- " \"pos\": {\"line\": 10, \"column\": 0},\r\n",
- " \"endPos\": {\"line\": 10, \"column\": 5},\r\n",
+ " \"pos\": {\"line\": 12, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 12, \"column\": 5},\r\n",
" \"data\": \"2\"},\r\n",
" {\"severity\": \"info\",\r\n",
- " \"pos\": {\"line\": 11, \"column\": 0},\r\n",
- " \"endPos\": {\"line\": 11, \"column\": 5},\r\n",
+ " \"pos\": {\"line\": 13, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 13, \"column\": 5},\r\n",
+ " \"data\": \"2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 14, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 14, \"column\": 5},\r\n",
+ " \"data\": \"2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 15, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 15, \"column\": 5},\r\n",
+ " \"data\": \"2\"},\r\n",
+ " {\"severity\": \"info\",\r\n",
+ " \"pos\": {\"line\": 16, \"column\": 0},\r\n",
+ " \"endPos\": {\"line\": 16, \"column\": 5},\r\n",
" \"data\": \"4\"}],\r\n",
" \"env\": 5}"
]
@@ -1208,16 +1269,21 @@
],
"source": [
"-- Le profil isopérimétrique exact, en théorèmes puis en valeurs calculées :\n",
+ "#check @boundary_card_C3 -- #(∂A) = 2 exactement sur C₃ (parties propres non vides)\n",
"#check @two_le_boundary_C3 -- borne universelle sur C₃\n",
"#check @two_le_boundary_C4 -- borne universelle sur C₄\n",
+ "#check @boundary_attains_min_C4 -- le minimum est atteint sur C₄ (témoin {0})\n",
"#check @boundary_card_C4_adjacent -- #(∂{0,1}) = 2\n",
"#check @boundary_card_C4_triple -- #(∂{0,1,2}) = 2\n",
"#check @boundary_card_C4_opposite -- #(∂{0,2}) = 4 (les deux faces du carré)\n",
"\n",
"-- Les mêmes valeurs, calculées par évaluation native du kernel :\n",
"#eval Fintype.card (Edge C3) -- 3 arêtes au triangle\n",
- "#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- frontière du singleton\n",
- "#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- frontière des opposés"
+ "#eval (boundary C3 full3 ({0} : Finset (Fin 3))).card -- frontière du singleton de C₃\n",
+ "#eval (boundary C4 full4 ({0} : Finset (Fin 4))).card -- singleton du carré\n",
+ "#eval (boundary C4 full4 ({0, 1} : Finset (Fin 4))).card -- adjacents du carré\n",
+ "#eval (boundary C4 full4 ({0, 1, 2} : Finset (Fin 4))).card -- triple du carré\n",
+ "#eval (boundary C4 full4 ({0, 2} : Finset (Fin 4))).card -- frontière des opposés\n"
]
},
{
@@ -1225,10 +1291,10 @@
"id": "071493f5",
"metadata": {
"papermill": {
- "duration": 0.004305,
- "end_time": "2026-09-06T18:08:51.571407+00:00",
+ "duration": 0.00807,
+ "end_time": "2026-09-25T08:57:36.434972+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.567102+00:00",
+ "start_time": "2026-09-25T08:57:36.426902+00:00",
"status": "completed"
},
"tags": []
@@ -1242,10 +1308,10 @@
"id": "966a8691",
"metadata": {
"papermill": {
- "duration": 0.004629,
- "end_time": "2026-09-06T18:08:51.580511+00:00",
+ "duration": 0.004571,
+ "end_time": "2026-09-25T08:57:36.443481+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.575882+00:00",
+ "start_time": "2026-09-25T08:57:36.438910+00:00",
"status": "completed"
},
"tags": []
@@ -1266,16 +1332,16 @@
"id": "3901d0d0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:51.592711Z",
- "iopub.status.busy": "2026-09-06T18:08:51.592551Z",
- "iopub.status.idle": "2026-09-06T18:08:51.786650Z",
- "shell.execute_reply": "2026-09-06T18:08:51.784798Z"
+ "iopub.execute_input": "2026-09-25T08:57:36.461883Z",
+ "iopub.status.busy": "2026-09-25T08:57:36.461638Z",
+ "iopub.status.idle": "2026-09-25T08:57:36.615659Z",
+ "shell.execute_reply": "2026-09-25T08:57:36.614648Z"
},
"papermill": {
- "duration": 0.201778,
- "end_time": "2026-09-06T18:08:51.786970+00:00",
+ "duration": 0.16468,
+ "end_time": "2026-09-25T08:57:36.616787+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.585192+00:00",
+ "start_time": "2026-09-25T08:57:36.452107+00:00",
"status": "completed"
},
"tags": []
@@ -1351,16 +1417,16 @@
"id": "255520c8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:51.817324Z",
- "iopub.status.busy": "2026-09-06T18:08:51.816770Z",
- "iopub.status.idle": "2026-09-06T18:08:51.970343Z",
- "shell.execute_reply": "2026-09-06T18:08:51.969486Z"
+ "iopub.execute_input": "2026-09-25T08:57:36.629407Z",
+ "iopub.status.busy": "2026-09-25T08:57:36.629235Z",
+ "iopub.status.idle": "2026-09-25T08:57:36.776511Z",
+ "shell.execute_reply": "2026-09-25T08:57:36.775767Z"
},
"papermill": {
- "duration": 0.169911,
- "end_time": "2026-09-06T18:08:51.969551+00:00",
+ "duration": 0.156207,
+ "end_time": "2026-09-25T08:57:36.778473+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.799640+00:00",
+ "start_time": "2026-09-25T08:57:36.622266+00:00",
"status": "completed"
},
"tags": []
@@ -1442,16 +1508,16 @@
"id": "3d9807f6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-06T18:08:51.984925Z",
- "iopub.status.busy": "2026-09-06T18:08:51.984758Z",
- "iopub.status.idle": "2026-09-06T18:08:52.135153Z",
- "shell.execute_reply": "2026-09-06T18:08:52.134368Z"
+ "iopub.execute_input": "2026-09-25T08:57:36.796412Z",
+ "iopub.status.busy": "2026-09-25T08:57:36.796240Z",
+ "iopub.status.idle": "2026-09-25T08:57:36.949757Z",
+ "shell.execute_reply": "2026-09-25T08:57:36.949084Z"
},
"papermill": {
- "duration": 0.160596,
- "end_time": "2026-09-06T18:08:52.135691+00:00",
+ "duration": 0.165129,
+ "end_time": "2026-09-25T08:57:36.951068+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:51.975095+00:00",
+ "start_time": "2026-09-25T08:57:36.785939+00:00",
"status": "completed"
},
"tags": []
@@ -1538,10 +1604,10 @@
"id": "f7eb46df",
"metadata": {
"papermill": {
- "duration": 0.015836,
- "end_time": "2026-09-06T18:08:52.165847+00:00",
+ "duration": 0.005988,
+ "end_time": "2026-09-25T08:57:36.964648+00:00",
"exception": false,
- "start_time": "2026-09-06T18:08:52.150011+00:00",
+ "start_time": "2026-09-25T08:57:36.958660+00:00",
"status": "completed"
},
"tags": []
@@ -1578,14 +1644,14 @@
},
"papermill": {
"default_parameters": {},
- "duration": 4.287036,
- "end_time": "2026-09-06T18:08:52.408354+00:00",
+ "duration": 14.708284,
+ "end_time": "2026-09-25T08:57:37.196720+00:00",
"environment_variables": {},
"exception": null,
"input_path": "Percolation-Lean.ipynb",
"output_path": "Percolation-Lean.ipynb",
"parameters": {},
- "start_time": "2026-09-06T18:08:48.121318+00:00",
+ "start_time": "2026-09-25T08:57:22.488436+00:00",
"version": "2.7.0"
}
},