如何在 Coq 中编写不带参数的定义?
我在 Coq 中定义了以下归纳类型。
Inductive natlist : Type :=
| nil : natlist
| cons : nat -> natlist -> natlist.
Notation "x :: l" := (cons x l) (at level 60, right associativity).
Notation "[ ]" := nil.
Notation "[ x , .. , y ]" := (cons x .. (cons y nil) ..).
natlist 基本上是一个自然数列表(类似于 Python 中的列表)。我试图使用下面的定义找到两个 natlist 的并集。
定义 union_of_lists : natlist ->纳特列表 -> natlist
即 在 (union_of_lists [1,2,3] [1,4,1]) 中计算 simpl
应该返回 [1,2,3,1,4,1]
我有以下疑问。
- 由于这个定义没有参数,我如何实际获取输入并处理它们?
- union_of_lists 的定义到底返回什么?它只是一个 natlist 吗?
非常感谢任何帮助或提示。
I have the following Inductive type defined in Coq.
Inductive natlist : Type :=
| nil : natlist
| cons : nat -> natlist -> natlist.
Notation "x :: l" := (cons x l) (at level 60, right associativity).
Notation "[ ]" := nil.
Notation "[ x , .. , y ]" := (cons x .. (cons y nil) ..).
The natlist is basically a list of natural numbers (similar to lists in Python). I am trying to find the union of two natlist using the definition below.
Definition union_of_lists : natlist -> natlist -> natlist
i.eEval simpl in (union_of_lists [1,2,3] [1,4,1])
should return [1,2,3,1,4,1]
I have the following doubts.
- Since there are no arguments to this definition, how do I actually get the inputs and handle them?
- What does the definition union_of_lists return exactly? Is it just a natlist?
Any help or hints are highly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我自己找到了答案:)我所做的是,我编写了一个单独的 Fixpoint 函数
append
,然后将其分配给union_of_lists
的定义。然后
定义
union_of_lists
返回一个函数,该函数以natlist
作为参数,并返回另一个natlist -> 类型的函数natlist
(即接受一个natlist
参数并返回一个natlist
的函数)。union_of_lists
的这个定义类似于函数式编程中的函数,它可以返回一个函数或一个值。I found the answer myself :) What I did was, I wrote a separate Fixpoint function
append
and then assigned it to the definition ofunion_of_lists
.and then
The definition
union_of_lists
returns a function which takesnatlist
as an argument and returns another function of typenatlist -> natlist
(i.e function taking anatlist
argument and returning anatlist
).This definition of
union_of_lists
resembles functions in Functional Programming which can either return a function or a value.