# Homotopies of binary operations

```agda
module foundation.binary-homotopies where
```

<details><summary>Imports</summary>

```agda
open import foundation.dependent-pair-types
open import foundation.equality-dependent-function-types
open import foundation.function-extensionality
open import foundation.fundamental-theorem-of-identity-types
open import foundation.homotopy-induction
open import foundation.universe-levels

open import foundation-core.equivalences
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.torsorial-type-families
```

</details>

## Idea

Consider two binary operations `f g : (x : A) (y : B x) → C x y`. The type of
**binary homotopies** between `f` and `g` is defined to be the type of pointwise
[identifications](foundation-core.identity-types.md) of `f` and `g`. We show
that this characterizes the identity type of `(x : A) (y : B x) → C x y`.

## Definition

```agda
module _
  {l1 l2 l3 : Level} {A : UU l1} {B : A  UU l2} {C : (x : A)  B x  UU l3}
  where

  binary-htpy :
    (f g : (x : A) (y : B x)  C x y)  UU (l1  l2  l3)
  binary-htpy f g = (x : A)  f x ~ g x

  refl-binary-htpy : (f : (x : A) (y : B x)  C x y)  binary-htpy f f
  refl-binary-htpy f x = refl-htpy

  binary-htpy-eq :
    (f g : (x : A) (y : B x)  C x y)  (f  g)  binary-htpy f g
  binary-htpy-eq f .f refl = refl-binary-htpy f

  is-torsorial-binary-htpy :
    (f : (x : A) (y : B x)  C x y) 
    is-torsorial (binary-htpy f)
  is-torsorial-binary-htpy f =
    is-torsorial-Eq-Π  x  is-torsorial-htpy (f x))

  is-equiv-binary-htpy-eq :
    (f g : (x : A) (y : B x)  C x y)  is-equiv (binary-htpy-eq f g)
  is-equiv-binary-htpy-eq f =
    fundamental-theorem-id
      ( is-torsorial-binary-htpy f)
      ( binary-htpy-eq f)

  extensionality-binary-Π :
    (f g : (x : A) (y : B x)  C x y)  (f  g)  binary-htpy f g
  pr1 (extensionality-binary-Π f g) = binary-htpy-eq f g
  pr2 (extensionality-binary-Π f g) = is-equiv-binary-htpy-eq f g

  eq-binary-htpy :
    (f g : (x : A) (y : B x)  C x y)  binary-htpy f g  f  g
  eq-binary-htpy f g = map-inv-equiv (extensionality-binary-Π f g)
```

## Properties

### Binary homotopy is equivalent to function homotopy

```agda
module _
  {l1 l2 l3 : Level} {A : UU l1} {B : A  UU l2} {C : (x : A)  B x  UU l3}
  where

  binary-htpy-htpy :
    (f g : (x : A) (y : B x)  C x y)  (f ~ g)  binary-htpy f g
  binary-htpy-htpy f g =
    ind-htpy f  g H  binary-htpy f g) (refl-binary-htpy f)

  equiv-binary-htpy-htpy :
    (f g : (x : A) (y : B x)  C x y)  (f ~ g)  binary-htpy f g
  equiv-binary-htpy-htpy f g = extensionality-binary-Π f g ∘e equiv-eq-htpy

  htpy-binary-htpy :
    (f g : (x : A) (y : B x)  C x y)  binary-htpy f g  f ~ g
  htpy-binary-htpy f g = map-inv-equiv (equiv-binary-htpy-htpy f g)

  equiv-htpy-binary-htpy :
    (f g : (x : A) (y : B x)  C x y)  binary-htpy f g  (f ~ g)
  equiv-htpy-binary-htpy f g = inv-equiv (equiv-binary-htpy-htpy f g)
```