En la programación de tipo dependiente, hay dos formas principales de descomponer datos y realizar recursividad:
- Dependencia de patrones dependientes : las definiciones de funciones se dan como múltiples cláusulas. La unificación asegura que todos los casos omitidos son imposibles, y un solucionador externo asegura que la recursión esté bien fundada.
- Eliminadores : Cada tipo de datos inductiva tiene una constante asociada , que actúa como un principio de inducción, y como función recursiva que se descompone valores de tipo . Estos son más detallados, pero tienen la ventaja de ser totales (todos los casos están cubiertos por ) y terminar por construcción.
He visto eliminadores para tipos de datos comunes, como , donde el eliminador es básicamente una inducción matemática, o , donde el eliminador es básicamente un pliegue.
He estado leyendo varios artículos sobre coincidencia de patrones dependientes, y muchos se refieren a teorías de tipos en las que se pueden definir tipos de datos, y la teoría proporciona los eliminadores. Por ejemplo, eliminación de coincidencia de patrones Dependiente describe cómo UTT se basa en los eliminadores, y cómo la coincidencia de patrones se puede convertir a la eliminación en presencia de axioma . Entiendo que, una vez que se define un tipo de datos, la teoría proporciona el eliminador.
Lo que no he encontrado (o al menos, no he reconocido si lo he visto) es una buena descripción de cómo se pueden derivar los eliminadores, tanto sus tipos como su semántica.
¿Alguien puede señalarme una referencia que describa cómo se puede obtener un eliminador de la definición de un tipo de datos?
fix
y match
. No tengo una referencia a mano, pero sé que he leído algo sobre cómo se genera este eliminador. cs.stackexchange.com/questions/104/… puede ser de interés.
T
, Coq define un principio de inducción T_ind
que es un eliminador dependiente. Esto se define en términos de recurrencia y coincidencia de patrones, pero, en principio, podría suponerse como una nueva constante que tiene el mismo tipo (con la misma semántica).