# Sequential limits

```agda
module foundation.sequential-limits where
```

<details><summary>Imports</summary>

```agda
open import elementary-number-theory.natural-numbers

open import foundation.action-on-identifications-functions
open import foundation.cones-over-inverse-sequential-diagrams
open import foundation.dependent-pair-types
open import foundation.equality-dependent-function-types
open import foundation.equivalences
open import foundation.fundamental-theorem-of-identity-types
open import foundation.homotopy-induction
open import foundation.inverse-sequential-diagrams
open import foundation.structure-identity-principle
open import foundation.universal-property-sequential-limits
open import foundation.universe-levels

open import foundation-core.commuting-squares-of-homotopies
open import foundation-core.homotopies
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
```

</details>

## Idea

Given an
[inverse sequential diagram of types](foundation.inverse-sequential-diagrams.md)

```text
               fₙ                     f₁      f₀
  ⋯ ---> Aₙ₊₁ ---> Aₙ ---> ⋯ ---> A₂ ---> A₁ ---> A₀
```

we can form the **standard sequential limit** `limₙ Aₙ` satisfying
[the universal property of the sequential limit](foundation.universal-property-sequential-limits.md)
of `Aₙ` thus completing the diagram

```text
                           fₙ                     f₁      f₀
  limₙ Aₙ ---> ⋯ ---> Aₙ₊₁ ---> Aₙ ---> ⋯ ---> A₂ ---> A₁ ---> A₀.
```

The standard sequential limit consists of "points at infinity", which can be
recorded as [sequences](foundation.dependent-sequences.md) of terms whose images
under `f` agree:

```text
  ⋯  ↦   xₙ₊₁  ↦   xₙ  ↦   ⋯  ↦   x₂  ↦   x₁  ↦   x₀
          ⫙        ⫙              ⫙       ⫙       ⫙
  ⋯ ---> Aₙ₊₁ ---> Aₙ ---> ⋯ ---> A₂ ---> A₁ ---> A₀.
```

## Definitions

### The standard sequential limit

```agda
module _
  {l : Level} (A : inverse-sequential-diagram l)
  where

  standard-sequential-limit : UU l
  standard-sequential-limit =
    Σ ( (n : )  family-inverse-sequential-diagram A n)
      ( λ a  (n : )  a n  map-inverse-sequential-diagram A n (a (succ-ℕ n)))

module _
  {l : Level} (A : inverse-sequential-diagram l)
  where

  sequence-standard-sequential-limit :
    standard-sequential-limit A  (n : ) 
    family-inverse-sequential-diagram A n
  sequence-standard-sequential-limit = pr1

  coherence-standard-sequential-limit :
    (x : standard-sequential-limit A) (n : ) 
    sequence-standard-sequential-limit x n 
    map-inverse-sequential-diagram A n
      ( sequence-standard-sequential-limit x (succ-ℕ n))
  coherence-standard-sequential-limit = pr2
```

### The cone at the standard sequential limit

```agda
module _
  {l : Level} (A : inverse-sequential-diagram l)
  where

  cone-standard-sequential-limit :
    cone-inverse-sequential-diagram A (standard-sequential-limit A)
  pr1 cone-standard-sequential-limit n x =
    sequence-standard-sequential-limit A x n
  pr2 cone-standard-sequential-limit n x =
    coherence-standard-sequential-limit A x n
```

### The gap map into the standard sequential limit

The **gap map** of a
[cone over an inverse sequential diagram](foundation.cones-over-inverse-sequential-diagrams.md)
is the map from the domain of the cone into the standard sequential limit.

```agda
module _
  {l1 l2 : Level} (A : inverse-sequential-diagram l1) {X : UU l2}
  where

  gap-inverse-sequential-diagram :
    cone-inverse-sequential-diagram A X  X  standard-sequential-limit A
  pr1 (gap-inverse-sequential-diagram c x) n =
    map-cone-inverse-sequential-diagram A c n x
  pr2 (gap-inverse-sequential-diagram c x) n =
    coherence-cone-inverse-sequential-diagram A c n x
```

### The property of being a sequential limit

The [proposition](foundation-core.propositions.md) `is-sequential-limit` is the
assertion that the gap map is an [equivalence](foundation-core.equivalences.md).
Note that this proposition is [small](foundation-core.small-types.md), whereas
[the universal property](foundation.universal-property-sequential-limits.md) is
a large proposition.

```agda
module _
  {l1 l2 : Level} (A : inverse-sequential-diagram l1) {X : UU l2}
  where

  is-sequential-limit : cone-inverse-sequential-diagram A X  UU (l1  l2)
  is-sequential-limit c = is-equiv (gap-inverse-sequential-diagram A c)

  is-property-is-sequential-limit :
    (c : cone-inverse-sequential-diagram A X)  is-prop (is-sequential-limit c)
  is-property-is-sequential-limit c =
    is-property-is-equiv (gap-inverse-sequential-diagram A c)

  is-sequential-limit-Prop :
    (c : cone-inverse-sequential-diagram A X)  Prop (l1  l2)
  pr1 (is-sequential-limit-Prop c) = is-sequential-limit c
  pr2 (is-sequential-limit-Prop c) = is-property-is-sequential-limit c
```

## Properties

### Characterization of equality in the standard sequential limit

```agda
module _
  {l : Level} (A : inverse-sequential-diagram l)
  where

  coherence-Eq-standard-sequential-limit :
    (s t : standard-sequential-limit A)
    (H :
      sequence-standard-sequential-limit A s ~
      sequence-standard-sequential-limit A t)  UU l
  coherence-Eq-standard-sequential-limit s t H =
    coherence-square-homotopies
      ( H)
      ( coherence-standard-sequential-limit A s)
      ( coherence-standard-sequential-limit A t)
      ( λ n  ap (map-inverse-sequential-diagram A n) (H (succ-ℕ n)))

  Eq-standard-sequential-limit : (s t : standard-sequential-limit A)  UU l
  Eq-standard-sequential-limit s t =
    Σ ( sequence-standard-sequential-limit A s ~
        sequence-standard-sequential-limit A t)
      ( coherence-Eq-standard-sequential-limit s t)

  refl-Eq-standard-sequential-limit :
    (s : standard-sequential-limit A)  Eq-standard-sequential-limit s s
  pr1 (refl-Eq-standard-sequential-limit s) = refl-htpy
  pr2 (refl-Eq-standard-sequential-limit s) = right-unit-htpy

  Eq-eq-standard-sequential-limit :
    (s t : standard-sequential-limit A) 
    s  t  Eq-standard-sequential-limit s t
  Eq-eq-standard-sequential-limit s .s refl =
    refl-Eq-standard-sequential-limit s

  is-torsorial-Eq-standard-sequential-limit :
    (s : standard-sequential-limit A) 
    is-torsorial (Eq-standard-sequential-limit s)
  is-torsorial-Eq-standard-sequential-limit s =
    is-torsorial-Eq-structure
      ( is-torsorial-htpy (pr1 s))
      ( pr1 s , refl-htpy)
      ( is-torsorial-Eq-Π  n  is-torsorial-Id (pr2 s n  refl)))

  is-equiv-Eq-eq-standard-sequential-limit :
    (s t : standard-sequential-limit A) 
    is-equiv (Eq-eq-standard-sequential-limit s t)
  is-equiv-Eq-eq-standard-sequential-limit s =
    fundamental-theorem-id
      ( is-torsorial-Eq-standard-sequential-limit s)
      ( Eq-eq-standard-sequential-limit s)

  extensionality-standard-sequential-limit :
    (s t : standard-sequential-limit A) 
    (s  t)  Eq-standard-sequential-limit s t
  pr1 (extensionality-standard-sequential-limit s t) =
    Eq-eq-standard-sequential-limit s t
  pr2 (extensionality-standard-sequential-limit s t) =
    is-equiv-Eq-eq-standard-sequential-limit s t

  eq-Eq-standard-sequential-limit :
    (s t : standard-sequential-limit A) 
    Eq-standard-sequential-limit s t  s  t
  eq-Eq-standard-sequential-limit s t =
    map-inv-equiv (extensionality-standard-sequential-limit s t)
```

### The standard sequential limit satisfies the universal property of a sequential limit

```agda
module _
  {l1 : Level} (A : inverse-sequential-diagram l1)
  where

  cone-map-standard-sequential-limit :
    {l : Level} {Y : UU l} 
    (Y  standard-sequential-limit A)  cone-inverse-sequential-diagram A Y
  cone-map-standard-sequential-limit {Y = Y} =
    cone-map-inverse-sequential-diagram A {Y = Y}
      ( cone-standard-sequential-limit A)

  is-retraction-gap-inverse-sequential-diagram :
    {l : Level} {Y : UU l} 
    is-retraction
      ( cone-map-standard-sequential-limit {Y = Y})
      ( gap-inverse-sequential-diagram A)
  is-retraction-gap-inverse-sequential-diagram = refl-htpy

  is-section-gap-inverse-sequential-diagram :
    {l : Level} {Y : UU l} 
    is-section
      ( cone-map-standard-sequential-limit {Y = Y})
      ( gap-inverse-sequential-diagram A)
  is-section-gap-inverse-sequential-diagram = refl-htpy

  up-standard-sequential-limit :
    universal-property-sequential-limit A (cone-standard-sequential-limit A)
  pr1 (pr1 (up-standard-sequential-limit X)) =
    gap-inverse-sequential-diagram A
  pr2 (pr1 (up-standard-sequential-limit X)) =
    is-section-gap-inverse-sequential-diagram
  pr1 (pr2 (up-standard-sequential-limit X)) =
    gap-inverse-sequential-diagram A
  pr2 (pr2 (up-standard-sequential-limit X)) =
    is-retraction-gap-inverse-sequential-diagram
```

### A cone over an inverse sequential diagram is equal to the value of `cone-map-inverse-sequential-diagram` at its own gap map

```agda
module _
  {l1 l2 : Level} (A : inverse-sequential-diagram l1) {X : UU l2}
  (c : cone-inverse-sequential-diagram A X)
  where

  htpy-cone-up-sequential-limit-standard-sequential-limit :
    htpy-cone-inverse-sequential-diagram A
      ( cone-map-inverse-sequential-diagram A
        ( cone-standard-sequential-limit A)
        ( gap-inverse-sequential-diagram A c))
      ( c)
  pr1 htpy-cone-up-sequential-limit-standard-sequential-limit n = refl-htpy
  pr2 htpy-cone-up-sequential-limit-standard-sequential-limit n =
    right-unit-htpy
```

### A cone satisfies the universal property of the sequential limit if and only if the gap map is an equivalence

```agda
module _
  {l1 l2 : Level} (A : inverse-sequential-diagram l1) {X : UU l2}
  (c : cone-inverse-sequential-diagram A X)
  where

  is-sequential-limit-universal-property-sequential-limit :
    universal-property-sequential-limit A c  is-sequential-limit A c
  is-sequential-limit-universal-property-sequential-limit =
    is-equiv-universal-property-sequential-limit-universal-property-sequential-limit
      ( cone-standard-sequential-limit A)
      ( c)
      ( gap-inverse-sequential-diagram A c)
      ( htpy-cone-up-sequential-limit-standard-sequential-limit A c)
      ( up-standard-sequential-limit A)

  universal-property-is-sequential-limit :
    is-sequential-limit A c  universal-property-sequential-limit A c
  universal-property-is-sequential-limit is-lim-c =
    universal-property-sequential-limit-universal-property-sequential-limit-is-equiv
      ( cone-standard-sequential-limit A)
      ( c)
      ( gap-inverse-sequential-diagram A c)
      ( htpy-cone-up-sequential-limit-standard-sequential-limit A c)
      ( is-lim-c)
      ( up-standard-sequential-limit A)
```

## 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}}