μ 的作用域与其他活页夹没有什么不同,所以是的,你所有的例子都是有效的。它们也是正则的,因为它们甚至不包含 λ。(*)
至于平等,这取决于你有什么样的μ型。基本上有两种不同的概念:
equi-recursive:在这种情况下,打字规则假定等价
μα.T = T[μα.T / α]
即,递归类型被认为等于它的一级“展开”,其中 μ 被移除,μ 绑定变量被类型本身替换(并且因为该规则可以重复应用,所以可以任意展开多次)。
iso-recursive:在这里,不存在这样的等价性。取而代之的是,μ-type 是一种单独的类型形式,具有自己的表达形式来引入和消除它——它们通常被称为 roll 和 unroll(或 fold 和展开),并且类型如下:
滚动:T[μα.T / α] → μα.T
展开:μα.T → T[μα.T / α]
这些必须明确应用于术语级别以反映上述等式(每个展开级别一次)。
像 ML 或 Haskell 这样的函数式语言通常使用后者来解释数据类型。但是,滚动/展开是内置在数据构造函数的使用中的。因此,每个构造函数都是对等递归类型的注入,由对 sum 类型的注入组成(匹配时相反)。
在等递归解释下,您的示例都是不同的。第一个和第三个在等递归解释下是相同的,因为当您应用上述等价时,外部 μ 就会消失。
(*) 编辑:不规则递归类型是其无限扩展不对应于规则树(或等效地,不能用有限循环图表示)的类型。这种情况只能用递归类型构造函数来表示,即在μ下出现的λ。例如,μα.λβ.1+α(β×β)——对应于递归方程 t(β) = 1+t(β×β)——将是不规则的,因为递归类型构造函数 α 是递归应用的到比其参数“更大”的类型,因此每个应用程序都是无限“增长”的递归类型(因此,您不能将其绘制为图形)。
然而值得注意的是,在大多数带有 μ 的类型理论中,它的界变量仅限于基类,因此根本不能表达不规则类型。特别是,具有不受限制的等递归类型构造函数的理论将具有非终止类型规范化,因此类型等价(以及类型检查)将是不可判定的。对于等递归类型,您需要更高阶的滚动/展开,这是可能的,但我不知道有多少文献研究它。