2025-12-23 12:14:02
Thinking about structure preservation. Given a nice enough (say, GAT) signature like (pseudo-Agda)
we can automatically derive the appropriate notion of homomorphism:
But what if I want to talk about preserving derived structure, like terminal objects? I might try to extend the signature (C : Cat) with (c : Ob C) (_ : is-terminal c), but then a morphism between those is just a pointed functor, so this doesn't help. Rather than extend Cat with a terminal object, it seems like I need to extend it with the notion of terminality itself:
This extends the notion of homomorphism like so:
Now every Cat extends to a CatWithTerminality by setting IsTerminal := is-terminal, and we can say that a Functor preserves terminal objects if it extends to a FunctorWithTerminality.
Has anyone thought about this in similar terms?



