语言环境导入两个 类

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 总是派生大多数通用类型。在此特定示例中,它不知道 ABCombAB 正在谈论相同的类型 'a,因此它只是将类型变量重命名为新变量。您可以通过使用子句 for 显式指定所需类型来告诉它使用相同类型的变量,如下所示:

locale CombAB =
    A getA +
    B getB
    for
        getA:: "'a ⇒ string" and
        getB:: "'a ⇒ string" +
    fixes
        get:: "'a ⇒ string"