-- Mathlib.CategoryTheory.Monoidal.DayConvolution
/-- Under suitable assumptions on existence of relevant Kan extensions and preservation
of relevant colimits by the tensor product of `V`, we can define a `MonoidalCategory D`
from the data of a fully faithful functor `ι : D ⥤ C ⥤ V` whose essential image
contains a Day convolution unit and is stable under binary Day convolutions.  -/
CategoryTheory.MonoidalCategory.monoidalOfHasDayConvolutions : {C : Type u₁} →
  [inst : CategoryTheory.Category.{v₁, u₁} C] →
    {V : Type u₂} →
      [inst_1 : CategoryTheory.Category.{v₂, u₂} V] →
        [inst_2 : CategoryTheory.MonoidalCategory C] →
          [inst_3 : CategoryTheory.MonoidalCategory V] →
            {D : Type u₃} →
              [inst_4 : CategoryTheory.Category.{v₃, u₃} D] →
                (ι : CategoryTheory.Functor D (CategoryTheory.Functor C V)) →
                  ι.FullyFaithful →
                    [hasDayConvolution :
                        ∀ (d d' : D),
                          (CategoryTheory.MonoidalCategory.tensor C).HasPointwiseLeftKanExtension
                            (CategoryTheory.MonoidalCategory.externalProduct (ι.obj d) (ι.obj d'))] →
                      (∀ (d d' : D),
                          ι.essImage
                            ((CategoryTheory.MonoidalCategory.tensor C).pointwiseLeftKanExtension
                              (CategoryTheory.MonoidalCategory.externalProduct (ι.obj d) (ι.obj d')))) →
                        [hasDayConvolutionUnit :
                            (CategoryTheory.Functor.fromPUnit
                                  (CategoryTheory.MonoidalCategoryStruct.tensorUnit C)).HasPointwiseLeftKanExtension
                              (CategoryTheory.Functor.fromPUnit (CategoryTheory.MonoidalCategoryStruct.tensorUnit V))] →
                          ι.essImage
                              ((CategoryTheory.Functor.fromPUnit
                                    (CategoryTheory.MonoidalCategoryStruct.tensorUnit C)).pointwiseLeftKanExtension
                                (CategoryTheory.Functor.fromPUnit
                                  (CategoryTheory.MonoidalCategoryStruct.tensorUnit V))) →
                            [∀ (v : V) (d : C),
                                  CategoryTheory.Limits.PreservesColimitsOfShape
                                    (CategoryTheory.CostructuredArrow (CategoryTheory.MonoidalCategory.tensor C) d)
                                    (CategoryTheory.MonoidalCategory.tensorLeft v)] →
                              [∀ (v : V) (d : C),
                                    CategoryTheory.Limits.PreservesColimitsOfShape
                                      (CategoryTheory.CostructuredArrow (CategoryTheory.MonoidalCategory.tensor C) d)
                                      (CategoryTheory.MonoidalCategory.tensorRight v)] →
                                [∀ (v : V) (d : C),
                                      CategoryTheory.Limits.PreservesColimitsOfShape
                                        (CategoryTheory.CostructuredArrow
                                          (CategoryTheory.Functor.fromPUnit
                                            (CategoryTheory.MonoidalCategoryStruct.tensorUnit C))
                                          d)
                                        (CategoryTheory.MonoidalCategory.tensorLeft v)] →
                                  [∀ (v : V) (d : C),
                                        CategoryTheory.Limits.PreservesColimitsOfShape
                                          (CategoryTheory.CostructuredArrow
                                            (CategoryTheory.Functor.fromPUnit
                                              (CategoryTheory.MonoidalCategoryStruct.tensorUnit C))
                                            d)
                                          (CategoryTheory.MonoidalCategory.tensorRight v)] →
                                    [∀ (v : V) (d : C × C),
                                          CategoryTheory.Limits.PreservesColimitsOfShape
                                            (CategoryTheory.CostructuredArrow
                                              ((CategoryTheory.Functor.id C).prod
                                                (CategoryTheory.Functor.fromPUnit
                                                  (CategoryTheory.MonoidalCategoryStruct.tensorUnit C)))
                                              d)
                                            (CategoryTheory.MonoidalCategory.tensorRight v)] →
                                      [∀ (v : V) (d : C × C),
                                            CategoryTheory.Limits.PreservesColimitsOfShape
                                              (CategoryTheory.CostructuredArrow
                                                ((CategoryTheory.MonoidalCategory.tensor C).prod
                                                  (CategoryTheory.Functor.id C))
                                                d)
                                              (CategoryTheory.MonoidalCategory.tensorRight v)] →
                                        CategoryTheory.MonoidalCategory D