type
是semilattice_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的类实例?
答案 0 :(得分:2)
你做不到。实际上, 已经是HOL-Library中semilattice_sup
中产品类型Product_Order
的实例,因此如果type
有semilattice_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
(其中mysup
,myle
,myless
为sup
,≤
,<
为type × bool
。提供并证明它们符合公理。这些名称当然是完全随意的,包括type_bool
)