Eu queria saber se a ordem das declarações de um tipo indutivo pode importar.
Por exemplo, no Coq, você pode definir Nat
:
Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
ou
Inductive Nat :=
| S : Nat -> Nat
| O : Nat.
Talvez isso mude a ordem dos parâmetros no eliminador gerado automaticamente, mas isso não é grande coisa.
O que eu quero saber é se é possível escrever uma declaração como
Inductive typewhereordermatters :=
| cons1 : type1
| cons2 : type2.
onde type2
é um tipo dependente, dependendo cons1
? (e, neste caso, escreva as declarações na outra ordem não teriam significado, porque type2
se refeririam a cons1
qual ainda não existe).
fonte
circle
, o tipo doloop
construtor depende dobase
construtor.O pedido importa da maneira que você pede? Não.
Mas a ordem é completamente irrelevante para o funcionamento do assistente de prova? Novamente não. Em Matita, um assistente de prova muito semelhante ao Coq, a ordem em que construtores são escritos em uma definição indutiva faz questão de verificação de tipo, especificamente quando o tipo de verificação a expressão de correspondência.
Matita primeiro deve verificar se todos os construtores estão sendo comparados no corpo da partida. Isso é feito alternando entre os construtores na ordem em que são declarados. Em seguida, trata-se de verificar a expressão de correspondência adequada, o que acontece na ordem inversa, verificando primeiro o caso para o último construtor declarado. Esse tipo é realizado e usado para verificar os outros casos.
Isso geralmente aparece ao escrever uma expressão de correspondência grande. Você gostaria de preencher primeiro os casos fáceis, deixando os casos mais difíceis sob um curinga, periodicamente digite a verificação do que você escreveu para se certificar de que faz sentido. Às vezes, o Matita é incapaz de inferir o tipo da expressão de correspondência incompleta, mas o fará com muita satisfação se você preencher o caso do último construtor definido no tipo indutivo.
Presumo, embora não tenha certeza, que Coq faz algo semelhante.
fonte