在Isabelle 2015中定义一般实函数
在Isabelle 2014中,我能够定义一个通用函数,该函数采用自然数和实数,并以以下方式输出实数:在Isabelle 2015中定义一般实函数,isabelle,Isabelle,在Isabelle 2014中,我能够定义一个通用函数,该函数采用自然数和实数,并以以下方式输出实数: definition example :: "nat ⇒ real ⇒ real" where "example i = real" 然而,我无法在2015年的《伊莎贝拉》中做到这一点。我得到以下错误: lhs的坏头:“λx.示例一(实x)” 上述错误出现在定义中: “λx.示例一(实x)≡ 真正的” 在较新版本的Isabelle中,定义泛型实函数的方法是否发生了变化?如何像以前一样定义泛型
definition example :: "nat ⇒ real ⇒ real"
where "example i = real"
然而,我无法在2015年的《伊莎贝拉》中做到这一点。我得到以下错误:
lhs的坏头:“λx.示例一(实x)”上述错误出现在定义中:
“λx.示例一(实x)≡ 真正的” 在较新版本的Isabelle中,定义泛型实函数的方法是否发生了变化?如何像以前一样定义泛型函数
我已经浏览了较新的Isabelle文档,但是我找不到任何与以下案例相关的内容。我自己,总是在
上声明[[show_sorts=true]]
和声明[[show_consts=true]]
,因此我看到了关于类型类和类型的事情,否则我不会看到和想到这些事情
在《伊莎贝拉》中,你有
term "real :: 'a∷real_of => real".
但在《伊莎贝拉》中,它是
term "real :: 'a::type => real".
显然,的类型classreal_在2015年是新的
我在Isabelle 2015和Isabelle 2014中使用命令print_classes
,并在输出面板中搜索结果
2014年《伊莎贝尔》中的《代码》真实版没有出现任何东西,但2015年《伊莎贝尔》中我得到了
class real_of:
supersort: type
parameters:
real :: 'a => real
instances:
int :: real_of
nat :: real_of
这表明只有int
和nat
被实例化为real\u of
。您可以将示例更改为:
definition example :: "nat => 'a::real_of => real" where
"example i = real"
当参数已经是real类型时,则不需要任何转换函数,所需函数仅为:
definition example :: "nat ⇒ real ⇒ real" where
"example i x = x"
或者,如果要省略第二个参数,请改用示例i=id
。您所说的“泛型”到底是什么意思?是要定义忽略第一个参数的函数,还是要定义忽略第二个参数将第一个参数从nat转换为实的函数?在这两种情况下,您都不会在2014年或2015年做您想做的事情。@LarsNoschinski我想定义一个忽略第一个参数并使用第二个参数输出实数的函数。输出将是real类型,但是我希望避免使用特定的函数形式。“我怎样才能做到这一点呢?”约阿希姆布雷特纳为这一混乱道歉;泛型我的意思是我想避免显式定义一个函数,而只是使用一个实输出。你的修复很可能不是OP想要的,尽管它指出了问题的根源:2014年,real可以应用于将任何术语转换为real——尽管定义只存在于int和nat,所以你不能证明其他类型的人有什么有趣的东西。甚至不是real(x::real)=x
。2015年,该类型被限制为减少基本上没有意义的术语的混淆。@Lars,我想OP可以将real
实例化为real\u of
。我从你之前给出的一个涉及Resources.master\u directory(Toplevel.theory\u of state)
的答案中得到了很多好处。更简单(可能更明智)的解决方案是使用id
而不是real
(为什么要转换不需要转换的东西?)