Isabelle 伊莎贝尔:如何统一当前语言环境和导入语言环境的类型变量?

Isabelle 伊莎贝尔:如何统一当前语言环境和导入语言环境的类型变量?,isabelle,Isabelle,请考虑以下在Isabelle中人为创建的区域设置声明示例: locale x = fixes f :: "'a ⇒ 'a" assumes "f ∘ f = f" locale y = x + fixes g :: "'a ⇒ 'b" begin abbreviation h :: "'a ⇒ 'b" where "h ≡ g ∘ f" end 这会失败,因为区域设置x中的'a与区域设置y中的'a不同。我怎样才能告诉Isabelle,g的参数应该与该参数具有相同的类型以及f的

请考虑以下在Isabelle中人为创建的区域设置声明示例:

locale x =
  fixes f :: "'a ⇒ 'a"
  assumes "f ∘ f = f"

locale y = x +
  fixes g :: "'a ⇒ 'b"
begin
  abbreviation h :: "'a ⇒ 'b" where "h ≡ g ∘ f"
end

这会失败,因为区域设置
x
中的
'a
与区域设置
y
中的
'a
不同。我怎样才能告诉Isabelle,
g
的参数应该与该参数具有相同的类型以及
f
的结果?

一个解决方案是将
locale y=x+
替换为
locale y=x f for f:“'a⇒ '一个“+
”。但是,这意味着重复
f
的类型。如果类型相当复杂,这种重复将特别麻烦。请注意,您也可以使用虚拟模式,因此
locale y=xf for f::“'a⇒ _" +
就足够了,对于复杂类型表达式也可以保持可读性。