意外的corecursive调用

时间:2016-02-01 15:37:42

标签: isabelle coinduction corecursion

Isabelle中的这个(修剪过的)corecursive函数定义

primcorec tree :: "'form fset ⇒ 'vertex ⇒ 'preform ⇒ (('form fset × 'form), ('rule × 'preform) NatRule) dtree" where
 "tree Γ v p =
    (case undefined of Hyp h c ⇒ undefined | Reg c ⇒
    Node undefined (fimage (tree Γ v) undefined)
    )"

产量

Unexpected corecursive call in "case undefined of Reg c ⇒ Node undefined (tree Γ v |`| undefined)" at
  "case case undefined of Reg c ⇒ Node undefined (tree Γ v |`| undefined) of Node uu uua ⇒ uua"

但如果我将其进一步简化为

primcorec tree :: "'form fset ⇒ 'vertex ⇒ 'preform ⇒ (('form fset × 'form), ('rule × 'preform) NatRule) dtree" where
   "tree Γ v p =
      (Node undefined (fimage (tree Γ v) undefined))"

它有效。

我也尝试使用解构器视图,即

primcorec tree :: "'form fset ⇒ 'vertex ⇒ 'preform ⇒ (('form fset × 'form), ('rule × 'preform) NatRule) dtree" where
 "cont (tree Γ v p) = (case undefined of Hyp h c ⇒ undefined | Reg c ⇒ (fimage (tree Γ v) undefined))"

现在我收到一条不同的错误消息:Invalid map function at "case undefined of Reg c ⇒ tree Γ v |`| undefined"

可能是什么原因?

使用其他case表达式,我在文档中没有提到任何限制(数据类型文档中的第5.1.1节。)

1 个答案:

答案 0 :(得分:0)

通过私人通信,我被告知解决方案是将(discs_sel)选项添加到datatype构造函数来自Hyp