# Identity systems
```agda
module foundation.identity-systems where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.function-extensionality
open import foundation.fundamental-theorem-of-identity-types
open import foundation.universe-levels
open import foundation-core.contractible-types
open import foundation-core.families-of-equivalences
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.identity-types
open import foundation-core.propositions
open import foundation-core.retractions
open import foundation-core.sections
open import foundation-core.torsorial-type-families
open import foundation-core.transport-along-identifications
```
</details>
## Idea
A **(unary) identity system** on a type `A` equipped with a point `a : A`
consists of a type family `B` over `A` equipped with a point `b : B a` that
satisfies an induction principle analogous to the induction principle of the
[identity type](foundation.identity-types.md) at `a`. The
[dependent universal property of identity types](foundation.universal-property-identity-types.md)
also follows for identity systems.
## Definitions
### Evaluating at the base point
```agda
ev-refl-identity-system :
{l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} {a : A} (b : B a)
{P : (x : A) (y : B x) → UU l3} →
((x : A) (y : B x) → P x y) → P a b
ev-refl-identity-system {a = a} b f = f a b
```
### The predicate of being an identity system with respect to a universe level
```agda
module _
{l1 l2 : Level} (l : Level) {A : UU l1} (B : A → UU l2) (a : A) (b : B a)
where
is-identity-system-Level : UU (l1 ⊔ l2 ⊔ lsuc l)
is-identity-system-Level =
(P : (x : A) (y : B x) → UU l) → section (ev-refl-identity-system b {P})
```
### The predicate of being an identity system
```agda
module _
{l1 l2 : Level} {A : UU l1} (B : A → UU l2) (a : A) (b : B a)
where
is-identity-system : UUω
is-identity-system = {l : Level} → is-identity-system-Level l B a b
```
## Properties
### A type family over `A` is an identity system if and only if its total space is contractible
In [`foundation.torsorial-type-families`](foundation.torsorial-type-families.md)
we will start calling type families with contractible total space torsorial.
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : A → UU l2} (a : A) (b : B a)
where
map-section-is-identity-system-is-torsorial :
is-torsorial B →
{l3 : Level} (P : (x : A) (y : B x) → UU l3) →
P a b → (x : A) (y : B x) → P x y
map-section-is-identity-system-is-torsorial H P p x y =
tr (fam-Σ P) (eq-is-contr H) p
is-section-map-section-is-identity-system-is-torsorial :
(H : is-torsorial B) →
{l3 : Level} (P : (x : A) (y : B x) → UU l3) →
is-section
( ev-refl-identity-system b)
( map-section-is-identity-system-is-torsorial H P)
is-section-map-section-is-identity-system-is-torsorial H P p =
ap
( λ t → tr (fam-Σ P) t p)
( eq-is-contr'
( is-prop-is-contr H (a , b) (a , b))
( eq-is-contr H)
( refl))
abstract
is-identity-system-is-torsorial :
is-torsorial B → is-identity-system B a b
is-identity-system-is-torsorial H P =
( map-section-is-identity-system-is-torsorial H P ,
is-section-map-section-is-identity-system-is-torsorial H P)
abstract
is-torsorial-is-identity-system :
is-identity-system B a b → is-torsorial B
pr1 (is-torsorial-is-identity-system H) = (a , b)
pr2 (is-torsorial-is-identity-system H) (x , y) =
pr1 (H (λ x' y' → (a , b) = (x' , y'))) refl x y
abstract
fundamental-theorem-id-is-identity-system :
is-identity-system B a b →
(f : (x : A) → a = x → B x) → is-fiberwise-equiv f
fundamental-theorem-id-is-identity-system H =
fundamental-theorem-id (is-torsorial-is-identity-system H)
```
## External links
- [Identity systems](https://1lab.dev/1Lab.Path.IdentitySystem.html) at 1lab
- [identity system](https://ncatlab.org/nlab/show/identity+system) at $n$Lab