Isabelle 什么';“重载”和“临时重载”的区别是什么?

Isabelle 什么';“重载”和“临时重载”的区别是什么?,isabelle,Isabelle,Isabelle参考手册介绍了执行基于类型的常量重载的方法:第11.3节中的“常量临时重载”,第5.9节中的“重载常量定义” 似乎5.9重载要求在决定重载常量之前知道所有类型参数,而11.3(特殊)重载则在只有一个匹配项的情况下决定重载常量: consts c1 :: "'t ⇒ 'a set" c2 :: "'t ⇒ 'a set" definition f1 :: ‹'a list ⇒ 'a set› where ‹f1 s ≡ set s› adhoc_overload

Isabelle参考手册介绍了执行基于类型的常量重载的方法:第11.3节中的“常量临时重载”,第5.9节中的“重载常量定义”

似乎5.9重载要求在决定重载常量之前知道所有类型参数,而11.3(特殊)重载则在只有一个匹配项的情况下决定重载常量:

consts 
  c1 :: "'t ⇒ 'a set"
  c2 :: "'t ⇒ 'a set"

definition f1 :: ‹'a list ⇒ 'a set› where 
  ‹f1 s ≡ set s›

adhoc_overloading
  c1 f1

overloading
  f2 ≡ ‹c2 :: 'a list ⇒ 'a set›
begin
  definition ‹f2 w ≡ set w›
end

context 
  fixes s :: ‹int list›
begin
  term ‹c1 s› (* c1 s :: int set *)
  term ‹c2 s› (* c2 s :: 'a set  *)
end

这两者有什么区别?什么时候我会使用一个而不是另一个呢?

重载是伊莎贝尔逻辑的核心特征。它允许您声明一个具有“广泛”类型的单个常量,该类型可以在特定类型上定义。用户很少需要手动操作。它是用于实现类型类的底层机制。例如,如果按如下方式定义类型类:

class empty =
  fixes empty :: 'a
  assumes (* ... *)
然后,
class
命令将声明类型
'a'
的常量
empty
,随后的实例化仅为特定类型提供
empty
的定义,如
nat
list

长话短说:在大多数情况下,重载是一种由高级命令管理的实现细节。有时,需要进行一些手动调整,例如,当您必须定义一个依赖于类约束的类型时

在我看来,临时重载是一个误导性的名称。据我所知,它源于Haskell(见)。在那里,他们用它精确地描述了类型类机制,在Isabelle中,这种机制被称为“重载”。在Isabelle中,临时重载的含义完全不同。其思想是,您可以使用它来定义抽象语法(如monad的do符号),而Isabelle的ML风格的简单类型系统无法准确捕获这些语法。与重载一样,您需要定义一个具有“broad”类型的常量。但这个常数从未得到任何定义!相反,您可以使用更具体的类型定义新常量。当Isabelle的术语解析器遇到使用抽象常量时,它将尝试用具体常量替换它

例如:您可以将do符号与
选项
列表
以及其他一些类型一起使用。如果你写了这样的东西:

do { x <- foo; bar }
在第二步中,根据
foo
的类型,它将其转换为以下可能的术语之一:

Option.bind foo (%x. bar)
List.bind foo (%x. bar)
(* ... more possibilities ...*)
同样,用户可能不需要明确地处理这个概念。如果您从库中拉入
Monad\u语法
,您将得到一个可随时配置的临时重载应用程序


长话短说:ad-hoc重载是在Isabelle中启用“奇特”语法的一种机制。新手可能会对此感到困惑,因为如果内部翻译有错误,错误信息往往很难理解。

非常好,谢谢。隐式地,对于像我这样的最终用户来说,“我应该使用”的答案是“使用类型类,如果可能的话,否则,使用adhoc重载;不使用非特定的重载吗?是的,这是一个公平的总结。我认为超越类型类的超载和ad-hoc超载都是“电力用户”。特性;或者更确切地说,是供库开发人员使用的特性。(不过,玩弄它们并没有什么错!)对于其他人:呈现了adhoc_重载和区域设置的巧妙组合;它解决了我更大的问题。@Sørendbois我只想从邮件列表中添加另一个参考,该参考提供了几个用于
adhoc_重载
重载
::的用例。也许,它是不太多的合理用例之一与“开发人员”级别相反,系统“用户”级别的收费过载。
Option.bind foo (%x. bar)
List.bind foo (%x. bar)
(* ... more possibilities ...*)