通过Coq

时间:2018-01-19 14:34:35

标签: coq

我正在尝试在Coq中重新实现我的一些Agda代码。我的问题是我的一个Agda函数是通过归纳谓词结构的递归来定义的。

在我的Coq代码中,我试图遵循相同的样式,但是有一个模式匹配限制,不允许分析具有Prop类型的值的结构以在Set中生成结果。我的问题是:有没有办法通过递归证明来定义函数,同时在Set中生成结果(如sumbool)?

包含重现错误的所有定义的代码位于以下gist

1 个答案:

答案 0 :(得分:2)

问题是您需要在证明中包含的信息来构建您的树。具体来说,您需要将$source = "E:\GatewaysRenditionArea\pdf" $fileList = Get-ChildItem -Path $source ForEach ($file in $fileList) { if ($file.FullName-like "*PID*.pdf") { copy-Item -Path $source -Destination "E:\Gateway\GatewaysStagingArea\PID - Piping and Instrumentation Diagram" } Else { if ($file.FullName -like "*BOM*.pdf") { Copy-Item -Path $source -Destination "E:\Gateway\GatewaysStagingArea\BOM - Bill of Materials" } } } 拆分为(s1, s2)。必须在计算上定义该分裂,而不是从证明s1 ++ s2 = s /\ s1 <<- e1 /\ s2 <<- e2中提取适当的分割。

解决此问题的最简单方法是将H: s1 <<- e1 @ e2放入in_regex,以匹配您的Agda开发工作方式。这意味着Type必须以计算方式构造,因此您可以自由地匹配它。

in_regex

Inductive in_regex : string -> regex -> Type休息时使用not,但您只需撰写empty_in_regex_inv

感谢Ben Sherman指出这个解决方案!

也可以将s <<- #0 -> False保留在in_regex中,但是您需要一种单独的计算方法来匹配将计算拆分的正则表达式,然后需要一个将此函数与{{1}相关联的证明}。