Function 柯克:“功能。。。用`语法

Function 柯克:“功能。。。用`语法,function,syntax,definition,coq,Function,Syntax,Definition,Coq,似乎,作为w/归纳的和固定点,您可以使用相互定义函数。您能给出语法和/或示例吗?我到处都找不到任何东西。我想这与Fixpoint (在这上面也找不到任何东西)。一个非工作(但一半编译——最后两行以红色突出显示)示例: 好吧,我想我终于明白你的问题了 确实有一种方法可以相互定义多个固定点。在变体部分有(轻微)记录 类似地,有一种方法可以相互定义几个归纳的类型(文档化) 有一种方法可以相互定义几个。但是,请注意手册中关于此功能的备注: 函数结构还具有和扩展,用于定义相互递归的定义。但是,此功能不适用

似乎,作为w/
归纳的
固定点
,您可以使用相互定义
函数
。您能给出语法和/或示例吗?我到处都找不到任何东西。我想这与
Fixpoint
(在这上面也找不到任何东西)。一个非工作(但一半编译——最后两行以红色突出显示)示例:


好吧,我想我终于明白你的问题了

确实有一种方法可以相互定义多个
固定点
。在变体部分有(轻微)记录

类似地,有一种方法可以相互定义几个
归纳的
类型(文档化)

有一种方法可以相互定义几个。但是,请注意手册中关于此功能的备注:

函数
结构还具有
扩展,用于定义相互递归的定义。但是,此功能不适用于非结构化递归函数

在半工作示例中出现的错误与语法无关,也与
函数无关。。。具有
功能。错误在于您只能对归纳类型使用模式匹配,而分支必须以构造函数开头。在您的示例中,
ARG
不是归纳类型,
Inf
不是构造函数。我不能真正“纠正”你的例子,因为我真的不明白你想表达什么。这个例子就是为了这个问题吗?在这种情况下,您将其精简为太少


PS:我想知道你是否在尝试(同时定义递归函数和归纳类型)。如果是这样的话,那就没有运气了:Coq还没有这个功能。

我完全不清楚你在问什么。另外:如果行以红色突出显示,您如何说您的示例正在编译。恰恰相反!最后,不要使用“w/”或类似的缩写。你有一个正确的观点:我更正为“半编译”。编译器有几个过程。如果一条线高亮显示为红色,则其中一些是成功的。试着删除一个
结束
,看看发生了什么我必须考虑如何解决这个问题。有很多问题,其中一些我解决了(有有趣的结果(一个
异常
,不少)),但。。。
Variable ARG:Type.
Variable phy inf phyinf: ARG.
Function Phy (x:ARG): ARG := match x with Inf x => phyinf | _ => phy end
with Inf (x:ARG): ARG := match x with Phy x => phyinf | _ => inf end. (*Error: Unknown constructor: Inf.*)