Вы видите, что индукционная гипотеза IH
недостаточно сильна, чтобы доказать цель. Здесь вам нужно более общее утверждение, чтобы доказать в первую очередь . Вы можете найти больше упражнений, посвященных этой теме здесь . (На самом деле, хвостово-рекурсивный реверс является одним из упражнений.)
В вашем случае полностью обобщенное утверждение может быть следующим:
Lemma rev_append_app': forall (X: Type) (l l1 l2 : list X),
rev_append l (l1 ++ l2) = rev_append l l1 ++ l2.
Доказать это по индукции тривиально. Тогда вы можете доказать свое собственное утверждение как следствие этого:
Corollary rev_append_app: forall (X: Type) (x: X) (l : list X),
rev_append l [x] = rev_append l [] ++ [x].
Proof. intros. apply (rev_append_app _ _ [] [x]). Qed.