For instance changing notation from $C_i$ to $C(i)$ would be considered cheating unless $C$ is a functor from a category $I$.
I'm trying to figure out a way to simplify handling category constructs in code. If there were a way to remove sub/superscripting, that would be awesome.
For instance "consider the family of objects in $\mathcal{C}$, $\{C_i\}_{i \in I}$ ..." Then can't we do something like have $I$ be a discrete category and have $C: I \to \mathcal{C}$ be a functor. Then how would we go about handling a family of maps $C_i \xrightarrow{s_i} P$ (in the usual definition of coproduct e.g.) Would we just consider a functor from $I$ into $\text{Mor}(\mathcal{C})$? or $P\setminus \mathcal{C}$ the coslice category?
I'm trying to think of creative ways to handle human conventions in math, such as subscripting. We take such things for granted because they come natural to us. But on a computer, if I let one thing happen such as subscripting, then I open the door to a whole slew of a mess. So since we are talking about category theory here, there has got to be some tricks to make alternative definitions.
I hope that makes sense now.
A common way of defining a (co)limit is via $\mathsf{Nat}(\Delta X,D)\cong\mathsf{Hom}(X, \mathsf{Lim}D)$ natural in $X$ and also $D : \mathcal{I}\to\mathcal{C}$ if you have all limits of shape $\mathcal{I}$. $\Delta : \mathcal{C}\to[\mathcal{I},\mathcal{C}]$ is the constant functor, i.e. the exponential transpose of $\pi_1$ in $\mathbf{Cat}$ and $\mathcal{I}$ is assumed to be small. For products, you can just take the discrete category. Colimits look like $\mathsf{Hom}(\mathsf{Colim}D,X)\cong\mathsf{Nat}(D,\Delta X)$. If you have all limits/colimits of shape $\mathcal{I}$, then you can also express these as $\mathsf{Colim}\dashv \Delta\dashv \mathsf{Lim}$.
You may want to look at Cáccamo's and Winskel's A Higher Order Calculus for Categories and Hagino's thesis, A Categorical Programming Language. I don't really think avoiding subscripts is a good idea, though I thoroughly appreciate the complexities of adding binding forms to a language.