这是给我的练习之一,我在对 l 进行归纳后几乎立即卡住了。我不知道这里还有什么其他断言。
我不允许使用自动、直觉等高级策略。
Fixpoint snoc {A : Type} l a : list A :=
match l with
| nil => a :: nil
| h :: t => h :: (snoc t a)
end.
Fixpoint rev {A : Type} l : list A :=
match l with
| nil => nil
| h :: t => snoc (rev t) h
end.
(Prove the following)
Theorem rev_rev : forall A (l : list A),
rev (rev l) = l.