如何定义type_synonym的类实例?

时间:2017-08-16 08:14:28

标签: isabelle

typesemilattice_sup类的实例:

datatype type = BType | IType | AType

instantiation type :: semilattice_sup
begin
end

我正在尝试将type × bool类型声明为此类的实例:

type_synonym stype = "type × bool"

instantiation stype :: semilattice_sup
begin
end

但是我收到以下错误:

Bad type name: "stype"

如何定义type_synonym的类实例?

1 个答案:

答案 0 :(得分:2)

你做不到。实际上, 已经是HOL-Library中semilattice_sup中产品类型Product_Order的实例,因此如果typesemilattice_sup例如,type × bool也是如此(如果你包含Product_Order。请注意,这是逐点顺序,而不是字典顺序。

如果您需要其他订单或某种特定于您的类型的订单,您还可以使用typedef定义一个全新的类型:

typedef type' = "UNIV :: (type × bool) set"
  by auto

这使得态射Abs_type'Rep_type'可以在type'type × bool之间进行转换,因为这是一个全新的类型,您可以为它提供类型类实例

为了完整起见,类型类是使用locales实现的,您可以手动解释类型类语言环境,为您提供类型类中的所有定义和引理,但当然,与类型类框架的集成将不行。例如,type × bool不属于semilattice_sup类。不过,偶尔,这可能是一个可行的解决方案:

interpretation type_bool: semilattice_sup mysup myle myless
proof

(其中mysupmylemylesssup<type × bool。提供并证明它们符合公理。这些名称当然是完全随意的,包括type_bool