折叠中使用的模运算符的标识元素

Identity element of modulus operator to be used in fold

在函数范式中的折叠函数中,我们传递累加器值,该值通常被初始化为函数应用的运算符的标识元素。

对于列表的加法,它将是 0,对于乘法,它将是 1,依此类推。 即 +(0, a) = a

*(1, a) = a

那么 mod 运算符 %(identity, a) = a 会是什么呢? Mod 将来自 [0,a) 所以身份似乎是不可能的。 我知道计算机不一定遵循 modulus 的数学定义。 此外是否所有运算符都具有标识元素,或者它取决于运算符应具有的某些特定属性? 有没有通用的方法来找到任何运算符的标识元素?

我的问题是:

通常 折叠 是在称为 monoid [wiki].

的代数结构上完成的

幺半群是 代数 结构。它是在集合 S 上定义的,带有 associative 函数 f (模不是关联函数) .此外,应该有一个元素 e ∈ S 称为“*identity”元素。满足 f(e,x) = xf(x,e) = x.

的元素

可以证明对于一个幺半群总是有一个个恒等元(所以不可能构造一个两个元都是恒等元的幺半群。证明如下:假设有两个元素 ab 是中性元素,并且 a ≠ b,那么 f(a,b) = a(上面的定义),但是 f(a,b)=b 也成立,因为函数只能 return一个元素,而a≠b,就矛盾了,进而可以得出a = b.

我们不能为模运算(和自然、积分等)数定义幺半群,因为运算符应该是 关联的,对于这些集合,它不认为:(a % b) % c = a % (b % c).

回答你的问题(一般):

What is identity element for modulus operator if it exists? %(identity, a) = a

如果我们取自然数、整数、有理数、实数等,则模数没有恒等元。

Are there any specific properties that the operator must follow to have an identity?

简单地说就是有一个元素e ∈ S 使得 f(x, e) = x。我们可以从每个函数中 "construct" 这样的函数,只需选择一个元素 e ∈ S,然后定义为:f'(x,y) = x if y = e and f'(x,y) = f(x,y) 否则。

Is there a general way to find the identity of an operator if it has an identity.

由于上面显示我们可以为每个函数构造这样的函数,所以据我所知没有通用的方法来资助运算符的身份元素。