我正在尝试使用Isabelle / Pure作为逻辑框架来实现新逻辑的证明助手(因此Isabelle / HOL除了作为动机之外无关紧要)。
有没有办法为函数type =>定义类型类实例化,比如
instantiation "=>" :: (foo,foo)foo
这样,只要A
和B
实例化为foo
,那么A => B
会自动成为吗?以上语法不被接受;似乎我需要一个函数类型构造函数的名称(不只是一个表示法),但如果存在这样的名称,我不知道它是什么或在哪里找到它。
我是Isabelle的新手,所以请告诉我,由于某种原因,我想做的事情是错误的。
答案 0 :(得分:1)
是的,您可以为函数定义类实例化。如果对函数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
。