Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 如何在=>;处实例化typeclass;?_Isabelle - Fatal编程技术网

Isabelle 如何在=>;处实例化typeclass;?

Isabelle 如何在=>;处实例化typeclass;?,isabelle,Isabelle,我试图使用Isabelle/Pure作为一个逻辑框架来实现一个新逻辑的证明助手(因此Isabelle/HOL除了作为动机之外是不相关的) 有没有一种方法可以为函数type=>定义一个类型类实例化,比如 instantiation "=>" :: (foo,foo)foo 因此,每当A和B是foo的实例化时,A=>B也会自动被实例化吗?不接受上述语法;似乎我需要一个函数类型构造函数的名称(不仅仅是一个符号),但如果存在这样一个名称,我不知道它是什么,也不知道在哪里可以找到它 我是伊莎贝尔的

我试图使用Isabelle/Pure作为一个逻辑框架来实现一个新逻辑的证明助手(因此Isabelle/HOL除了作为动机之外是不相关的)

有没有一种方法可以为函数type=>定义一个类型类实例化,比如

instantiation "=>" :: (foo,foo)foo
因此,每当
A
B
foo
的实例化时,
A=>B
也会自动被实例化吗?不接受上述语法;似乎我需要一个函数类型构造函数的名称(不仅仅是一个符号),但如果存在这样一个名称,我不知道它是什么,也不知道在哪里可以找到它


我是伊莎贝尔的新手,所以请务必告诉我我所做的是否出于某种原因是错误的。

是的,您可以为函数定义一个类实例化。如果为函数
fun
使用类型构造函数的名称,而不是中缀运算符
=>
,则没有问题

例如:

class foo = 
  fixes bar :: 'a

instantiation "fun" :: (foo,foo) foo
begin
definition "(bar :: 'a ⇒ 'b) = (λ x. bar)" 
instance ..
end
两点意见:

  • fun
    在双引号中,因为它会与定义函数的外部关键字
    fun
    冲突
  • 在本例中,您还可以编写
    实例化“fun”::(type,foo)foo
    ,因为函数的
    条的定义不依赖于
    
    条形图
    类型为
    'a的常数

谢谢!作为将来的参考,我怎么会发现函数的类型构造函数被称为
fun
?它在文档中的某个地方吗?是否有一个向Isabelle发出的内省命令,显示中缀运算符的含义?此外,您建议的
(type,foo)foo
在纯文本中对我不起作用;它显示
未声明的类:“??.type”。无法分析排序
。我必须声明一个
default\u sort
来做类似的事情吗?如果你在Pure中,尝试
“{}”
而不是
type
@MikeShulman,你可以自己找到类型构造函数的名称,你可以键入
termèλx。x›
进入伊莎贝尔/杰迪特缓冲区。这将在输出窗格中显示标识函数的类型。然后,按住Ctrl键并将光标悬停在函数空间箭头上。应该会出现一个弹出窗口,告诉您类型构造函数被称为“fun”。或者,在函数空间箭头上按住Ctrl键并单击鼠标右键将带您到达定义点。