J'ai plusieurs types inductifs définis pour un compilateur que je suis vérification de ce formulaireavec destruct types dépendants
Inductive types := Int | Char | Symbol | Bool.
Inductive val : types -> Type :=
| T : val Bool
| F : val Bool
| Num : nat -> val Int
...
Inductive exp : types -> Type :=
| If : forall {t}, val Bool -> exp t -> exp t -> exp t
etc...
Maintenant cela est bien beau et simplifie un certain nombre de choses jusqu'à ce que j'essaie de prouver un certain théorème comme
Theorem example : forall t test (b1 b2 : exp t),
eval (If test b1 b2) = eval b1
\/ eval (If test b1 b2) = eval b2.
maintenant, je voudrais faire une analyse de cas trivial en utilisant destruct test
car il n'y a que 2 cas, T
et F
à considérer. Mais si j'essaie cela, j'obtiendrais une erreur m'informant que la tactique destruct
génère des termes mal typés. Ce qu'il fait.
Y a-t-il une tactique similaire à destruct
qui me permettra de faire l'analyse de cas sur des termes bien typés et d'envoyer automatiquement ceux qui seraient mal typés? Je soupçonne que c'est impossible dans quel cas, quelle serait la bonne approche pour traiter des preuves de ce genre?