Jon Sterling and Mike Shulman, September 2023.

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

module WildCategories.Base where

open import MLTT.Spartan
open import UF.Subsingletons

record WildCategory 𝓤 𝓥 : (𝓤  𝓥) ̇ where
 field
  ob : 𝓤 ̇
  hom : ob  ob  𝓥 ̇
  idn : (x : ob)  hom x x
  _<<_ : {x y z : ob} (g : hom y z) (f : hom x y)  hom x z
  assoc
   : {u v w x : ob} (f : hom u v) (g : hom v w) (h : hom w x)
    h << (g << f)  (h << g) << f
  lunit
   : {x y : ob} (f : hom x y)
    f << idn x  f
  runit
   : {x y : ob} (f : hom x y)
    idn y << f  f

module _ {𝓤 𝓥} (C : WildCategory 𝓤 𝓥) where
 open WildCategory C

 is-initial-object : ob  𝓤  𝓥 ̇
 is-initial-object I = (x : ob)  is-singleton (hom I x)

 has-initial-object : 𝓤  𝓥 ̇
 has-initial-object = Σ is-initial-object

\end{code}