作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读到类型的归纳原理只是关于命题的定理 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
)的正确步骤是什么? ?
最佳答案
你所做的大部分是正确的。问题是 Coq 在识别你写的是归纳原理时遇到了一些麻烦,因为中间定义。例如,这工作得很好:
Theorem list_ind_rcons:
forall {X:Type} (P:list X -> Prop),
P nil ->
(forall x l, P l -> P (rcons l x)) ->
forall l, P l.
Proof. Admitted.
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.
关于coq - 如何在 Coq 中使用自定义归纳原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33071903/
我是一名优秀的程序员,十分优秀!