在 Isabelle 2015 中定义通用实函数

Defining a generic real function in Isabelle 2015

在 Isabelle2014 中,我能够定义一个通用函数,它接受一个自然数和一个实数,并按以下方式输出一个实数:

definition example :: "nat ⇒ real ⇒ real"
where "example i = real"

但是,我无法在 Isabelle2015 中执行此操作。我收到以下错误:

lhs 的错误头部:“λx。示例 i(真实 x)”
上述错误发生在定义中:
"λx. 例子 i (real x) ≡ real"

在新版本的伊莎贝尔中定义泛型实函数的方法是否发生了变化?如何像以前一样定义泛型函数?

我查看了较新的 Isabelle 文档,但是我无法找到与以下案例相关的任何内容。

我自己,我总是在 declare[[show_sorts=true]]declare[[show_consts=true]] 上,所以我看到了关于类型 classes 和类型的东西,否则我不会看到和思考。

在伊莎贝尔2015,你有

term "real :: 'a∷real_of => real".

但在 Isabelle2014 中,它是

term "real :: 'a::type => real".

显然,类型 class real_of 是 Isabelle2015 中的新类型。

我在 Isabelle2015 和 Isabelle2014 中都使用命令 print_classes,并在输出面板中搜索结果。

在 Isabelle2014 中没有显示 real_of,但在 Isabelle2015 中我得到

class real_of:
  supersort: type
  parameters:
    real :: 'a => real
  instances:
    int :: real_of
    nat :: real_of

这表明只有 intnat 已为 real_of 实例化。您可以将 example 更改为:

definition example :: "nat => 'a::real_of => real" where 
  "example i = real"

当参数已经是real类型时,那么你不需要任何转换函数,你想要的函数就是:

definition example :: "nat ⇒ real ⇒ real" where
  "example i x = x"

或者,如果您想省略第二个参数,请改用 example i = id