浅谈 Welter's Game
1.问题描述
在一个长度无限宽度为 1 的长条网格上,以 0 为起始下标,放置了 \(n\) 个棋子,位置按递增顺序分别为 \((a_1, a_2, a_3, \cdots, a_n)\),棋子位置不重叠。两个人进行博弈,每回合选择一个棋子,移动到他前方的空格上,允许跨过棋子,这个棋子原来的位置随即变为空格。任意时刻棋子的位置非负,无法移动棋子者负。问先手是否有必胜策略。
2.简单分析
显然,这是一个有限公平游戏,可以考虑应用 SG 定理求解给出状态的 SG 函数值,从而判断其胜负态。
定义一个状态为棋子的下标集合,集合中不应存在重复元素。每个状态的直接后继状态为选择某个元素减小,并且保持集合仍无重复元素。后继状态为空或均为必胜态的状态为必败态,反之为必胜态。
3.动画函数 (Animating Function)
3.0 拓展的异或
我们希望把异或运算拓展到负整数。
先定义负整数 \(x\) 在 \(\mathbb{N}\) 上的映射为 \(\overline{x}\),\(\overline{x}\) 为 \(2^{\infty}-(x-1)\),可以类比为有无限个 1 开头的计算机补码。
那么负整数和非负整数的异或运算就可以定义了:\(x\oplus_{ext} y=\overline{\overline{x}\oplus y}, x<0, y\geq 0\)。负整数之间的也可以类似定义。
后文中的 \(\oplus\) 号统一用拓展的定义。
3.1 定义
定义 \(f\) 是一个动画函数,当且仅当 \(f\) 是 \(\mathbb{Z}\) 上的函数,其形式为
注意是有限次复合。
3.2 性质
3.2.1
- 动画函数 \(f\) 是 \(\mathbb{Z}\rightarrow\mathbb{Z}\) 上的单射。
每个子结构都是单射,单射的符合仍是单射。
这意味着存在反函数 \(f^{-1}\),满足 \(f(f^{-1}(x))=x\)。
\(f^{-1}\) 也是动画函数,可以简单理解为把 \(f\) 的过程逆过来。
3.2.2
- 如果 \(f,g\) 都是动画函数,则 \(f(g)\) 还是动画函数。
系数显然都可以提取出来单独运算,化简后仍是动画函数的形式。
4.配对函数 (Mating Function)
4.1 定义
定义 \(M(x,y)\) 是一个在 \(\mathbb{Z}^2\) 上的函数,满足 \(M(x,y)=x\oplus y\oplus (x\oplus y-1)\)。特别的,\(M(x, x)=-1\)。
更直观的理解方式为找到 \(x\) 和 \(y\) 最低的不同的位,设这是第 \(d\) 位(从 0 开始),则 \(M(x,y)=2^{d+1}-1\)。
4.2 性质
4.2.1
-
\[M(x,y)=M(x+a, y+a)=M(x\oplus a, y\oplus a) \]
显然,加法和异或操作不改变他们最低的不同位。
4.2.2
- 对任意动画函数 \(f\),\(M(x,y)=M(f(x), f(y))\)。
由 4.2.1 归纳可得。
4.2.3
-
\(n\oplus M(n, 0)=n\oplus n\oplus 0\oplus(n\oplus 0-1)=n-1\)
-
\(n\oplus M(n, -1)=n\oplus n\oplus -1\oplus(n\oplus (-1)-1)=n+1\)
4.2.4
- 任意动画函数均可写成 \(f(x)=x\oplus M(x,a_1)\oplus M(x,a_2)\oplus \cdots \oplus b\) 的形式。
可以归纳证明。假设 \(f\) 具有此形式,只需证明 \(f(x)\oplus m\), \(f(x)+1\), \(f(x)-1\) 也有。
\(f(x)\oplus m=x\oplus M(x,a_1)\oplus M(x,a_2)\oplus \cdots \oplus (b\oplus m)\)
\(f(x)+1=f(x)\oplus M(f(x), -1)=f(x)\oplus M(x, f^{-1}(-1))\)
\(f(x)-1=f(x)\oplus M(f(x), 0)=f(x)\oplus M(x, f^{-1}(0))\)
4.2.5
任意 \(x\neq y\), \(M(x,y)>0\)。
显然可以找到他们第一个不同的位。
5.动画函数的 Welter 范数
5.1 定义
我们先考虑 \(b=0\) 的动画函数,记 \([f]\) 为 \(f\) 的 Welter 范数,如下递归定义:
-
对于 \(f_{a}(x)=x\oplus M(x, a)\),定义 \([f_{a}]=a\),
-
对于 \(h=f\circ g\), \([h]=[f]\oplus [g]\)。
5.2 更直观的定义
先来看 \(f_{a,b}(x)=x\oplus M(x,a)\oplus M(x,b)\) 按上述递归定义的形式。
再来看 \(f_{a,b,c}(x)=x\oplus M(x,a)\oplus M(x,b)\oplus M(x,c)\)
如此我们可以归纳定义 \([f_{a_1, a_2, \cdots, a_{n}}]=\left(\bigoplus_{i=1}^{n}a_i\right)\oplus\left(\bigoplus_{1\leq i<j\leq n}M(a_i, a_j)\right)\)
为了简化记号,我们后文中用 \([a_1|a_2|\cdots|a_n]\) 代替 \([f_{a_1, a_2, \cdots, a_{n}}]\)。于是
5.3 性质
5.3.1
- \([a_1|a_2|a_3|a_4|\cdots|a_n]=[[a_1|a_3|a_4|\cdots|a_n]|[a_2|a_3|a_4|\cdots|a_n]]\oplus [a_3|a_4|\cdots|a_n]\)
按定义展开即证。
5.3.2 配对算法
- 调换顺序使得 \(M(a_1, a_2)\) 是 \(M(a_i, a_j)\) 中最大的项,则 \([a_1|a_2|a_3|a_4|\cdots|a_n]=[a_3|a_4|\cdots|a_n]\)
被忽略的项为 \(\bigoplus_{i\geq 3}(M(a_1, a_i)\oplus M(a_2, a_i))\)。
\(M(a_1, a_2)\) 最大,这意味着他们是所有 \((a_i, a_j)\) 对中不同的最低位最大的,记为 \(d\)。那么其他数和他们的不同的最低位都小于 \(d\) (注意所有数互不相同)。而我们又知道 \(a_1\) 和 \(a_2\) 的低 \(d-1\) 位相同,所以 \(M(a_1, a_i)=M(a_2, a_i)\),异或后抵消。
如此递归下去,我们实际上找到了 \(\frac{n}{2}\) 个配对和可能的一个单独的数,能够代表整个 \(\bigoplus_{1\leq i<j\leq n}M(a_i, a_j)\)。
5.3.3
- \([k|k|a_1|a_2|\cdots]=[a_1|a_2|\cdots]\oplus (-1)\), \(k\) 与 \(a_i\) 互不相同。
按定义式展开,两个 \(k\) 带来的影响抵消后只剩下 \(M(k,k)=-1\)。
5.3.4
- Welter 范数关于其每个参数都是动画函数。
以 \(a_1\) 为例,\([a_1|a_2|\cdots]=a_1\oplus M(a_1, a_2)\oplus M(a_1, a_3)\oplus \cdots\oplus\left((\bigoplus_{i=2}^{n}a_i)\oplus(\bigoplus_{2\leq i<j\leq n}M(a_i, a_j))\right)\)
5.3.5
- \([a|b|c\cdots]=[a^{\prime}|b^{\prime}|c\cdots]\),当且仅当 \([a^{\prime}|b|c\cdots]=[a|b^{\prime}|c\cdots]\)
利用 5.3.1 展开两者分别得到
\([a|c\cdots]\oplus [b|c\cdots]=[a^{\prime}|c\cdots]\oplus [b^{\prime}|c\cdots]\)
\([a^{\prime}|c\cdots]\oplus [b|c\cdots]=[a|c\cdots]\oplus [b^{\prime}|c\cdots]\)
显然等价。
6.偶数变更理论
6.1 记号
记
表示如下含义:
-
\([a|b|c|\cdots]=n\)
-
任意替换某个上方的变量为下方的变量,\(n\) 变为 \(n^{\prime}\),即 \([a^{\prime}|b|c\cdots]=[a|b^{\prime}|c\cdots]=[a|b|c^{\prime}\cdots]=\cdots=n^{\prime}\)
6.2 唯一性
- 若 \(n^{\prime}\neq n\),则存在唯一一组 \(a^{\prime}, b^{\prime}, c^{\prime}, \cdots\),分别不同于 \(a,b,c,\cdots\),满足上述条件。
由 5.3.4,Welter 范数是关于其每个参数都是动画函数,自然是单射且存在反函数,带入 \(n^{\prime}\) 一定能反解出唯一且不同于原来参数的解。
6.3 偶数变更不变性
- 对于等式 \([a|b|c|\cdots]=n\),任意将上方偶数个变量(包括 \(n\))替换为下方的变量,等式仍成立。
由 5.3.5 易得。
7.Welter's Game 的 SG 函数与游戏状态动画函数的 Welter 范数的关系
7.1 记号
记游戏状态 \(x=\{a_1, a_2, \cdots, a_l\}\),表示 \(l\) 个棋子的位置集合。集合中不应有重复元素,集合元素均为非负整数。
记 \([x]=[a_1|a_2|\cdots|a_l]\)。
定义 \(suc(x)\) 为 \(x\) 的直接后继状态集合。状态 \(y\) 属于 \(suc(x)\),当且仅当 \(y\) 与 \(x\) 仅存在一个元素不同,且这个元素小于 \(x\) 中对应元素。可以直观理解为在状态 \(x\) 进行了一次合法的移动棋子得到 \(y\)。
7.2 怎么证明一个函数是 SG 函数
令游戏状态集合为 \(\Omega\),定义函数 \(f:\Omega\rightarrow\mathbb{N}\)。\(f\) 是该游戏的 SG 函数当且仅当:
7.3 \([x]\) 与 \([y\in suc(x)]\) 的互异性
由 5.3.4,\([x]\) 是关于每个参数的动画函数。如果存在 \([x]=[y]\),将 \([y]\) 带入该参数动画函数的反函数,应当得到相同的解,与 \(y\in suc(x)\) 矛盾。
所以 \(\forall y\in suc(x)\), \([x]\neq [y]\)。
7.4 证明 $ \forall 0\leq n^{\prime}<n=[x], \exist y\in suc(x), [y]=n^{\prime} $
7.4.1 与偶数变更理论建立联系
对于 \(x=\{a_1, a_2, \cdots, a_l\}\),令 \([x]=n\),对于 \(0\leq n^{\prime}<n\),列出偶数变更理论记号:
我们考虑 \(a_1^{\prime}\)。首先证明其非负。如果为负数,由于 \(a_2, a_3, \cdots\) 均非负,所以 Welter 范数定义式右侧均非负,所以 \([a_1^{\prime} | a_2 | a_3 | \cdots |a_l]\) 为负,与 \(n^{\prime}\) 非负矛盾。
再考虑互异性,如果 $a_1^{\prime} $ 与 \(a_2, a_3\cdots, a_l\) 中,某个变量相同,根据 5.3.3, \([a_1^{\prime} | a_2 | a_3 | \cdots|a_l]\) 为负,与 \(n^{\prime}\) 非负矛盾。
所以 \(a_{1}^{\prime}\) 非负且与 \(a_1, a_2, \cdots, a_l\) 互异。其他下方变量也可以得到相同的结论。
换句话说,任意替换上方变量为下方某一个变量(这里不考虑 \(n\)),得到的都是一个合法的游戏状态。
我们只需要证明,对于任意 \(0\leq n^{\prime}<n\),均存在一个替换方式,使得替换后的状态是原状态的直接后继状态,即存在 \(a_i^{\prime}<a_i\)。
我们尝试加强命题,证明下列不等式组中(后称第一类不等式组),恰好偶数个成立:
如果得证,因为 \(n^{\prime}<n\),所以必定存在 \(a_i^{\prime}<a_i\),原命题得证。
7.4.2 第二类不等式组
我们将证明,对于任意整数 \(x\),下列不等式组中恰好有偶数个成立。
其中当 \(l\) 为偶数时,\(y=0\),否则 \(y=x\)。
上述不等式组即为第二类不等式组。
证明:
不放设 \((a_1, a_2)\) 是配对算法中得到的第一对,那么有
考虑替换 \(a_3^{\prime}, a_4^{\prime},\cdots, n^{\prime}\) 中的偶数个变量,由于在配对算法中,\((a_1, a_2)\) 始终可以成为过程中合法的一个配对,所以等式仍然成立。于是得到
其中 \(m=n\oplus [a|b], m^{\prime}=n^{\prime}\oplus[a|b]\)
由于 $n\oplus n^{\prime}\oplus y<y $ 和 $m\oplus m^{\prime}\oplus y<y $ 等价,归纳假设新的偶数变更理论记号满足有偶数个第一类不等式成立,我们只需证明
有偶数个成立。
根据 5.3.1 展开可得 \([a_1^{\prime}|a_3\cdots|a_l]\oplus [a_2|a_3\cdots|a_l]=[a_1|a_3\cdots|a_l]\oplus [a_2^{\prime}|a_3\cdots|a_l]\)。由 \((a_1, a_2)\) 是第一个配对,可以推出 \(M(a_1, a_2^{\prime})=M(a_1^{\prime}, a_2)\)。
类似地,可以得到 \(M(a_1, a_2)=M(a_1^{\prime}, a_2^{\prime})\)
又有 \([a_1|a_2|a_3|\cdots|a_l]=[a_1^{\prime}|a_2^{\prime}|a_3|\cdots|a_l]=n\),所以 \(a_1\oplus a_2=a_1^{\prime}\oplus a_2^{\prime}\),即 \(a_1\oplus a_1^{\prime}=a_2\oplus a_2^{\prime}\)。
所以上述两个不等式等价,成立数量只能是偶数。
7.4.3 消去不变性
- \([0|a_1|a_2|\cdots|a_l]=[a_1-1|a_2-1|\cdots|a_l-1]\)
按定义展开左侧:
- 若
- 则
带入上述结论即证。
同时可以发现,当 \(x\geq 0\) 时,不等式 \(x<0\) 恒假。那么他们的第零类不等式组中,成立的不等式个数的是完全相同的,奇偶性也自然相同。
7.4.4 异或不变性
- \([a_1\oplus x|a_2\oplus x|\cdots|a_l\oplus x]=[a_1|a_2|\cdots|a_l]\oplus y\)
当 \(l\) 为偶数时 \(y=0\),否则 \(y=x\)。
按定义展开左侧
类似 7.4.3,我们能得到
- 若
- 则
下面证明他们的第一类不等式组中成立的不等式数量奇偶性相同。
-
引理:若 \(a_1\oplus a_2\oplus \cdots\oplus a_l=s\),则对于任意 \(t\), \(a_1\oplus t<a_1, a_2\oplus t<a_2, \cdots, a_l\oplus t<a_l, s\oplus t<s\) 中恰有偶数个成立。
-
证明:\(t=0\) 显然,否则找到 \(t\) 的最高位,设为第 \(k\) 位,则 \(x\oplus t<x\) 当且仅当 \(x\) 的第 \(k\) 位为 1。上述变量中恰好有偶数个变量的第 \(k\) 位为 1。
设 \(a_1^{\prime}=a\oplus t\),则 \(a_1\oplus t<a_1, x\oplus t<x, a_1\oplus x\oplus t<a_1\oplus x\) 中恰好有偶数个成立。即 \(a_1^{\prime}<a_1, a_1\oplus a_1^{\prime}\oplus x<x, a_1^{\prime}\oplus x<a_1\oplus x\) 中恰好有偶数个成立。对 \(a_2, a_3,\cdots, a_l, n\) 也是如此。
中间的不等式就是第二类不等式组中的不等式。而我们知道,第二类不等式组中,恰好有偶数个不等式成立。
所以不等式组
和不等式组
中,成立的不等式的数量的奇偶性相同。
7.4.5 归纳
从最初的偶数变更理论记号开始,进行以下过程:
-
利用异或不变性,选择 \(x=a_1\),使得第一个变量变为 0,第一类不等式组中成立的不等式数量的奇偶性不变;
-
利用消去不变性,删去第一个变量,第一类不等式组中成立的不等式数量的奇偶性不变;
-
重复上述两个步骤,直到只剩两个变量。
此时第一类不等式组中显然只有偶数个成立。
原命题得证。
最终我们证明了,游戏状态动画函数的 Welter 范数就是 Welter's Game 的 SG 函数。

浙公网安备 33010602011771号