# Diagonal maps into cartesian products of types
```agda
module foundation-core.diagonal-maps-cartesian-products-of-types where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.equality-cartesian-product-types
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
open import foundation-core.equivalences
open import foundation-core.fibers-of-maps
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.propositions
open import foundation-core.retractions
open import foundation-core.sections
```
</details>
## Idea
The
{{#concept "diagonal map" Disambiguation="of a type into its cartesian product" Agda=diagonal-product}}
that includes a type `A` into its
[cartesian product](foundation-core.cartesian-product-types.md) `A × A` is the
map that maps `x` to the pair `(x , x)`.
## Definition
```agda
module _
{l : Level} (A : UU l)
where
diagonal-product : A → A × A
diagonal-product x = (x , x)
```
## Properties
### The action on paths of a diagonal
```agda
compute-ap-diagonal-product :
{l : Level} {A : UU l} {x y : A} (p : x = y) →
ap (diagonal-product A) p = eq-pair p p
compute-ap-diagonal-product refl = refl
```
### If the diagonal of `A` is an equivalence, then `A` is a proposition
```agda
module _
{l : Level} (A : UU l)
where
abstract
is-prop-is-equiv-diagonal-product :
is-equiv (diagonal-product A) → is-prop A
is-prop-is-equiv-diagonal-product is-equiv-d =
is-prop-all-elements-equal
( λ x y →
( inv (ap pr1 (is-section-map-inv-is-equiv is-equiv-d (x , y)))) ∙
( ap pr2 (is-section-map-inv-is-equiv is-equiv-d (x , y))))
equiv-diagonal-product-is-prop :
is-prop A → A ≃ A × A
pr1 (equiv-diagonal-product-is-prop is-prop-A) =
diagonal-product A
pr2 (equiv-diagonal-product-is-prop is-prop-A) =
is-equiv-is-invertible
( pr1)
( λ _ → eq-pair (eq-is-prop is-prop-A) (eq-is-prop is-prop-A))
( λ a → eq-is-prop is-prop-A)
```
### The fibers of the diagonal map
```agda
module _
{l : Level} (A : UU l)
where
eq-fiber-diagonal-product :
(t : A × A) → fiber (diagonal-product A) t → pr1 t = pr2 t
eq-fiber-diagonal-product (x , y) (z , α) = inv (ap pr1 α) ∙ ap pr2 α
fiber-diagonal-product-eq :
(t : A × A) → pr1 t = pr2 t → fiber (diagonal-product A) t
fiber-diagonal-product-eq (x , y) β = (x , eq-pair refl β)
is-section-fiber-diagonal-product-eq :
(t : A × A) →
is-section (eq-fiber-diagonal-product t) (fiber-diagonal-product-eq t)
is-section-fiber-diagonal-product-eq (x , .x) refl = refl
is-retraction-fiber-diagonal-product-eq :
(t : A × A) →
is-retraction (eq-fiber-diagonal-product t) (fiber-diagonal-product-eq t)
is-retraction-fiber-diagonal-product-eq .(z , z) (z , refl) = refl
abstract
is-equiv-eq-fiber-diagonal-product :
(t : A × A) → is-equiv (eq-fiber-diagonal-product t)
is-equiv-eq-fiber-diagonal-product t =
is-equiv-is-invertible
( fiber-diagonal-product-eq t)
( is-section-fiber-diagonal-product-eq t)
( is-retraction-fiber-diagonal-product-eq t)
```