# Dependent products of large precategories

```agda
module category-theory.dependent-products-of-large-precategories where
```

<details><summary>Imports</summary>

```agda
open import category-theory.isomorphisms-in-large-precategories
open import category-theory.large-precategories

open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.function-extensionality
open import foundation.identity-types
open import foundation.logical-equivalences
open import foundation.propositions
open import foundation.sets
open import foundation.strictly-involutive-identity-types
open import foundation.subtypes
open import foundation.universe-levels
```

</details>

## Idea

Given a family of [large precategories](category-theory.large-precategories.md)
`Pᵢ` indexed by `i : I`, the dependent product `Π(i : I), Pᵢ` is a large
precategory consisting of dependent functions taking `i : I` to an object of
`Pᵢ`. Every component of the structure is given pointwise.

## Definition

```agda
module _
  {l1 : Level} {α : Level  Level} {β : Level  Level  Level}
  (I : UU l1) (C : I  Large-Precategory α β)
  where

  obj-Π-Large-Precategory : (l2 : Level)  UU (l1  α l2)
  obj-Π-Large-Precategory l2 = (i : I)  obj-Large-Precategory (C i) l2

  hom-set-Π-Large-Precategory :
    {l2 l3 : Level} 
    obj-Π-Large-Precategory l2  obj-Π-Large-Precategory l3  Set (l1  β l2 l3)
  hom-set-Π-Large-Precategory x y =
    Π-Set' I  i  hom-set-Large-Precategory (C i) (x i) (y i))

  hom-Π-Large-Precategory :
    {l2 l3 : Level} 
    obj-Π-Large-Precategory l2  obj-Π-Large-Precategory l3  UU (l1  β l2 l3)
  hom-Π-Large-Precategory x y = type-Set (hom-set-Π-Large-Precategory x y)

  comp-hom-Π-Large-Precategory :
    {l2 l3 l4 : Level}
    {x : obj-Π-Large-Precategory l2}
    {y : obj-Π-Large-Precategory l3}
    {z : obj-Π-Large-Precategory l4} 
    hom-Π-Large-Precategory y z 
    hom-Π-Large-Precategory x y 
    hom-Π-Large-Precategory x z
  comp-hom-Π-Large-Precategory f g i =
    comp-hom-Large-Precategory (C i) (f i) (g i)

  involutive-eq-associative-comp-hom-Π-Large-Precategory :
    {l2 l3 l4 l5 : Level}
    {x : obj-Π-Large-Precategory l2}
    {y : obj-Π-Large-Precategory l3}
    {z : obj-Π-Large-Precategory l4}
    {w : obj-Π-Large-Precategory l5} 
    (h : hom-Π-Large-Precategory z w)
    (g : hom-Π-Large-Precategory y z)
    (f : hom-Π-Large-Precategory x y) 
    ( comp-hom-Π-Large-Precategory (comp-hom-Π-Large-Precategory h g) f) =ⁱ
    ( comp-hom-Π-Large-Precategory h (comp-hom-Π-Large-Precategory g f))
  involutive-eq-associative-comp-hom-Π-Large-Precategory h g f =
    involutive-eq-involutive-htpy
      ( λ i 
        involutive-eq-associative-comp-hom-Large-Precategory
          ( C i)
          ( h i)
          ( g i)
          ( f i))

  associative-comp-hom-Π-Large-Precategory :
    {l2 l3 l4 l5 : Level}
    {x : obj-Π-Large-Precategory l2}
    {y : obj-Π-Large-Precategory l3}
    {z : obj-Π-Large-Precategory l4}
    {w : obj-Π-Large-Precategory l5} 
    (h : hom-Π-Large-Precategory z w)
    (g : hom-Π-Large-Precategory y z)
    (f : hom-Π-Large-Precategory x y) 
    ( comp-hom-Π-Large-Precategory (comp-hom-Π-Large-Precategory h g) f) 
    ( comp-hom-Π-Large-Precategory h (comp-hom-Π-Large-Precategory g f))
  associative-comp-hom-Π-Large-Precategory h g f =
    eq-involutive-eq
      ( involutive-eq-associative-comp-hom-Π-Large-Precategory h g f)

  id-hom-Π-Large-Precategory :
    {l2 : Level} {x : obj-Π-Large-Precategory l2}  hom-Π-Large-Precategory x x
  id-hom-Π-Large-Precategory i = id-hom-Large-Precategory (C i)

  left-unit-law-comp-hom-Π-Large-Precategory :
    {l2 l3 : Level}
    {x : obj-Π-Large-Precategory l2}
    {y : obj-Π-Large-Precategory l3}
    (f : hom-Π-Large-Precategory x y) 
    comp-hom-Π-Large-Precategory id-hom-Π-Large-Precategory f  f
  left-unit-law-comp-hom-Π-Large-Precategory f =
    eq-htpy  i  left-unit-law-comp-hom-Large-Precategory (C i) (f i))

  right-unit-law-comp-hom-Π-Large-Precategory :
    {l2 l3 : Level}
    {x : obj-Π-Large-Precategory l2}
    {y : obj-Π-Large-Precategory l3}
    (f : hom-Π-Large-Precategory x y) 
    comp-hom-Π-Large-Precategory f id-hom-Π-Large-Precategory  f
  right-unit-law-comp-hom-Π-Large-Precategory f =
    eq-htpy  i  right-unit-law-comp-hom-Large-Precategory (C i) (f i))

  Π-Large-Precategory :
    Large-Precategory  l2  l1  α l2)  l2 l3  l1  β l2 l3)
  obj-Large-Precategory Π-Large-Precategory =
    obj-Π-Large-Precategory
  hom-set-Large-Precategory Π-Large-Precategory =
    hom-set-Π-Large-Precategory
  comp-hom-Large-Precategory Π-Large-Precategory =
    comp-hom-Π-Large-Precategory
  id-hom-Large-Precategory Π-Large-Precategory =
    id-hom-Π-Large-Precategory
  involutive-eq-associative-comp-hom-Large-Precategory Π-Large-Precategory =
    involutive-eq-associative-comp-hom-Π-Large-Precategory
  left-unit-law-comp-hom-Large-Precategory Π-Large-Precategory =
    left-unit-law-comp-hom-Π-Large-Precategory
  right-unit-law-comp-hom-Large-Precategory Π-Large-Precategory =
    right-unit-law-comp-hom-Π-Large-Precategory
```

## Properties

### Isomorphisms in the large dependent product precategory are fiberwise isomorphisms

```agda
module _
  {l1 l2 l3 : Level} {α : Level  Level} {β : Level  Level  Level}
  (I : UU l1) (C : I  Large-Precategory α β)
  {x : obj-Π-Large-Precategory I C l2}
  {y : obj-Π-Large-Precategory I C l3}
  where

  is-fiberwise-iso-is-iso-Π-Large-Precategory :
    (f : hom-Π-Large-Precategory I C x y) 
    is-iso-Large-Precategory (Π-Large-Precategory I C) f 
    (i : I)  is-iso-Large-Precategory (C i) (f i)
  pr1 (is-fiberwise-iso-is-iso-Π-Large-Precategory f is-iso-f i) =
    hom-inv-is-iso-Large-Precategory (Π-Large-Precategory I C) f is-iso-f i
  pr1 (pr2 (is-fiberwise-iso-is-iso-Π-Large-Precategory f is-iso-f i)) =
    htpy-eq
      ( is-section-hom-inv-is-iso-Large-Precategory
        ( Π-Large-Precategory I C)
        ( f)
        ( is-iso-f))
      ( i)
  pr2 (pr2 (is-fiberwise-iso-is-iso-Π-Large-Precategory f is-iso-f i)) =
    htpy-eq
      ( is-retraction-hom-inv-is-iso-Large-Precategory
        ( Π-Large-Precategory I C) f
        ( is-iso-f))
      ( i)

  fiberwise-iso-iso-Π-Large-Precategory :
    iso-Large-Precategory (Π-Large-Precategory I C) x y 
    (i : I)  iso-Large-Precategory (C i) (x i) (y i)
  pr1 (fiberwise-iso-iso-Π-Large-Precategory e i) =
    hom-iso-Large-Precategory (Π-Large-Precategory I C) e i
  pr2 (fiberwise-iso-iso-Π-Large-Precategory e i) =
    is-fiberwise-iso-is-iso-Π-Large-Precategory
      ( hom-iso-Large-Precategory (Π-Large-Precategory I C) e)
      ( is-iso-iso-Large-Precategory (Π-Large-Precategory I C) e)
      ( i)

  is-iso-is-fiberwise-iso-Π-Large-Precategory :
    (f : hom-Π-Large-Precategory I C x y) 
    ((i : I)  is-iso-Large-Precategory (C i) (f i)) 
    is-iso-Large-Precategory (Π-Large-Precategory I C) f
  pr1 (is-iso-is-fiberwise-iso-Π-Large-Precategory f is-fiberwise-iso-f) i =
    hom-inv-is-iso-Large-Precategory (C i) (f i) (is-fiberwise-iso-f i)
  pr1 (pr2 (is-iso-is-fiberwise-iso-Π-Large-Precategory f is-fiberwise-iso-f)) =
    eq-htpy
      ( λ i 
        is-section-hom-inv-is-iso-Large-Precategory
          ( C i)
          ( f i)
          ( is-fiberwise-iso-f i))
  pr2 (pr2 (is-iso-is-fiberwise-iso-Π-Large-Precategory f is-fiberwise-iso-f)) =
    eq-htpy
      ( λ i 
        is-retraction-hom-inv-is-iso-Large-Precategory
          ( C i)
          (f i) ( is-fiberwise-iso-f i))

  iso-fiberwise-iso-Π-Large-Precategory :
    ((i : I)  iso-Large-Precategory (C i) (x i) (y i)) 
    iso-Large-Precategory (Π-Large-Precategory I C) x y
  pr1 (iso-fiberwise-iso-Π-Large-Precategory e) i =
    hom-iso-Large-Precategory (C i) (e i)
  pr2 (iso-fiberwise-iso-Π-Large-Precategory e) =
    is-iso-is-fiberwise-iso-Π-Large-Precategory
      ( λ i  hom-iso-Large-Precategory (C i) (e i))
      ( λ i  is-iso-iso-Large-Precategory (C i) (e i))

  is-equiv-is-fiberwise-iso-is-iso-Π-Large-Precategory :
    (f : hom-Π-Large-Precategory I C x y) 
    is-equiv (is-fiberwise-iso-is-iso-Π-Large-Precategory f)
  is-equiv-is-fiberwise-iso-is-iso-Π-Large-Precategory f =
    is-equiv-has-converse-is-prop
      ( is-prop-is-iso-Large-Precategory (Π-Large-Precategory I C) f)
      ( is-prop-Π  i  is-prop-is-iso-Large-Precategory (C i) (f i)))
      ( is-iso-is-fiberwise-iso-Π-Large-Precategory f)

  equiv-is-fiberwise-iso-is-iso-Π-Large-Precategory :
    (f : hom-Π-Large-Precategory I C x y) 
    ( is-iso-Large-Precategory (Π-Large-Precategory I C) f) 
    ( (i : I)  is-iso-Large-Precategory (C i) (f i))
  pr1 (equiv-is-fiberwise-iso-is-iso-Π-Large-Precategory f) =
    is-fiberwise-iso-is-iso-Π-Large-Precategory f
  pr2 (equiv-is-fiberwise-iso-is-iso-Π-Large-Precategory f) =
    is-equiv-is-fiberwise-iso-is-iso-Π-Large-Precategory f

  is-equiv-is-iso-is-fiberwise-iso-Π-Large-Precategory :
    (f : hom-Π-Large-Precategory I C x y) 
    is-equiv (is-iso-is-fiberwise-iso-Π-Large-Precategory f)
  is-equiv-is-iso-is-fiberwise-iso-Π-Large-Precategory f =
    is-equiv-has-converse-is-prop
      ( is-prop-Π  i  is-prop-is-iso-Large-Precategory (C i) (f i)))
      ( is-prop-is-iso-Large-Precategory (Π-Large-Precategory I C) f)
      ( is-fiberwise-iso-is-iso-Π-Large-Precategory f)

  equiv-is-iso-is-fiberwise-iso-Π-Large-Precategory :
    ( f : hom-Π-Large-Precategory I C x y) 
    ( (i : I)  is-iso-Large-Precategory (C i) (f i)) 
    ( is-iso-Large-Precategory (Π-Large-Precategory I C) f)
  pr1 (equiv-is-iso-is-fiberwise-iso-Π-Large-Precategory f) =
    is-iso-is-fiberwise-iso-Π-Large-Precategory f
  pr2 (equiv-is-iso-is-fiberwise-iso-Π-Large-Precategory f) =
    is-equiv-is-iso-is-fiberwise-iso-Π-Large-Precategory f

  is-equiv-fiberwise-iso-iso-Π-Large-Precategory :
    is-equiv fiberwise-iso-iso-Π-Large-Precategory
  is-equiv-fiberwise-iso-iso-Π-Large-Precategory =
    is-equiv-is-invertible
      ( iso-fiberwise-iso-Π-Large-Precategory)
      ( λ e 
        eq-htpy
          ( λ i  eq-type-subtype (is-iso-prop-Large-Precategory (C i)) refl))
      ( λ e 
        eq-type-subtype
          ( is-iso-prop-Large-Precategory (Π-Large-Precategory I C))
          ( refl))

  equiv-fiberwise-iso-iso-Π-Large-Precategory :
    ( iso-Large-Precategory (Π-Large-Precategory I C) x y) 
    ( (i : I)  iso-Large-Precategory (C i) (x i) (y i))
  pr1 equiv-fiberwise-iso-iso-Π-Large-Precategory =
    fiberwise-iso-iso-Π-Large-Precategory
  pr2 equiv-fiberwise-iso-iso-Π-Large-Precategory =
    is-equiv-fiberwise-iso-iso-Π-Large-Precategory

  is-equiv-iso-fiberwise-iso-Π-Large-Precategory :
    is-equiv iso-fiberwise-iso-Π-Large-Precategory
  is-equiv-iso-fiberwise-iso-Π-Large-Precategory =
    is-equiv-map-inv-is-equiv is-equiv-fiberwise-iso-iso-Π-Large-Precategory

  equiv-iso-fiberwise-iso-Π-Large-Precategory :
    ( (i : I)  iso-Large-Precategory (C i) (x i) (y i)) 
    ( iso-Large-Precategory (Π-Large-Precategory I C) x y)
  pr1 equiv-iso-fiberwise-iso-Π-Large-Precategory =
    iso-fiberwise-iso-Π-Large-Precategory
  pr2 equiv-iso-fiberwise-iso-Π-Large-Precategory =
    is-equiv-iso-fiberwise-iso-Π-Large-Precategory
```