Isabelle 伊莎贝尔:如何统一当前语言环境和导入语言环境的类型变量?
请考虑以下在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的
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⇒ _" +
就足够了,对于复杂类型表达式也可以保持可读性。