我经常需要做“归纳加载”来证明 Coq 中的目标,在 Coq 中我通过归纳同时证明多个事物。
问题是,我经常得到以下形式的归纳假设:
forall a1 ... an,
Premise1 -> Premise2 -> ... Premisek ->
Conclusion1 /\ Conclusion2 /\ ... Conclusion_m
这很好,但是像这样的战术eauto
真的不知道如何处理这样的事情,所以它大部分时间都会扼杀自动化。
我想知道的是,有没有办法自动将这样的前提分解成m
不同的前提,即
forall a1 ... an,
Premise1 -> Premise2 -> ... Premisek ->
Conclusion1
...
forall a1 ... an,
Premise1 -> Premise2 -> ... Premise_k ->
Conclusion_m
我遇到的主要问题是我不知道如何匹配 LTac 中任意长度的箭头链。我可以硬编码到一定长度,但我希望有更好的方法。
此外,如果可以进行对偶(即拆分 Premise1 .. Premise_k 中的所有析取组合),那也是有用的。