Я пытаюсь доказать следующую лемму в Coq:
Require Import Lists.List.
Import ListNotations.
Lemma not_empty : forall (A : Type) (a b : list A),
(a <> [] \/ b <> []) -> a ++ b <> [].
Прямо сейчас моя текущая стратегия состояла в том, чтобы уничтожить a, и после разрыва дизъюнкции в идеале я мог бы просто заявить, что если a <> [], то a ++ b также должен быть <> []... Это был план, но я не может пройти мимо подзадачи, которая напоминает первый "a ++ b <> []", даже когда мой контекст ясно утверждает, что "b <> []". Любой совет?
Я также просмотрел множество уже существующих теорем о списках и не нашел ничего особенно полезного (за исключением app_nil_l и app_nil_r, для некоторых подцелей).