# Equivalence induction
```agda
module foundation.equivalence-induction where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.identity-systems
open import foundation.subuniverses
open import foundation.univalence
open import foundation.universal-property-identity-systems
open import foundation.universe-levels
open import foundation-core.commuting-triangles-of-maps
open import foundation-core.contractible-maps
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.identity-types
open import foundation-core.postcomposition-functions
open import foundation-core.sections
open import foundation-core.torsorial-type-families
```
</details>
## Idea
**Equivalence induction** is the principle asserting that for any type family
```text
P : (B : š°) (e : A ā B) ā š°
```
of types indexed by all [equivalences](foundation.equivalences.md) with domain
`A`, there is a [section](foundation.sections.md) of the evaluation map
```text
((B : š°) (e : A ā B) ā P B e) ā P A id-equiv.
```
The principle of equivalence induction is equivalent to the
[univalence axiom](foundation.univalence.md).
By equivalence induction, it follows that any type family `P : š° ā š±` on the
universe has an
[action on equivalences](foundation.action-on-equivalences-type-families.md)
```text
(A ā B) ā P A ā P B.
```
## Definitions
### Evaluation at the identity equivalence
```agda
module _
{l1 l2 : Level} {A : UU l1}
where
ev-id-equiv :
(P : (B : UU l1) ā (A ā B) ā UU l2) ā
((B : UU l1) (e : A ā B) ā P B e) ā P A id-equiv
ev-id-equiv P f = f A id-equiv
triangle-ev-id-equiv :
(P : (Ī£ (UU l1) (A ā_)) ā UU l2) ā
coherence-triangle-maps
( ev-point (A , id-equiv))
( ev-id-equiv (Ī» X e ā P (X , e)))
( ev-pair)
triangle-ev-id-equiv P f = refl
```
### The equivalence induction principle
```agda
module _
{l1 : Level} (A : UU l1)
where
induction-principle-equivalences : UUĻ
induction-principle-equivalences =
is-identity-system (Ī» (B : UU l1) ā A ā B) A id-equiv
```
## Properties
### Contractibility of the total space of equivalences implies equivalence induction
```agda
module _
{l1 : Level} {A : UU l1}
where
abstract
is-identity-system-is-torsorial-equiv :
is-torsorial (Ī» (B : UU l1) ā A ā B) ā
is-identity-system (A ā_) A id-equiv
is-identity-system-is-torsorial-equiv =
is-identity-system-is-torsorial A id-equiv
```
### Equivalence induction implies contractibility of the total space of equivalences
```agda
module _
{l1 : Level} {A : UU l1}
where
abstract
is-torsorial-equiv-induction-principle-equivalences :
induction-principle-equivalences A ā
is-torsorial (Ī» (B : UU l1) ā A ā B)
is-torsorial-equiv-induction-principle-equivalences =
is-torsorial-is-identity-system A id-equiv
abstract
is-torsorial-is-identity-system-equiv :
is-identity-system (A ā_) A id-equiv ā
is-torsorial (Ī» (B : UU l1) ā A ā B)
is-torsorial-is-identity-system-equiv =
is-torsorial-is-identity-system A id-equiv
```
### Equivalence induction in a universe
```agda
module _
{l1 : Level} {A : UU l1}
where
abstract
is-identity-system-equiv : induction-principle-equivalences A
is-identity-system-equiv =
is-identity-system-is-torsorial-equiv (is-torsorial-equiv A)
ind-equiv :
{l2 : Level} (P : (B : UU l1) ā A ā B ā UU l2) ā
P A id-equiv ā {B : UU l1} (e : A ā B) ā P B e
ind-equiv P p {B} = pr1 (is-identity-system-equiv P) p B
compute-ind-equiv :
{l2 : Level} (P : (B : UU l1) ā A ā B ā UU l2) ā
(u : P A id-equiv) ā ind-equiv P u id-equiv ļ¼ u
compute-ind-equiv P = pr2 (is-identity-system-equiv P)
```
### Equivalence induction in a subuniverse
```agda
module _
{l1 l2 l3 : Level} (P : subuniverse l1 l2) (A : type-subuniverse P)
where
ev-id-equiv-subuniverse :
{F : (B : type-subuniverse P) ā equiv-subuniverse P A B ā UU l3} ā
((B : type-subuniverse P) (e : equiv-subuniverse P A B) ā F B e) ā
F A id-equiv
ev-id-equiv-subuniverse f = f A id-equiv
triangle-ev-id-equiv-subuniverse :
(F : (B : type-subuniverse P) ā equiv-subuniverse P A B ā UU l3) ā
coherence-triangle-maps
( ev-point (A , id-equiv))
( ev-id-equiv-subuniverse {F})
( ev-pair)
triangle-ev-id-equiv-subuniverse F E = refl
abstract
is-identity-system-equiv-subuniverse :
(F : (B : type-subuniverse P) ā equiv-subuniverse P A B ā UU l3) ā
section (ev-id-equiv-subuniverse {F})
is-identity-system-equiv-subuniverse =
is-identity-system-is-torsorial A id-equiv
( is-torsorial-equiv-subuniverse P A)
ind-equiv-subuniverse :
(F : (B : type-subuniverse P) ā equiv-subuniverse P A B ā UU l3) ā
F A id-equiv ā (B : type-subuniverse P) (e : equiv-subuniverse P A B) ā
F B e
ind-equiv-subuniverse F =
pr1 (is-identity-system-equiv-subuniverse F)
compute-ind-equiv-subuniverse :
(F : (B : type-subuniverse P) ā equiv-subuniverse P A B ā UU l3) ā
(u : F A id-equiv) ā
ind-equiv-subuniverse F u A id-equiv ļ¼ u
compute-ind-equiv-subuniverse F =
pr2 (is-identity-system-equiv-subuniverse F)
```
### The evaluation map `ev-id-equiv` is an equivalence
```agda
module _
{l1 l2 : Level} {A : UU l1} (P : (B : UU l1) (e : A ā B) ā UU l2)
where
is-equiv-ev-id-equiv : is-equiv (ev-id-equiv P)
is-equiv-ev-id-equiv =
dependent-universal-property-identity-system-is-torsorial
( id-equiv) (is-torsorial-equiv A) P
is-contr-map-ev-id-equiv : is-contr-map (ev-id-equiv P)
is-contr-map-ev-id-equiv = is-contr-map-is-equiv is-equiv-ev-id-equiv
```
### The evaluation map `ev-id-equiv-subuniverse` is an equivalence
```agda
module _
{l1 l2 l3 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
(F : (Y : type-subuniverse P) (e : equiv-subuniverse P X Y) ā UU l3)
where
is-equiv-ev-id-equiv-subuniverse :
is-equiv (ev-id-equiv-subuniverse P X {F})
is-equiv-ev-id-equiv-subuniverse =
dependent-universal-property-identity-system-is-torsorial
( id-equiv) (is-torsorial-equiv-subuniverse P X) F
is-contr-map-ev-id-equiv-subuniverse :
is-contr-map (ev-id-equiv-subuniverse P X {F})
is-contr-map-ev-id-equiv-subuniverse =
is-contr-map-is-equiv is-equiv-ev-id-equiv-subuniverse
```
### Equivalence induction implies that postcomposing by an equivalence is an equivalence
Of course we already know that this fact follows from
[function extensionality](foundation.function-extensionality.md). However, we
prove it again from equivalence induction so that we can prove that
[univalence implies function extensionality](foundation.univalence-implies-function-extensionality.md).
```agda
abstract
is-equiv-postcomp-univalence :
{l1 l2 : Level} {X Y : UU l1} (A : UU l2) (e : X ā Y) ā
is-equiv (postcomp A (map-equiv e))
is-equiv-postcomp-univalence A =
ind-equiv (Ī» Y e ā is-equiv (postcomp A (map-equiv e))) is-equiv-id
```