Coq中内置函数的使用

Coq中内置函数的使用,coq,Coq,我想使用与库中的count_occ函数相关的引理(count_occ_In)。我已经在Coq脚本中导入了库。但我仍然不能使用它。如果我从scipt中的库中复制count\u occ和eq\u dec,那么它就工作了。我的问题是,当我包含库模块时,为什么要重新定义函数。请指导我如何通过仅添加库模块(而不是再次定义函数)编写引理。使用其他信息,这应该适用于您: Require Import List Arith. Import ListNotations. Check count_occ. S

我想使用与库中的count_occ函数相关的引理(count_occ_In)。我已经在Coq脚本中导入了库。但我仍然不能使用它。如果我从scipt中的库中复制count\u occ和eq\u dec,那么它就工作了。我的问题是,当我包含库模块时,为什么要重新定义函数。请指导我如何通过仅添加库模块(而不是再次定义函数)编写引理。

使用其他信息,这应该适用于您:

Require Import List Arith. 
Import ListNotations.

Check count_occ.

Search nat ({?x = ?y} + {?x <> ?y}).

Definition count_occ_nat := count_occ Nat.eq_dec.
Definition count_occ_In_nat := count_occ_In Nat.eq_dec.

Check count_occ_nat.
Check count_occ_In_nat.
需要导入列表Arith。
导入列表符号。
检查计数。
搜索nat({x=?y}+{x?y})。
定义count\u occ\u nat:=count\u occ nat.eq\u dec。
定义count\u occ\u In\u nat:=count\u occ\u In nat.eq\u dec。
检查计数。
检查计数。
请参阅我如何使用
Check
查找
count\u occ
采用的参数,以及我如何使用
Search
查找等式函数可判定性的合适实例

count\u occ
是这样写的,因为它应该适用于具有可判定等式的任何类型的列表,但要使用它,您需要证明您的类型等式是可判定的,并且必须明确给出这一点


在现代定义中,有人将此类参数隐式化,并使用类型类自动填充诸如可判定等式之类的信息,但
count\u occ
对此有一个显式参数,因此您必须提供它。

是的,库中存在函数。在打印count\u occ之后,我得到count\u occ=fun(A:Type)(eq\u dec:forall x y:A,{x=y}+{x y})=>fix count\u occ(l:list A)(x:A){struct l}:nat:=将l与【】匹配=>0【】y::tl=>让n:=计数\u occ tl x如果eq\u dec y x那么sn else n----好的,你能告诉我们什么不起作用吗?举个例子会有帮助。需要导入Coq.Arith.Arith。需要导入列表Arith。导入列表符号。变量A:类型。假设等式:对于所有xy:A,{x=y}+{xy}。不动点计数(l:列表A)(x:A):nat:=将l与【】匹配=>0【】y::tl=>设n:=计数occ tl x如果等式为y x,则S n否则n结束。Lx中的定理计数:Lx中的计数大于0。我想写上面的引理而不包括eq_dec和count_occ(因为我包含了库),在包含库(需要导入列表Arith.Import ListNotations)之后,我在环境l:List?A x:?T中得到了这个消息,术语“l”的类型是“List?A”,而它的类型应该是“forall x0y:?A0,{x0=y}+{x0y}”.我有自然数列表。只想对自然数应用计数功能。