Isabelle:一类拓扑向量空间

时间:2015-08-03 09:02:25

标签: isabelle

我想以明显的方式定义拓扑向量空间类:

theory foo
imports Real_Vector_Spaces 
begin

class topological_vector = topological_space + real_vector +
  assumes add_cont_fst: "∀a. continuous_on UNIV (λb. a + b)"
  ...

但我收到错误Type inference imposes additional sort constraint topological_space of type parameter 'a of sort type

我尝试在条件中引入类型约束,它看起来像 continuous_on不希望与该类的默认类型'a匹配。

当然,我可以通过用等效条件取代连续性来解决这个问题,我只是好奇为什么这不起作用。

1 个答案:

答案 0 :(得分:2)

在Isabelle / HOL的类定义中,可能只出现一个类型变量(即'a),它具有默认的HOL排序type。因此,不能形式化多参数类型类。这也会影响内部类型类中的定义,这可能仅取决于一个类型类的参数。例如,您可以在类型类上下文cont :: 'a set => ('a => 'a) => bool中定义谓词topological_space,如下所示

definition (in topological_space) cont :: "'a set ⇒ ('a ⇒ 'a) ⇒ bool"
where "cont s f = (∀x∈s. (f ---> f x) (at x within s))"

目标(in topological_space)告诉类型类系统cont实际上只依赖于一种类型。因此,在继承自cont的其他类型类的假设中使用topological_space是安全的。

现在,Isabelle / HOL中的谓词continuous_on的类型为'a set => ('a => 'b) => bool,其中'a'b必须为topological_space排序。因此,continuous_oncont更通用,因为它允许不同的拓扑空间ab。相反,continuous_on无法在任何 one 类型类中定义。因此,您也不能在类型类的假设中使用continuous_on。此限制并非针对continuous_on,它适用于所有类型的态射,例如mono用于保持顺序的函数,代数结构之间的同态等。单参数类型的类不能表达这样的东西。

在您的示例中,您收到错误,因为Isabelle将所有发生的类型变量统一到'a,然后意识到continuous_on强制排序topological_space 'a,但是由于上述原因,您可能不会依赖类别规范中的种类。

然而,可能有一个简单的出路。只需如上所述定义cont,并在topological_vector而非continuous_on的假设中使用它。在课程背景之外,您可以证明cont = continuous_on并使用continuous_on而不是cont推导出原始假设。这使您无法在类上下文中抽象地推理,但这只是一个小的限制。