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]
theorem CategoryTheory.prod_Hom (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] (X : C × D) (Y : C × D) :
(X Y) = ((X.1 Y.1) × (X.2 Y.2))

prod C D gives the cartesian product of two categories.

See .

Equations
@[simp]

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

@[simp]
theorem CategoryTheory.prod_comp (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {P : C} {Q : C} {R : C} {S : D} {T : D} {U : D} (f : (P, S) (Q, T)) (g : (Q, T) (R, U)) :

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

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

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

      Equations
      @[simp]
      @[simp]
      theorem CategoryTheory.Prod.sectl_obj (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (Z : D) (X : C) :
      (CategoryTheory.Prod.sectl C Z).toPrefunctor.obj X = (X, Z)

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

      Equations
      Instances For
        @[simp]
        theorem CategoryTheory.Prod.sectr_obj {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] (Z : C) (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] (X : D) :
        (CategoryTheory.Prod.sectr Z D).toPrefunctor.obj X = (Z, X)
        @[simp]

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

        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).toPrefunctor.map f = f.1
          @[simp]

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

          Equations
          Instances For
            @[simp]
            @[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).toPrefunctor.map f = f.2

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

            Equations
            Instances For
              @[simp]
              theorem CategoryTheory.Prod.swap_obj (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] (X : C × D) :
              (CategoryTheory.Prod.swap C D).toPrefunctor.obj X = (X.2, X.1)
              @[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).toPrefunctor.map f = (f.2, f.1)

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

              Equations
              Instances For

                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
                  @[simp]
                  theorem CategoryTheory.Prod.braiding_inverse_map (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] :
                  ∀ {X Y : D × C} (f : X Y), (CategoryTheory.Prod.braiding C D).inverse.toPrefunctor.map f = (f.2, f.1)
                  @[simp]
                  @[simp]
                  theorem CategoryTheory.Prod.braiding_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.Prod.braiding C D).functor.toPrefunctor.map f = (f.2, f.1)
                  @[simp]

                  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
                    @[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_1 Y : CategoryTheory.Functor C D} (α : X_1 Y), ((CategoryTheory.evaluation C D).toPrefunctor.obj X).toPrefunctor.map α = α.app X
                    @[simp]
                    theorem CategoryTheory.evaluation_map_app (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] {X : C} {Y : C} (f : X Y) (F : CategoryTheory.Functor C D) :
                    ((CategoryTheory.evaluation C D).toPrefunctor.map f).app F = F.toPrefunctor.map f
                    @[simp]
                    theorem CategoryTheory.evaluation_obj_obj (C : Type u₁) [CategoryTheory.Category.{v₁, u₁} C] (D : Type u₂) [CategoryTheory.Category.{v₂, u₂} D] (X : C) (F : CategoryTheory.Functor C D) :
                    ((CategoryTheory.evaluation C D).toPrefunctor.obj X).toPrefunctor.obj F = F.toPrefunctor.obj X

                    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

                      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
                          @[simp]
                          theorem CategoryTheory.Functor.prod_obj {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 : A × C) :
                          (CategoryTheory.Functor.prod F G).toPrefunctor.obj X = (F.toPrefunctor.obj X.1, G.toPrefunctor.obj X.2)
                          @[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), (CategoryTheory.Functor.prod F G).toPrefunctor.map f = (F.toPrefunctor.map f.1, G.toPrefunctor.map f.2)

                          The cartesian product of two functors.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            @[simp]
                            theorem CategoryTheory.Functor.prod'_obj {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) (a : A) :
                            (CategoryTheory.Functor.prod' F G).toPrefunctor.obj a = (F.toPrefunctor.obj a, G.toPrefunctor.obj a)
                            @[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), (CategoryTheory.Functor.prod' F G).toPrefunctor.map f = (F.toPrefunctor.map f, G.toPrefunctor.map f)

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

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

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

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

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

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.Functor.diag_obj (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] (X : C) :
                                  (CategoryTheory.Functor.diag C).toPrefunctor.obj X = (X, X)
                                  @[simp]
                                  theorem CategoryTheory.Functor.diag_map (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] {X : C} {Y : C} (f : X Y) :
                                  (CategoryTheory.Functor.diag C).toPrefunctor.map f = (f, f)

                                  The cartesian product of two natural transformations.

                                  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

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

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        @[simp]
                                        theorem CategoryTheory.prodFunctorToFunctorProd_map_app (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 × CategoryTheory.Functor A C} (f : X Y) (X_1 : A), ((CategoryTheory.prodFunctorToFunctorProd A B C).toPrefunctor.map f).app X_1 = (f.1.app X_1, f.2.app X_1)

                                        The forward 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).toPrefunctor.map α = (CategoryTheory.NatTrans.mk fun (X_1 : A) => (α.app X_1).1, CategoryTheory.NatTrans.mk fun (X_1 : A) => (α.app X_1).2)

                                          The backward direction for functorProdFunctorEquiv

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

                                            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
                                              @[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.toPrefunctor.map x = match x with | (f, g) => Opposite.op (f.unop, g.unop)
                                              @[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.toPrefunctor.map f = (f.unop.1.op, f.unop.2.op)
                                              @[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 (CategoryTheory.Functor.comp (CategoryTheory.Functor.mk { obj := fun (x : Cᵒᵖ × Dᵒᵖ) => match x with | (X, Y) => Opposite.op (X.unop, Y.unop), map := fun {X Y : Cᵒᵖ × Dᵒᵖ} (x : X Y) => match x with | (f, g) => Opposite.op (f.unop, g.unop) }) (CategoryTheory.Functor.mk { obj := fun (X : (C × D)ᵒᵖ) => (Opposite.op X.unop.1, Opposite.op X.unop.2), map := fun {X Y : (C × D)ᵒᵖ} (f : X Y) => (f.unop.1.op, f.unop.2.op) }))
                                              @[simp]
                                              theorem CategoryTheory.prodOpEquiv_inverse_obj (C : Type u₃) [CategoryTheory.Category.{v₃, u₃} C] {D : Type u₄} [CategoryTheory.Category.{v₄, u₄} D] :
                                              ∀ (x : Cᵒᵖ × Dᵒᵖ), (CategoryTheory.prodOpEquiv C).inverse.toPrefunctor.obj x = match x with | (X, Y) => Opposite.op (X.unop, Y.unop)

                                              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