Closed ANogin closed 6 years ago
This one is because the recursive calls under the match in lookup was not recognized, and we hence try to build a combined mutual induction principle for non-mutual inductives. Allowing the recognition of this recursive calls solves this (fix incoming), but it's a bit fragile for automation of the induction proof. Pattern-matchings should rather happen on the left. The right fix is to just define lookup as:
Equations(struct t) lookup (t:Foo) (val: foo_type t) (what: list nat) : option nat := {
lookup (Prod ss) val nil := None;
lookup (Prod ss) val (cons hd tl) := lookup_prod ss val hd tl }
Note the (struct t)
annotation which is now taken into account (fix incoming as well).
Now fixed
With the latest v8.8, the following code
results in