在Isabelle2014中,我能够定义一个通用函数,它采用自然数和实数,并以下列方式输出实数:
definition example :: "nat ⇒ real ⇒ real"
where "example i = real"
但是,我在Isabelle2015中无法做到这一点。我收到以下错误:
lhs的坏头:“λx。示例i(真实x)”
上面的错误发生在定义中:
“λx。例子i(真实x)≡真实”
在较新版本的Isabelle中,定义通用实际函数的方法是否已更改?我怎样才能像以前那样定义泛型函数?
我查看了较新的Isabelle文档,但是我找不到任何与下列情况有关的内容。
答案 0 :(得分:2)
我自己,我总是在declare[[show_sorts=true]]
和declare[[show_consts=true]]
,所以我看到了类型类和类型的内容,否则我将无法看到和思考。
在Isabelle2015,你有
term "real :: 'a∷real_of => real".
但是在Isabelle2014中,它是
term "real :: 'a::type => real".
显然,类型类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
这表明只有int
和nat
被real_of
实例化了。您可以将example
更改为此:
definition example :: "nat => 'a::real_of => real" where
"example i = real"
答案 1 :(得分:0)
当参数已经是real类型时,你不需要任何转换函数,你想要的函数就是:
definition example :: "nat ⇒ real ⇒ real" where
"example i x = x"
或者,如果您想省略第二个参数,请改用example i = id
。