Мне часто приходится делать «индукционную нагрузку», чтобы доказать цели в 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) это также было бы полезно.