我读到类型的归纳原理只是关于命题的定理P
。List
所以我构造了一个基于右(或反向)列表构造函数的归纳原理。
Definition rcons {X:Type} (l:list X) (x:X) : list X :=
l ++ x::nil.
归纳原理本身是:
Definition true_for_nil {X:Type}(P:list X -> Prop) : Prop :=
P nil.
Definition true_for_list {X:Type} (P:list X -> Prop) : Prop :=
forall xs, P xs.
Definition preserved_by_rcons {X:Type} (P: list X -> Prop): Prop :=
forall xs' x, P xs' -> P (rcons xs' x).
Theorem list_ind_rcons:
forall {X:Type} (P:list X -> Prop),
true_for_nil P ->
preserved_by_rcons P ->
true_for_list P.
Proof. Admitted.
但是现在,我在使用这个定理时遇到了麻烦。我不知道如何调用它来达到与induction
策略相同的效果。
例如,我试过:
Theorem rev_app_dist: forall {X} (l1 l2:list X), rev (l1 ++ l2) = rev l2 ++ rev l1.
Proof. intros X l1 l2.
induction l2 using list_ind_rcons.
但在最后一行,我得到:
Error: Cannot recognize an induction scheme.
定义和应用自定义归纳原则的正确步骤是list_ind_rcons
什么?
谢谢