在我最近的工作中,它是关于代数语义的。我想在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......
有人可以给我一些建议吗?或一些例子,我可以自己学习。我的英语不是很好,希望能表达清楚。
答案 0 :(得分:1)
可以使用语言环境F
中的运算符comm_monoid_set
将可交换的monoid操作提升为有限集。您需要一个monoid,以便可以将空集表示为中性元素。我建议您看看如何定义预定义的函数sum
和prod
(输入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
是操作员的提升版本。