我想编写一个Coq插件,该插件将采用归纳类型的元素,并对该元素进行递归模式匹配,并在每次迭代中进行一些计算。这听起来很直截了当,但是我真的不知道从哪里开始。
我设法找到了一些Coq插件,对其进行编译并运行。但是我没有找到任何有关Coq API的概述来了解基本概念。
到目前为止我发现的有用资源:
简单示例:
让我们有一个简单的归纳类型,用一个二进制操作来表示表达式
Inductive expr : Type :=
| var : nat -> expr
| op : expr -> expr -> expr
我想定义一个新的Vernacular命令InspectExpression
,该命令将递归遍历表达式并进行一些计算。
InspectExpression (op (op (var 0) (var 1)) (var 2)). (* expression: "(x+y)+z" *)
我的最终目标是根据这些表达式生成一些C ++代码,但我认为这对问题/答案并不重要。
答案 0 :(得分:2)
这些天的规范信息来源是官方的Coq Plugin Tutorial,尽管它是最新的,但在Google fu [因此它首先出现在搜索中]和格式/演示文稿方面都需要一些帮助。
我想从这里开始,如果您想获取其他示例,请不要犹豫在Coq issue tracker中打开错误。
Coq's discourse和Gitter channel对插件开发者也是非常有用的设备。