# Truncated types
```agda
module foundation.truncated-types where
open import foundation-core.truncated-types public
```
<details><summary>Imports</summary>
```agda
open import elementary-number-theory.natural-numbers
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.logical-equivalences
open import foundation.subtype-identity-principle
open import foundation.truncation-levels
open import foundation.univalence
open import foundation.universe-levels
open import foundation-core.embeddings
open import foundation-core.identity-types
open import foundation-core.propositions
open import foundation-core.subtypes
open import foundation-core.torsorial-type-families
```
</details>
## Definition
### The subuniverse of truncated types is itself truncated
```agda
is-torsorial-equiv-Truncated-Type :
{l : Level} {k : 𝕋} (A : Truncated-Type l k) →
is-torsorial (type-equiv-Truncated-Type A)
is-torsorial-equiv-Truncated-Type A =
is-torsorial-Eq-subtype
( is-torsorial-equiv (type-Truncated-Type A))
( is-prop-is-trunc _)
( type-Truncated-Type A)
( id-equiv)
( is-trunc-type-Truncated-Type A)
extensionality-Truncated-Type :
{l : Level} {k : 𝕋} (A B : Truncated-Type l k) →
(A = B) ≃ type-equiv-Truncated-Type A B
extensionality-Truncated-Type A =
extensionality-type-subtype
( is-trunc-Prop _)
( is-trunc-type-Truncated-Type A)
( id-equiv)
( λ X → equiv-univalence)
abstract
is-trunc-Truncated-Type :
{l : Level} (k : 𝕋) → is-trunc (succ-𝕋 k) (Truncated-Type l k)
is-trunc-Truncated-Type k X Y =
is-trunc-equiv k
( type-equiv-Truncated-Type X Y)
( extensionality-Truncated-Type X Y)
( is-trunc-type-equiv-Truncated-Type X Y)
Truncated-Type-Truncated-Type :
(l : Level) (k : 𝕋) → Truncated-Type (lsuc l) (succ-𝕋 k)
pr1 (Truncated-Type-Truncated-Type l k) = Truncated-Type l k
pr2 (Truncated-Type-Truncated-Type l k) = is-trunc-Truncated-Type k
```
### The embedding of the subuniverse of truncated types into the universe
```agda
emb-type-Truncated-Type : (l : Level) (k : 𝕋) → Truncated-Type l k ↪ UU l
emb-type-Truncated-Type l k = emb-subtype (is-trunc-Prop k)
```
### If a type is `k`-truncated, then it is `k+r`-truncated
```agda
abstract
is-trunc-iterated-succ-is-trunc :
(k : 𝕋) (r : ℕ) {l : Level} {A : UU l} →
is-trunc k A → is-trunc (iterated-succ-𝕋' k r) A
is-trunc-iterated-succ-is-trunc k zero-ℕ is-trunc-A = is-trunc-A
is-trunc-iterated-succ-is-trunc k (succ-ℕ r) is-trunc-A =
is-trunc-iterated-succ-is-trunc (succ-𝕋 k) r
( is-trunc-succ-is-trunc k is-trunc-A)
truncated-type-iterated-succ-Truncated-Type :
(k : 𝕋) (r : ℕ) {l : Level} →
Truncated-Type l k → Truncated-Type l (iterated-succ-𝕋' k r)
pr1 (truncated-type-iterated-succ-Truncated-Type k r A) = type-Truncated-Type A
pr2 (truncated-type-iterated-succ-Truncated-Type k r A) =
is-trunc-iterated-succ-is-trunc k r (is-trunc-type-Truncated-Type A)
```
### Two equivalent types are equivalently `k`-truncated
```agda
module _
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2}
where
equiv-is-trunc-equiv : A ≃ B → is-trunc k A ≃ is-trunc k B
equiv-is-trunc-equiv e =
equiv-iff-is-prop
( is-prop-is-trunc k A)
( is-prop-is-trunc k B)
( is-trunc-equiv' k A e)
( is-trunc-equiv k B e)
```
### If the domain or codomain is `k+1`-truncated, then the type of equivalences is `k+1`-truncated
```agda
module _
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2}
where
is-trunc-equiv-is-trunc-codomain :
is-trunc (succ-𝕋 k) B → is-trunc (succ-𝕋 k) (A ≃ B)
is-trunc-equiv-is-trunc-codomain is-trunc-B =
is-trunc-type-subtype
( k)
( is-equiv-Prop)
( is-trunc-function-type (succ-𝕋 k) is-trunc-B)
module _
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2}
where
is-trunc-equiv-is-trunc-domain :
is-trunc (succ-𝕋 k) A → is-trunc (succ-𝕋 k) (A ≃ B)
is-trunc-equiv-is-trunc-domain is-trunc-A =
is-trunc-equiv
( succ-𝕋 k)
( B ≃ A)
( equiv-inv-equiv)
( is-trunc-equiv-is-trunc-codomain k is-trunc-A)
```