Je me demandais si l'ordre des déclarations de type inductif pouvait avoir de l'importance.
Par exemple, dans Coq, vous pouvez définir Nat
soit par:
Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
ou
Inductive Nat :=
| S : Nat -> Nat
| O : Nat.
Cela changera peut-être l'ordre des paramètres dans l'éliminateur généré automatiquement, mais ce n'est pas un gros problème.
Je me demande s'il est possible d'écrire une déclaration comme
Inductive typewhereordermatters :=
| cons1 : type1
| cons2 : type2.
où type2
est un type dépendant, selon cons1
? (et dans ce cas, écrire les déclarations dans l'autre ordre n'aurait aucun sens, car type2
se référer à cons1
ce qui n'existe pas encore).
la source
circle
, le type duloop
constructeur dépend dubase
constructeur.La commande est-elle importante dans la façon dont vous demandez? Non.
Mais l'ordre est-il complètement hors de propos pour le fonctionnement de l'assistant de preuve? Encore une fois, non. En Matita, un assistant de preuve très semblable à Coq, l'ordre dans lequel les constructeurs sont écrits dans une définition inductive ne soit pour le contrôle de type, en particulier lorsque le type de vérification d' une expression de correspondance.
Matita doit d'abord vérifier que tous les constructeurs sont mis en correspondance dans le corps du match. Pour ce faire, il parcourt les constructeurs dans l'ordre dans lequel ils sont déclarés. Ensuite, il s'agit de taper l'expression de correspondance appropriée, ce qui se produit dans l'ordre inverse, en vérifiant d'abord la casse pour le dernier constructeur déclaré. Ce type est ensuite effectué et utilisé pour vérifier les autres cas.
Cela apparaît très souvent lors de l'écriture d'une expression de correspondance importante. Vous souhaitez d'abord remplir les cas faciles, en laissant les cas plus difficiles sous un caractère générique, en vérifiant périodiquement ce que vous avez écrit pour vous assurer que cela a du sens. Parfois, Matita n'est pas en mesure de déduire le type de l'expression de correspondance incomplète, mais le fera très volontiers si vous remplissez le cas du dernier constructeur défini dans le type inductif.
Je suppose, bien que je ne sois pas certain, que Coq fasse quelque chose de similaire.
la source