2014-01-23 34 views
2

结合当进入以下定义坏名伊莎贝尔

datatype env = "nat => 'a option" 

伊莎贝尔/ jEdit的显示了一个感叹号,并说

Legacy feature! Bad name binding: "nat => 'a option" 

这是什么问题,我如何可以解决此类型的代名词?

更新:即使

datatype 'a env = "nat => 'a option" 

,这是更好的理论的定义并没有解决问题。

回答

5

datatype定义的右侧,通常列出数据类型的构造函数。在你的例子中,你没有写任何构造函数,所以datatype认为你想叫它nat => 'a option,它不是一个构造函数或任何其他Isabelle常量的合法名称。

如果你只是想介绍env作为一种缩写nat => 'a optiontype_synonym是你在找什么。

type_synonym 'a env = "nat => 'a option" 

请注意,您必须在左侧重复所有类型的变量。然后,'a envnat => 'a option可以互换使用。如果要引入一个新的类型构造为env,那么你必须提供一个构造函数的名称,如Env

datatype 'a env = Env "nat => 'a option" 
+0

谢谢,我是用typedef exeperimenting并没有意识到type_synonym的。 – Gergely

+1

'typedef'有些不同:它将类型定义为另一个预先存在的集合类型的子集(定义的子集必须证明为非空)。有关更多信息,请参见“isar-ref.pdf”中的“11.5 Typedef公理化”。这是Isabelle使用的一些可能会令人困惑的词汇的一部分:-P。 – Hibou57