diff --git a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-15c-Lean-Grothendieck-Companion.ipynb b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-15c-Lean-Grothendieck-Companion.ipynb index eb0b74f9ac..a48fe518a6 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-15c-Lean-Grothendieck-Companion.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-15c-Lean-Grothendieck-Companion.ipynb @@ -5,10 +5,10 @@ "id": "33ac164f", "metadata": { "papermill": { - "duration": 0.003779, - "end_time": "2026-09-07T11:08:16.897594+00:00", + "duration": 0.004703, + "end_time": "2026-09-20T09:07:14.879189+00:00", "exception": false, - "start_time": "2026-09-07T11:08:16.893815+00:00", + "start_time": "2026-09-20T09:07:14.874486+00:00", "status": "completed" }, "tags": [] @@ -42,10 +42,10 @@ "id": "d413f7c8", "metadata": { "papermill": { - "duration": 0.005436, - "end_time": "2026-09-07T11:08:16.905966+00:00", + "duration": 0.002777, + "end_time": "2026-09-20T09:07:14.885004+00:00", "exception": false, - "start_time": "2026-09-07T11:08:16.900530+00:00", + "start_time": "2026-09-20T09:07:14.882227+00:00", "status": "completed" }, "tags": [] @@ -67,16 +67,16 @@ "id": "0a19158f", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:51:50.931201Z", - "iopub.status.busy": "2026-09-12T21:51:50.931043Z", - "iopub.status.idle": "2026-09-12T21:52:04.771670Z", - "shell.execute_reply": "2026-09-12T21:52:04.770759Z" + "iopub.execute_input": "2026-09-20T09:07:14.892015Z", + "iopub.status.busy": "2026-09-20T09:07:14.891850Z", + "iopub.status.idle": "2026-09-20T09:10:44.195902Z", + "shell.execute_reply": "2026-09-20T09:10:44.194867Z" }, "papermill": { - "duration": 95.867064, - "end_time": "2026-09-07T11:09:52.776947+00:00", + "duration": 209.311378, + "end_time": "2026-09-20T09:10:44.199430+00:00", "exception": false, - "start_time": "2026-09-07T11:08:16.909883+00:00", + "start_time": "2026-09-20T09:07:14.888052+00:00", "status": "completed" }, "tags": [] @@ -95,24 +95,11 @@ " \n", "
\n", "
import Grothendieck
\n", - "
import Grothendieck.Stalks
\n", - "
import Grothendieck.StalkPoints
\n", - "
import Grothendieck.StalkSeparated
\n", - "
import Grothendieck.StalkGluing
\n", - "
\n", - "
-- Le cluster « tiges » (Parties 72-75) n'est pas entierement re-exporte par
\n", - "
-- l'agregateur racine : `Grothendieck.lean` importe `StalkGluing` (qui importe
\n", - "
-- `StalkSeparated`), mais AUCUN module du lake n'importe `Stalks` ni
\n", - "
-- `StalkPoints` -- ces deux-la ne sont atteignables depuis aucun autre module.
\n", - "
-- L'annexe finale cite leurs declarations : les quatre modules sont donc
\n", - "
-- declares ici, au seul endroit ou Lean 4 accepte un `import` (debut de
\n", - "
-- fichier), plutot qu'herites d'un import transitif non documente.
\n", - "
\n", "
--% env 0
\n", "
\n", "
\n", " Raw input\n", - " {\"cmd\": \"import Grothendieck\\nimport Grothendieck.Stalks\\nimport Grothendieck.StalkPoints\\nimport Grothendieck.StalkSeparated\\nimport Grothendieck.StalkGluing\\n\\n-- Le cluster \\u00ab tiges \\u00bb (Parties 72-75) n'est pas entierement re-exporte par\\n-- l'agregateur racine : `Grothendieck.lean` importe `StalkGluing` (qui importe\\n-- `StalkSeparated`), mais AUCUN module du lake n'importe `Stalks` ni\\n-- `StalkPoints` -- ces deux-la ne sont atteignables depuis aucun autre module.\\n-- L'annexe finale cite leurs declarations : les quatre modules sont donc\\n-- declares ici, au seul endroit ou Lean 4 accepte un `import` (debut de\\n-- fichier), plutot qu'herites d'un import transitif non documente.\\n\"}\n", + " {\"cmd\": \"import Grothendieck\"}\n", "
\n", "
\n", " Raw output\n", @@ -122,23 +109,10 @@ ], "text/plain": [ "import Grothendieck\n", - "import Grothendieck.Stalks\n", - "import Grothendieck.StalkPoints\n", - "import Grothendieck.StalkSeparated\n", - "import Grothendieck.StalkGluing\n", - "\n", - "-- Le cluster « tiges » (Parties 72-75) n'est pas entierement re-exporte par\n", - "-- l'agregateur racine : `Grothendieck.lean` importe `StalkGluing` (qui importe\n", - "-- `StalkSeparated`), mais AUCUN module du lake n'importe `Stalks` ni\n", - "-- `StalkPoints` -- ces deux-la ne sont atteignables depuis aucun autre module.\n", - "-- L'annexe finale cite leurs declarations : les quatre modules sont donc\n", - "-- declares ici, au seul endroit ou Lean 4 accepte un `import` (debut de\n", - "-- fichier), plutot qu'herites d'un import transitif non documente.\n", - "\n", "--% env 0\n", "\n", "Raw input:\n", - "{\"cmd\": \"import Grothendieck\\nimport Grothendieck.Stalks\\nimport Grothendieck.StalkPoints\\nimport Grothendieck.StalkSeparated\\nimport Grothendieck.StalkGluing\\n\\n-- Le cluster \\u00ab tiges \\u00bb (Parties 72-75) n'est pas entierement re-exporte par\\n-- l'agregateur racine : `Grothendieck.lean` importe `StalkGluing` (qui importe\\n-- `StalkSeparated`), mais AUCUN module du lake n'importe `Stalks` ni\\n-- `StalkPoints` -- ces deux-la ne sont atteignables depuis aucun autre module.\\n-- L'annexe finale cite leurs declarations : les quatre modules sont donc\\n-- declares ici, au seul endroit ou Lean 4 accepte un `import` (debut de\\n-- fichier), plutot qu'herites d'un import transitif non documente.\\n\"}\n", + "{\"cmd\": \"import Grothendieck\"}\n", "Raw output:\n", "{\"env\": 0}" ] @@ -148,19 +122,7 @@ } ], "source": [ - "import Grothendieck\n", - "import Grothendieck.Stalks\n", - "import Grothendieck.StalkPoints\n", - "import Grothendieck.StalkSeparated\n", - "import Grothendieck.StalkGluing\n", - "\n", - "-- Le cluster « tiges » (Parties 72-75) n'est pas entierement re-exporte par\n", - "-- l'agregateur racine : `Grothendieck.lean` importe `StalkGluing` (qui importe\n", - "-- `StalkSeparated`), mais AUCUN module du lake n'importe `Stalks` ni\n", - "-- `StalkPoints` -- ces deux-la ne sont atteignables depuis aucun autre module.\n", - "-- L'annexe finale cite leurs declarations : les quatre modules sont donc\n", - "-- declares ici, au seul endroit ou Lean 4 accepte un `import` (debut de\n", - "-- fichier), plutot qu'herites d'un import transitif non documente.\n" + "import Grothendieck" ] }, { @@ -168,10 +130,10 @@ "id": "454ac98b", "metadata": { "papermill": { - "duration": 0.002151, - "end_time": "2026-09-07T11:09:52.781467+00:00", + "duration": 0.003095, + "end_time": "2026-09-20T09:10:44.206057+00:00", "exception": false, - "start_time": "2026-09-07T11:09:52.779316+00:00", + "start_time": "2026-09-20T09:10:44.202962+00:00", "status": "completed" }, "tags": [] @@ -206,16 +168,16 @@ "id": "b6063d3b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:04.774713Z", - "iopub.status.busy": "2026-09-12T21:52:04.774585Z", - "iopub.status.idle": "2026-09-12T21:52:04.985983Z", - "shell.execute_reply": "2026-09-12T21:52:04.984978Z" + "iopub.execute_input": "2026-09-20T09:10:44.213812Z", + "iopub.status.busy": "2026-09-20T09:10:44.213640Z", + "iopub.status.idle": "2026-09-20T09:10:44.492062Z", + "shell.execute_reply": "2026-09-20T09:10:44.490786Z" }, "papermill": { - "duration": 0.211516, - "end_time": "2026-09-07T11:09:52.995281+00:00", + "duration": 0.283222, + "end_time": "2026-09-20T09:10:44.492925+00:00", "exception": false, - "start_time": "2026-09-07T11:09:52.783765+00:00", + "start_time": "2026-09-20T09:10:44.209703+00:00", "status": "completed" }, "tags": [] @@ -234,46 +196,46 @@ " \n", "
\n", "
-- Adjunction : une adjonction distribue sur les limites côté droit et les colimites côté gauche
\n", - "
Grothendieck.Adjunction.leftAdjoint_preserves_colimits.{v₁, v₂, u₁, u₂, u_1, u_2} {C : Type u₁}\n", - " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D]\n", - " {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C} (h : L ⊣ R) :\n", - " CategoryTheory.Limits.PreservesColimitsOfSize.{u_1, u_2, v₁, v₂, u₁, u₂} L
\n", - "
Grothendieck.Adjunction.rightAdjoint_preserves_limits.{v₁, v₂, u₁, u₂, u_1, u_2} {C : Type u₁}\n", - " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D]\n", - " {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C} (h : L ⊣ R) :\n", - " CategoryTheory.Limits.PreservesLimitsOfSize.{u_1, u_2, v₂, v₁, u₂, u₁} R
\n", - "
Grothendieck.Adjunction.adj_toEquivalence.{v₁, v₂, u₁, u₂} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", - " {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C}\n", - " (h : L ⊣ R) [∀ (X : C), CategoryTheory.IsIso (h.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (h.counit.app Y)] :\n", + "
Grothendieck.Adjunction.leftAdjoint_preserves_colimits.{v₁, v₂, u₁, u₂, u_1, u_2} {C : Type u₁}\n", + " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D]\n", + " {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C} (h : L ⊣ R) :\n", + " CategoryTheory.Limits.PreservesColimitsOfSize.{u_1, u_2, v₁, v₂, u₁, u₂} L
\n", + "
Grothendieck.Adjunction.rightAdjoint_preserves_limits.{v₁, v₂, u₁, u₂, u_1, u_2} {C : Type u₁}\n", + " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D]\n", + " {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C} (h : L ⊣ R) :\n", + " CategoryTheory.Limits.PreservesLimitsOfSize.{u_1, u_2, v₂, v₁, u₂, u₁} R
\n", + "
Grothendieck.Adjunction.adj_toEquivalence.{v₁, v₂, u₁, u₂} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", + " {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C}\n", + " (h : L ⊣ R) [∀ (X : C), CategoryTheory.IsIso (h.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (h.counit.app Y)] :\n", " C ≌ D
\n", "
-- YonedaLemma : le plongement de Yoneda est plein
\n", - "
Grothendieck.yoneda_equiv_apply.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C}\n", - " {F : CategoryTheory.Functor Cᵒᵖ (Type u_2)} (η : CategoryTheory.yoneda.obj X ⟶ F) :\n", - " CategoryTheory.yonedaEquiv η =\n", - " (CategoryTheory.ConcreteCategory.hom (η.app (Opposite.op X))) (CategoryTheory.CategoryStruct.id X)
\n", - "
Grothendieck.yoneda_full.{u_1, u_2} (C : Type u_1) [CategoryTheory.Category.{u_2, u_1} C] : CategoryTheory.yoneda.Full
\n", - "
Grothendieck.representableByYoneda.{u_1, u_2} (C : Type u_1) [CategoryTheory.Category.{u_2, u_1} C] (Y : C) :\n", - " (CategoryTheory.yoneda.obj Y).RepresentableBy Y
\n", + "
Grothendieck.yoneda_equiv_apply.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C}\n", + " {F : CategoryTheory.Functor Cᵒᵖ (Type u_2)} (η : CategoryTheory.yoneda.obj X ⟶ F) :\n", + " CategoryTheory.yonedaEquiv η =\n", + " (CategoryTheory.ConcreteCategory.hom (η.app (Opposite.op X))) (CategoryTheory.CategoryStruct.id X)
\n", + "
Grothendieck.yoneda_full.{u_1, u_2} (C : Type u_1) [CategoryTheory.Category.{u_2, u_1} C] : CategoryTheory.yoneda.Full
\n", + "
Grothendieck.representableByYoneda.{u_1, u_2} (C : Type u_1) [CategoryTheory.Category.{u_2, u_1} C] (Y : C) :\n", + " (CategoryTheory.yoneda.obj Y).RepresentableBy Y
\n", "
-- Equivalences : les équivalences forment une structure symétrique et transitive
\n", - "
Grothendieck.Equivalences.equivalence_symm.{v₁, v₂, u₁, u₂} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", - " {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (e : C ≌ D) : D ≌ C
\n", - "
Grothendieck.Equivalences.equivalence_trans.{v₁, v₂, u₁, u₂, u_1, u_2} {C : Type u₁}\n", - " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {E : Type u_1}\n", - " [CategoryTheory.Category.{u_2, u_1} E] (e : C ≌ D) (f : D ≌ E) : C ≌ E
\n", + "
Grothendieck.Equivalences.equivalence_symm.{v₁, v₂, u₁, u₂} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", + " {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (e : C ≌ D) : D ≌ C
\n", + "
Grothendieck.Equivalences.equivalence_trans.{v₁, v₂, u₁, u₂, u_1, u_2} {C : Type u₁}\n", + " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {E : Type u_1}\n", + " [CategoryTheory.Category.{u_2, u_1} E] (e : C ≌ D) (f : D ≌ E) : C ≌ E
\n", "
-- Limits : objets limites (cônes universels)
\n", - "
Grothendieck.Limits.limit_object.{v, v', u, u'} {J : Type u} [CategoryTheory.Category.{v, u} J] {C : Type u'}\n", - " [CategoryTheory.Category.{v', u'} C] (F : CategoryTheory.Functor J C) [CategoryTheory.Limits.HasLimit F] : C
\n", - "
Grothendieck.Limits.colimit_object.{v, v', u, u'} {J : Type u} [CategoryTheory.Category.{v, u} J] {C : Type u'}\n", - " [CategoryTheory.Category.{v', u'} C] (F : CategoryTheory.Functor J C) [CategoryTheory.Limits.HasColimit F] : C
\n", - "
-- KanExtensions : l'extension de Kan gauche, adjoint à la précomposition
\n", - "
Grothendieck.KanExtensions.kan_extension_left.{v₁, v₂, v₃, u₁, u₂, u₃} {C : Type u₁}\n", - " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {H : Type u₃}\n", - " [CategoryTheory.Category.{v₃, u₃} H] (L : CategoryTheory.Functor C D) (F : CategoryTheory.Functor C H)\n", - " [L.HasLeftKanExtension F] : CategoryTheory.Functor D H
\n", - "
Grothendieck.KanExtensions.lan_functor.{v₁, v₂, v₃, u₁, u₂, u₃} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", - " {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {H : Type u₃} [CategoryTheory.Category.{v₃, u₃} H]\n", - " (L : CategoryTheory.Functor C D) [∀ (F : CategoryTheory.Functor C H), L.HasLeftKanExtension F] :\n", - " CategoryTheory.Functor (CategoryTheory.Functor C H) (CategoryTheory.Functor D H)
\n", + "
Grothendieck.Limits.limit_object.{v, v', u, u'} {J : Type u} [CategoryTheory.Category.{v, u} J] {C : Type u'}\n", + " [CategoryTheory.Category.{v', u'} C] (F : CategoryTheory.Functor J C) [CategoryTheory.Limits.HasLimit F] : C
\n", + "
Grothendieck.Limits.colimit_object.{v, v', u, u'} {J : Type u} [CategoryTheory.Category.{v, u} J] {C : Type u'}\n", + " [CategoryTheory.Category.{v', u'} C] (F : CategoryTheory.Functor J C) [CategoryTheory.Limits.HasColimit F] : C
\n", + "
-- KanExtensions : l'extension de Kan gauche, adjoint à la précomposition
\n", + "
Grothendieck.KanExtensions.kan_extension_left.{v₁, v₂, v₃, u₁, u₂, u₃} {C : Type u₁}\n", + " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {H : Type u₃}\n", + " [CategoryTheory.Category.{v₃, u₃} H] (L : CategoryTheory.Functor C D) (F : CategoryTheory.Functor C H)\n", + " [L.HasLeftKanExtension F] : CategoryTheory.Functor D H
\n", + "
Grothendieck.KanExtensions.lan_functor.{v₁, v₂, v₃, u₁, u₂, u₃} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", + " {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {H : Type u₃} [CategoryTheory.Category.{v₃, u₃} H]\n", + " (L : CategoryTheory.Functor C D) [∀ (F : CategoryTheory.Functor C H), L.HasLeftKanExtension F] :\n", + " CategoryTheory.Functor (CategoryTheory.Functor C H) (CategoryTheory.Functor D H)
\n", "
--% env 1
\n", "
\n", "
\n", @@ -499,10 +461,10 @@ "id": "76cff3a2", "metadata": { "papermill": { - "duration": 0.002866, - "end_time": "2026-09-07T11:09:53.001371+00:00", + "duration": 0.003588, + "end_time": "2026-09-20T09:10:44.500399+00:00", "exception": false, - "start_time": "2026-09-07T11:09:52.998505+00:00", + "start_time": "2026-09-20T09:10:44.496811+00:00", "status": "completed" }, "tags": [] @@ -535,16 +497,16 @@ "id": "751cd9f2", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:04.990466Z", - "iopub.status.busy": "2026-09-12T21:52:04.990255Z", - "iopub.status.idle": "2026-09-12T21:52:05.180348Z", - "shell.execute_reply": "2026-09-12T21:52:05.179179Z" + "iopub.execute_input": "2026-09-20T09:10:44.508608Z", + "iopub.status.busy": "2026-09-20T09:10:44.508440Z", + "iopub.status.idle": "2026-09-20T09:10:44.724878Z", + "shell.execute_reply": "2026-09-20T09:10:44.723932Z" }, "papermill": { - "duration": 0.197322, - "end_time": "2026-09-07T11:09:53.201286+00:00", + "duration": 0.221672, + "end_time": "2026-09-20T09:10:44.725482+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.003964+00:00", + "start_time": "2026-09-20T09:10:44.503810+00:00", "status": "completed" }, "tags": [] @@ -563,32 +525,32 @@ " \n", "
\n", "
-- Comma : les catégories comma avec leurs deux projections
\n", - "
Grothendieck.Comma.fstFunctor.{v₁, v₂, v₃, u₁, u₂, u₃} {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂}\n", - " [CategoryTheory.Category.{v₂, u₂} B] {T : Type u₃} [CategoryTheory.Category.{v₃, u₃} T]\n", - " {L : CategoryTheory.Functor A T} {R : CategoryTheory.Functor B T} :\n", - " CategoryTheory.Functor (CategoryTheory.Comma L R) A
\n", - "
Grothendieck.Comma.sndFunctor.{v₁, v₂, v₃, u₁, u₂, u₃} {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂}\n", - " [CategoryTheory.Category.{v₂, u₂} B] {T : Type u₃} [CategoryTheory.Category.{v₃, u₃} T]\n", - " {L : CategoryTheory.Functor A T} {R : CategoryTheory.Functor B T} :\n", - " CategoryTheory.Functor (CategoryTheory.Comma L R) B
\n", - "
Grothendieck.Comma.comma_category_field.{v₁, v₂, v₃, u₁, u₂, u₃} {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A]\n", - " {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {T : Type u₃} [CategoryTheory.Category.{v₃, u₃} T]\n", - " {L : CategoryTheory.Functor A T} {R : CategoryTheory.Functor B T} :\n", - " CategoryTheory.Category.{max v₁ v₂, max (max u₂ u₁) v₃} (CategoryTheory.Comma L R)
\n", + "
Grothendieck.Comma.fstFunctor.{v₁, v₂, v₃, u₁, u₂, u₃} {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂}\n", + " [CategoryTheory.Category.{v₂, u₂} B] {T : Type u₃} [CategoryTheory.Category.{v₃, u₃} T]\n", + " {L : CategoryTheory.Functor A T} {R : CategoryTheory.Functor B T} :\n", + " CategoryTheory.Functor (CategoryTheory.Comma L R) A
\n", + "
Grothendieck.Comma.sndFunctor.{v₁, v₂, v₃, u₁, u₂, u₃} {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂}\n", + " [CategoryTheory.Category.{v₂, u₂} B] {T : Type u₃} [CategoryTheory.Category.{v₃, u₃} T]\n", + " {L : CategoryTheory.Functor A T} {R : CategoryTheory.Functor B T} :\n", + " CategoryTheory.Functor (CategoryTheory.Comma L R) B
\n", + "
Grothendieck.Comma.comma_category_field.{v₁, v₂, v₃, u₁, u₂, u₃} {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A]\n", + " {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {T : Type u₃} [CategoryTheory.Category.{v₃, u₃} T]\n", + " {L : CategoryTheory.Functor A T} {R : CategoryTheory.Functor B T} :\n", + " CategoryTheory.Category.{max v₁ v₂, max (max u₂ u₁) v₃} (CategoryTheory.Comma L R)
\n", "
-- Monads : une adjonction engendre une monade et une catégorie de Kleisli
\n", - "
Grothendieck.Monads.toMonad_underlying.{v₁, u₁} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₁}\n", - " [CategoryTheory.Category.{v₁, u₁} D] {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C} (h : L ⊣ R) :\n", - " CategoryTheory.Functor C C
\n", - "
Grothendieck.Monads.kleisli_type.{v₁, u₁} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", - " (T : CategoryTheory.Monad C) : Type u₁
\n", + "
Grothendieck.Monads.toMonad_underlying.{v₁, u₁} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₁}\n", + " [CategoryTheory.Category.{v₁, u₁} D] {L : CategoryTheory.Functor C D} {R : CategoryTheory.Functor D C} (h : L ⊣ R) :\n", + " CategoryTheory.Functor C C
\n", + "
Grothendieck.Monads.kleisli_type.{v₁, u₁} {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C]\n", + " (T : CategoryTheory.Monad C) : Type u₁
\n", "
-- MonoidalCategories : la cohérence monoïdale : pentagone et tressage
\n", - "
Grothendieck.MonoidalCategories.tensor_product.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " [CategoryTheory.MonoidalCategory C] (X Y : C) : C
\n", - "
Grothendieck.MonoidalCategories.braiding_iso.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " [CategoryTheory.MonoidalCategory C] [CategoryTheory.BraidedCategory C] (X Y : C) :\n", - " CategoryTheory.MonoidalCategoryStruct.tensorObj X Y ≅ CategoryTheory.MonoidalCategoryStruct.tensorObj Y X
\n", - "
Grothendieck.MonoidalCategories.pentagon_field.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " [CategoryTheory.MonoidalCategoryStruct C] (Y₁ Y₂ Y₃ Y₄ : C) : Prop
\n", + "
Grothendieck.MonoidalCategories.tensor_product.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " [CategoryTheory.MonoidalCategory C] (X Y : C) : C
\n", + "
Grothendieck.MonoidalCategories.braiding_iso.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " [CategoryTheory.MonoidalCategory C] [CategoryTheory.BraidedCategory C] (X Y : C) :\n", + " CategoryTheory.MonoidalCategoryStruct.tensorObj X Y ≅ CategoryTheory.MonoidalCategoryStruct.tensorObj Y X
\n", + "
Grothendieck.MonoidalCategories.pentagon_field.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " [CategoryTheory.MonoidalCategoryStruct C] (Y₁ Y₂ Y₃ Y₄ : C) : Prop
\n", "
--% env 2
\n", "
\n", "
\n", @@ -750,10 +712,10 @@ "id": "2b91b69d", "metadata": { "papermill": { - "duration": 0.003088, - "end_time": "2026-09-07T11:09:53.207565+00:00", + "duration": 0.004505, + "end_time": "2026-09-20T09:10:44.733946+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.204477+00:00", + "start_time": "2026-09-20T09:10:44.729441+00:00", "status": "completed" }, "tags": [] @@ -783,16 +745,16 @@ "id": "22f7b8b2", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:05.183973Z", - "iopub.status.busy": "2026-09-12T21:52:05.183808Z", - "iopub.status.idle": "2026-09-12T21:52:05.365137Z", - "shell.execute_reply": "2026-09-12T21:52:05.363931Z" + "iopub.execute_input": "2026-09-20T09:10:44.742923Z", + "iopub.status.busy": "2026-09-20T09:10:44.742751Z", + "iopub.status.idle": "2026-09-20T09:10:44.973544Z", + "shell.execute_reply": "2026-09-20T09:10:44.972012Z" }, "papermill": { - "duration": 0.209339, - "end_time": "2026-09-07T11:09:53.420007+00:00", + "duration": 0.237656, + "end_time": "2026-09-20T09:10:44.975376+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.210668+00:00", + "start_time": "2026-09-20T09:10:44.737720+00:00", "status": "completed" }, "tags": [] @@ -810,28 +772,28 @@ " \n", " \n", "
\n", - "
-- SieveGenerate : la génération d'un crible est monotone
\n", - "
Grothendieck.generate_monotone.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C}\n", - " {R₁ R₂ : CategoryTheory.Presieve X} (h : R₁ ≤ R₂) :\n", - " CategoryTheory.Sieve.generate R₁ ≤ CategoryTheory.Sieve.generate R₂
\n", + "
-- SieveGenerate : la génération d'un crible est monotone
\n", + "
Grothendieck.generate_monotone.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C}\n", + " {R₁ R₂ : CategoryTheory.Presieve X} (h : R₁ ≤ R₂) :\n", + " CategoryTheory.Sieve.generate R₁ ≤ CategoryTheory.Sieve.generate R₂
\n", "
-- SieveOps : la topologie triviale est la plus petite
\n", - "
Grothendieck.trivial_le_any.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) : CategoryTheory.GrothendieckTopology.trivial C ≤ J
\n", - "
-- SieveLattice : le pullback de cribles est une structure d'action
\n", - "
Grothendieck.pullback_pullback.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y Z : C}\n", - " (S : CategoryTheory.Sieve X) (f : Y ⟶ X) (g : Z ⟶ Y) :\n", - " CategoryTheory.Sieve.pullback g (CategoryTheory.Sieve.pullback f S) =\n", - " CategoryTheory.Sieve.pullback (CategoryTheory.CategoryStruct.comp g f) S
\n", - "
-- TopologyLattice : l'ordre des topologies est porté par les recouvrements
\n", - "
Grothendieck.TopologyLattice.le_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", - " {J₁ J₂ : CategoryTheory.GrothendieckTopology C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " J₁ ≤ J₂ → J₁.Covers S f → J₂.Covers S f
\n", + "
Grothendieck.trivial_le_any.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) : CategoryTheory.GrothendieckTopology.trivial C ≤ J
\n", + "
-- SieveLattice : le pullback de cribles est une structure d'action
\n", + "
Grothendieck.pullback_pullback.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y Z : C}\n", + " (S : CategoryTheory.Sieve X) (f : Y ⟶ X) (g : Z ⟶ Y) :\n", + " CategoryTheory.Sieve.pullback g (CategoryTheory.Sieve.pullback f S) =\n", + " CategoryTheory.Sieve.pullback (CategoryTheory.CategoryStruct.comp g f) S
\n", + "
-- TopologyLattice : l'ordre des topologies est porté par les recouvrements
\n", + "
Grothendieck.TopologyLattice.le_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", + " {J₁ J₂ : CategoryTheory.GrothendieckTopology C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " J₁ ≤ J₂ → J₁.Covers S f → J₂.Covers S f
\n", "
-- DenseTopology : dense est strictement entre triviale et discrète
\n", - "
Grothendieck.DenseTopology.dense_le_discrete.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] :\n", - " CategoryTheory.GrothendieckTopology.dense ≤ CategoryTheory.GrothendieckTopology.discrete C
\n", + "
Grothendieck.DenseTopology.dense_le_discrete.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] :\n", + " CategoryTheory.GrothendieckTopology.dense ≤ CategoryTheory.GrothendieckTopology.discrete C
\n", "
-- CoverageGen : une coverage engendre une topologie de Grothendieck
\n", - "
Grothendieck.coverageToTopology.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " (K : CategoryTheory.Coverage C) : CategoryTheory.GrothendieckTopology C
\n", + "
Grothendieck.coverageToTopology.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " (K : CategoryTheory.Coverage C) : CategoryTheory.GrothendieckTopology C
\n", "
--% env 3
\n", "
\n", "
\n", @@ -967,10 +929,10 @@ "id": "65637b09", "metadata": { "papermill": { - "duration": 0.003224, - "end_time": "2026-09-07T11:09:53.426820+00:00", + "duration": 0.00446, + "end_time": "2026-09-20T09:10:44.984971+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.423596+00:00", + "start_time": "2026-09-20T09:10:44.980511+00:00", "status": "completed" }, "tags": [] @@ -1005,16 +967,16 @@ "id": "a7b44d56", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:05.368447Z", - "iopub.status.busy": "2026-09-12T21:52:05.368280Z", - "iopub.status.idle": "2026-09-12T21:52:05.588498Z", - "shell.execute_reply": "2026-09-12T21:52:05.587514Z" + "iopub.execute_input": "2026-09-20T09:10:44.994332Z", + "iopub.status.busy": "2026-09-20T09:10:44.994151Z", + "iopub.status.idle": "2026-09-20T09:10:45.231478Z", + "shell.execute_reply": "2026-09-20T09:10:45.230434Z" }, "papermill": { - "duration": 0.219907, - "end_time": "2026-09-07T11:09:53.650050+00:00", + "duration": 0.243083, + "end_time": "2026-09-20T09:10:45.232148+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.430143+00:00", + "start_time": "2026-09-20T09:10:44.989065+00:00", "status": "completed" }, "tags": [] @@ -1033,79 +995,79 @@ " \n", "
\n", "
-- CoversArrow : forme flèche : recouvrir `f` équivaut à recouvrir `id`
\n", - "
Grothendieck.CoversArrow.covers_iff_covers_id.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", - " (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " J.Covers S f ↔ J.Covers (CategoryTheory.Sieve.pullback f S) (CategoryTheory.CategoryStruct.id Y)
\n", + "
Grothendieck.CoversArrow.covers_iff_covers_id.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", + " (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " J.Covers S f ↔ J.Covers (CategoryTheory.Sieve.pullback f S) (CategoryTheory.CategoryStruct.id Y)
\n", "
-- CoversAtomicArrow : la topologie atomique en forme flèche
\n", - "
Grothendieck.CoversAtomicArrow.atomic_covering.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " (hro : CategoryTheory.GrothendieckTopology.RightOreCondition C) {X : C} (S : CategoryTheory.Sieve X) :\n", - " S ∈ (CategoryTheory.GrothendieckTopology.atomic ⋯) X ↔ ∃ Y f, S.arrows f
\n", - "
Grothendieck.CoversAtomicArrow.covers_iff_atomic.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " (hro : CategoryTheory.GrothendieckTopology.RightOreCondition C) {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " (CategoryTheory.GrothendieckTopology.atomic ⋯).Covers S f ↔ ∃ Z g, S.arrows (CategoryTheory.CategoryStruct.comp g f)
\n", - "
-- CoversBind : l'axiome de liaison des topologies en forme flèche
\n", - "
Grothendieck.CoversBind.covers_bind.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", - " (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve X) (f : Y ⟶ X) (hS : J.Covers S f)\n", - " (T : ⦃Z : C⦄ → ⦃g : Z ⟶ X⦄ → S.arrows g → CategoryTheory.Sieve Z)\n", - " (hT : ∀ ⦃Z : C⦄ ⦃g : Z ⟶ X⦄ (hg : S.arrows g), J.Covers (T hg) (CategoryTheory.CategoryStruct.id Z)) :\n", - " J.Covers (CategoryTheory.Sieve.bind S.arrows T) f
\n", + "
Grothendieck.CoversAtomicArrow.atomic_covering.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " (hro : CategoryTheory.GrothendieckTopology.RightOreCondition C) {X : C} (S : CategoryTheory.Sieve X) :\n", + " S ∈ (CategoryTheory.GrothendieckTopology.atomic ⋯) X ↔ ∃ Y f, S.arrows f
\n", + "
Grothendieck.CoversAtomicArrow.covers_iff_atomic.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " (hro : CategoryTheory.GrothendieckTopology.RightOreCondition C) {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " (CategoryTheory.GrothendieckTopology.atomic ⋯).Covers S f ↔ ∃ Z g, S.arrows (CategoryTheory.CategoryStruct.comp g f)
\n", + "
-- CoversBind : l'axiome de liaison des topologies en forme flèche
\n", + "
Grothendieck.CoversBind.covers_bind.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", + " (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve X) (f : Y ⟶ X) (hS : J.Covers S f)\n", + " (T : ⦃Z : C⦄ → ⦃g : Z ⟶ X⦄ → S.arrows g → CategoryTheory.Sieve Z)\n", + " (hT : ∀ ⦃Z : C⦄ ⦃g : Z ⟶ X⦄ (hg : S.arrows g), J.Covers (T hg) (CategoryTheory.CategoryStruct.id Z)) :\n", + " J.Covers (CategoryTheory.Sieve.bind S.arrows T) f
\n", "
-- CoversLattice : structure de treillis sur les recouvrements
\n", - "
Grothendieck.CoversLattice.sInf_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " {s : Set (CategoryTheory.GrothendieckTopology C)} {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " (sInf s).Covers S f ↔ ∀ J ∈ s, J.Covers S f
\n", + "
Grothendieck.CoversLattice.sInf_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " {s : Set (CategoryTheory.GrothendieckTopology C)} {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " (sInf s).Covers S f ↔ ∀ J ∈ s, J.Covers S f
\n", "
-- CoversOrder : le recouvrement maximal est top
\n", - "
Grothendieck.CoversOrder.covers_top.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", - " (J : CategoryTheory.GrothendieckTopology C) (f : Y ⟶ X) : J.Covers ⊤ f
\n", + "
Grothendieck.CoversOrder.covers_top.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", + " (J : CategoryTheory.GrothendieckTopology C) (f : Y ⟶ X) : J.Covers ⊤ f
\n", "
-- CoversPullback : stabilité par pullback des recouvrements
\n", - "
Grothendieck.CoversPullback.cover_pullback_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " {X Y : C} (J : CategoryTheory.GrothendieckTopology C) (S : J.Cover X) (f : Y ⟶ X) :\n", - " J.Covers (↑(S.pullback f)) (CategoryTheory.CategoryStruct.id Y)
\n", + "
Grothendieck.CoversPullback.cover_pullback_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " {X Y : C} (J : CategoryTheory.GrothendieckTopology C) (S : J.Cover X) (f : Y ⟶ X) :\n", + " J.Covers (↑(S.pullback f)) (CategoryTheory.CategoryStruct.id Y)
\n", "
-- CoversPushforward : image directe des recouvrements
\n", - "
Grothendieck.CoversPushforward.pushforward_pullback_fixed.{u_1, u_2} {C : Type u_1}\n", - " [CategoryTheory.Category.{u_2, u_1} C] {X Y : C} {f : Y ⟶ X} [CategoryTheory.Mono f] (S : CategoryTheory.Sieve Y) :\n", - " CategoryTheory.Sieve.pullback f (CategoryTheory.Sieve.pushforward f S) = S
\n", - "
Grothendieck.CoversPushforward.pullback_pushforward_fixed.{u_1, u_2} {C : Type u_1}\n", - " [CategoryTheory.Category.{u_2, u_1} C] {X Y : C} {f : Y ⟶ X} [CategoryTheory.IsSplitEpi f]\n", - " (R : CategoryTheory.Sieve X) : CategoryTheory.Sieve.pushforward f (CategoryTheory.Sieve.pullback f R) = R
\n", + "
Grothendieck.CoversPushforward.pushforward_pullback_fixed.{u_1, u_2} {C : Type u_1}\n", + " [CategoryTheory.Category.{u_2, u_1} C] {X Y : C} {f : Y ⟶ X} [CategoryTheory.Mono f] (S : CategoryTheory.Sieve Y) :\n", + " CategoryTheory.Sieve.pullback f (CategoryTheory.Sieve.pushforward f S) = S
\n", + "
Grothendieck.CoversPushforward.pullback_pushforward_fixed.{u_1, u_2} {C : Type u_1}\n", + " [CategoryTheory.Category.{u_2, u_1} C] {X Y : C} {f : Y ⟶ X} [CategoryTheory.IsSplitEpi f]\n", + " (R : CategoryTheory.Sieve X) : CategoryTheory.Sieve.pushforward f (CategoryTheory.Sieve.pullback f R) = R
\n", "
-- CoversTopologies : recouvrements de la topologie dense
\n", - "
Grothendieck.CoversTopologies.dense_covers_iff.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " CategoryTheory.GrothendieckTopology.dense.Covers S f ↔\n", + "
Grothendieck.CoversTopologies.dense_covers_iff.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " CategoryTheory.GrothendieckTopology.dense.Covers S f ↔\n", " ∀ {Z : C} (g : Z ⟶ Y),\n", - " ∃ W h, S.arrows (CategoryTheory.CategoryStruct.comp h (CategoryTheory.CategoryStruct.comp g f))
\n", + " ∃ W h, S.arrows (CategoryTheory.CategoryStruct.comp h (CategoryTheory.CategoryStruct.comp g f))
\n", "
-- CoversZariskiArrow : le site de Zariski en forme flèche
\n", - "
Grothendieck.CoversZariskiArrow.covers_iff_zariski.{u} {X Y : AlgebraicGeometry.Scheme} (S : CategoryTheory.Sieve X)\n", + "
Grothendieck.CoversZariskiArrow.covers_iff_zariski.{u} {X Y : AlgebraicGeometry.Scheme} (S : CategoryTheory.Sieve X)\n", " (f : Y ⟶ X) :\n", - " AlgebraicGeometry.Scheme.zariskiTopology.Covers S f ↔\n", - " ∃ R ∈ AlgebraicGeometry.Scheme.zariskiPretopology.coverings Y, R ≤ (CategoryTheory.Sieve.pullback f S).arrows
\n", + " AlgebraicGeometry.Scheme.zariskiTopology.Covers S f ↔\n", + " ∃ R ∈ AlgebraicGeometry.Scheme.zariskiPretopology.coverings Y, R ≤ (CategoryTheory.Sieve.pullback f S).arrows
\n", "
-- CoversCoverageArrow : la conversion coverage → topologie en forme flèche
\n", - "
Grothendieck.CoversCoverageArrow.covers_iff_toGrothendieck.{u, v} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (K : CategoryTheory.Coverage C) {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " K.toGrothendieck.Covers S f ↔ K.Saturate Y (CategoryTheory.Sieve.pullback f S)
\n", + "
Grothendieck.CoversCoverageArrow.covers_iff_toGrothendieck.{u, v} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (K : CategoryTheory.Coverage C) {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " K.toGrothendieck.Covers S f ↔ K.Saturate Y (CategoryTheory.Sieve.pullback f S)
\n", "
-- CoversPrecoverageArrow : la conversion pré-coverage → topologie
\n", - "
Grothendieck.CoversPrecoverageArrow.covers_iff_toGrothendieck.{u, v} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (J : CategoryTheory.Precoverage C) {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", - " J.toGrothendieck.Covers S f ↔ J.Saturate Y (CategoryTheory.Sieve.pullback f S)
\n", + "
Grothendieck.CoversPrecoverageArrow.covers_iff_toGrothendieck.{u, v} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (J : CategoryTheory.Precoverage C) {X Y : C} (S : CategoryTheory.Sieve X) (f : Y ⟶ X) :\n", + " J.toGrothendieck.Covers S f ↔ J.Saturate Y (CategoryTheory.Sieve.pullback f S)
\n", "
-- CoversPretopologyArrow : la conversion pré-topologie → topologie
\n", - "
Grothendieck.CoversPretopologyArrow.covers_toGrothendieck_of_of.{u, v} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " [CategoryTheory.Limits.HasPullbacks C] (K : CategoryTheory.Pretopology C) {X : C} {R : CategoryTheory.Presieve X}\n", - " (hR : R ∈ K.coverings X) :\n", - " K.toGrothendieck.Covers (CategoryTheory.Sieve.generate R) (CategoryTheory.CategoryStruct.id X)
\n", - "
-- PullbackCoversLaws : l'associativité du pullback de recouvrements
\n", - "
Grothendieck.PullbackCoversLaws.covers_pullback_assoc.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " {W X Y Z : C} (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve Z) (f : Y ⟶ Z) (g : X ⟶ Y)\n", + "
Grothendieck.CoversPretopologyArrow.covers_toGrothendieck_of_of.{u, v} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " [CategoryTheory.Limits.HasPullbacks C] (K : CategoryTheory.Pretopology C) {X : C} {R : CategoryTheory.Presieve X}\n", + " (hR : R ∈ K.coverings X) :\n", + " K.toGrothendieck.Covers (CategoryTheory.Sieve.generate R) (CategoryTheory.CategoryStruct.id X)
\n", + "
-- PullbackCoversLaws : l'associativité du pullback de recouvrements
\n", + "
Grothendieck.PullbackCoversLaws.covers_pullback_assoc.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " {W X Y Z : C} (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve Z) (f : Y ⟶ Z) (g : X ⟶ Y)\n", " (h : W ⟶ X) :\n", - " J.Covers (CategoryTheory.Sieve.pullback g (CategoryTheory.Sieve.pullback f S)) h ↔\n", - " J.Covers (CategoryTheory.Sieve.pullback (CategoryTheory.CategoryStruct.comp g f) S) h
\n", + " J.Covers (CategoryTheory.Sieve.pullback g (CategoryTheory.Sieve.pullback f S)) h ↔\n", + " J.Covers (CategoryTheory.Sieve.pullback (CategoryTheory.CategoryStruct.comp g f) S) h
\n", "
-- PullbackFunctor : le foncteur pullback et ses unités
\n", - "
Grothendieck.PullbackFunctor.pullback_triple.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " {X Y Z W : C} (J : CategoryTheory.GrothendieckTopology C) (S : J.Cover W) (f : X ⟶ Y) (g : Y ⟶ Z) (h : Z ⟶ W) :\n", - " ((S.pullback h).pullback g).pullback f =\n", - " S.pullback (CategoryTheory.CategoryStruct.comp f (CategoryTheory.CategoryStruct.comp g h))
\n", + "
Grothendieck.PullbackFunctor.pullback_triple.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " {X Y Z W : C} (J : CategoryTheory.GrothendieckTopology C) (S : J.Cover W) (f : X ⟶ Y) (g : Y ⟶ Z) (h : Z ⟶ W) :\n", + " ((S.pullback h).pullback g).pullback f =\n", + " S.pullback (CategoryTheory.CategoryStruct.comp f (CategoryTheory.CategoryStruct.comp g h))
\n", "
-- PullbackFunctorLaws : les lois du foncteur pullback
\n", - "
Grothendieck.PullbackFunctorLaws.covers_pullback_comp.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " {X Y Z : C} (J : CategoryTheory.GrothendieckTopology C) (f : X ⟶ Y) (g : Y ⟶ Z) (S : J.Cover Z) :\n", - " J.Covers (↑S) (CategoryTheory.CategoryStruct.comp f g) ↔ J.Covers (↑(S.pullback g)) f
\n", + "
Grothendieck.PullbackFunctorLaws.covers_pullback_comp.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " {X Y Z : C} (J : CategoryTheory.GrothendieckTopology C) (f : X ⟶ Y) (g : Y ⟶ Z) (S : J.Cover Z) :\n", + " J.Covers (↑S) (CategoryTheory.CategoryStruct.comp f g) ↔ J.Covers (↑(S.pullback g)) f
\n", "
--% env 4
\n", "
\n", "
\n", @@ -1434,10 +1396,10 @@ "id": "182b8f69", "metadata": { "papermill": { - "duration": 0.00365, - "end_time": "2026-09-07T11:09:53.657692+00:00", + "duration": 0.004743, + "end_time": "2026-09-20T09:10:45.241674+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.654042+00:00", + "start_time": "2026-09-20T09:10:45.236931+00:00", "status": "completed" }, "tags": [] @@ -1471,16 +1433,16 @@ "id": "1045f4c9", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:05.607043Z", - "iopub.status.busy": "2026-09-12T21:52:05.606833Z", - "iopub.status.idle": "2026-09-12T21:52:05.791350Z", - "shell.execute_reply": "2026-09-12T21:52:05.790241Z" + "iopub.execute_input": "2026-09-20T09:10:45.254329Z", + "iopub.status.busy": "2026-09-20T09:10:45.254159Z", + "iopub.status.idle": "2026-09-20T09:10:45.461475Z", + "shell.execute_reply": "2026-09-20T09:10:45.460491Z" }, "papermill": { - "duration": 0.202698, - "end_time": "2026-09-07T11:09:53.863925+00:00", + "duration": 0.214797, + "end_time": "2026-09-20T09:10:45.462286+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.661227+00:00", + "start_time": "2026-09-20T09:10:45.247489+00:00", "status": "completed" }, "tags": [] @@ -1499,38 +1461,38 @@ " \n", "
\n", "
-- SheafBasics : un faisceau est en particulier séparé
\n", - "
Grothendieck.sheaf_is_separated.{u_1, u_2, u_3} {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} {P : CategoryTheory.Functor Cᵒᵖ (Type u_2)}\n", - " (h : CategoryTheory.Presieve.IsSheaf J P) : CategoryTheory.Presieve.IsSeparated J P
\n", - "
Grothendieck.isSheaf_of_le.{u_1, u_2, u_3} {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C]\n", - " {J₁ J₂ : CategoryTheory.GrothendieckTopology C} (h : J₁ ≤ J₂) {P : CategoryTheory.Functor Cᵒᵖ (Type u_2)}\n", - " (hP : CategoryTheory.Presieve.IsSheaf J₂ P) : CategoryTheory.Presieve.IsSheaf J₁ P
\n", + "
Grothendieck.sheaf_is_separated.{u_1, u_2, u_3} {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} {P : CategoryTheory.Functor Cᵒᵖ (Type u_2)}\n", + " (h : CategoryTheory.Presieve.IsSheaf J P) : CategoryTheory.Presieve.IsSeparated J P
\n", + "
Grothendieck.isSheaf_of_le.{u_1, u_2, u_3} {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C]\n", + " {J₁ J₂ : CategoryTheory.GrothendieckTopology C} (h : J₁ ≤ J₂) {P : CategoryTheory.Functor Cᵒᵖ (Type u_2)}\n", + " (hP : CategoryTheory.Presieve.IsSheaf J₂ P) : CategoryTheory.Presieve.IsSheaf J₁ P
\n", "
-- SheafHom : le faisceau interne des homomorphismes
\n", - "
Grothendieck.SheafHom.sheafHom_isSheaf.{v, v', u, u'} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} {A : Type u'} [CategoryTheory.Category.{v', u'} A]\n", - " (F G : CategoryTheory.Sheaf J A) : CategoryTheory.Presheaf.IsSheaf J (CategoryTheory.sheafHom F G).obj
\n", + "
Grothendieck.SheafHom.sheafHom_isSheaf.{v, v', u, u'} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} {A : Type u'} [CategoryTheory.Category.{v', u'} A]\n", + " (F G : CategoryTheory.Sheaf J A) : CategoryTheory.Presheaf.IsSheaf J (CategoryTheory.sheafHom F G).obj
\n", "
-- Sheafification : la propriété universelle de la faisceautisation
\n", - "
Grothendieck.sheafification_universal.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) :\n", - " CategoryTheory.presheafToSheaf J (Type (max u v)) ⊣ CategoryTheory.sheafToPresheaf J (Type (max u v))
\n", + "
Grothendieck.sheafification_universal.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) :\n", + " CategoryTheory.presheafToSheaf J (Type (max u v)) ⊣ CategoryTheory.sheafToPresheaf J (Type (max u v))
\n", "
-- ConstantSheaf : un faisceau constant caractérisé par son adjonction
\n", - "
Grothendieck.ConstantSheaf.isConstant_iff_counit_iso.{v, v', u, u'} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) {D : Type u'} [CategoryTheory.Category.{v', u'} D]\n", - " [CategoryTheory.HasWeakSheafify J D] [(CategoryTheory.constantSheaf J D).Faithful]\n", - " [(CategoryTheory.constantSheaf J D).Full] (F : CategoryTheory.Sheaf J D) {T : C}\n", - " (hT : CategoryTheory.Limits.IsTerminal T) :\n", - " CategoryTheory.Sheaf.IsConstant J F ↔ CategoryTheory.IsIso ((CategoryTheory.constantSheafAdj J D hT).counit.app F)
\n", + "
Grothendieck.ConstantSheaf.isConstant_iff_counit_iso.{v, v', u, u'} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) {D : Type u'} [CategoryTheory.Category.{v', u'} D]\n", + " [CategoryTheory.HasWeakSheafify J D] [(CategoryTheory.constantSheaf J D).Faithful]\n", + " [(CategoryTheory.constantSheaf J D).Full] (F : CategoryTheory.Sheaf J D) {T : C}\n", + " (hT : CategoryTheory.Limits.IsTerminal T) :\n", + " CategoryTheory.Sheaf.IsConstant J F ↔ CategoryTheory.IsIso ((CategoryTheory.constantSheafAdj J D hT).counit.app F)
\n", "
-- LeftExact : la faisceautisation préserve les limites finies (exactitude à gauche)
\n", - "
Grothendieck.plus_preserves_finite_limits.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) :\n", - " CategoryTheory.Limits.PreservesFiniteLimits (J.plusFunctor (Type (max u v)))
\n", + "
Grothendieck.plus_preserves_finite_limits.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) :\n", + " CategoryTheory.Limits.PreservesFiniteLimits (J.plusFunctor (Type (max u v)))
\n", "
-- Subcanonical : sous-canonicalité : le plongement de Yoneda est un faisceau
\n", - "
Grothendieck.Subcanonical.subcanonical_of_yoneda_sheaf.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (J : CategoryTheory.GrothendieckTopology C)\n", - " (h : ∀ (X : C), CategoryTheory.Presieve.IsSheaf J (CategoryTheory.yoneda.obj X)) : J.Subcanonical
\n", + "
Grothendieck.Subcanonical.subcanonical_of_yoneda_sheaf.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (J : CategoryTheory.GrothendieckTopology C)\n", + " (h : ∀ (X : C), CategoryTheory.Presieve.IsSheaf J (CategoryTheory.yoneda.obj X)) : J.Subcanonical
\n", "
-- CanonicalProps : la topologie canonique est sous-canonique
\n", - "
Grothendieck.canonical_is_subcanonical.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] :\n", - " (CategoryTheory.Sheaf.canonicalTopology C).Subcanonical
\n", + "
Grothendieck.canonical_is_subcanonical.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] :\n", + " (CategoryTheory.Sheaf.canonicalTopology C).Subcanonical
\n", "
--% env 5
\n", "
\n", "
\n", @@ -1702,10 +1664,10 @@ "id": "997867fc", "metadata": { "papermill": { - "duration": 0.00385, - "end_time": "2026-09-07T11:09:53.871853+00:00", + "duration": 0.005112, + "end_time": "2026-09-20T09:10:45.472728+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.868003+00:00", + "start_time": "2026-09-20T09:10:45.467616+00:00", "status": "completed" }, "tags": [] @@ -1737,16 +1699,16 @@ "id": "69e7ba56", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:05.795637Z", - "iopub.status.busy": "2026-09-12T21:52:05.795473Z", - "iopub.status.idle": "2026-09-12T21:52:05.990507Z", - "shell.execute_reply": "2026-09-12T21:52:05.989666Z" + "iopub.execute_input": "2026-09-20T09:10:45.486086Z", + "iopub.status.busy": "2026-09-20T09:10:45.485852Z", + "iopub.status.idle": "2026-09-20T09:10:45.765224Z", + "shell.execute_reply": "2026-09-20T09:10:45.764066Z" }, "papermill": { - "duration": 0.195327, - "end_time": "2026-09-07T11:09:54.071296+00:00", + "duration": 0.287566, + "end_time": "2026-09-20T09:10:45.765909+00:00", "exception": false, - "start_time": "2026-09-07T11:09:53.875969+00:00", + "start_time": "2026-09-20T09:10:45.478343+00:00", "status": "completed" }, "tags": [] @@ -1764,40 +1726,40 @@ " \n", " \n", "
\n", - "
-- SitePoints : la fibre d'un point est une colimite
\n", - "
Grothendieck.is_colimit_presheaf_fiber.{v, u, w} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} (Φ : J.Point) (P : CategoryTheory.Functor Cᵒᵖ (Type (max u w))) :\n", - " CategoryTheory.Limits.IsColimit (Φ.presheafFiberCocone P)
\n", + "
-- SitePoints : la fibre d'un point est une colimite
\n", + "
Grothendieck.is_colimit_presheaf_fiber.{v, u, w} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} (Φ : J.Point) (P : CategoryTheory.Functor Cᵒᵖ (Type (max u w))) :\n", + " CategoryTheory.Limits.IsColimit (Φ.presheafFiberCocone P)
\n", "
-- DirectImage : le foncteur image directe
\n", - "
Grothendieck.DirectImage.pushforward_functor_field.{u} {X Y : AlgebraicGeometry.Scheme} (f : X ⟶ Y) :\n", - " CategoryTheory.Functor X.Modules Y.Modules
\n", - "
-- ExceptionalDirect : l'image directe exceptionnelle
\n", - "
Grothendieck.ExceptionalDirect.exceptionalDirectImage.{v₁, v₂, v₃, u₁, u₂, u₃} {C : Type u₁}\n", - " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {H : Type u₃}\n", - " [CategoryTheory.Category.{v₃, u₃} H] (f : CategoryTheory.Functor C D)\n", - " [∀ (F : CategoryTheory.Functor Cᵒᵖ H), f.op.HasLeftKanExtension F] :\n", - " CategoryTheory.Functor (CategoryTheory.Functor Cᵒᵖ H) (CategoryTheory.Functor Dᵒᵖ H)
\n", + "
Grothendieck.DirectImage.pushforward_functor_field.{u} {X Y : AlgebraicGeometry.Scheme} (f : X ⟶ Y) :\n", + " CategoryTheory.Functor X.Modules Y.Modules
\n", + "
-- ExceptionalDirect : l'image directe exceptionnelle
\n", + "
Grothendieck.ExceptionalDirect.exceptionalDirectImage.{v₁, v₂, v₃, u₁, u₂, u₃} {C : Type u₁}\n", + " [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {H : Type u₃}\n", + " [CategoryTheory.Category.{v₃, u₃} H] (f : CategoryTheory.Functor C D)\n", + " [∀ (F : CategoryTheory.Functor Cᵒᵖ H), f.op.HasLeftKanExtension F] :\n", + " CategoryTheory.Functor (CategoryTheory.Functor Cᵒᵖ H) (CategoryTheory.Functor Dᵒᵖ H)
\n", "
-- SheafCohomology.Basic : H⁰ est la section globale
\n", - "
Grothendieck.SheafCohomology.H0_equiv_global_sections.{w', w, v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} (F : CategoryTheory.Sheaf J AddCommGrpCat) {T : C}\n", - " (hT : CategoryTheory.Limits.IsTerminal T) [CategoryTheory.HasSheafify J AddCommGrpCat]\n", - " [CategoryTheory.HasExt (CategoryTheory.Sheaf J AddCommGrpCat)] : F.H 0 ≃+ ↑(F.obj.obj (Opposite.op T))
\n", - "
-- SheafCohomology.Cech : l'objet du complexe de Čech
\n", - "
Grothendieck.SheafCohomology.Cech.cechComplexObj.{w, v, v', u, u'} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {A : Type u'} [CategoryTheory.Category.{v', u'} A] [CategoryTheory.Limits.HasProducts A]\n", - " [CategoryTheory.Preadditive A] [CategoryTheory.Limits.HasFiniteProducts C] {ι : Type w} (U : ι → C)\n", - " (P : CategoryTheory.Functor Cᵒᵖ A) (n : ℕ) : A
\n", - "
-- SheafCohomology.MayerVietoris : l'exactitude de la suite de Mayer-Vietoris
\n", - "
Grothendieck.SheafCohomology.MayerVietoris.mv_sequence_exact.{w, v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} [CategoryTheory.HasWeakSheafify J (Type v)]\n", - " [CategoryTheory.HasSheafify J AddCommGrpCat] [CategoryTheory.HasExt (CategoryTheory.Sheaf J AddCommGrpCat)]\n", - " (S : J.MayerVietorisSquare) (F : CategoryTheory.Sheaf J AddCommGrpCat) (n₀ n₁ : ℕ) (h : n₀ + 1 = n₁) :\n", - " (S.sequence F n₀ n₁ h).Exact
\n", + "
Grothendieck.SheafCohomology.H0_equiv_global_sections.{w', w, v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} (F : CategoryTheory.Sheaf J AddCommGrpCat) {T : C}\n", + " (hT : CategoryTheory.Limits.IsTerminal T) [CategoryTheory.HasSheafify J AddCommGrpCat]\n", + " [CategoryTheory.HasExt (CategoryTheory.Sheaf J AddCommGrpCat)] : F.H 0 ≃+ ↑(F.obj.obj (Opposite.op T))
\n", + "
-- SheafCohomology.Cech : l'objet du complexe de Čech
\n", + "
Grothendieck.SheafCohomology.Cech.cechComplexObj.{w, v, v', u, u'} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {A : Type u'} [CategoryTheory.Category.{v', u'} A] [CategoryTheory.Limits.HasProducts A]\n", + " [CategoryTheory.Preadditive A] [CategoryTheory.Limits.HasFiniteProducts C] {ι : Type w} (U : ι → C)\n", + " (P : CategoryTheory.Functor Cᵒᵖ A) (n : ℕ) : A
\n", + "
-- SheafCohomology.MayerVietoris : l'exactitude de la suite de Mayer-Vietoris
\n", + "
Grothendieck.SheafCohomology.MayerVietoris.mv_sequence_exact.{w, v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} [CategoryTheory.HasWeakSheafify J (Type v)]\n", + " [CategoryTheory.HasSheafify J AddCommGrpCat] [CategoryTheory.HasExt (CategoryTheory.Sheaf J AddCommGrpCat)]\n", + " (S : J.MayerVietorisSquare) (F : CategoryTheory.Sheaf J AddCommGrpCat) (n₀ n₁ : ℕ) (h : n₀ + 1 = n₁) :\n", + " (S.sequence F n₀ n₁ h).Exact
\n", "
-- MayerVietorisSquare : le complexe court du carré de Mayer-Vietoris
\n", - "
Grothendieck.MayerVietorisSquare.mv_short_complex.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} [CategoryTheory.HasWeakSheafify J (Type v)]\n", - " [CategoryTheory.HasSheafify J AddCommGrpCat] (S : J.MayerVietorisSquare) :\n", - " CategoryTheory.ShortComplex (CategoryTheory.Sheaf J AddCommGrpCat)
\n", + "
Grothendieck.MayerVietorisSquare.mv_short_complex.{v, u} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} [CategoryTheory.HasWeakSheafify J (Type v)]\n", + " [CategoryTheory.HasSheafify J AddCommGrpCat] (S : J.MayerVietorisSquare) :\n", + " CategoryTheory.ShortComplex (CategoryTheory.Sheaf J AddCommGrpCat)
\n", "
--% env 6
\n", "
\n", "
\n", @@ -1958,10 +1920,10 @@ "id": "0d592cad", "metadata": { "papermill": { - "duration": 0.004628, - "end_time": "2026-09-07T11:09:54.080897+00:00", + "duration": 0.006549, + "end_time": "2026-09-20T09:10:45.780195+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.076269+00:00", + "start_time": "2026-09-20T09:10:45.773646+00:00", "status": "completed" }, "tags": [] @@ -1994,16 +1956,16 @@ "id": "aba6f95d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:05.995683Z", - "iopub.status.busy": "2026-09-12T21:52:05.995545Z", - "iopub.status.idle": "2026-09-12T21:52:06.179039Z", - "shell.execute_reply": "2026-09-12T21:52:06.178129Z" + "iopub.execute_input": "2026-09-20T09:10:45.796103Z", + "iopub.status.busy": "2026-09-20T09:10:45.795766Z", + "iopub.status.idle": "2026-09-20T09:10:46.030304Z", + "shell.execute_reply": "2026-09-20T09:10:46.029233Z" }, "papermill": { - "duration": 0.222076, - "end_time": "2026-09-07T11:09:54.307636+00:00", + "duration": 0.243643, + "end_time": "2026-09-20T09:10:46.030869+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.085560+00:00", + "start_time": "2026-09-20T09:10:45.787226+00:00", "status": "completed" }, "tags": [] @@ -2022,28 +1984,28 @@ " \n", "
\n", "
-- SchemesTour : les morphismes de schémas sont continus
\n", - "
Grothendieck.scheme_hom_continuous.{u_1} {X Y : AlgebraicGeometry.Scheme} (f : X ⟶ Y) : Continuous ⇑f
\n", + "
Grothendieck.scheme_hom_continuous.{u_1} {X Y : AlgebraicGeometry.Scheme} (f : X ⟶ Y) : Continuous ⇑f
\n", "
-- ZariskiSite : la topologie de Zariski est une topologie de Grothendieck
\n", - "
Grothendieck.zariski_topology_eq.{u_1} :\n", - " AlgebraicGeometry.Scheme.zariskiTopology = AlgebraicGeometry.Scheme.zariskiPretopology.toGrothendieck
\n", + "
Grothendieck.zariski_topology_eq.{u_1} :\n", + " AlgebraicGeometry.Scheme.zariskiTopology = AlgebraicGeometry.Scheme.zariskiPretopology.toGrothendieck
\n", "
-- Construction : la construction du préfaisceau de Grothendieck
\n", - "
Grothendieck.Construction.grothendieck_field.{v, v₂, u, u₂} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (F : CategoryTheory.Functor C CategoryTheory.Cat) : Type (max u₂ u)
\n", - "
Grothendieck.Construction.forget_family.{v, v₂, u, u₂} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (F : CategoryTheory.Functor C CategoryTheory.Cat) : CategoryTheory.Functor (CategoryTheory.Grothendieck F) C
\n", + "
Grothendieck.Construction.grothendieck_field.{v, v₂, u, u₂} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (F : CategoryTheory.Functor C CategoryTheory.Cat) : Type (max u₂ u)
\n", + "
Grothendieck.Construction.forget_family.{v, v₂, u, u₂} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (F : CategoryTheory.Functor C CategoryTheory.Cat) : CategoryTheory.Functor (CategoryTheory.Grothendieck F) C
\n", "
-- Conservative : une famille conservatrice de points
\n", - "
Grothendieck.Conservative.has_enough_points_field.{v, u, w} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) : Prop
\n", - "
Grothendieck.Conservative.W_iff_field.{v, v', u, u', w, u_1} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", - " {J : CategoryTheory.GrothendieckTopology C} (P : CategoryTheory.ObjectProperty J.Point) {A : Type u'}\n", - " [CategoryTheory.Category.{v', u'} A] [CategoryTheory.LocallySmall.{w, v, u} C]\n", - " [CategoryTheory.Limits.HasColimitsOfSize.{w, w, v', u'} A] {FC : A → A → Type u_1} {CC : A → Type w}\n", - " [(X Y : A) → FunLike (FC X Y) (CC X) (CC Y)] [CategoryTheory.ConcreteCategory A FC]\n", - " [(CategoryTheory.forget A).ReflectsIsomorphisms]\n", - " [CategoryTheory.Limits.PreservesFilteredColimitsOfSize.{w, w, v', w, u', w + 1} (CategoryTheory.forget A)]\n", - " [J.HasSheafCompose (CategoryTheory.forget A)] (hP : P.IsConservativeFamilyOfPoints)\n", - " [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.Limits.HasProducts A] {F G : CategoryTheory.Functor Cᵒᵖ A}\n", - " (f : F ⟶ G) : J.W f ↔ ∀ (Φ : P.FullSubcategory), CategoryTheory.IsIso (Φ.obj.presheafFiber.map f)
\n", + "
Grothendieck.Conservative.has_enough_points_field.{v, u, w} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) : Prop
\n", + "
Grothendieck.Conservative.W_iff_field.{v, v', u, u', w, u_1} {C : Type u} [CategoryTheory.Category.{v, u} C]\n", + " {J : CategoryTheory.GrothendieckTopology C} (P : CategoryTheory.ObjectProperty J.Point) {A : Type u'}\n", + " [CategoryTheory.Category.{v', u'} A] [CategoryTheory.LocallySmall.{w, v, u} C]\n", + " [CategoryTheory.Limits.HasColimitsOfSize.{w, w, v', u'} A] {FC : A → A → Type u_1} {CC : A → Type w}\n", + " [(X Y : A) → FunLike (FC X Y) (CC X) (CC Y)] [CategoryTheory.ConcreteCategory A FC]\n", + " [(CategoryTheory.forget A).ReflectsIsomorphisms]\n", + " [CategoryTheory.Limits.PreservesFilteredColimitsOfSize.{w, w, v', w, u', w + 1} (CategoryTheory.forget A)]\n", + " [J.HasSheafCompose (CategoryTheory.forget A)] (hP : P.IsConservativeFamilyOfPoints)\n", + " [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.Limits.HasProducts A] {F G : CategoryTheory.Functor Cᵒᵖ A}\n", + " (f : F ⟶ G) : J.W f ↔ ∀ (Φ : P.FullSubcategory), CategoryTheory.IsIso (Φ.obj.presheafFiber.map f)
\n", "
--% env 7
\n", "
\n", "
\n", @@ -2178,10 +2140,10 @@ "id": "8e6834d5", "metadata": { "papermill": { - "duration": 0.004656, - "end_time": "2026-09-07T11:09:54.317996+00:00", + "duration": 0.009513, + "end_time": "2026-09-20T09:10:46.047216+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.313340+00:00", + "start_time": "2026-09-20T09:10:46.037703+00:00", "status": "completed" }, "tags": [] @@ -2213,16 +2175,16 @@ "id": "d3d885e8", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:06.181790Z", - "iopub.status.busy": "2026-09-12T21:52:06.181665Z", - "iopub.status.idle": "2026-09-12T21:52:06.379819Z", - "shell.execute_reply": "2026-09-12T21:52:06.378983Z" + "iopub.execute_input": "2026-09-20T09:10:46.061248Z", + "iopub.status.busy": "2026-09-20T09:10:46.061058Z", + "iopub.status.idle": "2026-09-20T09:10:46.272238Z", + "shell.execute_reply": "2026-09-20T09:10:46.270376Z" }, "papermill": { - "duration": 0.185809, - "end_time": "2026-09-07T11:09:54.508495+00:00", + "duration": 0.219736, + "end_time": "2026-09-20T09:10:46.273776+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.322686+00:00", + "start_time": "2026-09-20T09:10:46.054040+00:00", "status": "completed" }, "tags": [] @@ -2241,22 +2203,22 @@ " \n", "
\n", "
-- Calibration : micro-preuves : triviale ≤ discrète, pullback de top
\n", - "
Grothendieck.trivial_le_discrete.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] :\n", - " CategoryTheory.GrothendieckTopology.trivial C ≤ CategoryTheory.GrothendieckTopology.discrete C
\n", - "
Grothendieck.pullback_top.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C} (f : Y ⟶ X) :\n", - " CategoryTheory.Sieve.pullback f ⊤ = ⊤
\n", + "
Grothendieck.trivial_le_discrete.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] :\n", + " CategoryTheory.GrothendieckTopology.trivial C ≤ CategoryTheory.GrothendieckTopology.discrete C
\n", + "
Grothendieck.pullback_top.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C} (f : Y ⟶ X) :\n", + " CategoryTheory.Sieve.pullback f ⊤ = ⊤
\n", "
-- CategoryAndSites : les axiomes de topologie (top couvre)
\n", - "
Grothendieck.top_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) (X : C) : ⊤ ∈ J.sieves X
\n", + "
Grothendieck.top_covers.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) (X : C) : ⊤ ∈ J.sieves X
\n", "
-- Cover : la couverture bundlée : `J.Cover X = { S : Sieve X // S ∈ J X }`
\n", - "
Grothendieck.Cover.cover_iff_coe_mem.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C}\n", - " (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve X) : S ∈ J X ↔ ∃ T, ↑T = S
\n", - "
Grothendieck.Cover.bind_mem_iff.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", - " (J : CategoryTheory.GrothendieckTopology C) {S : J.Cover X} (T : (I : S.Arrow) → J.Cover I.Y) (f : Y ⟶ X) :\n", - " (↑(S.bind T)).arrows f ↔\n", + "
Grothendieck.Cover.cover_iff_coe_mem.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C}\n", + " (J : CategoryTheory.GrothendieckTopology C) (S : CategoryTheory.Sieve X) : S ∈ J X ↔ ∃ T, ↑T = S
\n", + "
Grothendieck.Cover.bind_mem_iff.{u_1, u_2} {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X Y : C}\n", + " (J : CategoryTheory.GrothendieckTopology C) {S : J.Cover X} (T : (I : S.Arrow) → J.Cover I.Y) (f : Y ⟶ X) :\n", + " (↑(S.bind T)).arrows f ↔\n", " ∃ Z e1 e2,\n", " ∃ (hS : (↑S).arrows e2),\n", - " (↑(T { Y := Z, f := e2, hf := hS })).arrows e1 ∧ CategoryTheory.CategoryStruct.comp e1 e2 = f
\n", + " (↑(T { Y := Z, f := e2, hf := hS })).arrows e1 ∧ CategoryTheory.CategoryStruct.comp e1 e2 = f
\n", "
--% env 8
\n", "
\n", "
\n", @@ -2372,10 +2334,10 @@ "id": "d0925be0", "metadata": { "papermill": { - "duration": 0.004398, - "end_time": "2026-09-07T11:09:54.517505+00:00", + "duration": 0.010587, + "end_time": "2026-09-20T09:10:46.300585+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.513107+00:00", + "start_time": "2026-09-20T09:10:46.289998+00:00", "status": "completed" }, "tags": [] @@ -2400,16 +2362,16 @@ "id": "e59a248e", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:06.382834Z", - "iopub.status.busy": "2026-09-12T21:52:06.382658Z", - "iopub.status.idle": "2026-09-12T21:52:06.563898Z", - "shell.execute_reply": "2026-09-12T21:52:06.562762Z" + "iopub.execute_input": "2026-09-20T09:10:46.328599Z", + "iopub.status.busy": "2026-09-20T09:10:46.328412Z", + "iopub.status.idle": "2026-09-20T09:10:46.575442Z", + "shell.execute_reply": "2026-09-20T09:10:46.574369Z" }, "papermill": { - "duration": 0.182732, - "end_time": "2026-09-07T11:09:54.704900+00:00", + "duration": 0.260581, + "end_time": "2026-09-20T09:10:46.576170+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.522168+00:00", + "start_time": "2026-09-20T09:10:46.315589+00:00", "status": "completed" }, "tags": [] @@ -2428,9 +2390,9 @@ " \n", "
\n", "
-- Chaque theoreme du lake ne depend que des axiomes standards de Lean
\n", - "
'Grothendieck.trivial_le_discrete' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.Adjunction.adj_toEquivalence' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.SheafCohomology.H0_equiv_global_sections' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.trivial_le_discrete' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.Adjunction.adj_toEquivalence' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.SheafCohomology.H0_equiv_global_sections' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", "
\n", "
--% env 9
\n", "
\n", @@ -2509,10 +2471,10 @@ "id": "41e13897", "metadata": { "papermill": { - "duration": 0.00531, - "end_time": "2026-09-07T11:09:54.715571+00:00", + "duration": 0.0081, + "end_time": "2026-09-20T09:10:46.592098+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.710261+00:00", + "start_time": "2026-09-20T09:10:46.583998+00:00", "status": "completed" }, "tags": [] @@ -2544,10 +2506,10 @@ "id": "a77cc1f0", "metadata": { "papermill": { - "duration": 0.005029, - "end_time": "2026-09-07T11:09:54.725676+00:00", + "duration": 0.008187, + "end_time": "2026-09-20T09:10:46.606896+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.720647+00:00", + "start_time": "2026-09-20T09:10:46.598709+00:00", "status": "completed" }, "tags": [] @@ -2568,16 +2530,16 @@ "id": "e2a88e7e", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:06.567777Z", - "iopub.status.busy": "2026-09-12T21:52:06.567512Z", - "iopub.status.idle": "2026-09-12T21:52:06.737401Z", - "shell.execute_reply": "2026-09-12T21:52:06.736507Z" + "iopub.execute_input": "2026-09-20T09:10:46.623215Z", + "iopub.status.busy": "2026-09-20T09:10:46.622858Z", + "iopub.status.idle": "2026-09-20T09:10:46.901568Z", + "shell.execute_reply": "2026-09-20T09:10:46.899883Z" }, "papermill": { - "duration": 0.188639, - "end_time": "2026-09-07T11:09:54.919743+00:00", + "duration": 0.287881, + "end_time": "2026-09-20T09:10:46.902904+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.731104+00:00", + "start_time": "2026-09-20T09:10:46.615023+00:00", "status": "completed" }, "tags": [] @@ -2595,19 +2557,19 @@ " \n", " \n", "
\n", - "
-- Exercice 1 : verifier que la symetrie d'une equivalence est involutive
\n", + "
-- Exercice 1 : verifier que la symetrie d'une equivalence est involutive
\n", "
-- (indice : la declaration existe dans le namespace Equivalences)
\n", "
-- #check Grothendieck.Equivalences.equivalence_symm_symm
\n", "
\n", "
-- Exercice 2 : trouver la declaration de la topologie canonique
\n", - "
-- (indice : elle s'appelle canonical_is_subcanonical)
\n", + "
-- (indice : elle s'appelle canonical_is_subcanonical)
\n", "
-- #check Grothendieck.canonical_is_subcanonical
\n", "
\n", "
-- Exercice 3 : quel enonce relie H0 aux sections globales ?
\n", "
-- #check Grothendieck.SheafCohomology.H0_equiv_global_sections
\n", "
\n", "
-- Exercice 4 : micro-preuve — la triviale est bien une topologie
\n", - "
-- (indice : trivial_le_discrete existe deja ; cherchez l'ordre)
\n", + "
-- (indice : trivial_le_discrete existe deja ; cherchez l'ordre)
\n", "
-- example : True := trivial  -- TODO etudiant : remplacez trivial par une preuve de trivial_le_discrete
\n", "
\n", "
-- Exercice 5 : micro-preuve — composer deux equivalences
\n", @@ -2615,7 +2577,7 @@ "
-- example : True := trivial  -- TODO etudiant : utilisez equivalence_trans pour prouver une transitivity
\n", "
\n", "
-- Le notebook reste executable : les stubs ne levent aucune erreur (C.1)
\n", - "
example : True := trivial
\n", + "
example : True := trivial
\n", "
--% env 10
\n", "
\n", "
\n", @@ -2691,10 +2653,10 @@ "id": "eb84c944", "metadata": { "papermill": { - "duration": 0.004605, - "end_time": "2026-09-07T11:09:54.929235+00:00", + "duration": 0.008453, + "end_time": "2026-09-20T09:10:46.918695+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.924630+00:00", + "start_time": "2026-09-20T09:10:46.910242+00:00", "status": "completed" }, "tags": [] @@ -2726,16 +2688,16 @@ "id": "84776eca", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:06.740550Z", - "iopub.status.busy": "2026-09-12T21:52:06.740417Z", - "iopub.status.idle": "2026-09-12T21:52:06.925692Z", - "shell.execute_reply": "2026-09-12T21:52:06.924896Z" + "iopub.execute_input": "2026-09-20T09:10:46.937702Z", + "iopub.status.busy": "2026-09-20T09:10:46.937359Z", + "iopub.status.idle": "2026-09-20T09:10:47.137384Z", + "shell.execute_reply": "2026-09-20T09:10:47.136577Z" }, "papermill": { - "duration": 0.192508, - "end_time": "2026-09-07T11:09:55.126408+00:00", + "duration": 0.211226, + "end_time": "2026-09-20T09:10:47.137981+00:00", "exception": false, - "start_time": "2026-09-07T11:09:54.933900+00:00", + "start_time": "2026-09-20T09:10:46.926755+00:00", "status": "completed" }, "tags": [] @@ -2755,31 +2717,31 @@ "
\n", "
-- SheafCondition (Partie 63) : les trois ponts produit-egaliseur du lake,
\n", "
-- module invisible du scan de visibilite (#11703) -- voici ses enonces executes.
\n", - "
@Grothendieck.sheaf_iff_equalizer_sieve : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", - " (J : CategoryTheory.GrothendieckTopology C) (P : CategoryTheory.Functor Cᵒᵖ (Type (max u_2 u_1))),\n", - " CategoryTheory.Presieve.IsSheaf J P ↔\n", + "
@Grothendieck.sheaf_iff_equalizer_sieve : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", + " (J : CategoryTheory.GrothendieckTopology C) (P : CategoryTheory.Functor Cᵒᵖ (Type (max u_2 u_1))),\n", + " CategoryTheory.Presieve.IsSheaf J P ↔\n", " ∀ ⦃X : C⦄,\n", " ∀ S ∈ J X,\n", " Nonempty\n", - " (CategoryTheory.Limits.IsLimit\n", - " (CategoryTheory.Limits.Fork.ofι (CategoryTheory.Equalizer.forkMap P S.arrows) ⋯))
\n", - "
@Grothendieck.sheaf_iff_equalizer_arrows : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", - " (P : CategoryTheory.Functor Cᵒᵖ (Type (max u_2 u_1))) [inst_1 : CategoryTheory.Limits.HasPullbacks C] {B : C}\n", + " (CategoryTheory.Limits.IsLimit\n", + " (CategoryTheory.Limits.Fork.ofι (CategoryTheory.Equalizer.forkMap P S.arrows) ⋯))
\n", + "
@Grothendieck.sheaf_iff_equalizer_arrows : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", + " (P : CategoryTheory.Functor Cᵒᵖ (Type (max u_2 u_1))) [inst_1 : CategoryTheory.Limits.HasPullbacks C] {B : C}\n", " {I : Type (max u_2 u_1)} (X : I → C) (π : (i : I) → X i ⟶ B),\n", - " CategoryTheory.Presieve.IsSheafFor P (CategoryTheory.Presieve.ofArrows X π) ↔\n", + " CategoryTheory.Presieve.IsSheafFor P (CategoryTheory.Presieve.ofArrows X π) ↔\n", " Nonempty\n", - " (CategoryTheory.Limits.IsLimit\n", - " (CategoryTheory.Limits.Fork.ofι (CategoryTheory.Equalizer.Presieve.Arrows.forkMap P X π) ⋯))
\n", - "
@Grothendieck.sheaf_pretopology_iff : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", - " (P : CategoryTheory.Functor Cᵒᵖ (Type (max u_2 u_1))) [inst_1 : CategoryTheory.Limits.HasPullbacks C]\n", - " (K : CategoryTheory.Pretopology C),\n", - " CategoryTheory.Presieve.IsSheaf K.toGrothendieck P ↔\n", - " ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, CategoryTheory.Presieve.IsSheafFor P R
\n", + " (CategoryTheory.Limits.IsLimit\n", + " (CategoryTheory.Limits.Fork.ofι (CategoryTheory.Equalizer.Presieve.Arrows.forkMap P X π) ⋯))
\n", + "
@Grothendieck.sheaf_pretopology_iff : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", + " (P : CategoryTheory.Functor Cᵒᵖ (Type (max u_2 u_1))) [inst_1 : CategoryTheory.Limits.HasPullbacks C]\n", + " (K : CategoryTheory.Pretopology C),\n", + " CategoryTheory.Presieve.IsSheaf K.toGrothendieck P ↔\n", + " ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, CategoryTheory.Presieve.IsSheafFor P R
\n", "
\n", "
-- Integrite (meme protocole que la section 10) : aucun pont ne depend de sorryAx
\n", - "
'Grothendieck.sheaf_iff_equalizer_sieve' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.sheaf_iff_equalizer_arrows' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.sheaf_pretopology_iff' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.sheaf_iff_equalizer_sieve' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.sheaf_iff_equalizer_arrows' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.sheaf_pretopology_iff' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", "
\n", "
--% env 11
\n", "
\n", @@ -2920,10 +2882,10 @@ "id": "2175b9ed", "metadata": { "papermill": { - "duration": 0.005174, - "end_time": "2026-09-07T11:09:55.137282+00:00", + "duration": 0.012441, + "end_time": "2026-09-20T09:10:47.157236+00:00", "exception": false, - "start_time": "2026-09-07T11:09:55.132108+00:00", + "start_time": "2026-09-20T09:10:47.144795+00:00", "status": "completed" }, "tags": [] @@ -2952,10 +2914,10 @@ "id": "27933dda", "metadata": { "papermill": { - "duration": 0.005178, - "end_time": "2026-09-07T11:09:55.147698+00:00", + "duration": 0.008072, + "end_time": "2026-09-20T09:10:47.173815+00:00", "exception": false, - "start_time": "2026-09-07T11:09:55.142520+00:00", + "start_time": "2026-09-20T09:10:47.165743+00:00", "status": "completed" }, "tags": [] @@ -2986,16 +2948,16 @@ "id": "f01c25a0", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:06.928044Z", - "iopub.status.busy": "2026-09-12T21:52:06.927884Z", - "iopub.status.idle": "2026-09-12T21:52:07.131419Z", - "shell.execute_reply": "2026-09-12T21:52:07.130548Z" + "iopub.execute_input": "2026-09-20T09:10:47.194102Z", + "iopub.status.busy": "2026-09-20T09:10:47.193916Z", + "iopub.status.idle": "2026-09-20T09:10:47.465670Z", + "shell.execute_reply": "2026-09-20T09:10:47.464298Z" }, "papermill": { - "duration": 0.219556, - "end_time": "2026-09-07T11:09:55.372470+00:00", + "duration": 0.282251, + "end_time": "2026-09-20T09:10:47.466525+00:00", "exception": false, - "start_time": "2026-09-07T11:09:55.152914+00:00", + "start_time": "2026-09-20T09:10:47.184274+00:00", "status": "completed" }, "tags": [] @@ -3014,57 +2976,57 @@ " \n", "
\n", "
-- Lawvere–Tierney : fermeture extensive, idempotente et monotone des cribles
\n", - "
@Grothendieck.LawvereTierney.lawvereTierneyDiscrete : {C : Type u_1} →\n", - " [inst : CategoryTheory.Category.{u_2, u_1} C] → Grothendieck.LawvereTierney.LawvereTierney C
\n", - "
@Grothendieck.LawvereTierney.j_monotone : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", - " (j : Grothendieck.LawvereTierney.LawvereTierney C) {X : C} {S T : CategoryTheory.Sieve X},\n", - " S ≤ T → j.closure X S ≤ j.closure X T
\n", - "
@Grothendieck.LawvereTierney.closure_isClosed : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", - " (j : Grothendieck.LawvereTierney.LawvereTierney C) {X : C} (S : CategoryTheory.Sieve X),\n", - " Grothendieck.LawvereTierney.IsClosed j (j.closure X S)
\n", + "
@Grothendieck.LawvereTierney.lawvereTierneyDiscrete : {C : Type u_1} →\n", + " [inst : CategoryTheory.Category.{u_2, u_1} C] → Grothendieck.LawvereTierney.LawvereTierney C
\n", + "
@Grothendieck.LawvereTierney.j_monotone : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", + " (j : Grothendieck.LawvereTierney.LawvereTierney C) {X : C} {S T : CategoryTheory.Sieve X},\n", + " S ≤ T → j.closure X S ≤ j.closure X T
\n", + "
@Grothendieck.LawvereTierney.closure_isClosed : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C]\n", + " (j : Grothendieck.LawvereTierney.LawvereTierney C) {X : C} (S : CategoryTheory.Sieve X),\n", + " Grothendieck.LawvereTierney.IsClosed j (j.closure X S)
\n", "
\n", "
-- Dictionnaire : topologie de Grothendieck et opérateur de Lawvere–Tierney
\n", - "
@Grothendieck.TopologyDictionary.grothendieckToLawvereTierney : {C : Type u_1} →\n", - " [inst : CategoryTheory.Category.{u_2, u_1} C] →\n", - " CategoryTheory.GrothendieckTopology C → Grothendieck.LawvereTierney.LawvereTierney C
\n", - "
@Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck_comp_grothendieckToLawvereTierney : ∀ {C : Type u_1}\n", - " [inst : CategoryTheory.Category.{u_2, u_1} C] (J : CategoryTheory.GrothendieckTopology C),\n", - " Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck\n", - " (Grothendieck.TopologyDictionary.grothendieckToLawvereTierney J) =\n", + "
@Grothendieck.TopologyDictionary.grothendieckToLawvereTierney : {C : Type u_1} →\n", + " [inst : CategoryTheory.Category.{u_2, u_1} C] →\n", + " CategoryTheory.GrothendieckTopology C → Grothendieck.LawvereTierney.LawvereTierney C
\n", + "
@Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck_comp_grothendieckToLawvereTierney : ∀ {C : Type u_1}\n", + " [inst : CategoryTheory.Category.{u_2, u_1} C] (J : CategoryTheory.GrothendieckTopology C),\n", + " Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck\n", + " (Grothendieck.TopologyDictionary.grothendieckToLawvereTierney J) =\n", " J
\n", - "
@Grothendieck.TopologyDictionary.grothendieckToLawvereTierney_comp_lawvereTierneyToGrothendieck_closure : ∀\n", - " {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C] (j : Grothendieck.LawvereTierney.LawvereTierney C),\n", - " (Grothendieck.TopologyDictionary.grothendieckToLawvereTierney\n", - " (Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck j)).closure =\n", - " j.closure
\n", + "
@Grothendieck.TopologyDictionary.grothendieckToLawvereTierney_comp_lawvereTierneyToGrothendieck_closure : ∀\n", + " {C : Type u_1} [inst : CategoryTheory.Category.{u_2, u_1} C] (j : Grothendieck.LawvereTierney.LawvereTierney C),\n", + " (Grothendieck.TopologyDictionary.grothendieckToLawvereTierney\n", + " (Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck j)).closure =\n", + " j.closure
\n", "
\n", "
-- Construction Plus : naturalité, itération et propriété universelle
\n", - "
@Grothendieck.toPlus_naturality_field : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_3, u_1} C] {D : Type u_2}\n", - " [inst_1 : CategoryTheory.Category.{u_4, u_2} D] (J : CategoryTheory.GrothendieckTopology C)\n", + "
@Grothendieck.toPlus_naturality_field : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_3, u_1} C] {D : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_4, u_2} D] (J : CategoryTheory.GrothendieckTopology C)\n", " [inst_2 :\n", - " ∀ (P : CategoryTheory.Functor Cᵒᵖ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)]\n", - " [inst_3 : ∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] {P Q : CategoryTheory.Functor Cᵒᵖ D}\n", + " ∀ (P : CategoryTheory.Functor Cᵒᵖ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)]\n", + " [inst_3 : ∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] {P Q : CategoryTheory.Functor Cᵒᵖ D}\n", " (η : P ⟶ Q),\n", - " CategoryTheory.CategoryStruct.comp η (J.toPlus Q) = CategoryTheory.CategoryStruct.comp (J.toPlus P) (J.plusMap η)
\n", - "
@Grothendieck.plusMap_toPlus_field : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_3, u_1} C] {D : Type u_2}\n", - " [inst_1 : CategoryTheory.Category.{u_4, u_2} D] (J : CategoryTheory.GrothendieckTopology C)\n", + " CategoryTheory.CategoryStruct.comp η (J.toPlus Q) = CategoryTheory.CategoryStruct.comp (J.toPlus P) (J.plusMap η)
\n", + "
@Grothendieck.plusMap_toPlus_field : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_3, u_1} C] {D : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_4, u_2} D] (J : CategoryTheory.GrothendieckTopology C)\n", " [inst_2 :\n", - " ∀ (P : CategoryTheory.Functor Cᵒᵖ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)]\n", - " [inst_3 : ∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] (P : CategoryTheory.Functor Cᵒᵖ D),\n", - " J.plusMap (J.toPlus P) = J.toPlus (J.plusObj P)
\n", - "
@Grothendieck.plusLift_unique_field : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_3, u_1} C] {D : Type u_2}\n", - " [inst_1 : CategoryTheory.Category.{u_4, u_2} D] (J : CategoryTheory.GrothendieckTopology C)\n", + " ∀ (P : CategoryTheory.Functor Cᵒᵖ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)]\n", + " [inst_3 : ∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] (P : CategoryTheory.Functor Cᵒᵖ D),\n", + " J.plusMap (J.toPlus P) = J.toPlus (J.plusObj P)
\n", + "
@Grothendieck.plusLift_unique_field : ∀ {C : Type u_1} [inst : CategoryTheory.Category.{u_3, u_1} C] {D : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_4, u_2} D] (J : CategoryTheory.GrothendieckTopology C)\n", " [inst_2 :\n", - " ∀ (P : CategoryTheory.Functor Cᵒᵖ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)]\n", - " [inst_3 : ∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] {P Q : CategoryTheory.Functor Cᵒᵖ D}\n", - " (η : P ⟶ Q) (hQ : CategoryTheory.Presheaf.IsSheaf J Q) (γ : J.plusObj P ⟶ Q),\n", - " CategoryTheory.CategoryStruct.comp (J.toPlus P) γ = η → γ = J.plusLift η hQ
\n", + " ∀ (P : CategoryTheory.Functor Cᵒᵖ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)]\n", + " [inst_3 : ∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] {P Q : CategoryTheory.Functor Cᵒᵖ D}\n", + " (η : P ⟶ Q) (hQ : CategoryTheory.Presheaf.IsSheaf J Q) (γ : J.plusObj P ⟶ Q),\n", + " CategoryTheory.CategoryStruct.comp (J.toPlus P) γ = η → γ = J.plusLift η hQ
\n", "
\n", - "
'Grothendieck.LawvereTierney.j_monotone' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck_comp_grothendieckToLawvereTierney' depends on axioms: [propext,\n", - " Classical.choice,\n", - " Quot.sound]
\n", - "
'Grothendieck.plusLift_unique_field' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.LawvereTierney.j_monotone' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.TopologyDictionary.lawvereTierneyToGrothendieck_comp_grothendieckToLawvereTierney' depends on axioms: [propext,\n", + " Classical.choice,\n", + " Quot.sound]
\n", + "
'Grothendieck.plusLift_unique_field' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", "
--% env 12
\n", "
\n", "
\n", @@ -3302,10 +3264,10 @@ "id": "534c7163", "metadata": { "papermill": { - "duration": 0.006336, - "end_time": "2026-09-07T11:09:55.384973+00:00", + "duration": 0.007825, + "end_time": "2026-09-20T09:10:47.482333+00:00", "exception": false, - "start_time": "2026-09-07T11:09:55.378637+00:00", + "start_time": "2026-09-20T09:10:47.474508+00:00", "status": "completed" }, "tags": [] @@ -3339,7 +3301,16 @@ { "cell_type": "markdown", "id": "0d4dbab3", - "metadata": {}, + "metadata": { + "papermill": { + "duration": 0.009645, + "end_time": "2026-09-20T09:10:47.499784+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:47.490139+00:00", + "status": "completed" + }, + "tags": [] + }, "source": [ "## Annexe — Les tiges (stalks) : du germe au recollement (#11703)\n", "\n", @@ -3390,11 +3361,19 @@ "id": "6628248e", "metadata": { "execution": { - "iopub.execute_input": "2026-09-12T21:52:07.134166Z", - "iopub.status.busy": "2026-09-12T21:52:07.134012Z", - "iopub.status.idle": "2026-09-12T21:52:07.398514Z", - "shell.execute_reply": "2026-09-12T21:52:07.397297Z" - } + "iopub.execute_input": "2026-09-20T09:10:47.518709Z", + "iopub.status.busy": "2026-09-20T09:10:47.518368Z", + "iopub.status.idle": "2026-09-20T09:10:47.842015Z", + "shell.execute_reply": "2026-09-20T09:10:47.841101Z" + }, + "papermill": { + "duration": 0.333641, + "end_time": "2026-09-20T09:10:47.843194+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:47.509553+00:00", + "status": "completed" + }, + "tags": [] }, "outputs": [ { @@ -3413,127 +3392,127 @@ "
-- modules invisibles du scan de visibilite (#11703) -- voici leurs enonces.
\n", "
\n", "
-- Stalks (Partie 72) : la tige du representable, cas interieur et exterieur
\n", - "
Grothendieck.unique_stalk_yoneda : (T : Type u_1) →\n", + "
Grothendieck.unique_stalk_yoneda : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", - " (U : TopologicalSpace.Opens T) → {x : T} → x ∈ U → Unique (TopCat.Presheaf.stalk (CategoryTheory.yoneda.obj U) x)
\n", - "
Grothendieck.isEmpty_stalk_yoneda : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T) {x : T},\n", - " x ∉ U → IsEmpty (TopCat.Presheaf.stalk (CategoryTheory.yoneda.obj U) x)
\n", - "
Grothendieck.nonempty_stalk_yoneda_iff : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T)\n", - " (x : T), Nonempty (TopCat.Presheaf.stalk (CategoryTheory.yoneda.obj U) x) ↔ x ∈ U
\n", + " (U : TopologicalSpace.Opens T) → {x : T} → x ∈ U → Unique (TopCat.Presheaf.stalk (CategoryTheory.yoneda.obj U) x)
\n", + "
Grothendieck.isEmpty_stalk_yoneda : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T) {x : T},\n", + " x ∉ U → IsEmpty (TopCat.Presheaf.stalk (CategoryTheory.yoneda.obj U) x)
\n", + "
Grothendieck.nonempty_stalk_yoneda_iff : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T)\n", + " (x : T), Nonempty (TopCat.Presheaf.stalk (CategoryTheory.yoneda.obj U) x) ↔ x ∈ U
\n", "
\n", - "
-- StalkSeparated (Partie 74) : les tiges detectent l'egalite des sections
\n", - "
Grothendieck.eq_of_germ_eq_of_isSeparated : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " CategoryTheory.Presheaf.IsSeparated (Grothendieck.opensTopology T) F →\n", - " ∀ {U : TopologicalSpace.Opens T} {s t : F.obj (Opposite.op U)},\n", + "
-- StalkSeparated (Partie 74) : les tiges detectent l'egalite des sections
\n", + "
Grothendieck.eq_of_germ_eq_of_isSeparated : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " CategoryTheory.Presheaf.IsSeparated (Grothendieck.opensTopology T) F →\n", + " ∀ {U : TopologicalSpace.Opens T} {s t : F.obj (Opposite.op U)},\n", " (∀ (x : T) (hx : x ∈ U),\n", - " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) s =\n", - " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) t) →\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) s =\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) t) →\n", " s = t
\n", - "
Grothendieck.eq_of_germ_eq_of_isSheaf : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " F.IsSheaf →\n", - " ∀ {U : TopologicalSpace.Opens T} {s t : F.obj (Opposite.op U)},\n", + "
Grothendieck.eq_of_germ_eq_of_isSheaf : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " F.IsSheaf →\n", + " ∀ {U : TopologicalSpace.Opens T} {s t : F.obj (Opposite.op U)},\n", " (∀ (x : T) (hx : x ∈ U),\n", - " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) s =\n", - " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) t) →\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) s =\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ U x hx)) t) →\n", " s = t
\n", - "
Grothendieck.injective_germ_family_of_isSeparated : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " CategoryTheory.Presheaf.IsSeparated (Grothendieck.opensTopology T) F →\n", - " ∀ (U : TopologicalSpace.Opens T),\n", - " Function.Injective fun s p => (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s
\n", + "
Grothendieck.injective_germ_family_of_isSeparated : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " CategoryTheory.Presheaf.IsSeparated (Grothendieck.opensTopology T) F →\n", + " ∀ (U : TopologicalSpace.Opens T),\n", + " Function.Injective fun s p => (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s
\n", "
\n", "
-- StalkGluing (Partie 75) : les familles de germes et leur recollement
\n", - "
Grothendieck.GermFamily : (T : Type u_1) →\n", - " [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → TopologicalSpace.Opens T → Type u_1
\n", - "
Grothendieck.GermFamily.IsLocallyRepresentable : (T : Type u_1) →\n", + "
Grothendieck.GermFamily : (T : Type u_1) →\n", + " [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → TopologicalSpace.Opens T → Type u_1
\n", + "
Grothendieck.GermFamily.IsLocallyRepresentable : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) →\n", - " (U : TopologicalSpace.Opens T) → Grothendieck.GermFamily T F U → Prop
\n", - "
Grothendieck.germFamily_isLocallyRepresentable : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) (U : TopologicalSpace.Opens T) (s : F.obj (Opposite.op U)),\n", - " Grothendieck.GermFamily.IsLocallyRepresentable T F U fun p => (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s
\n", - "
Grothendieck.existsUnique_gluing'_of_isSheaf : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " F.IsSheaf →\n", - " ∀ {ι : Type u_2} (V : ι → TopologicalSpace.Opens T) (U : TopologicalSpace.Opens T) (iVU : (i : ι) → V i ⟶ U),\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) →\n", + " (U : TopologicalSpace.Opens T) → Grothendieck.GermFamily T F U → Prop
\n", + "
Grothendieck.germFamily_isLocallyRepresentable : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) (U : TopologicalSpace.Opens T) (s : F.obj (Opposite.op U)),\n", + " Grothendieck.GermFamily.IsLocallyRepresentable T F U fun p => (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s
\n", + "
Grothendieck.existsUnique_gluing'_of_isSheaf : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " F.IsSheaf →\n", + " ∀ {ι : Type u_2} (V : ι → TopologicalSpace.Opens T) (U : TopologicalSpace.Opens T) (iVU : (i : ι) → V i ⟶ U),\n", " U ≤ iSup V →\n", - " ∀ (sf : (i : ι) → F.obj (Opposite.op (V i))),\n", - " F.IsCompatible V sf → ∃! s, ∀ (i : ι), (CategoryTheory.ConcreteCategory.hom (F.map (iVU i).op)) s = sf i
\n", - "
Grothendieck.existsUnique_section_of_isLocallyRepresentable : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " F.IsSheaf →\n", - " ∀ (U : TopologicalSpace.Opens T) (a : Grothendieck.GermFamily T F U),\n", - " Grothendieck.GermFamily.IsLocallyRepresentable T F U a →\n", - " ∃! s, ∀ (p : ↥U), (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s = a p
\n", - "
Grothendieck.surjective_germ_family_to_locallyRepresentable : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " F.IsSheaf →\n", - " ∀ (U : TopologicalSpace.Opens T),\n", - " Function.Surjective fun s => ⟨fun p => (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s, ⋯⟩
\n", + " ∀ (sf : (i : ι) → F.obj (Opposite.op (V i))),\n", + " F.IsCompatible V sf → ∃! s, ∀ (i : ι), (CategoryTheory.ConcreteCategory.hom (F.map (iVU i).op)) s = sf i
\n", + "
Grothendieck.existsUnique_section_of_isLocallyRepresentable : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " F.IsSheaf →\n", + " ∀ (U : TopologicalSpace.Opens T) (a : Grothendieck.GermFamily T F U),\n", + " Grothendieck.GermFamily.IsLocallyRepresentable T F U a →\n", + " ∃! s, ∀ (p : ↥U), (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s = a p
\n", + "
Grothendieck.surjective_germ_family_to_locallyRepresentable : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " F.IsSheaf →\n", + " ∀ (U : TopologicalSpace.Opens T),\n", + " Function.Surjective fun s => ⟨fun p => (CategoryTheory.ConcreteCategory.hom (F.germ U ↑p ⋯)) s, ⋯⟩
\n", "
\n", "
-- StalkPoints (Partie 73) : la tige comme fibre du point du site
\n", - "
Grothendieck.opensPoint : (T : Type u_1) → [inst : TopologicalSpace T] → T → (Grothendieck.opensTopology T).Point
\n", - "
Grothendieck.mem_of_fiber : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T) {U : TopologicalSpace.Opens T}\n", - " (p : (Grothendieck.opensPoint T x).fiber.obj U), x ∈ U
\n", - "
Grothendieck.fiberElem : (T : Type u_1) →\n", + "
Grothendieck.opensPoint : (T : Type u_1) → [inst : TopologicalSpace T] → T → (Grothendieck.opensTopology T).Point
\n", + "
Grothendieck.mem_of_fiber : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T) {U : TopologicalSpace.Opens T}\n", + " (p : (Grothendieck.opensPoint T x).fiber.obj U), x ∈ U
\n", + "
Grothendieck.fiberElem : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", - " (x : T) → {U : TopologicalSpace.Opens T} → x ∈ U → (Grothendieck.opensPoint T x).fiber.obj U
\n", - "
Grothendieck.fiberToStalkCocone : (T : Type u_1) →\n", + " (x : T) → {U : TopologicalSpace.Opens T} → x ∈ U → (Grothendieck.opensPoint T x).fiber.obj U
\n", + "
Grothendieck.fiberToStalkCocone : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", " (x : T) →\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) →\n", - " CategoryTheory.Limits.Cocone\n", - " ((CategoryTheory.CategoryOfElements.π (Grothendieck.opensPoint T x).fiber).op.comp F)
\n", - "
Grothendieck.fiberToStalk : (T : Type u_1) →\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) →\n", + " CategoryTheory.Limits.Cocone\n", + " ((CategoryTheory.CategoryOfElements.π (Grothendieck.opensPoint T x).fiber).op.comp F)
\n", + "
Grothendieck.fiberToStalk : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", " (x : T) →\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) → (Grothendieck.opensPoint T x).presheafFiber.obj F ⟶ F.stalk x
\n", - "
Grothendieck.stalkToFiberCocone : (T : Type u_1) →\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) → (Grothendieck.opensPoint T x).presheafFiber.obj F ⟶ F.stalk x
\n", + "
Grothendieck.stalkToFiberCocone : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", " (x : T) →\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) →\n", - " CategoryTheory.Limits.Cocone ((TopologicalSpace.OpenNhds.inclusion x).op.comp F)
\n", - "
Grothendieck.stalkToFiber : (T : Type u_1) →\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) →\n", + " CategoryTheory.Limits.Cocone ((TopologicalSpace.OpenNhds.inclusion x).op.comp F)
\n", + "
Grothendieck.stalkToFiber : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", " (x : T) →\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) → F.stalk x ⟶ (Grothendieck.opensPoint T x).presheafFiber.obj F
\n", - "
Grothendieck.toPresheafFiber_fiberToStalk : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) (U : TopologicalSpace.Opens T)\n", - " (p : (Grothendieck.opensPoint T x).fiber.obj U),\n", - " CategoryTheory.CategoryStruct.comp ((Grothendieck.opensPoint T x).toPresheafFiber U p F)\n", - " (Grothendieck.fiberToStalk T x F) =\n", - " F.germ U x ⋯
\n", - "
Grothendieck.germ_stalkToFiber : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) (U : TopologicalSpace.Opens T) (hx : x ∈ U),\n", - " CategoryTheory.CategoryStruct.comp (F.germ U x hx) (Grothendieck.stalkToFiber T x F) =\n", - " (Grothendieck.opensPoint T x).toPresheafFiber U { down := { down := hx } } F
\n", - "
Grothendieck.stalkToFiber_comp_fiberToStalk : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " CategoryTheory.CategoryStruct.comp (Grothendieck.stalkToFiber T x F) (Grothendieck.fiberToStalk T x F) =\n", - " CategoryTheory.CategoryStruct.id (F.stalk x)
\n", - "
Grothendieck.fiberToStalk_comp_stalkToFiber : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", - " CategoryTheory.CategoryStruct.comp (Grothendieck.fiberToStalk T x F) (Grothendieck.stalkToFiber T x F) =\n", - " CategoryTheory.CategoryStruct.id ((Grothendieck.opensPoint T x).presheafFiber.obj F)
\n", - "
Grothendieck.stalkFiberIso : (T : Type u_1) →\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) → F.stalk x ⟶ (Grothendieck.opensPoint T x).presheafFiber.obj F
\n", + "
Grothendieck.toPresheafFiber_fiberToStalk : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) (U : TopologicalSpace.Opens T)\n", + " (p : (Grothendieck.opensPoint T x).fiber.obj U),\n", + " CategoryTheory.CategoryStruct.comp ((Grothendieck.opensPoint T x).toPresheafFiber U p F)\n", + " (Grothendieck.fiberToStalk T x F) =\n", + " F.germ U x ⋯
\n", + "
Grothendieck.germ_stalkToFiber : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) (U : TopologicalSpace.Opens T) (hx : x ∈ U),\n", + " CategoryTheory.CategoryStruct.comp (F.germ U x hx) (Grothendieck.stalkToFiber T x F) =\n", + " (Grothendieck.opensPoint T x).toPresheafFiber U { down := { down := hx } } F
\n", + "
Grothendieck.stalkToFiber_comp_fiberToStalk : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " CategoryTheory.CategoryStruct.comp (Grothendieck.stalkToFiber T x F) (Grothendieck.fiberToStalk T x F) =\n", + " CategoryTheory.CategoryStruct.id (F.stalk x)
\n", + "
Grothendieck.fiberToStalk_comp_stalkToFiber : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " CategoryTheory.CategoryStruct.comp (Grothendieck.fiberToStalk T x F) (Grothendieck.stalkToFiber T x F) =\n", + " CategoryTheory.CategoryStruct.id ((Grothendieck.opensPoint T x).presheafFiber.obj F)
\n", + "
Grothendieck.stalkFiberIso : (T : Type u_1) →\n", " [inst : TopologicalSpace T] →\n", " (x : T) →\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) → (Grothendieck.opensPoint T x).presheafFiber.obj F ≅ F.stalk x
\n", - "
Grothendieck.stalkFiberIso_naturality : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", - " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) {G : TopCat.Presheaf (Type u_1) (TopCat.of T)} (f : F ⟶ G),\n", - " CategoryTheory.CategoryStruct.comp ((Grothendieck.opensPoint T x).presheafFiber.map f)\n", - " (Grothendieck.fiberToStalk T x G) =\n", - " CategoryTheory.CategoryStruct.comp (Grothendieck.fiberToStalk T x F)\n", - " ((TopCat.Presheaf.stalkFunctor (Type u_1) x).map f)
\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) → (Grothendieck.opensPoint T x).presheafFiber.obj F ≅ F.stalk x
\n", + "
Grothendieck.stalkFiberIso_naturality : ∀ (T : Type u_1) [inst : TopologicalSpace T] (x : T)\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) {G : TopCat.Presheaf (Type u_1) (TopCat.of T)} (f : F ⟶ G),\n", + " CategoryTheory.CategoryStruct.comp ((Grothendieck.opensPoint T x).presheafFiber.map f)\n", + " (Grothendieck.fiberToStalk T x G) =\n", + " CategoryTheory.CategoryStruct.comp (Grothendieck.fiberToStalk T x F)\n", + " ((TopCat.Presheaf.stalkFunctor (Type u_1) x).map f)
\n", "
\n", "
-- Integrite (meme protocole que la section 10) : un pivot par module, aucun
\n", "
-- ne doit dependre de sorryAx
\n", - "
'Grothendieck.nonempty_stalk_yoneda_iff' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.eq_of_germ_eq_of_isSheaf' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.existsUnique_section_of_isLocallyRepresentable' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", - "
'Grothendieck.stalkFiberIso_naturality' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.nonempty_stalk_yoneda_iff' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.eq_of_germ_eq_of_isSheaf' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.existsUnique_section_of_isLocallyRepresentable' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.stalkFiberIso_naturality' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", "
\n", "
--% env 13
\n", "
\n", @@ -4055,7 +4034,16 @@ { "cell_type": "markdown", "id": "d77b57c0", - "metadata": {}, + "metadata": { + "papermill": { + "duration": 0.008752, + "end_time": "2026-09-20T09:10:47.861100+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:47.852348+00:00", + "status": "completed" + }, + "tags": [] + }, "source": [ "### Lecture de la sortie\n", "\n", @@ -4101,15 +4089,626 @@ "aussi le sien.\n" ] }, + { + "cell_type": "markdown", + "id": "8dbc577e", + "metadata": { + "papermill": { + "duration": 0.008557, + "end_time": "2026-09-20T09:10:47.877891+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:47.869334+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "## Annexe — Des ouverts au préfaisceau gratte-ciel (#11703)\n", + "\n", + "Cette annexe relie quatre modules qui forment une même chaîne topologique. `SpacesMathlib` identifie le site des ouverts construit dans le lake à celui de Mathlib. `SpacesSubcanonical` montre ensuite que les représentables y sont des faisceaux. `StalkCharacterization` reformule la condition de faisceau par séparation et recollement des germes. Enfin, `Skyscraper` applique ce vocabulaire à un préfaisceau concentré autour d’un point.\n", + "\n", + "Les signatures ci-dessous sont vérifiées par Lean dans le lake réel. Elles rendent visibles les propriétés structurantes plutôt que les détails de leurs preuves." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "b8bb566d", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-20T09:10:47.895760Z", + "iopub.status.busy": "2026-09-20T09:10:47.895587Z", + "iopub.status.idle": "2026-09-20T09:10:48.153425Z", + "shell.execute_reply": "2026-09-20T09:10:48.152599Z" + }, + "papermill": { + "duration": 0.267654, + "end_time": "2026-09-20T09:10:48.154207+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:47.886553+00:00", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
-- SpacesMathlib : le site construit dans le lake coïncide avec celui de Mathlib
\n", + "
Grothendieck.opensTopology_eq : ∀ (T : Type u_1) [inst : TopologicalSpace T],\n", + " Grothendieck.opensTopology T = Opens.grothendieckTopology T
\n", + "
@Grothendieck.isSheaf_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_3, u_2} C] (F : TopCat.Presheaf C (TopCat.of T)),\n", + " CategoryTheory.Presheaf.IsSheaf (Grothendieck.opensTopology T) F ↔ F.IsSheaf
\n", + "
@Grothendieck.coversTop_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {ι : Type u_2}\n", + " (U : ι → TopologicalSpace.Opens T),\n", + " (Grothendieck.opensTopology T).CoversTop U ↔ (Opens.grothendieckTopology T).CoversTop U
\n", + "
\n", + "
-- SpacesSubcanonical : tout représentable sur le site des ouverts est un faisceau
\n", + "
Grothendieck.isSheaf_yoneda_opensTopology : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T),\n", + " CategoryTheory.Presieve.IsSheaf (Grothendieck.opensTopology T) (CategoryTheory.yoneda.obj U)
\n", + "
Grothendieck.opensTopology_subcanonical : ∀ (T : Type u_1) [inst : TopologicalSpace T],\n", + " (Grothendieck.opensTopology T).Subcanonical
\n", + "
\n", + "
-- StalkCharacterization : séparation et recollement se lisent sur les germes
\n", + "
Grothendieck.GermSeparated : (T : Type u_1) →\n", + " [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop
\n", + "
Grothendieck.GermGluing : (T : Type u_1) → [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop
\n", + "
Grothendieck.germ_eq_of_isCompatible : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) {ι : Type u_2} (U : ι → TopologicalSpace.Opens T)\n", + " (sf : (i : ι) → F.obj (Opposite.op (U i))),\n", + " F.IsCompatible U sf →\n", + " ∀ {i j : ι} {x : T} (hi : x ∈ U i) (hj : x ∈ U j),\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ (U i) x hi)) (sf i) =\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ (U j) x hj)) (sf j)
\n", + "
Grothendieck.isSheaf_iff_germSeparated_and_germGluing : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " F.IsSheaf ↔ Grothendieck.GermSeparated T F ∧ Grothendieck.GermGluing T F
\n", + "
\n", + "
-- Skyscraper : support et dichotomie des tiges autour du point choisi
\n", + "
@Grothendieck.Contenu.skyscraper : {X : TopCat} →\n", + " (p₀ : ↑X) →\n", + " [(U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\n", + " {C : Type u_2} →\n", + " [inst : CategoryTheory.Category.{u_1, u_2} C] → [CategoryTheory.Limits.HasTerminal C] → C → TopCat.Presheaf C X
\n", + "
@Grothendieck.Contenu.stalkIsoOfMemClosure : {X : TopCat} →\n", + " (p₀ : ↑X) →\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\n", + " {C : Type u_2} →\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\n", + " [inst_2 : CategoryTheory.Limits.HasTerminal C] →\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] →\n", + " (A : C) → {y : ↑X} → y ∈ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A)
\n", + "
@Grothendieck.Contenu.stalkIsoOfNotMemClosure : {X : TopCat} →\n", + " (p₀ : ↑X) →\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\n", + " {C : Type u_2} →\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\n", + " [inst_2 : CategoryTheory.Limits.HasTerminal C] →\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] →\n", + " (A : C) → {y : ↑X} → y ∉ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)
\n", + "
@Grothendieck.Contenu.support_skyscraper : ∀ {X : TopCat} (p₀ : ↑X)\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\n", + " IsEmpty (CategoryTheory.Limits.IsTerminal A) →\n", + " Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = closure {p₀}
\n", + "
@Grothendieck.Contenu.support_skyscraper_of_closed : ∀ {X : TopCat} (p₀ : ↑X)\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\n", + " IsEmpty (CategoryTheory.Limits.IsTerminal A) →\n", + " IsClosed {p₀} → Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = {p₀}
\n", + "
@Grothendieck.Contenu.stalk_dichotomy : ∀ {X : TopCat} (p₀ : ↑X)\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\n", + " IsEmpty (CategoryTheory.Limits.IsTerminal A) →\n", + " ∀ (y : ↑X),\n", + " y ∈ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\n", + " Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A) ∨\n", + " y ∉ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\n", + " Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)
\n", + "
\n", + "
-- Les résultats pivots restent auditables par le noyau Lean
\n", + "
'Grothendieck.opensTopology_subcanonical' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.isSheaf_iff_germSeparated_and_germGluing' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
'Grothendieck.Contenu.support_skyscraper' depends on axioms: [propext, Classical.choice, Quot.sound]
\n", + "
--% env 14
\n", + "
\n", + "
\n", + " Raw input\n", + " {\"cmd\": \"-- SpacesMathlib : le site construit dans le lake co\\u00efncide avec celui de Mathlib\\n#check @Grothendieck.opensTopology_eq\\n#check @Grothendieck.isSheaf_opensTopology_iff\\n#check @Grothendieck.coversTop_opensTopology_iff\\n\\n-- SpacesSubcanonical : tout repr\\u00e9sentable sur le site des ouverts est un faisceau\\n#check @Grothendieck.isSheaf_yoneda_opensTopology\\n#check @Grothendieck.opensTopology_subcanonical\\n\\n-- StalkCharacterization : s\\u00e9paration et recollement se lisent sur les germes\\n#check @Grothendieck.GermSeparated\\n#check @Grothendieck.GermGluing\\n#check @Grothendieck.germ_eq_of_isCompatible\\n#check @Grothendieck.isSheaf_iff_germSeparated_and_germGluing\\n\\n-- Skyscraper : support et dichotomie des tiges autour du point choisi\\n#check @Grothendieck.Contenu.skyscraper\\n#check @Grothendieck.Contenu.stalkIsoOfMemClosure\\n#check @Grothendieck.Contenu.stalkIsoOfNotMemClosure\\n#check @Grothendieck.Contenu.support_skyscraper\\n#check @Grothendieck.Contenu.support_skyscraper_of_closed\\n#check @Grothendieck.Contenu.stalk_dichotomy\\n\\n-- Les r\\u00e9sultats pivots restent auditables par le noyau Lean\\n#print axioms Grothendieck.opensTopology_subcanonical\\n#print axioms Grothendieck.isSheaf_iff_germSeparated_and_germGluing\\n#print axioms Grothendieck.Contenu.support_skyscraper\", \"env\": 13}\n", + "
\n", + "
\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", + " \"Grothendieck.opensTopology_eq : ∀ (T : Type u_1) [inst : TopologicalSpace T],\\n Grothendieck.opensTopology T = Opens.grothendieckTopology T\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 3, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 3, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.isSheaf_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_3, u_2} C] (F : TopCat.Presheaf C (TopCat.of T)),\\n CategoryTheory.Presheaf.IsSheaf (Grothendieck.opensTopology T) F ↔ F.IsSheaf\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 4, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 4, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.coversTop_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {ι : Type u_2}\\n (U : ι → TopologicalSpace.Opens T),\\n (Grothendieck.opensTopology T).CoversTop U ↔ (Opens.grothendieckTopology T).CoversTop U\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 7, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 7, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.isSheaf_yoneda_opensTopology : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T),\\n CategoryTheory.Presieve.IsSheaf (Grothendieck.opensTopology T) (CategoryTheory.yoneda.obj U)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 8, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 8, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.opensTopology_subcanonical : ∀ (T : Type u_1) [inst : TopologicalSpace T],\\n (Grothendieck.opensTopology T).Subcanonical\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 11, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 11, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.GermSeparated : (T : Type u_1) →\\n [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 12, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 12, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.GermGluing : (T : Type u_1) → [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 13, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 13, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.germ_eq_of_isCompatible : ∀ (T : Type u_1) [inst : TopologicalSpace T]\\n (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) {ι : Type u_2} (U : ι → TopologicalSpace.Opens T)\\n (sf : (i : ι) → F.obj (Opposite.op (U i))),\\n F.IsCompatible U sf →\\n ∀ {i j : ι} {x : T} (hi : x ∈ U i) (hj : x ∈ U j),\\n (CategoryTheory.ConcreteCategory.hom (F.germ (U i) x hi)) (sf i) =\\n (CategoryTheory.ConcreteCategory.hom (F.germ (U j) x hj)) (sf j)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 14, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 14, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.isSheaf_iff_germSeparated_and_germGluing : ∀ (T : Type u_1) [inst : TopologicalSpace T]\\n (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\\n F.IsSheaf ↔ Grothendieck.GermSeparated T F ∧ Grothendieck.GermGluing T F\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 17, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 17, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.skyscraper : {X : TopCat} →\\n (p₀ : ↑X) →\\n [(U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\\n {C : Type u_2} →\\n [inst : CategoryTheory.Category.{u_1, u_2} C] → [CategoryTheory.Limits.HasTerminal C] → C → TopCat.Presheaf C X\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 18, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 18, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.stalkIsoOfMemClosure : {X : TopCat} →\\n (p₀ : ↑X) →\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\\n {C : Type u_2} →\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\\n [inst_2 : CategoryTheory.Limits.HasTerminal C] →\\n [inst_3 : CategoryTheory.Limits.HasColimits C] →\\n (A : C) → {y : ↑X} → y ∈ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 19, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 19, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.stalkIsoOfNotMemClosure : {X : TopCat} →\\n (p₀ : ↑X) →\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\\n {C : Type u_2} →\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\\n [inst_2 : CategoryTheory.Limits.HasTerminal C] →\\n [inst_3 : CategoryTheory.Limits.HasColimits C] →\\n (A : C) → {y : ↑X} → y ∉ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 20, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 20, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.support_skyscraper : ∀ {X : TopCat} (p₀ : ↑X)\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\\n [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\\n IsEmpty (CategoryTheory.Limits.IsTerminal A) →\\n Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = closure {p₀}\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 21, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 21, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.support_skyscraper_of_closed : ∀ {X : TopCat} (p₀ : ↑X)\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\\n [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\\n IsEmpty (CategoryTheory.Limits.IsTerminal A) →\\n IsClosed {p₀} → Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = {p₀}\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 22, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 22, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.stalk_dichotomy : ∀ {X : TopCat} (p₀ : ↑X)\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\\n [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\\n IsEmpty (CategoryTheory.Limits.IsTerminal A) →\\n ∀ (y : ↑X),\\n y ∈ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\\n Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A) ∨\\n y ∉ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\\n Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 25, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 25, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"'Grothendieck.opensTopology_subcanonical' depends on axioms: [propext, Classical.choice, Quot.sound]\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 26, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 26, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"'Grothendieck.isSheaf_iff_germSeparated_and_germGluing' depends on axioms: [propext, Classical.choice, Quot.sound]\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 27, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 27, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"'Grothendieck.Contenu.support_skyscraper' depends on axioms: [propext, Classical.choice, Quot.sound]\"}],\r\n", + " \"env\": 14}\n", + "
\n", + " " + ], + "text/plain": [ + "-- SpacesMathlib : le site construit dans le lake coïncide avec celui de Mathlib\n", + "#check @Grothendieck.opensTopology_eq\n", + "──────▶ Grothendieck.opensTopology_eq : ∀ (T : Type u_1) [inst : TopologicalSpace T],\n", + " Grothendieck.opensTopology T = Opens.grothendieckTopology T\n", + "#check @Grothendieck.isSheaf_opensTopology_iff\n", + "──────▶ @Grothendieck.isSheaf_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_3, u_2} C] (F : TopCat.Presheaf C (TopCat.of T)),\n", + " CategoryTheory.Presheaf.IsSheaf (Grothendieck.opensTopology T) F ↔ F.IsSheaf\n", + "#check @Grothendieck.coversTop_opensTopology_iff\n", + "──────▶ @Grothendieck.coversTop_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {ι : Type u_2}\n", + " (U : ι → TopologicalSpace.Opens T),\n", + " (Grothendieck.opensTopology T).CoversTop U ↔ (Opens.grothendieckTopology T).CoversTop U\n", + "\n", + "-- SpacesSubcanonical : tout représentable sur le site des ouverts est un faisceau\n", + "#check @Grothendieck.isSheaf_yoneda_opensTopology\n", + "──────▶ Grothendieck.isSheaf_yoneda_opensTopology : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T),\n", + " CategoryTheory.Presieve.IsSheaf (Grothendieck.opensTopology T) (CategoryTheory.yoneda.obj U)\n", + "#check @Grothendieck.opensTopology_subcanonical\n", + "──────▶ Grothendieck.opensTopology_subcanonical : ∀ (T : Type u_1) [inst : TopologicalSpace T],\n", + " (Grothendieck.opensTopology T).Subcanonical\n", + "\n", + "-- StalkCharacterization : séparation et recollement se lisent sur les germes\n", + "#check @Grothendieck.GermSeparated\n", + "──────▶ Grothendieck.GermSeparated : (T : Type u_1) →\n", + " [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop\n", + "#check @Grothendieck.GermGluing\n", + "──────▶ Grothendieck.GermGluing : (T : Type u_1) → [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop\n", + "#check @Grothendieck.germ_eq_of_isCompatible\n", + "──────▶ Grothendieck.germ_eq_of_isCompatible : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) {ι : Type u_2} (U : ι → TopologicalSpace.Opens T)\n", + " (sf : (i : ι) → F.obj (Opposite.op (U i))),\n", + " F.IsCompatible U sf →\n", + " ∀ {i j : ι} {x : T} (hi : x ∈ U i) (hj : x ∈ U j),\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ (U i) x hi)) (sf i) =\n", + " (CategoryTheory.ConcreteCategory.hom (F.germ (U j) x hj)) (sf j)\n", + "#check @Grothendieck.isSheaf_iff_germSeparated_and_germGluing\n", + "──────▶ Grothendieck.isSheaf_iff_germSeparated_and_germGluing : ∀ (T : Type u_1) [inst : TopologicalSpace T]\n", + " (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\n", + " F.IsSheaf ↔ Grothendieck.GermSeparated T F ∧ Grothendieck.GermGluing T F\n", + "\n", + "-- Skyscraper : support et dichotomie des tiges autour du point choisi\n", + "#check @Grothendieck.Contenu.skyscraper\n", + "──────▶ @Grothendieck.Contenu.skyscraper : {X : TopCat} →\n", + " (p₀ : ↑X) →\n", + " [(U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\n", + " {C : Type u_2} →\n", + " [inst : CategoryTheory.Category.{u_1, u_2} C] → [CategoryTheory.Limits.HasTerminal C] → C → TopCat.Presheaf C X\n", + "#check @Grothendieck.Contenu.stalkIsoOfMemClosure\n", + "──────▶ @Grothendieck.Contenu.stalkIsoOfMemClosure : {X : TopCat} →\n", + " (p₀ : ↑X) →\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\n", + " {C : Type u_2} →\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\n", + " [inst_2 : CategoryTheory.Limits.HasTerminal C] →\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] →\n", + " (A : C) → {y : ↑X} → y ∈ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A)\n", + "#check @Grothendieck.Contenu.stalkIsoOfNotMemClosure\n", + "──────▶ @Grothendieck.Contenu.stalkIsoOfNotMemClosure : {X : TopCat} →\n", + " (p₀ : ↑X) →\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\n", + " {C : Type u_2} →\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\n", + " [inst_2 : CategoryTheory.Limits.HasTerminal C] →\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] →\n", + " (A : C) → {y : ↑X} → y ∉ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)\n", + "#check @Grothendieck.Contenu.support_skyscraper\n", + "──────▶ @Grothendieck.Contenu.support_skyscraper : ∀ {X : TopCat} (p₀ : ↑X)\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\n", + " IsEmpty (CategoryTheory.Limits.IsTerminal A) →\n", + " Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = closure {p₀}\n", + "#check @Grothendieck.Contenu.support_skyscraper_of_closed\n", + "──────▶ @Grothendieck.Contenu.support_skyscraper_of_closed : ∀ {X : TopCat} (p₀ : ↑X)\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\n", + " IsEmpty (CategoryTheory.Limits.IsTerminal A) →\n", + " IsClosed {p₀} → Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = {p₀}\n", + "#check @Grothendieck.Contenu.stalk_dichotomy\n", + "──────▶ @Grothendieck.Contenu.stalk_dichotomy : ∀ {X : TopCat} (p₀ : ↑X)\n", + " [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\n", + " [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\n", + " [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\n", + " IsEmpty (CategoryTheory.Limits.IsTerminal A) →\n", + " ∀ (y : ↑X),\n", + " y ∈ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\n", + " Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A) ∨\n", + " y ∉ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\n", + " Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)\n", + "\n", + "-- Les résultats pivots restent auditables par le noyau Lean\n", + "#print axioms Grothendieck.opensTopology_subcanonical\n", + "──────▶ 'Grothendieck.opensTopology_subcanonical' depends on axioms: [propext, Classical.choice, Quot.sound]\n", + "#print axioms Grothendieck.isSheaf_iff_germSeparated_and_germGluing\n", + "──────▶ 'Grothendieck.isSheaf_iff_germSeparated_and_germGluing' depends on axioms: [propext, Classical.choice, Quot.sound]\n", + "#print axioms Grothendieck.Contenu.support_skyscraper\n", + "──────▶ 'Grothendieck.Contenu.support_skyscraper' depends on axioms: [propext, Classical.choice, Quot.sound]\n", + "--% env 14\n", + "\n", + "Raw input:\n", + "{\"cmd\": \"-- SpacesMathlib : le site construit dans le lake co\\u00efncide avec celui de Mathlib\\n#check @Grothendieck.opensTopology_eq\\n#check @Grothendieck.isSheaf_opensTopology_iff\\n#check @Grothendieck.coversTop_opensTopology_iff\\n\\n-- SpacesSubcanonical : tout repr\\u00e9sentable sur le site des ouverts est un faisceau\\n#check @Grothendieck.isSheaf_yoneda_opensTopology\\n#check @Grothendieck.opensTopology_subcanonical\\n\\n-- StalkCharacterization : s\\u00e9paration et recollement se lisent sur les germes\\n#check @Grothendieck.GermSeparated\\n#check @Grothendieck.GermGluing\\n#check @Grothendieck.germ_eq_of_isCompatible\\n#check @Grothendieck.isSheaf_iff_germSeparated_and_germGluing\\n\\n-- Skyscraper : support et dichotomie des tiges autour du point choisi\\n#check @Grothendieck.Contenu.skyscraper\\n#check @Grothendieck.Contenu.stalkIsoOfMemClosure\\n#check @Grothendieck.Contenu.stalkIsoOfNotMemClosure\\n#check @Grothendieck.Contenu.support_skyscraper\\n#check @Grothendieck.Contenu.support_skyscraper_of_closed\\n#check @Grothendieck.Contenu.stalk_dichotomy\\n\\n-- Les r\\u00e9sultats pivots restent auditables par le noyau Lean\\n#print axioms Grothendieck.opensTopology_subcanonical\\n#print axioms Grothendieck.isSheaf_iff_germSeparated_and_germGluing\\n#print axioms Grothendieck.Contenu.support_skyscraper\", \"env\": 13}\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", + " \"Grothendieck.opensTopology_eq : ∀ (T : Type u_1) [inst : TopologicalSpace T],\\n Grothendieck.opensTopology T = Opens.grothendieckTopology T\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 3, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 3, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.isSheaf_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_3, u_2} C] (F : TopCat.Presheaf C (TopCat.of T)),\\n CategoryTheory.Presheaf.IsSheaf (Grothendieck.opensTopology T) F ↔ F.IsSheaf\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 4, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 4, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.coversTop_opensTopology_iff : ∀ {T : Type u_1} [inst : TopologicalSpace T] {ι : Type u_2}\\n (U : ι → TopologicalSpace.Opens T),\\n (Grothendieck.opensTopology T).CoversTop U ↔ (Opens.grothendieckTopology T).CoversTop U\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 7, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 7, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.isSheaf_yoneda_opensTopology : ∀ (T : Type u_1) [inst : TopologicalSpace T] (U : TopologicalSpace.Opens T),\\n CategoryTheory.Presieve.IsSheaf (Grothendieck.opensTopology T) (CategoryTheory.yoneda.obj U)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 8, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 8, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.opensTopology_subcanonical : ∀ (T : Type u_1) [inst : TopologicalSpace T],\\n (Grothendieck.opensTopology T).Subcanonical\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 11, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 11, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.GermSeparated : (T : Type u_1) →\\n [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 12, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 12, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.GermGluing : (T : Type u_1) → [inst : TopologicalSpace T] → TopCat.Presheaf (Type u_1) (TopCat.of T) → Prop\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 13, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 13, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.germ_eq_of_isCompatible : ∀ (T : Type u_1) [inst : TopologicalSpace T]\\n (F : TopCat.Presheaf (Type u_1) (TopCat.of T)) {ι : Type u_2} (U : ι → TopologicalSpace.Opens T)\\n (sf : (i : ι) → F.obj (Opposite.op (U i))),\\n F.IsCompatible U sf →\\n ∀ {i j : ι} {x : T} (hi : x ∈ U i) (hj : x ∈ U j),\\n (CategoryTheory.ConcreteCategory.hom (F.germ (U i) x hi)) (sf i) =\\n (CategoryTheory.ConcreteCategory.hom (F.germ (U j) x hj)) (sf j)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 14, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 14, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"Grothendieck.isSheaf_iff_germSeparated_and_germGluing : ∀ (T : Type u_1) [inst : TopologicalSpace T]\\n (F : TopCat.Presheaf (Type u_1) (TopCat.of T)),\\n F.IsSheaf ↔ Grothendieck.GermSeparated T F ∧ Grothendieck.GermGluing T F\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 17, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 17, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.skyscraper : {X : TopCat} →\\n (p₀ : ↑X) →\\n [(U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\\n {C : Type u_2} →\\n [inst : CategoryTheory.Category.{u_1, u_2} C] → [CategoryTheory.Limits.HasTerminal C] → C → TopCat.Presheaf C X\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 18, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 18, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.stalkIsoOfMemClosure : {X : TopCat} →\\n (p₀ : ↑X) →\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\\n {C : Type u_2} →\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\\n [inst_2 : CategoryTheory.Limits.HasTerminal C] →\\n [inst_3 : CategoryTheory.Limits.HasColimits C] →\\n (A : C) → {y : ↑X} → y ∈ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 19, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 19, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.stalkIsoOfNotMemClosure : {X : TopCat} →\\n (p₀ : ↑X) →\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] →\\n {C : Type u_2} →\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] →\\n [inst_2 : CategoryTheory.Limits.HasTerminal C] →\\n [inst_3 : CategoryTheory.Limits.HasColimits C] →\\n (A : C) → {y : ↑X} → y ∉ closure {p₀} → ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 20, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 20, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.support_skyscraper : ∀ {X : TopCat} (p₀ : ↑X)\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\\n [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\\n IsEmpty (CategoryTheory.Limits.IsTerminal A) →\\n Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = closure {p₀}\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 21, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 21, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.support_skyscraper_of_closed : ∀ {X : TopCat} (p₀ : ↑X)\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\\n [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\\n IsEmpty (CategoryTheory.Limits.IsTerminal A) →\\n IsClosed {p₀} → Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) = {p₀}\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 22, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 22, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"@Grothendieck.Contenu.stalk_dichotomy : ∀ {X : TopCat} (p₀ : ↑X)\\n [inst : (U : TopologicalSpace.Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type u_2}\\n [inst_1 : CategoryTheory.Category.{u_1, u_2} C] [inst_2 : CategoryTheory.Limits.HasTerminal C]\\n [inst_3 : CategoryTheory.Limits.HasColimits C] (A : C),\\n IsEmpty (CategoryTheory.Limits.IsTerminal A) →\\n ∀ (y : ↑X),\\n y ∈ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\\n Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ A) ∨\\n y ∉ Grothendieck.Contenu.support (Grothendieck.Contenu.skyscraper p₀ A) ∧\\n Nonempty ((Grothendieck.Contenu.skyscraper p₀ A).stalk y ≅ ⊤_ C)\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 25, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 25, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"'Grothendieck.opensTopology_subcanonical' depends on axioms: [propext, Classical.choice, Quot.sound]\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 26, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 26, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"'Grothendieck.isSheaf_iff_germSeparated_and_germGluing' depends on axioms: [propext, Classical.choice, Quot.sound]\"},\r\n", + " {\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 27, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 27, \"column\": 6},\r\n", + " \"data\":\r\n", + " \"'Grothendieck.Contenu.support_skyscraper' depends on axioms: [propext, Classical.choice, Quot.sound]\"}],\r\n", + " \"env\": 14}" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "-- SpacesMathlib : le site construit dans le lake coïncide avec celui de Mathlib\n", + "#check @Grothendieck.opensTopology_eq\n", + "#check @Grothendieck.isSheaf_opensTopology_iff\n", + "#check @Grothendieck.coversTop_opensTopology_iff\n", + "\n", + "-- SpacesSubcanonical : tout représentable sur le site des ouverts est un faisceau\n", + "#check @Grothendieck.isSheaf_yoneda_opensTopology\n", + "#check @Grothendieck.opensTopology_subcanonical\n", + "\n", + "-- StalkCharacterization : séparation et recollement se lisent sur les germes\n", + "#check @Grothendieck.GermSeparated\n", + "#check @Grothendieck.GermGluing\n", + "#check @Grothendieck.germ_eq_of_isCompatible\n", + "#check @Grothendieck.isSheaf_iff_germSeparated_and_germGluing\n", + "\n", + "-- Skyscraper : support et dichotomie des tiges autour du point choisi\n", + "#check @Grothendieck.Contenu.skyscraper\n", + "#check @Grothendieck.Contenu.stalkIsoOfMemClosure\n", + "#check @Grothendieck.Contenu.stalkIsoOfNotMemClosure\n", + "#check @Grothendieck.Contenu.support_skyscraper\n", + "#check @Grothendieck.Contenu.support_skyscraper_of_closed\n", + "#check @Grothendieck.Contenu.stalk_dichotomy\n", + "\n", + "-- Les résultats pivots restent auditables par le noyau Lean\n", + "#print axioms Grothendieck.opensTopology_subcanonical\n", + "#print axioms Grothendieck.isSheaf_iff_germSeparated_and_germGluing\n", + "#print axioms Grothendieck.Contenu.support_skyscraper" + ] + }, + { + "cell_type": "markdown", + "id": "c8a3b365", + "metadata": { + "papermill": { + "duration": 0.009009, + "end_time": "2026-09-20T09:10:48.171940+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:48.162931+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### Lecture du résultat\n", + "\n", + "Le premier groupe de signatures établit un pont sans couche de traduction : la topologie des ouverts du lake est celle de Mathlib, puis sa sous-canonicité autorise Yoneda à produire des faisceaux. La caractérisation par les germes sépare ensuite les deux obligations d’un faisceau : l’unicité locale (`GermSeparated`) et l’existence d’un recollement (`GermGluing`).\n", + "\n", + "Le gratte-ciel rend cette abstraction géométrique. Sa tige est isomorphe à la valeur choisie dans l’adhérence du point et terminale hors de cette adhérence. Sous l’hypothèse que la valeur n’est pas terminale, `support_skyscraper` identifie donc exactement le support à cette adhérence. Les commandes `#print axioms` permettent enfin de contrôler les dépendances logiques des trois résultats pivots." + ] + }, + { + "cell_type": "markdown", + "id": "f3d749b9", + "metadata": { + "papermill": { + "duration": 0.009368, + "end_time": "2026-09-20T09:10:48.189798+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:48.180430+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### Exercice — retrouver la concentration au point fermé\n", + "\n", + "**Objectif.** Identifier le corollaire qui réduit le support du préfaisceau gratte-ciel au singleton du point lorsque celui-ci est fermé.\n", + "\n", + "1. Repérez la déclaration dont le nom prolonge `support_skyscraper`.\n", + "2. Comparez son hypothèse de fermeture avec celle du théorème général.\n", + "3. Décommentez le `#check`, puis ajoutez sous le message exécutable une micro-preuve qui applique ce corollaire dans un contexte de votre choix." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c359c91e", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-20T09:10:48.208323Z", + "iopub.status.busy": "2026-09-20T09:10:48.208131Z", + "iopub.status.idle": "2026-09-20T09:10:48.395441Z", + "shell.execute_reply": "2026-09-20T09:10:48.394448Z" + }, + "papermill": { + "duration": 0.197638, + "end_time": "2026-09-20T09:10:48.396064+00:00", + "exception": false, + "start_time": "2026-09-20T09:10:48.198426+00:00", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
-- Exercice : retrouver le corollaire pour un point ferme
\n", + "
-- #check Grothendieck.Contenu.support_skyscraper_of_closed
\n", + "
\n", + "
-- TODO etudiant : instanciez le corollaire avec un espace, un point et une valeur adaptes.
\n", + "
-- Indice : partez de `support_skyscraper`, puis utilisez `IsClosed.closure_eq`.
\n", + "
\n", + "
-- Le stub reste executable de bout en bout (C.1) sans pre-remplir une preuve.
\n", + "
"Exercice a completer : instancier le corollaire pour un point ferme"
\n", + "
--% env 15
\n", + "
\n", + "
\n", + " Raw input\n", + " {\"cmd\": \"-- Exercice : retrouver le corollaire pour un point ferme\\n-- #check Grothendieck.Contenu.support_skyscraper_of_closed\\n\\n-- TODO etudiant : instanciez le corollaire avec un espace, un point et une valeur adaptes.\\n-- Indice : partez de `support_skyscraper`, puis utilisez `IsClosed.closure_eq`.\\n\\n-- Le stub reste executable de bout en bout (C.1) sans pre-remplir une preuve.\\n#eval \\\"Exercice a completer : instancier le corollaire pour un point ferme\\\"\", \"env\": 14}\n", + "
\n", + "
\n", + " Raw output\n", + " {\"messages\":\r\n", + " [{\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 8, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 8, \"column\": 5},\r\n", + " \"data\":\r\n", + " \"\\\"Exercice a completer : instancier le corollaire pour un point ferme\\\"\"}],\r\n", + " \"env\": 15}\n", + "
\n", + " " + ], + "text/plain": [ + "-- Exercice : retrouver le corollaire pour un point ferme\n", + "-- #check Grothendieck.Contenu.support_skyscraper_of_closed\n", + "\n", + "-- TODO etudiant : instanciez le corollaire avec un espace, un point et une valeur adaptes.\n", + "-- Indice : partez de `support_skyscraper`, puis utilisez `IsClosed.closure_eq`.\n", + "\n", + "-- Le stub reste executable de bout en bout (C.1) sans pre-remplir une preuve.\n", + "#eval \"Exercice a completer : instancier le corollaire pour un point ferme\"\n", + "─────▶ \"Exercice a completer : instancier le corollaire pour un point ferme\"\n", + "--% env 15\n", + "\n", + "Raw input:\n", + "{\"cmd\": \"-- Exercice : retrouver le corollaire pour un point ferme\\n-- #check Grothendieck.Contenu.support_skyscraper_of_closed\\n\\n-- TODO etudiant : instanciez le corollaire avec un espace, un point et une valeur adaptes.\\n-- Indice : partez de `support_skyscraper`, puis utilisez `IsClosed.closure_eq`.\\n\\n-- Le stub reste executable de bout en bout (C.1) sans pre-remplir une preuve.\\n#eval \\\"Exercice a completer : instancier le corollaire pour un point ferme\\\"\", \"env\": 14}\n", + "Raw output:\n", + "{\"messages\":\r\n", + " [{\"severity\": \"info\",\r\n", + " \"pos\": {\"line\": 8, \"column\": 0},\r\n", + " \"endPos\": {\"line\": 8, \"column\": 5},\r\n", + " \"data\":\r\n", + " \"\\\"Exercice a completer : instancier le corollaire pour un point ferme\\\"\"}],\r\n", + " \"env\": 15}" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "-- Exercice : retrouver le corollaire pour un point ferme\n", + "-- #check Grothendieck.Contenu.support_skyscraper_of_closed\n", + "\n", + "-- TODO etudiant : instanciez le corollaire avec un espace, un point et une valeur adaptes.\n", + "-- Indice : partez de `support_skyscraper`, puis utilisez `IsClosed.closure_eq`.\n", + "\n", + "-- Le stub reste executable de bout en bout (C.1) sans pre-remplir une preuve.\n", + "#eval \"Exercice a completer : instancier le corollaire pour un point ferme\"" + ] + }, { "cell_type": "markdown", "id": "6f06ac85", "metadata": { "papermill": { - "duration": 0.006462, - "end_time": "2026-09-07T11:09:55.397724+00:00", + "duration": 0.009878, + "end_time": "2026-09-20T09:10:48.414579+00:00", "exception": false, - "start_time": "2026-09-07T11:09:55.391262+00:00", + "start_time": "2026-09-20T09:10:48.404701+00:00", "status": "completed" }, "tags": [] @@ -4149,10 +4748,22 @@ "name": "lean4-wsl" }, "language_info": { - "codemirror_mode": "python", + "codemirror_mode": "lean4", "file_extension": ".lean", "mimetype": "text/x-lean4", "name": "lean4" + }, + "papermill": { + "default_parameters": {}, + "duration": 236.082829, + "end_time": "2026-09-20T09:10:51.736274+00:00", + "environment_variables": {}, + "exception": null, + "input_path": "Lean-15c-Lean-Grothendieck-Companion.ipynb", + "output_path": "Lean-15c-Lean-Grothendieck-Companion.ipynb", + "parameters": {}, + "start_time": "2026-09-20T09:06:55.653445+00:00", + "version": "2.7.0" } }, "nbformat": 4,