{-# OPTIONS --safe --lossy-unification #-}

module Cubical.Categories.Constructions.BinProduct.Redundant.Assoc where

open import Cubical.Foundations.Prelude
open import Cubical.Categories.Category.Base
open import Cubical.Categories.Functor.Base hiding (Id)
open import Cubical.Categories.Instances.Functors.Redundant
open import Cubical.Categories.Instances.Functors.Redundant.Bifunctor
open import Cubical.Categories.NaturalTransformation
open import Cubical.Data.Graph.Base
open import Cubical.Data.Sum as Sum hiding (rec)
open import Cubical.Data.Sigma

import Cubical.Categories.Constructions.BinProduct.Redundant.Assoc.ToRight
  as ToRight
import Cubical.Categories.Constructions.BinProduct.Redundant.Assoc.ToLeft
  as ToLeft
open import Cubical.Categories.Constructions.BinProduct.Redundant.Base as BP
open import Cubical.Categories.Constructions.Free.Category.Quiver as Free
  hiding (rec)
open import Cubical.Categories.Constructions.Presented as Presented
open import Cubical.Categories.Bifunctor.Redundant

private
  variable
    ℓc ℓc' ℓd ℓd' ℓe ℓe' ℓf ℓf' : Level

module _ {C : Category ℓc ℓc'}
         {D : Category ℓd ℓd'}{E : Category ℓe ℓe'}{F : Category ℓf ℓf'} where
  assoc-bif : Bifunctor (C ×C D) E F  Bifunctor C (D ×C E) F
  assoc-bif G = Functor→Bifunctor (rec (C ×C D) E G ∘F ToLeft.Assoc)

  assoc-bif⁻ : Bifunctor C (D ×C E) F  Bifunctor (C ×C D) E F
  assoc-bif⁻ G = Functor→Bifunctor (rec C (D ×C E) G ∘F ToRight.Assoc)