如何在Coq中编写没有参数的定义?
我在中定义了以下归纳类型 natlist基本上是一个自然数列表(类似于Python中的列表)。我试图用下面的定义找到两个natlist的并集 列表的定义联合:natlist->natlist->natlist i、 e如何在Coq中编写没有参数的定义?,coq,Coq,我在中定义了以下归纳类型 natlist基本上是一个自然数列表(类似于Python中的列表)。我试图用下面的定义找到两个natlist的并集 列表的定义联合:natlist->natlist->natlist i、 e Eval simple in(列表[1,2,3][1,4,1]的并集) 应返回[1,2,3,1,4,1] 我有以下疑问 由于这个定义没有参数,我实际上如何获取输入并处理它们 _列表的union_返回的确切定义是什么?这只是一份名单吗 非常感谢任何帮助或提示。我自己找到了答案:
Eval simple in(列表[1,2,3][1,4,1]的并集)
应返回[1,2,3,1,4,1]
我有以下疑问
- 由于这个定义没有参数,我实际上如何获取输入并处理它们
- _列表的union_返回的确切定义是什么?这只是一份名单吗
非常感谢任何帮助或提示。我自己找到了答案:)我所做的是,我编写了一个单独的定点函数
append
,然后将其分配给union\u列表的定义
Fixpoint append(l1 l2 : natlist) : natlist :=
match l1 with
| nil => l2
| (h :: t) => h :: app t l2
end.`
然后
Definition union_of_lists : natlist -> natlist -> natlist := append.
Eval simpl in (append [1,2,3] [1,2,3]) (* returns [1,2,3,1,2,3] *)
列表的定义union\u
返回一个函数,该函数以natlist
为参数,并返回另一个natlist->natlist
类型的函数(即函数取natlist
参数并返回natlist
)
列表的联合定义类似于可以返回函数或值的函数。您也可以直接执行:列表的定点联合(l1 l2:natlist)…,类型相同(只需输入“Check append.”)。或者使用标准库中的附加列表(请参见)是。你是对的。_列表的append和union_的类型相同。我的意图是使用定义而不是固定点。这就是为什么我必须以一种迂回的方式来做那件事。感谢您提出使用标准库的建议。我会查一查。
Definition union_of_lists : natlist -> natlist -> natlist := append.
Eval simpl in (append [1,2,3] [1,2,3]) (* returns [1,2,3,1,2,3] *)