1

In my current proof, I end up requiring the following result for the else situation of a case disjunction.

1 subgoal (ID 28899)
  
  l : list (Concrete.cvalue sem)
  ============================
  match l with
  | [] | _ => True
  end

I therefore intend to proceed with a trivial induction on my list, by applying induction l. apply I., and I end up with

1 subgoal (ID 28909)
  
  a : Concrete.cvalue sem
  l : list (Concrete.cvalue sem)
  IHl : match l with
        | [] | _ => True
        end
  ============================
  match l with
  | [] | _ => True
  end

However, once here, he doesn't accept assumption nor exact IHl, saying that

Error:
In environment
a : Concrete.cvalue sem
l : list (Concrete.cvalue sem)
IHl : match l with
      | [] | _ => True
      end
The term "IHl" has type "match l with
                         | [] | _ => True
                         end" while it is expected to have type
 "match l with
  | [] | _ => True
  end".

Do you have any idea of what may be in cause, and how to solve it?

Nimantha
  • 6,405
  • 6
  • 28
  • 69
Berelex
  • 11
  • 3
  • It's definitely strange to see an error message of the form "has type X while it is expected to be X", with X being exactly the same in the two places. I'd file a bug report on Coq using a minimal reproducible example file, telling them that Coq should be more specific or precise in its error messages. – Roland Illig Jun 23 '21 at 10:21

0 Answers0