Я определил индуктивное определение списков (так называемый listkind
), чтобы упростить для того, чтобы доказать конкретную теорему индукцией по listkind
, а не по списку.Другой способ сделать индукцию по спискам, которые нуждаются в доказательстве
Inductive listkind {X}: list X -> Prop :=
| l_nil : listkind []
| l_one : forall a:X, listkind [a]
| l_app : forall l, listkind l -> forall a b, listkind ([a]++l++[b]).
(С этим свойством, чтобы доказать, что о списках, я должен доказать случаи, когда список является [], [а] или [а] ++ л ++ [б], а не дела где список [] или :: л. в моей конкретной теореме, эти случаи лучше подходят и делают доказательство проще.)
Однако, чтобы иметь возможность использовать listkind в моем доказательстве, я должен доказать
Lemma all_lists_are_listkind: (forall {X} (l:list X), listkind l).
Пробуя различные подходы, я обнаружил, что застрял в этой точке. Я был бы очень признателен за то, что я мог бы сделать это, желательно с минимальной магией заклинания.
если омега слишком много «магии» вы просто должны использовать LIB Arith, чтобы закончить доказательство. – Vinz