Isabelle:一类拓扑向量空间
我想用显而易见的方式定义拓扑向量空间的类别:Isabelle:一类拓扑向量空间,isabelle,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)" ... 但是我得到了一个错误类型推断施加了额外的排序约束拓扑空间,即排序类型的类型参数'a 我尝试在条件中引入类
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)"
...
但是我得到了一个错误类型推断施加了额外的排序约束拓扑空间,即排序类型的类型参数'a
我尝试在条件中引入类型约束,它看起来像
continuous\u on
不希望与类的默认类型'a
匹配
当然,我可以通过用等价条件替换连续性来解决这个问题,我只是好奇为什么这不起作用。在Isabelle/HOL中的类定义中,可能只出现一个类型变量(即
'a
),它具有默认的HOL排序类型。因此,不能将多参数类型类形式化。这也会影响类型类内部的定义,而类型类可能仅依赖于一个类型类的参数。例如,您可以在类型类上下文中定义谓词cont::'a set=>('a=>'a)=>bool
,如下所示
definition (in topological_space) cont :: "'a set ⇒ ('a ⇒ 'a) ⇒ bool"
where "cont s f = (∀x∈s. (f ---> f x) (at x within s))"
目标(在拓扑空间中)
告诉类型类系统cont
实际上只依赖于一种类型。因此,在继承自拓扑空间的其他类型类的假设中使用cont
是安全的
现在,Isabelle/HOL中的谓词continuous\u on
的类型为'a set=>('a=>'b)=>bool
,其中'a
和'b
必须是排序拓扑空间。因此,continuous\u on
比cont
更通用,因为它允许不同的拓扑空间a
和b
。相反,不能在任何一个类型类中定义continuous\u on
。因此,在类型类的假设中也不能使用continuous_on
。这种限制并不特定于连续的
,它出现在所有类型的态射中,例如保序函数的单态
,代数结构之间的同态等。单参数类型的类不能表达这些东西
在您的示例中,之所以会出现错误,是因为Isabelle将所有出现的类型变量统一到'a
,然后意识到连续
强制排序拓扑空间
到'a
,但出于上述原因,您可能不依赖类规范中的排序
然而,也许有一个简单的出路。只需如上所述定义cont
,并在拓扑向量
的假设中使用它,而不是连续向量
。在类上下文之外,您可以证明cont=continuon
并使用continuon
而不是cont
导出原始假设。这使您无法在类上下文中进行抽象推理,但这只是一个小小的限制。谢谢。因此,如果理解正确,我不能在类规范中使用任何常量,即使新类恰好是constaining类的子类(在本例中为拓扑空间),也不能在其类型变量上使用类约束。我假设Isabelle会发现在这里使用continuous\u是安全的,因为从表达式可以推断'a
和'b
必须相同,'a
恰好是一个拓扑空间。在类规范或类上下文中,类型变量'a
始终具有sorttype
,无论超类是什么。这是由于在locale之上实现了类,这些类管理类上下文中的假设、定义和定理。