Me preguntaba si el orden de las declaraciones de tipo inductivo puede importar.
Por ejemplo, en Coq, puede definir Nat
ya sea por:
Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
o
Inductive Nat :=
| S : Nat -> Nat
| O : Nat.
Quizás esto cambie el orden de los parámetros en el eliminador generado automáticamente, pero eso no es gran cosa.
Lo que me pregunto es si es posible escribir una declaración como
Inductive typewhereordermatters :=
| cons1 : type1
| cons2 : type2.
donde type2
es un tipo dependiente, dependiendo de cons1
? (y en este caso, escribir las declaraciones en el otro orden no tendría ningún significado, porque type2
se estaría refiriendo a lo cons1
que aún no existe).
fuente
circle
, el tipo delloop
constructor depende delbase
constructor.¿Importa el orden en la forma en que lo pides? No.
¿Pero es la orden completamente irrelevante para el funcionamiento del asistente de pruebas? De nuevo no. En Matita, un asistente de prueba muy similar a Coq, el orden en que los constructores se escriben en una definición inductiva sí importa para la verificación de tipos, específicamente cuando se verifica una expresión de coincidencia.
Matita primero tiene que verificar que todos los constructores estén siendo enfrentados en el cuerpo del partido. Para ello, recorre los constructores en el orden en que se declaran. Luego, se trata de verificar la expresión de coincidencia adecuada, que ocurre en orden inverso, verificando primero el caso del último constructor declarado. Este tipo se lleva a cabo y se utiliza para verificar los otros casos.
Esto a menudo aparece cuando se escribe una expresión de coincidencia grande. Primero le gustaría completar los casos fáciles, dejando los casos más difíciles bajo un comodín, escriba periódicamente la verificación de lo que ha escrito para asegurarse de que tenga sentido. A veces, Matita es incapaz de inferir el tipo de expresión de coincidencia incompleta, pero lo hará con mucho gusto si completa el caso del último constructor definido en el tipo inductivo.
Supongo, aunque no estoy seguro, que Coq hace algo similar.
fuente