El derivado de un Tipo Regular es su Tipo de Contexto Uniforme
Se trata de una sorprendente aplicación informática relacionada con el ejemplo de Qiaochu, pero lo suficientemente diferente como para justificar alguna explicación. Pido disculpas por algunas de mis indirectas.
En un lenguaje de programación convenientemente puro (como Haskell ) podemos pensar en los tipos de datos como objetos de una categoría y en las funciones (convenientemente cualificadas) como flechas. A menudo queremos construir un tipo a partir de otro. Por ejemplo, dado un tipo $X$ podemos formar el tipo $X\times X$ el tipo de pares de $X$ 's. Del mismo modo podemos formar coproductos que corresponden a objetos que pueden ser de un tipo o de otro. Por ejemplo, si $Y=X+X^2$ entonces $Y$ es un tipo que contiene un $X$ o un par de $X$ 's. Las funciones que construyen un tipo a partir de otro, denominadas constructores de tipos, pueden considerarse naturalmente functores. Así, $P$ definido por $P(X)=X^2$ es un functor. Si $(x,y)$ está en $X^2$ entonces $Pf(x,y)=(f(x),f(y))$ . Los tipos forman un semiring.
A veces queremos hacer un 'hueco' en un constructor de tipos. Si $F$ es un constructor de tipo, entonces $F(A)$ puede considerarse como un contenedor de elementos de tipo $A$ . Un " $F$ con un agujero" es uno de estos contenedores pero con uno de sus elementos eliminado, pero manteniendo la información sobre de dónde se eliminó el elemento. Por ejemplo $F(X)=X^3$ . $F$ hace triples de $X$ 's. Un triple con un agujero consta de sólo dos $X$ así como información suficiente para saber de dónde se extrajo el tercer elemento. Sólo hay tres lugares de los que podría haber salido, por lo que podemos describir el lugar de eliminación utilizando un tipo con sólo tres elementos. Llamémoslo $3$ . Así pues, un triple con un agujero es un par formado por un elemento de tipo $3$ y un elemento de tipo $X^2$ . Es decir. $3X^2$ . Esto es $F'(X)$ .
Esto funciona de forma más general. Hacemos huecos en los constructores de tipos diferenciándolos .
Incluso funciona con tipos recursivos. Por ejemplo, una lista de $X$ es, por definición, o bien la lista vacía, o bien un par formado por un $X$ y una lista. Tenemos una ecuación
$L(X)=1+XL(X)$ .
Podemos diferenciar esto para obtener
$L'(X)=L(X)+XL'(X)$
Esto da una ecuación recursiva para un tipo de una lista con un agujero en ella. Esto es de hecho un ejemplo de un tipo llamado a cremallera . Utilizado en muchos lugares como esta solicitud . En el caso particular de las listas $L'(X)$ define un par de listas de $X$ 's.
(Gran parte de esto se aplica en la categoría $Set$ pero las ecuaciones recursivas pueden introducir algunos problemas de fundamentación si se toman demasiado al pie de la letra).
Muchas de las propiedades habituales de las derivadas adquieren interpretaciones computacionales sencillas: linealidad, la regla del producto, la regla de la cadena, incluso la fórmula Faà di Bruno.
De todos modos, echa un vistazo al papeles que no tienen ninguno de los errores que probablemente he introducido. También hay una estrecha relación con especies combinatorias .
(Curiosamente, también se puede dar sentido a las diferencias finitas de tipos aunque sólo tengamos un semiring y no tengamos sustracción de tipos).