Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在coq中应用带限制定义的定理_Coq_Dependent Type - Fatal编程技术网

如何在coq中应用带限制定义的定理

如何在coq中应用带限制定义的定理,coq,dependent-type,Coq,Dependent Type,我在coq中找到了许多带有限制的定义示例。例如,这里是pred函数的一种变体: Lemma Lemma_NotZeroIsNotEqualToZero : ~ 0 <> 0. Proof. omega. Qed. Definition pred (s : { n : nat | n <> 0 }) : nat := match s with | exist 0 pf => match (Lemma_NotZeroIsNotEqualToZe

我在coq中找到了许多带有限制的定义示例。例如,这里是
pred
函数的一种变体:

Lemma Lemma_NotZeroIsNotEqualToZero : ~ 0 <> 0.
Proof.
omega.
Qed.

Definition pred (s : { n : nat | n <> 0 }) : nat :=
    match s with
        | exist 0 pf => match (Lemma_NotZeroIsNotEqualToZero pf) with end
        | exist (S n') _ => n'
    end.
现在,我想用引理计算“
pred10
”的本质:

Eval compute in (pred ??).

如何操作?

pred
是一个采用
sig
类型的函数(尝试
打印sig.
)。简单地说,它是一种归纳类型,有一个构造函数声明“存在一个
A
类型的
x
,因此
px
是真的”

如果你想创建一个
{n:nat | n0}
类型的术语,你必须像其他归纳类型一样使用构造函数来构建它。就你而言:

Eval compute in (pred (exist 10 Lemma_TenIsNotEqualToZero)).
这与您在
pred
s
参数上进行模式匹配时使用的语法完全相同

希望有帮助

PS:用
omega
做两种证明真是太过分了

Lemma Lemma_NotZeroIsNotEqualToZero : ~ 0 <> 0.
Proof.
intro h.
apply h; reflexivity.
Qed.

Lemma Lemma_TenIsNotEqualToZero : 10 <> 0.
Proof.
intro h.
discriminate h.
Qed.

使用不起作用的附加

。(我在问问题之前确实试过了。)错误信息如下:“错误:术语“10”的类型为“nat”,而它的类型应为”?641->Prop“。由于您使用
exists 0 pnf
进行模式匹配,我认为您已经激活了隐式类型的自动插入。尝试使用
exists\u10
,它应该可以工作。
Lemma Lemma_NotZeroIsNotEqualToZero : ~ 0 <> 0.
Proof.
intro h.
apply h; reflexivity.
Qed.

Lemma Lemma_TenIsNotEqualToZero : 10 <> 0.
Proof.
intro h.
discriminate h.
Qed.
exists _ 10 Lemma_TenIsNotEqualToZero