Locale导入两个类

时间:2016-09-13 21:59:08

标签: isabelle

我想定义类和语言环境然后组合以创建不同的类型我的尝试由

给出
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而不只是一个?

1 个答案:

答案 0 :(得分:1)

除非另有说明,否则Isabelle总是派生出最常见的类型。在此特定示例中,它不知道ABCombAB正在讨论相同类型'a,因此它只是将类型变量重命名为新变量。您可以通过使用子句for显式指定所需类型来告诉它使用相同的类型变量,如下所示:

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