在Isabelle中,我定义了一个函数f:'a -> nat
,其中'a
是一些代数结构,它扩展了一个幺半群(即一个群,半环,环,整域,场......)。 / p>
我想在其他结构中将此函数的输出用作我的类型'a
的“系数”。也就是说,如果x:'a
和n:nat
,我希望能够使用一些操作·:'a -> nat -> 'a
,让我告诉Isabelle n·x = x + x + ... + x
。
通过搜索,我找到了“Power.thy”理论,从某种意义上说,它实现了我想要的。但是,它是为我的问题的“乘法版本”做的。如果我想更改'a
,例如,这是一个问题。整数。使用它意味着Isabelle不会计算n·x
,而是x^n
。是否有“Power.thy”的类似版本可以满足我的需求?或者还有其他方法来规避这个问题吗?
答案 0 :(得分:1)
我不知道任何实现此类操作的预定义常量,但可以通过迭代添加轻松实现,例如,使用comppow
上的nat
:
definition scale :: "nat => 'a => 'a" where
"scale a n = ((plus a) ^^ n) 0"
其中plus
指的是结构的加法运算,0
是中性元素。如果您使用的是Isabelle / HOL中的算术类型类,则应将排序约束'a :: monoid
添加到scale
的类型中。
scaleR
中还有一个类型类操作Complex_Main
,它实现了这样的系数缩放操作,但它允许real
个数字,而不仅仅是nat
个,所以你的结构可能无法满足所有必需的公理(类型类real_vector
)。
答案 1 :(得分:1)
表达这一点的一种非常惯用的方式是乘法和»of_nat«:
MASQUERADE