module Uniform.Intro
  (C : Set1)
  (HomC : C -> C -> Set)
  (idC : (c : C) -> HomC c c)
  (_∘C_ : {a b c : C} -> HomC b c -> HomC a b -> HomC a c)
  where

import Prelude
open Prelude C HomC idC _∘C_

import Uniform.posIR
open Uniform.posIR C HomC idC _∘C_

mutual

  {-# NO_POSITIVITY_CHECK #-}
  data U (c : UIR+) : Set where
    intro : index ( c ⟧UIR+ (U c , T)) -> U c

  {-# TERMINATING #-}
  T : {c : UIR+} -> U c -> C
  T {c} (intro x) = fam ( c ⟧UIR+ (U c , T)) x

introMorphism : {c : UIR+} -> HomFamC ( c ⟧UIR+ (U c , T)) (U c , T)
introMorphism = intro ,  x  idC _)