我想定义类和语言环境然后组合以创建不同的类型我的尝试由
给出theory Scratch
imports Main
begin
class A =
fixes getA:: "'a ⇒ string"
class B =
fixes getB:: "'a ⇒ string"
locale CombAB = A + B +
fixes get:: "'a ⇒ string"
end
结果是
locale CombAB =
fixes getA :: "'b ⇒ char list"
and getB :: "'c ⇒ char list"
and get :: "'a ⇒ char list"
但我期待
locale CombAB =
fixes getA :: "'a ⇒ char list"
and getB :: "'a ⇒ char list"
and get :: "'a ⇒ char list"
为什么有三个变量'a,'b,'c
而不只是一个?
答案 0 :(得分:1)
除非另有说明,否则Isabelle总是派生出最常见的类型。在此特定示例中,它不知道A
,B
和CombAB
正在讨论相同类型'a
,因此它只是将类型变量重命名为新变量。您可以通过使用子句for
显式指定所需类型来告诉它使用相同的类型变量,如下所示:
locale CombAB =
A getA +
B getB
for
getA:: "'a ⇒ string" and
getB:: "'a ⇒ string" +
fixes
get:: "'a ⇒ string"