语言环境导入两个 类
Locale import two classes
我想定义 类 和语言环境,然后组合起来创建不同的类型 我的尝试由
给出
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
而不是一个?
除非另有说明,否则 Isabelle 总是派生大多数通用类型。在此特定示例中,它不知道 A
、B
和 CombAB
正在谈论相同的类型 'a
,因此它只是将类型变量重命名为新变量。您可以通过使用子句 for
显式指定所需类型来告诉它使用相同类型的变量,如下所示:
locale CombAB =
A getA +
B getB
for
getA:: "'a ⇒ string" and
getB:: "'a ⇒ string" +
fixes
get:: "'a ⇒ string"
我想定义 类 和语言环境,然后组合起来创建不同的类型 我的尝试由
给出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
而不是一个?
除非另有说明,否则 Isabelle 总是派生大多数通用类型。在此特定示例中,它不知道 A
、B
和 CombAB
正在谈论相同的类型 'a
,因此它只是将类型变量重命名为新变量。您可以通过使用子句 for
显式指定所需类型来告诉它使用相同类型的变量,如下所示:
locale CombAB =
A getA +
B getB
for
getA:: "'a ⇒ string" and
getB:: "'a ⇒ string" +
fixes
get:: "'a ⇒ string"