Products of Cauchy series of species of types

module species.products-cauchy-series-species-of-types where
Imports
open import foundation.cartesian-product-types
open import foundation.coproduct-types
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.functoriality-cartesian-product-types
open import foundation.functoriality-dependent-pair-types
open import foundation.homotopies
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.univalence
open import foundation.universal-property-coproduct-types
open import foundation.universe-levels

open import species.cauchy-products-species-of-types
open import species.cauchy-series-species-of-types
open import species.species-of-types

Idea

The product of two Cauchy series is just the pointwise product.

Definition

product-cauchy-series-species-types :
  {l1 l2 l3 l4 : Level}  species-types l1 l2  species-types l1 l3 
  UU l4  UU (lsuc l1  l2  l3  l4)
product-cauchy-series-species-types S T X =
  cauchy-series-species-types S X × cauchy-series-species-types T X

Properties

The Cauchy series associated to the Cauchy product of S and T is equal to the product of theirs Cauchy series

module _
  {l1 l2 l3 l4 : Level}
  (S : species-types l1 l2)
  (T : species-types l1 l3)
  (X : UU l4)
  where

  private
    reassociate :
      cauchy-series-species-types (cauchy-product-species-types S T) X 
      Σ ( UU l1)
        ( λ A 
          Σ ( UU l1)
            ( λ B 
              Σ ( Σ ( UU l1)  F  F  (A + B)))
                ( λ F  ((S A) × (T B)) × (pr1 F  X))))
    pr1 reassociate (F , ((A , B , e) , x) , y) = (A , B , (F , e) , x , y)
    pr2 reassociate =
      is-equiv-has-inverse
        ( λ (A , B , (F , e) , x , y)  (F , ((A , B , e) , x) , y))
        ( refl-htpy)
        ( refl-htpy)

    reassociate' :
      Σ ( UU l1)
        ( λ A  Σ (UU l1)  B  (S A × T B) × ((A  X) × (B  X)))) 
      product-cauchy-series-species-types S T X
    pr1 reassociate' (A , B , (s , t) , (fs , ft)) =
      ((A , (s , fs)) , (B , (t , ft)))
    pr2 reassociate' =
      is-equiv-has-inverse
        ( λ ((A , (s , fs)) , (B , (t , ft))) 
          (A , B , (s , t) , (fs , ft)))
        ( refl-htpy)
        ( refl-htpy)

  equiv-cauchy-series-cauchy-product-species-types :
    cauchy-series-species-types (cauchy-product-species-types S T) X 
    product-cauchy-series-species-types S T X
  equiv-cauchy-series-cauchy-product-species-types =
     ( reassociate') ∘e
     ( ( equiv-tot
         ( λ A 
           equiv-tot
             ( λ B 
               ( equiv-prod
                 ( id-equiv)
                 ( equiv-universal-property-coprod X)) ∘e
               ( left-unit-law-Σ-is-contr
                 ( is-contr-total-equiv' (A + B))
                 ( A + B , id-equiv))))) ∘e
       ( reassociate))