我正在尝试在Coq中重新实现我的一些Agda代码。我的问题是我的一个Agda函数是通过归纳谓词结构的递归来定义的。
在我的Coq代码中,我试图遵循相同的样式,但是有一个模式匹配限制,不允许分析具有Prop类型的值的结构以在Set中生成结果。我的问题是:有没有办法通过递归证明来定义函数,同时在Set中生成结果(如sumbool)?
包含重现错误的所有定义的代码位于以下gist。
答案 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}相关联的证明}。