Documentation

Mathlib.CategoryTheory.Products.Basic

Cartesian products of categories #

We define the category instance on C × D when C and D are categories.

We define:

We further define evaluation : C ⥤ (C ⥤ D) ⥤ D and evaluationUncurried : C × (C ⥤ D) ⥤ D, and products of functors and natural transformations, written F.prod G and α.prod β.

@[simp]
@[simp]
@[simp]
theorem CategoryTheory.prod_Hom (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] (X Y : C × D) :
(X Y) = ((X.1 Y.1) × (X.2 Y.2))
theorem CategoryTheory.prod.hom_ext (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {X Y : C × D} {f g : X Y} (h₁ : f.1 = g.1) (h₂ : f.2 = g.2) :
f = g
@[simp]

Two rfl lemmas that cannot be generated by @[simps].

The isomorphism between (X.1, X.2) and X.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def CategoryTheory.Iso.prod {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {P Q : C} {S T : D} (f : P Q) (g : S T) :
    (P, S) (Q, T)

    Construct an isomorphism in C × D out of two isomorphisms in C and D.

    Equations
    • f.prod g = { hom := (f.hom, g.hom), inv := (f.inv, g.inv), hom_inv_id := , inv_hom_id := }
    Instances For
      @[simp]
      theorem CategoryTheory.Iso.prod_hom {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {P Q : C} {S T : D} (f : P Q) (g : S T) :
      (f.prod g).hom = (f.hom, g.hom)
      @[simp]
      theorem CategoryTheory.Iso.prod_inv {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] {P Q : C} {S T : D} (f : P Q) (g : S T) :
      (f.prod g).inv = (f.inv, g.inv)

      Category.uniformProd C D is an additional instance specialised so both factors have the same universe levels. This helps typeclass resolution.

      Equations

      sectL C Z is the functor C ⥤ C × D given by X ↦ (X, Z).

      Equations
      Instances For

        sectR Z D is the functor D ⥤ C × D given by Y ↦ (Z, Y) .

        Equations
        Instances For
          @[deprecated CategoryTheory.Prod.sectL]

          Alias of CategoryTheory.Prod.sectL.


          sectL C Z is the functor C ⥤ C × D given by X ↦ (X, Z).

          Equations
          Instances For
            @[deprecated CategoryTheory.Prod.sectR]

            Alias of CategoryTheory.Prod.sectR.


            sectR Z D is the functor D ⥤ C × D given by Y ↦ (Z, Y) .

            Equations
            Instances For
              @[deprecated CategoryTheory.Prod.sectL_obj]

              Alias of CategoryTheory.Prod.sectL_obj.

              @[deprecated CategoryTheory.Prod.sectR_obj]

              Alias of CategoryTheory.Prod.sectR_obj.

              @[deprecated CategoryTheory.Prod.sectL_map]

              Alias of CategoryTheory.Prod.sectL_map.

              @[deprecated CategoryTheory.Prod.sectR_map]

              Alias of CategoryTheory.Prod.sectR_map.

              fst is the functor (X, Y) ↦ X.

              Equations
              Instances For
                @[simp]
                theorem CategoryTheory.Prod.fst_map (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {X✝ Y✝ : C × D} (f : X✝ Y✝) :
                (CategoryTheory.Prod.fst C D).map f = f.1

                snd is the functor (X, Y) ↦ Y.

                Equations
                Instances For
                  @[simp]
                  theorem CategoryTheory.Prod.snd_map (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {X✝ Y✝ : C × D} (f : X✝ Y✝) :
                  (CategoryTheory.Prod.snd C D).map f = f.2

                  The functor swapping the factors of a cartesian product of categories, C × D ⥤ D × C.

                  Equations
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Prod.swap_map (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {X✝ Y✝ : C × D} (f : X✝ Y✝) :
                    (CategoryTheory.Prod.swap C D).map f = (f.2, f.1)

                    Swapping the factors of a cartesian product of categories twice is naturally isomorphic to the identity functor.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      The equivalence, given by swapping factors, between C × D and D × C.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        The "evaluation at X" functor, such that (evaluation.obj X).obj F = F.obj X, which is functorial in both X and F.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[simp]
                          theorem CategoryTheory.evaluation_map_app (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {x✝ x✝¹ : C} (f : x✝ x✝¹) (F : CategoryTheory.Functor C D) :
                          ((CategoryTheory.evaluation C D).map f).app F = F.map f
                          @[simp]
                          theorem CategoryTheory.evaluation_obj_map (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] (X : C) {X✝ Y✝ : CategoryTheory.Functor C D} (α : X✝ Y✝) :
                          ((CategoryTheory.evaluation C D).obj X).map α = α.app X

                          The "evaluation of F at X" functor, as a functor C × (C ⥤ D) ⥤ D.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For

                            The constant functor followed by the evaluation functor is just the identity.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For

                              The cartesian product of two functors.

                              Equations
                              • F.prod G = { obj := fun (X : A × C) => (F.obj X.1, G.obj X.2), map := fun {X Y : A × C} (f : X Y) => (F.map f.1, G.map f.2), map_id := , map_comp := }
                              Instances For
                                @[simp]
                                theorem CategoryTheory.Functor.prod_map {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {C : Type u₃} [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] (F : CategoryTheory.Functor A B) (G : CategoryTheory.Functor C D) {X✝ Y✝ : A × C} (f : X✝ Y✝) :
                                (F.prod G).map f = (F.map f.1, G.map f.2)

                                Similar to prod, but both functors start from the same category A

                                Equations
                                • F.prod' G = { obj := fun (a : A) => (F.obj a, G.obj a), map := fun {X Y : A} (f : X Y) => (F.map f, G.map f), map_id := , map_comp := }
                                Instances For
                                  @[simp]
                                  @[simp]
                                  theorem CategoryTheory.Functor.prod'_map {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {C : Type u₃} [CategoryTheory.Category.{v₃, u₃} C] (F : CategoryTheory.Functor A B) (G : CategoryTheory.Functor A C) {X✝ Y✝ : A} (f : X✝ Y✝) :
                                  (F.prod' G).map f = (F.map f, G.map f)

                                  The product F.prod' G followed by projection on the first component is isomorphic to F

                                  Equations
                                  Instances For

                                    The product F.prod' G followed by projection on the second component is isomorphic to G

                                    Equations
                                    Instances For
                                      @[simp]

                                      The cartesian product of two natural transformations.

                                      Equations
                                      Instances For
                                        @[simp]

                                        The cartesian product of two natural transformations.

                                        Equations
                                        Instances For

                                          The cartesian product functor between functor categories

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            The cartesian product of two natural isomorphisms.

                                            Equations
                                            Instances For

                                              The cartesian product of two equivalences of categories.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Equivalence.prod_functor {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {C : Type u₃} [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] (E₁ : A B) (E₂ : C D) :
                                                (E₁.prod E₂).functor = E₁.functor.prod E₂.functor
                                                @[simp]
                                                theorem CategoryTheory.Equivalence.prod_inverse {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {C : Type u₃} [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] (E₁ : A B) (E₂ : C D) :
                                                (E₁.prod E₂).inverse = E₁.inverse.prod E₂.inverse
                                                @[simp]
                                                theorem CategoryTheory.Equivalence.prod_unitIso {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {C : Type u₃} [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] (E₁ : A B) (E₂ : C D) :
                                                (E₁.prod E₂).unitIso = CategoryTheory.NatIso.prod E₁.unitIso E₂.unitIso
                                                @[simp]
                                                theorem CategoryTheory.Equivalence.prod_counitIso {A : Type u₁} [CategoryTheory.Category.{v₁, u₁} A] {B : Type u₂} [CategoryTheory.Category.{v₂, u₂} B] {C : Type u₃} [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] (E₁ : A B) (E₂ : C D) :
                                                (E₁.prod E₂).counitIso = CategoryTheory.NatIso.prod E₁.counitIso E₂.counitIso

                                                F.flip composed with evaluation is the same as evaluating F.

                                                Equations
                                                Instances For

                                                  F composed with evaluation is the same as evaluating F.flip.

                                                  Equations
                                                  Instances For

                                                    Whiskering by F and then evaluating at a is the same as evaluating at F.obj a.

                                                    Equations
                                                    Instances For
                                                      @[simp]

                                                      Whiskering by F and then evaluating at a is the same as evaluating at F.obj a.

                                                      Whiskering by F and then evaluating at a is the same as evaluating at F and then applying F.

                                                      Equations
                                                      Instances For
                                                        @[simp]

                                                        Whiskering by F and then evaluating at a is the same as evaluating at F and then applying F.

                                                        The forward direction for functorProdFunctorEquiv

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For

                                                          The backward direction for functorProdFunctorEquiv

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            @[simp]
                                                            theorem CategoryTheory.functorProdToProdFunctor_map (A : Type u₁) [CategoryTheory.Category.{v₁, u₁} A] (B : Type u₂) [CategoryTheory.Category.{v₂, u₂} B] (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] {X✝ Y✝ : CategoryTheory.Functor A (B × C)} (α : X✝ Y✝) :
                                                            (CategoryTheory.functorProdToProdFunctor A B C).map α = ({ app := fun (X : A) => (α.app X).1, naturality := }, { app := fun (X : A) => (α.app X).2, naturality := })

                                                            The equivalence of categories between (A ⥤ B) × (A ⥤ C) and A ⥤ (B × C)

                                                            Equations
                                                            • One or more equations did not get rendered due to their size.
                                                            Instances For

                                                              The equivalence between the opposite of a product and the product of the opposites.

                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                @[simp]
                                                                theorem CategoryTheory.prodOpEquiv_inverse_map (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] {X✝ Y✝ : Cᵒᵖ × Dᵒᵖ} (x✝ : X✝ Y✝) :
                                                                (CategoryTheory.prodOpEquiv C).inverse.map x✝ = match x✝ with | (f, g) => Opposite.op (f.unop, g.unop)
                                                                @[simp]
                                                                theorem CategoryTheory.prodOpEquiv_counitIso (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] :
                                                                (CategoryTheory.prodOpEquiv C).counitIso = CategoryTheory.Iso.refl ({ obj := fun (x : Cᵒᵖ × Dᵒᵖ) => match x with | (X, Y) => Opposite.op (Opposite.unop X, Opposite.unop Y), map := fun {X Y : Cᵒᵖ × Dᵒᵖ} (x : X Y) => match x with | (f, g) => Opposite.op (f.unop, g.unop), map_id := , map_comp := }.comp { obj := fun (X : (C × D)ᵒᵖ) => (Opposite.op (Opposite.unop X).1, Opposite.op (Opposite.unop X).2), map := fun {X Y : (C × D)ᵒᵖ} (f : X Y) => (f.unop.1.op, f.unop.2.op), map_id := , map_comp := })
                                                                @[simp]
                                                                theorem CategoryTheory.prodOpEquiv_functor_map (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] {X✝ Y✝ : (C × D)ᵒᵖ} (f : X✝ Y✝) :
                                                                (CategoryTheory.prodOpEquiv C).functor.map f = (f.unop.1.op, f.unop.2.op)