# Products of unordered tuples of types

```agda
module foundation.products-unordered-tuples-of-types where
```

<details><summary>Imports</summary>

```agda
open import elementary-number-theory.natural-numbers

open import foundation.dependent-pair-types
open import foundation.functoriality-dependent-function-types
open import foundation.universal-property-maybe
open import foundation.universe-levels
open import foundation.unordered-tuples
open import foundation.unordered-tuples-of-types

open import foundation-core.cartesian-product-types
open import foundation-core.equivalences

open import univalent-combinatorics.complements-isolated-elements
```

</details>

## Idea

Given an unordered pair of types, we can take their product. This is a
commutative version of the cartesian product operation on types.

## Definition

```agda
product-unordered-tuple-types :
  {l : Level} (n : )  unordered-tuple n (UU l)  (UU l)
product-unordered-tuple-types n p =
  (x : type-unordered-tuple n p)  element-unordered-tuple n p x

pr-product-unordered-tuple-types :
  {l : Level} (n : ) (A : unordered-tuple-types l n)
  (i : type-unordered-tuple n A) 
  product-unordered-tuple-types n A  element-unordered-tuple n A i
pr-product-unordered-tuple-types n A i f = f i

equiv-pr-product-unordered-tuple-types :
  {l : Level} (n : ) (A : unordered-tuple-types l (succ-ℕ n))
  (i : type-unordered-tuple (succ-ℕ n) A) 
  ( ( product-unordered-tuple-types n
      ( unordered-tuple-complement-point-type-unordered-tuple n A i)) ×
    ( element-unordered-tuple (succ-ℕ n) A i)) 
  product-unordered-tuple-types (succ-ℕ n) A
equiv-pr-product-unordered-tuple-types n A i =
  ( equiv-Π
    ( element-unordered-tuple (succ-ℕ n) A)
    ( equiv-maybe-structure-element-UU-Fin n
      ( type-unordered-tuple-UU-Fin (succ-ℕ n) A) i)
    ( λ x  id-equiv)) ∘e
  ( inv-equiv
    ( equiv-dependent-universal-property-Maybe
      ( λ j 
        element-unordered-tuple (succ-ℕ n) A
          ( map-equiv (equiv-maybe-structure-element-UU-Fin n
            ( type-unordered-tuple-UU-Fin (succ-ℕ n) A) i)
            ( j)))))

map-equiv-pr-product-unordered-tuple-types :
  {l : Level} (n : ) (A : unordered-tuple-types l (succ-ℕ n))
  (i : type-unordered-tuple (succ-ℕ n) A) 
  product-unordered-tuple-types n
    ( unordered-tuple-complement-point-type-unordered-tuple n A i) 
  element-unordered-tuple (succ-ℕ n) A i 
  product-unordered-tuple-types (succ-ℕ n) A
map-equiv-pr-product-unordered-tuple-types n A i f a =
  map-equiv (equiv-pr-product-unordered-tuple-types n A i) (pair f a)
```

### Equivalences of products of unordered pairs of types

```agda
module _
  {l1 l2 : Level} {n : } (A : unordered-tuple-types l1 n)
  (B : unordered-tuple-types l2 n)
  where

  equiv-product-unordered-tuple-types :
    equiv-unordered-tuple-types n A B 
    product-unordered-tuple-types n A  product-unordered-tuple-types n B
  equiv-product-unordered-tuple-types e =
    equiv-Π
      ( element-unordered-tuple n B)
      ( equiv-type-equiv-unordered-tuple-types n A B e)
      ( equiv-element-equiv-unordered-tuple-types n A B e)
```