Jonathan Sterling, 22nd March 2023.

In this module we define the coslice of a universe under a given type; in fact,
our construction is slightly more general, as we allow the given type to lie in
a different universe. This is useful for characterizing things like small
reflective subuniverses, which arise when studying impredicativity.

\begin{code}
{-# OPTIONS --safe --without-K #-}

module Coslice.Type where

open import MLTT.Spartan

_↓_ : 𝓥 ̇  (𝓤 : Universe)  𝓥  𝓤  ̇
A  𝓤 = Σ I  𝓤 ̇ , (A  I)

Coslice : 𝓤 ̇  𝓤  ̇
Coslice A = A  _

module _ {A : 𝓥 ̇ } where
 target : A  𝓤  𝓤 ̇
 target (I , α) = I

 alg : (X : A  𝓤)  A  target X
 alg (I , α) = α

\end{code}