第六讲:莫比乌斯反演 I
再议容斥原理
回忆我们已经相当熟悉的容斥原理:设 \(\+B=\set{B_{1},B_{2},\cdots, B_{m}}\) 是一组不好的集合。对于 \(S\subseteq \+B\),定义 \(N_{=}(S)=\abs{\tp{\bigcap_{B\in S} B} \cap \tp{\bigcap_{B'\in \+B\setminus S}\ol B'}}\) 表示恰好属于 \(S\) 中的集合(不属于 \(\+B\setminus S\))中元素的数量,\(N_{\geq }(S) = \abs{\bigcap_{B\in S} B}\) 表示属于 \(S\) 中的集合中元素的数量。
由定义可知,\(N_{\geq }(S)=\sum_{J\colon S\subseteq J}N_{=}(J)\)。容斥原理则说明: \[ N_{=}(S)=\sum_{J\colon S\subseteq J}(-1)^{\left | J\setminus S\right | }N_{\ge}(J). \]
实际上,\(N_{\geq}(S)\) 和 \(N_{=}(S)\) 的关系都是线性的。因此,我们可以使用矩阵乘法来紧凑的表示它们间的关系。定义矩阵 \(Z\in\set{0,1}^{2^n\times 2^n}\) 满足对于任意的 \(I,J\subseteq [m]\), \[ Z[I,J] = \begin{cases} 1 & \mbox { if }I\subseteq J;\\ 0 & \mbox { otherwise}. \end{cases} \] 同时,我们把 \(N_\ge\) 和 \(N_=\) 都理解成 \(\^Z^{2^m}\) 中的向量。我们固定一个排列坐标的顺序,满足如果 \(I\subseteq J\),则 \(I\) 出现在 \(J\)前面。则有 \(N_{\ge} = Z N_=\)。由于这样排列后,\(Z\) 是一个上三角矩阵且对角线的元素是 \(1\),因此它是可逆的。容斥原理无非是说 \[ N_= = Z^{-1} N_{\ge}, \] 且 \[ Z^{-1}[I,J] = \begin{cases} (-1)^{\abs{J\setminus I}} & \mbox{ if }I\subseteq J\\ 0 & \mbox{ otherwise}. \end{cases} \] 我们把 \(Z\) 称为 zeta 矩阵,把 \(Z^{-1}\) 称为 莫比乌斯 (Möbius) 矩阵。
关联代数(Incidence Algebra)与莫比乌斯反演(Möbius Inversion)
接下来,我们将把容斥原理里面所有坏事件的子集组成的集合 \(2^{\+B}\) 推广到一个一般的偏序集 \((P,\le)\)。我们今天讨论的偏序集 \(P\) 可能是无穷的,但我们要求它们均是局部有限的。
一个偏序集 \((P,\le)\) 是局部有限
的意思是对于任何 \(x,y\in P\), 集合 \(\set{z\cmid x\le z\le y}\) 是有限集。
在讨论这个推广前,我们引入一些新的概念。一个局部有限的偏序集 \(\+P = (P,\le)\) 上的关联代数 \(\@I(\+P)\) 由一些 \(P\times P\to \^R\) 的函数组成。每一个 \(\@I(\+P)\) 里面的函数 \(\alpha\) 要满足 \(\alpha(x,y)\ne 0 \implies x\le y\),即 \(\alpha(x,y)\) 只在那些 \(x\le y\) 的位置可能非零。我们还定义 \(\@I(\+P)\) 上的加法、数乘以及乘法运算如下:设 \(\alpha,\beta\) 为 \(\@I(\+P)\) 中的两个函数。
在 \(P\) 是有限的时候,关联代数里面的每一个函数都是一个矩阵。我们在关联代数上定义的这些运算实际上是推广了在矩阵上对应的运算。
- \((\alpha+\beta)(x,y) = \alpha(x,y) = \beta(x,y)\);
- 对于任何 \(c\in\^R\),\((c\alpha)(x,y) = c\cdot\alpha(x,y)\);
- \((\alpha\beta)(xy) = \sum_{x\le z\le y}\alpha(x,z)\beta(z,y)\).
类似的,对于函数 \(f\colon P\to\^R\),我们可以定义 \(\alpha f\) 为一个函数 \(x\mapsto \^R\) 满足 \[ (\alpha f)(x) = \sum_{y\colon y\ge x}\alpha(x,y)f(y). \]
\(\@I(\+P)\) 中的乘法幺元 \(\delta\colon P\times P\to\^R\) 定义为 \[ \delta(x,y) = \begin{cases} 1 & \mbox{ if }x=y;\\ 0 & \mbox{ otherwise.} \end{cases} \]
即类比为单位矩阵 \(I\)。
给定乘法幺元 \(\delta\),我们可以定义一个函数 \(\alpha\) 的乘法逆 \(\alpha^{-1}\),即满足 \(\alpha^{-1}\alpha =\delta\) 的函数。我们首先来证明,对于关联代数中的函数 \(\alpha\),左逆等于右逆,即
Theorem 1 如果 \(\alpha^{-1}\alpha=\delta\),则 \(\alpha\alpha^{-1}=\delta\)。
Proof. 设 \(\beta=\alpha^{-1}\),显然 \(\alpha \beta (x,x) = \alpha(x,x)\cdot \beta(x,x) = \beta\alpha(x,x) = 1\)。我们只需要证明对于 \(x<y\),\(\alpha\beta(x,y) = \beta\alpha(x,y) = 0\)。我们证明的思路是,由于 \(\+P\) 是局部有限的,我们可以把问题等价的转化为证明矩阵的左逆等于右逆的问题,而这是大家在线性代数课中学习过的结论。
对于这样的 \(x,y\),不妨设 \(\set{z\cmid x\le z\le y}= \set{z_1,z_2,\dots,z_n}\),其中 \(z_1=x, z_n=y\)。我们可以定义两个 \(n\times n\) 的矩阵 \(A\) 和 \(B\),满足 \(A[i,j] = \alpha(z_i,z_j)\),\(B[i,j] = \beta(z_i,z_j)\)。
由于 \(\beta\alpha(x,y) = 0\),我们知道对于任意的 \(i<j\), \[ \sum_{k\colon i\le k\le j}\beta(z_i,z_k)\cdot\alpha(z_k,z_j) = 0, \] 这等价于 \(BA = I\)。因此 \(AB=I\),即 \[ \alpha\beta(x,y) = \sum_{k = 1}^n \alpha(z_1,z_k)\cdot\beta(z_k,z_n) = \sum_{k=1}^n A[1,k]\cdot B[k,n] = AB[1,n]=0. \]
我们可以同样的证明,逆是唯一的。因此,我们统一称 \(\alpha^{-1}\) 为 \(\alpha\) 的逆。
定义 zeta 函数 \(\zeta:P\times P\to\^R\): \[ \zeta(x,y) = \begin{cases} 1 & \mbox{ if }x\le y;\\ 0 & \mbox{ otherwise.} \end{cases} \] 我们称 \(\zeta\) 的逆 \(\mu \defeq \zeta^{-1}\) 为莫比乌斯函数。实际上,莫比乌斯函数可以显示的递归定义出来。
\[ \mu(x,y) = \begin{cases} 0 & \mbox{ if }x\not\le y;\\ 1 & \mbox{ if }x=y;\\ -\sum_{z\colon x\le z<y}\mu(x,z) &\mbox{ otherwise.} \end{cases} \]
我们接下来验证这样定义的 \(\mu\) 确实是 \(\zeta\) 的逆。这只需注意到 \[ (\mu\zeta)(x,y) = \sum_{z\colon x\le z\le y} \mu(x,z)\zeta(z,y) = \begin{cases} 0 & \mbox{ if }x\not\le y;\\ 1 & \mbox{ if }x=y;\\ \mu(x,y) + \sum_{z\colon x\le z<y} \mu(x,z) & \mbox{ if }x<y. \end{cases} = \begin{cases} 0 & \mbox{ if }x\ne y;\\ 1 & \mbox{ if }x=y. \end{cases} \]
我们也可以类似的定义 \[ \mu(x,y) = \begin{cases} 0 & \mbox{ if }x\not\le y;\\ 1 & \mbox{ if }x=y;\\ -\sum_{z\colon x\le z<y}\mu(z,y) &\mbox{ otherwise.} \end{cases} \] 由于逆的唯一性,这样定义出来的 \(\mu\) 是一样的。
可以把 \(f\)、\(g\) 类比成我们在容斥原理中的 \(N_\ge\) 和 \(N_=\)。
现在假设在偏序集上我们有两个函数 \(f, g: P\to\^R\),且满足 \(f(x) = \sum_{y\colon y\ge x} g(y)\)。这个关系用关联代数写就是 \(f=\zeta g\)。所谓的莫比乌斯反演就是等式 \[ g = \mu f, \] 或者说对于任意 \(x\in P\), \[ g(x) = \sum_{y\ge x}\mu(x,y) f(y). \] 类似于容斥原理,在实践中,我们希望计算某个函数 \(g\),但是它是比较难算的。如果能找到函数 \(f\),能够满足 \(f=\zeta g\),并且我们又能计算出 \(\mu\),那我们便可以使用莫比乌斯反演公式来计算出 \(g\)。
在有的时候,我们得到的关系是 \(f(x) = \sum_{y\colon y\le x} g(y)\),那么用矩阵的形式写就是 \(f=\zeta^{\top} g\),这儿 \(\zeta^{\top}\) 是 \(\zeta\) 的转置。因此, \[ g = \mu^{\top} f, \] 或者说对于任意 \(x\in P\), \[ g(x) = \sum_{y\le x}\mu(y,x) f(y). \]
莫比乌斯函数的例子
我们来计算几个简单的莫比乌斯函数。
Example 1 首先考虑只有两个元素的偏序集 \((\set{0,1},\le)\),其中 \(\le\) 就是正常整数上的小于等于关系。简单的计算就可以得到 \(\mu(0,1) = -1\)。
Example 2 接着我们考虑 \([n]\) 上的全序 \(([n],\le)\) 莫比乌斯函数。使用 \(\mu\) 的定义式并通过对 \(j-i\) 进行归纳,容易得到 \[ \mu(i,j) = \begin{cases} 1 & \mbox{ if }i=j;\\ -1 & \mbox{ if }i+1=j;\\ 0 & \mbox{ otherwise.} \end{cases} \]
我们现在来定义两个偏序的乘积。
Definition 1 设 \(\+P_1=(P_1,\le_1)\),\(\+P_2=(P_2,\le_2)\)。定义 \(\+P_1\times\+P_2=(P_1\times P_2, \le)\),其中 \(\le\) 满足 \[ (x_1,y_1)\le (x_2,y_2) \iff x_1\le_1 x_2 \land y_1\le_2 y_2. \]
下面这个重要的定理给出了偏序的乘积的莫比乌斯函数。
Theorem 2 设 \(\+P_1\) 的莫比乌斯函数是 \(\mu_1\),\(\+P_2\) 的莫比乌斯函数是 \(\mu_2\),则 \(\+P_1\times \+P_2\) 的莫比乌斯函数 \(\mu\) 满足 \[ \mu((x_1,y_1),(x_2,y_2)) = \mu_1(x_1,x_2)\cdot \mu_2(y_1,y_2). \]
给定偏序集 \((P,\le)\),我们使用闭区间的记号 \([x_1,x_2]\) 表示集合 \(\set{x\cmid x_1\le x\le x_2}\)。同样可以类似定义开区间以及半开半闭区间。
Proof. 给定 \(x_1\le x_2\),\(y_1\le y_2\),我们对 \(\abs{[x_1,x_2]} + \abs{[y_1,y_2]}\),即 \(x_1 \to x_2\) 与 \(y_1\to y_2\) 的链的长度之和进行归纳证明。归纳起始是 \(x_1=x_2\) 且 \(y_1=y_2\),此时结论显然成立。注意到根据 \(\mu\) 函数的定义,我们有 \[ \begin{align*} \mu((x_1,y_1),(x_2,y_2)) &= -\sum_{(x,y)\in [(x_1,y_1),(x_2,y_2))} \mu((x_1,y_1),(x,y))\\ &= -\sum_{x\in [x_1,x_2)}\sum_{y\in [y_1,y_2]} \mu((x_1,y_1),(x,y)) -\sum_{y\in [y_1,y_2)}\mu((x_1,y_1),(x_2,y))\\ &=-\sum_{x\in [x_1,x_2)}\mu_1(x_1,x)\cdot \sum_{y\in [y_1,y_2]}\mu_2(y_1,y) - \mu_1(x_1,x_2)\cdot \sum_{y\in [y_1,y_2)}\mu_2(y_1,y)\\ &=\mu_1(x_1,x_2)\cdot \mu_2(y_1,y_2). \end{align*} \] 在上面的计算中,第三个等号用到了归纳假设。
有了 Theorem 2 ,我们便可以计算一些更加复杂的莫比乌斯函数啦~
对于偏序集 \(\+P\),我们用 \(\+P^n\)表示 \(\underbrace{\+P\cdot \+P\cdot \+P \cdots \+P}_{n\mbox{ 个相乘}}\)。
Example 3 我们来计算 \(\+P=(2^{[n]},\subseteq)\) 的莫比乌斯函数。注意到每一个 \(P\in 2^{[n]}\) 都可以和 \(s\in \set{0,1}^n\) 中的串等同起来:\(s(i) = \^1[i \in S]\)。于是 \(\+P = (\set{0,1},\le)^{n}\)。再使用 Theorem 2 和 Example 1 的结论,我们可以立即得到对于 \(I\subseteq J\),\(\mu(I,J) = (-1)^{\abs{J\setminus I}}\)。这便是我们在容斥原理中遇到的莫比乌斯函数(矩阵)。
数论莫比乌斯函数
我们来给出莫比乌斯函数,以及莫比乌斯反演最早在数论上的应用。首先我们定义一类被称为整除格(Divisibility Lattice)的偏序集。
Definition 2 对于任何一个自然 \(n\in\^N\), 定义 \(D_n\defeq\set{d \in\^N \cmid d\,|\,n}\) 为所有可以整除 \(n\) 的整数的集合。定义 \(\+D_n=(D_n,\le)\) 为 \(D_n\) 上的偏序集,其中 \(x\le y\) 当且仅当 \(x\,|\, y\)。
容易看到,假如 \(n=p^{\alpha}\) 是某个素数 \(p\) 的幂,那么 \(\+D_n\) 同构于 \(\set{0,1,\dots,\alpha}\) 上的全序。如果 \(n\) 的素因数分解形式为 \[ n=p_1^{\alpha_1} p_2^{\alpha_2}\cdots p_t^{\alpha_t}, \] 则可以看到 \(\+D_n\) 同构于 \[ \+D_{p_1^{\alpha_1}}\cdot \+D_{p_2^{\alpha_2}}\cdots \+D_{p_t^{\alpha_t}}. \]
有了这两个观察,再加上 Example 2 和 Theorem 2 ,我们可以立即得到 \(\+D_n\) 的莫比乌斯函数。
Theorem 3 \[ \mu(a,b) = \begin{cases} 1 & \mbox{ if } a=b;\\ (-1)^k & \mbox{ if } b/a \mbox{ is the product of } k \mbox{ distinct primes};\\ 0 & \mbox{otherwise.} \end{cases} \]
这里定义的 \(\mu\) 就是所谓的数论莫比乌斯函数。实际上 \(\mu(a,b)\) 只与 \(b/a\) 有关,因此,我们有时候会用 \(\mu(b)\) 来表示 \(\mu(1,b)\)。
我们接着来介绍在数论里会经常遇见的欧拉函数(Euler’s totient function)\(\phi\)。对于每一个 \(n\in\^N\),定义 \[ \phi(n) = \abs{\set{a\in [n]\cmid \!{gcd}(a,n)=1}}. \] 换句话说,\(\phi(n)\) 表示的是在不大于 \(n\) 的自然数中与 \(n\) 互素的数的个数。我们有如下等式
\[ n = \sum_{d\colon d\,|\,n} \phi(d). \tag{1}\]
Proof. 我们可以按照和 \(n\) 最大公约数是多少来把 \([n]\) 分成若干类:对于任意的 \(d\,|\,n\),定义 \[ S_d = \set{a\in [n]\cmid \!{gcd}(a,n)=d}. \] 显然所有的这些 \(S_d\) 构成了 \([n]\) 的一个分划。另一方面,\(\!{gcd}(a,n) = d \iff \!{gcd}(\frac{a}{d},\frac{n}{d})=1\)。因此,\(\abs{S_d} = \phi(n/d)\)。这意味着 \[ n = \sum_{d\colon d\,|\,n} \abs{S_d} = \sum_{d\colon d\,|\,n} \phi(n/d) = \sum_{d\colon d\,|\,n} \phi(d). \]
我们考虑在 Definition 2 中定义的整除格 \(\+D_n\),设 \(\zeta\) 是它对应的 zeta 函数。我们可以把 Equation 1 写成
这儿的 \(\le\) 是 \(\+D_n\) 中的 \(\le\),即 \(x\le y \iff x\,|\,y\)。
\[ n = \sum_{d\colon d\le n}\zeta(d,n) \phi(d). \] 因此,使用莫比乌斯反演公式,我们可以得到 \[ \phi(n) = \sum_{d\colon d\le n}\mu(d,n)\cdot d = \sum_{d\colon d\le n} \mu\tp{\frac{n}{d}}\cdot d. \]