Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Isabelle:一类拓扑向量空间_Isabelle - Fatal编程技术网

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
始终具有sort
type
,无论超类是什么。这是由于在locale之上实现了类,这些类管理类上下文中的假设、定义和定理。