|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Jack McCarthy. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Jack McCarthy |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Geometry.Manifold.Category.MfldCat.Basic |
| 9 | +public import Mathlib.CategoryTheory.Monoidal.Cartesian.Basic |
| 10 | + |
| 11 | +/-! |
| 12 | +# The cartesian monoidal structure on `MfldCat` |
| 13 | +
|
| 14 | +We endow `MfldCat 𝕜 n` with its cartesian monoidal structure: the monoidal product is the |
| 15 | +product manifold `prodObj M N`, and the unit is the singleton `PUnit`, viewed as a |
| 16 | +zero-dimensional `𝕜`-manifold (`point`). We also derive the induced braided category structure. |
| 17 | +-/ |
| 18 | + |
| 19 | +@[expose] public section |
| 20 | + |
| 21 | +open CategoryTheory Limits MonoidalCategory |
| 22 | +open scoped Manifold ContDiff |
| 23 | + |
| 24 | +universe u v |
| 25 | + |
| 26 | +namespace MfldCat |
| 27 | + |
| 28 | +variable {𝕜 : Type v} [NontriviallyNormedField 𝕜] {n : ℕ∞ω} |
| 29 | + |
| 30 | +/-- The product of two manifolds as an object of `MfldCat`. The chart space is |
| 31 | +`ModelProd M.H N.H` and the model is `M.I.prod N.I`, so `prodObj M N` is the product manifold |
| 32 | +in the standard sense. -/ |
| 33 | +def prodObj (M N : MfldCat.{u} 𝕜 n) : MfldCat.{u} 𝕜 n := |
| 34 | + of (M × N) (M.E × N.E) (ModelProd M.H N.H) (M.I.prod N.I) |
| 35 | + |
| 36 | +/-- Limit data for the binary product of `M` and `N` in `MfldCat`, using `prodObj M N`. -/ |
| 37 | +def binaryProductLimitCone (M N : MfldCat.{u} 𝕜 n) : LimitCone (pair M N) where |
| 38 | + cone := BinaryFan.mk (P := prodObj M N) |
| 39 | + (ofHom ⟨Prod.fst, contMDiff_fst⟩) (ofHom ⟨Prod.snd, contMDiff_snd⟩) |
| 40 | + isLimit := BinaryFan.IsLimit.mk _ |
| 41 | + (fun l r => ofHom ⟨fun s => (l s, r s), l.hom.contMDiff.prodMk r.hom.contMDiff⟩) |
| 42 | + (fun _ _ => rfl) (fun _ _ => rfl) |
| 43 | + (fun _ _ _ h₁ h₂ => by |
| 44 | + ext x |
| 45 | + exact Prod.ext (ConcreteCategory.congr_hom h₁ x) (ConcreteCategory.congr_hom h₂ x)) |
| 46 | + |
| 47 | +/-- The singleton `PUnit`, viewed as a zero-dimensional `𝕜`-manifold. We use `PUnit.{u + 1}` |
| 48 | +(rather than `Fin 0 → 𝕜`, which lives in `𝕜`'s universe) so that `point` exists in |
| 49 | +`MfldCat.{u} 𝕜 n` for any universe `v` of `𝕜`. -/ |
| 50 | +def point : MfldCat.{u} 𝕜 n := ofNormedSpace n PUnit.{u + 1} |
| 51 | + |
| 52 | +/-- The point manifold is terminal in `MfldCat 𝕜 n`. -/ |
| 53 | +def isTerminalPoint : IsTerminal (point (𝕜 := 𝕜) (n := n)) := |
| 54 | + IsTerminal.ofUniqueHom (fun _ => ofHom ⟨fun _ => PUnit.unit, contMDiff_const⟩) |
| 55 | + (fun _ _ => by ext; rfl) |
| 56 | + |
| 57 | +/-- We choose `prodObj M N` as the product of `M` and `N` and `point` as the terminal object. -/ |
| 58 | +noncomputable instance cartesianMonoidalCategory : |
| 59 | + CartesianMonoidalCategory (MfldCat.{u} 𝕜 n) := |
| 60 | + .ofChosenFiniteProducts ⟨_, isTerminalPoint⟩ binaryProductLimitCone |
| 61 | + |
| 62 | +noncomputable instance : BraidedCategory (MfldCat.{u} 𝕜 n) := .ofCartesianMonoidalCategory |
| 63 | + |
| 64 | +@[simp] theorem tensorObj_eq (M N : MfldCat.{u} 𝕜 n) : (M ⊗ N) = prodObj M N := rfl |
| 65 | + |
| 66 | +end MfldCat |
0 commit comments