如何在 => 处实例化一个类型类?
How can I instantiate a typeclass at =>?
我正在尝试使用 Isabelle/Pure 作为逻辑框架来实现新逻辑的证明助手(因此 Isabelle/HOL 除了作为动机之外是无关紧要的)。
有没有办法为函数类型 => 定义类型类实例化,比如
instantiation "=>" :: (foo,foo)foo
所以只要 A
和 B
是 foo
的实例化,那么 A => B
会自动成为吗?不接受上述语法;似乎我需要函数类型构造函数的名称(不仅仅是符号),但如果存在这样的名称,我不知道它是什么或在哪里可以找到它。
我是 Isabelle 的新手,所以请告诉我我正在尝试做的事情是否出于某种原因是错误的。
是的,您可以为函数定义一个 class 实例化。如果您对函数使用类型构造函数的名称 fun
而不是中缀运算符 =>
.
则没有问题
例如:
class foo =
fixes bar :: 'a
instantiation "fun" :: (foo,foo) foo
begin
definition "(bar :: 'a ⇒ 'b) = (λ x. bar)"
instance ..
end
两个备注:
fun
用双引号引起来,否则它会与定义函数的外部关键字 fun
发生冲突。
- 在这个例子中,你也可以写成
instantiation "fun" :: (type,foo) foo
,因为bar
函数的定义不依赖于
bar
'a
. 类型常量
我正在尝试使用 Isabelle/Pure 作为逻辑框架来实现新逻辑的证明助手(因此 Isabelle/HOL 除了作为动机之外是无关紧要的)。
有没有办法为函数类型 => 定义类型类实例化,比如
instantiation "=>" :: (foo,foo)foo
所以只要 A
和 B
是 foo
的实例化,那么 A => B
会自动成为吗?不接受上述语法;似乎我需要函数类型构造函数的名称(不仅仅是符号),但如果存在这样的名称,我不知道它是什么或在哪里可以找到它。
我是 Isabelle 的新手,所以请告诉我我正在尝试做的事情是否出于某种原因是错误的。
是的,您可以为函数定义一个 class 实例化。如果您对函数使用类型构造函数的名称 fun
而不是中缀运算符 =>
.
例如:
class foo =
fixes bar :: 'a
instantiation "fun" :: (foo,foo) foo
begin
definition "(bar :: 'a ⇒ 'b) = (λ x. bar)"
instance ..
end
两个备注:
fun
用双引号引起来,否则它会与定义函数的外部关键字fun
发生冲突。- 在这个例子中,你也可以写成
instantiation "fun" :: (type,foo) foo
,因为bar
函数的定义不依赖于bar
'a
. 类型常量