# Transport along identifications
```agda
module foundation.transport-along-identifications where
open import foundation-core.transport-along-identifications public
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.universe-levels
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
```
</details>
## Idea
Given a type family `B` over `A`, an
[identification](foundation-core.identity-types.md) `p : x = y` in `A` and an
element `b : B x`, we can
[**transport**](foundation-core.transport-along-identifications.md) the element
`b` along the identification `p` to obtain an element `tr B p b : B y`.
The fact that `tr B p` is an [equivalence](foundation-core.equivalences.md) is
recorded on this page.
## Properties
### Transport is an equivalence
```agda
module _
{l1 l2 : Level} {A : UU l1} (B : A → UU l2) {x y : A}
where
inv-tr : x = y → B y → B x
inv-tr p = tr B (inv p)
is-retraction-inv-tr : (p : x = y) → inv-tr p ∘ tr B p ~ id
is-retraction-inv-tr refl b = refl
is-section-inv-tr : (p : x = y) → tr B p ∘ inv-tr p ~ id
is-section-inv-tr refl b = refl
is-equiv-tr : (p : x = y) → is-equiv (tr B p)
is-equiv-tr p =
is-equiv-is-invertible
( inv-tr p)
( is-section-inv-tr p)
( is-retraction-inv-tr p)
equiv-tr : x = y → B x ≃ B y
pr1 (equiv-tr p) = tr B p
pr2 (equiv-tr p) = is-equiv-tr p
```
### Transporting along `refl` is the identity equivalence
```agda
equiv-tr-refl :
{l1 l2 : Level} {A : UU l1} (B : A → UU l2) {x : A} →
equiv-tr B refl = id-equiv {A = B x}
equiv-tr-refl B = refl
```
### Computing transport of loops
```agda
tr-loop :
{l1 : Level} {A : UU l1} {a0 a1 : A} (p : a0 = a1) (q : a0 = a0) →
tr (λ y → y = y) p q = (inv p ∙ q) ∙ p
tr-loop refl q = inv right-unit
```