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
ymatch
. 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ónT_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).Respuestas:
La referencia canónica para esto es Peter Dybjer, Inductive Families , que ofrece un tratamiento bastante completo de familias inductivas basado en eliminadores.
fuente
Puede encontrar algunos de nuestros documentos recientes sobre esto útiles, ya que derivamos eliminadores para los tipos de datos codificados en lambda. Por ejemplo, ver esto uno para la derivación genérica de eliminadores, y esto uno para la técnica básica aplica sólo para el tipo de NAT.
fuente