语言环境忽略操作符号

时间:2019-01-10 11:05:53

标签: isabelle

以下工作正常:

class test1 = semilattice_sup +
  fixes x :: "'a"
  assumes "x < y"

但是当我将class替换为locale时:

locale test2 = semilattice_sup +
  fixes x :: "'a"
  assumes "x < y"

我得到了错误:

Type unification failed: Variable 'a::type not of sort ord

错误可以通过以下方式解决:

locale test2 = semilattice_sup +
  fixes x :: "'a"
  assumes "less x y"

但是可以使用<表示法吗?


更新

这是一个类似的问题:

datatype 'a ty = A | B

instantiation ty :: (order) order
begin
definition "x < y ≡ x = A ∧ y = B"
definition "x ≤ y ≡ (x :: 'a ty) = y ∨ x < y"
instance
  apply intro_classes
  using less_eq_ty_def less_ty_def by auto
end

locale loc = semilattice_sup +
  fixes f :: "'a ⇒ 't :: order"
begin
definition "g ≡ inv f"
end

class cls = semilattice_sup +
  fixes f :: "'a ⇒ 'a ty"
begin
interpretation base: loc .
abbreviation "g ≡ base.g"
end

解释失败,并出现以下错误:

Type unification failed: Variable 'a::type not of sort semilattice_sup

1 个答案:

答案 0 :(得分:1)

locale test2 =
  fixes x :: "'a :: semilattice_sup"
  assumes "x < y"

可以选择吗?在这种情况下,您不再将您的语言环境基于另一个语言环境,而是要求将x的类型作为类semilattice_sup的实例,这使您可以为{{1 }}。