# Inverse sequential diagrams of types
```agda
module foundation.inverse-sequential-diagrams where
```
<details><summary>Imports</summary>
```agda
open import elementary-number-theory.natural-numbers
open import foundation.dependent-pair-types
open import foundation.iterating-functions
open import foundation.unit-type
open import foundation.universe-levels
```
</details>
## Idea
An
{{#concept "inverse sequential diagram" Disambiguation="types" Agda=inverse-sequential-diagram}}
of types `A` is a [sequence](foundation.sequences.md) of types together with
maps between every two consecutive types
```text
fₙ : Aₙ₊₁ → Aₙ
```
giving a sequential diagram of maps that extend infinitely to the left:
```text
f₃ f₂ f₁ f₀
⋯ ---> A₃ ---> A₂ ---> A₁ ---> A₀.
```
This is in contrast to the notion of
[sequential diagram](synthetic-homotopy-theory.sequential-diagrams.md), which
extend infinitely to the right, hence is the formal dual to inverse sequential
diagrams.
## Definitions
### Inverse sequential diagrams of types
```agda
sequence-map-inverse-sequential-diagram : {l : Level} → (ℕ → UU l) → UU l
sequence-map-inverse-sequential-diagram A = (n : ℕ) → A (succ-ℕ n) → A n
inverse-sequential-diagram : (l : Level) → UU (lsuc l)
inverse-sequential-diagram l =
Σ (ℕ → UU l) (sequence-map-inverse-sequential-diagram)
family-inverse-sequential-diagram :
{l : Level} → inverse-sequential-diagram l → ℕ → UU l
family-inverse-sequential-diagram = pr1
map-inverse-sequential-diagram :
{l : Level} (A : inverse-sequential-diagram l) (n : ℕ) →
family-inverse-sequential-diagram A (succ-ℕ n) →
family-inverse-sequential-diagram A n
map-inverse-sequential-diagram = pr2
```
## Operations
### Right shifting an inverse sequential diagram
We can **right shift** an inverse sequential diagram of types by forgetting the
first terms.
```agda
right-shift-inverse-sequential-diagram :
{l : Level} → inverse-sequential-diagram l → inverse-sequential-diagram l
pr1 (right-shift-inverse-sequential-diagram A) n =
family-inverse-sequential-diagram A (succ-ℕ n)
pr2 (right-shift-inverse-sequential-diagram A) n =
map-inverse-sequential-diagram A (succ-ℕ n)
iterated-right-shift-inverse-sequential-diagram :
{l : Level} (n : ℕ) →
inverse-sequential-diagram l → inverse-sequential-diagram l
iterated-right-shift-inverse-sequential-diagram n =
iterate n right-shift-inverse-sequential-diagram
```
### Left shifting an inverse sequential diagram
We can **left shift** an inverse sequential diagram of types by padding it with
the [terminal type](foundation.unit-type.md) `unit`.
```agda
left-shift-inverse-sequential-diagram :
{l : Level} → inverse-sequential-diagram l → inverse-sequential-diagram l
pr1 (left-shift-inverse-sequential-diagram {l} A) 0 = raise-unit l
pr1 (left-shift-inverse-sequential-diagram A) (succ-ℕ n) =
family-inverse-sequential-diagram A n
pr2 (left-shift-inverse-sequential-diagram A) 0 =
raise-terminal-map (family-inverse-sequential-diagram A 0)
pr2 (left-shift-inverse-sequential-diagram A) (succ-ℕ n) =
map-inverse-sequential-diagram A n
iterated-left-shift-inverse-sequential-diagram :
{l : Level} (n : ℕ) →
inverse-sequential-diagram l → inverse-sequential-diagram l
iterated-left-shift-inverse-sequential-diagram n =
iterate n left-shift-inverse-sequential-diagram
```
### Postcomposition inverse sequential diagrams
Given an inverse sequential diagram `A` and a type `X` there is an inverse
sequential diagram `X → A` defined by levelwise postcomposition
```text
(f₂ ∘ -) (f₁ ∘ -) (f₀ ∘ -)
⋯ -----> (X → A₃) -------> (X → A₂) -------> (X → A₁) -------> (X → A₀).
```
```agda
module _
{l1 l2 : Level} (X : UU l1) (A : inverse-sequential-diagram l2)
where
postcomp-inverse-sequential-diagram : inverse-sequential-diagram (l1 ⊔ l2)
pr1 postcomp-inverse-sequential-diagram n =
X → family-inverse-sequential-diagram A n
pr2 postcomp-inverse-sequential-diagram n g x =
map-inverse-sequential-diagram A n (g x)
```
## Table of files about sequential limits
The following table lists files that are about sequential limits as a general
concept.
{{#include tables/sequential-limits.md}}