Sometimes I need to define an inductive proposition of the following form:

Inductive foo : A -> B -> Prop :=
| Foo : forall c, foo a0 (f c).

where a0 : A and f : C -> B.

The issue is that when trying to prove a statement of the form foo a b if I want to apply Foo I need to first assert that a = a0 and b = f c for some c. Is there a way to “apply” Foo and automatically deduce new goals with the required equalities ?

I could include the equalities in the definition of the inductive type, as in:

Hi,
I don’t feel this particularly inelegant with the equalities but you can define a tactic which first assert that the actual parameters of foo are actually equal to the expected ones. Not sure it is worth it.

Thanks for the tactic idea. In my actual case, the inductive type has many such cases and adding the necessary equalities for each one of them is adds quite a bit of “noise.” I think defining a suitable tactic may be useful.