Coq矢量在验证模式下爆炸?
一个关于Coq向量的机械问题。 我有证据Coq矢量在验证模式下爆炸?,coq,Coq,一个关于Coq向量的机械问题。 我有证据 input: Vector.t nat 1 ================================== compliacted_fixpoint_for input = true 我正在寻找一个可以分解向量的定理/策略,这样我就可以用内部nat重写,如下所示,这样我就可以使用cbn input: Vector.t nat 1 n: nat Hin: input = [n] ==================================
input: Vector.t nat 1
==================================
compliacted_fixpoint_for input = true
我正在寻找一个可以分解向量的定理/策略,这样我就可以用内部nat重写,如下所示,这样我就可以使用cbn
input: Vector.t nat 1
n: nat
Hin: input = [n]
==================================
complicated_fixpoint_for [n] = true
反转输入
确实引入了n:nat
,但出乎意料的是没有引入Hin
,这对我以后调用cbn
没有帮助。改用。
如果要反转的对象是目标中出现的一个术语,而不仅仅是一个证明/假设,那么您需要使用依赖反转
来代替。
当你想反转的是目标中出现的一个术语,而不仅仅是一个证明/假设时,你想使用
相关反转我想你是在寻找重写(eta输入)。
下面是两个有用的引理:
Import VectorNotations.
Lemma vec0 {T}: forall (v:Vector.t T 0), v = [].
apply (case0 (fun x => x=[])).
reflexivity.
Qed.
Lemma vec1 {T} : forall (v:Vector.t T 1), v = [hd v].
intros.
rewrite (VectorSpec.eta v).
apply f_equal.
apply vec0.
Qed.
我想您正在寻找重写(eta输入)。
下面是两个有用的引理:
Import VectorNotations.
Lemma vec0 {T}: forall (v:Vector.t T 0), v = [].
apply (case0 (fun x => x=[])).
reflexivity.
Qed.
Lemma vec1 {T} : forall (v:Vector.t T 1), v = [hd v].
intros.
rewrite (VectorSpec.eta v).
apply f_equal.
apply vec0.
Qed.
这正是我需要的谢谢!这正是我需要的谢谢!