When writing highly automated proofs in Coq (CPDT-style) proofs, building on extensive use of eauto N
, I must often modify my lemma statements to allow eauto
to use them easily. In particular, I must replace statements of form (1) forall vars, P (f args)...
(where P
appears in the thesis or among hypotheses) with form (2) forall x args, x = f args -> P x -> ...
. With form (2), eauto
can instantiate x
as needed to the appropriate expression e
(found via unification), and prove e = f args
separately via its usual proof search. Instead, with form (1) it’s necessary to rewrite with e = f args
during the proof, something that IIUC eauto
doesn’t do (unless with dedicated Hint Extern
).
Is there a better existing strategy for achieving the same result, in this style, possibly an automated one? The closest thing I’ve seen is the applys_eq
tactic in Software Foundations’ LibTactics, which allows applying a lemma in form (1) yet get e = f args
as a separate goal; however, that tactic requires a completely manual specification.
I understand what I ask might be too hard or slow; knowing this is a reasonable approach would be helpful to stop looking and go on. I’ve heard at least one experienced Coq user describe this same problem and the same approach.