Isabelle中的一组元素的操作

时间:2018-12-19 16:29:43

标签: isabelle

在我最近的工作中,它是关于代数语义的。我想在Isabelle中表达元素集合中元素的新运算,元素非常复杂。 此操作是二进制操作的扩展。并且此二进制操作很容易按语言环境完成。例如:a⊕b= c

locale Probjia = Prob + Prep + fixes probjiao :: "'b ⇒ 'b ⇒ 'b" (infixl "⊕" 90)

但是,我不知道如何表达集合中元素的这种操作。提示:我不知道这组中有多少个元素。

我希望,⊕A,A = {a,b,c,d,......},然后⊕A=a⊕b⊕c⊕d......

有人可以给我一些建议吗?或一些例子,我可以自己学习。我的英语不是很好,希望能表达清楚。

1 个答案:

答案 0 :(得分:1)

可以使用语言环境F中的运算符comm_monoid_set将可交换的monoid操作提升为有限集。您需要一个monoid,以便可以将空集表示为中性元素。我建议您看看如何定义预定义的函数sumprod(输入term "sum"和Ctrl键并单击sum进入定义) 。在您的情况下,您可能想声明一个子区域关系:

context Probjia begin
sublocale probjiao: comm_monoid_set probjiao neutral_element_for_probjiao
  defines Probjiao = probjiao.F

其中neutral_element_for_probjiao是您操作的中立元素。完成证明后,Probjiao是操作员的提升版本。