SG定理证明

发布时间 2023-12-07 21:02:39作者: Imcaigou

前置知识

有向图游戏概念。

单个有向图游戏中 \(\textrm{SG}\) 函数的求值(\(\textrm{mex}\) 运算)。

以上内容请自行查阅,这里不会多说。

前言

本文受启发于 OI Wiki,采用相同的数学归纳法进行证明,但对计算的原理进行了补充,也补足了一些细节。

网上许多 \(\textrm{SG}\) 定理的证明只是对是否满足必胜必败展开证明。但本文实际上要证明其异或和一定等于 \(\textrm{SG}\) 函数的值。

另外,在本文用 \(\oplus\) 代表 \(\textrm{xor}\) 运算。

定理

\(\textrm{SG}\) 定理:

\[\textrm{SG}(A_1+A_2+...+A_n) = \textrm{SG}(A_1) \oplus \textrm{SG}(A_2) \oplus ... \oplus \textrm{SG}(A_n) \]

其中 \(A_i\) 为一个任意有向图游戏局面。

证明

根据数学归纳法,结合 \(\textrm{SG}\) 函数本身的性质可知:

若有:

\[\textrm{SG}(A+B) = \textrm{SG}(A) \oplus \textrm{SG}(B) \]

则显然原命题成立。

设局面 \(A\) 的一个后继为 \(A'\), 局面 \(B\) 的一个后继为 \(B'\)\(\textrm{SG}(A) = a\)\(\textrm{SG}(B) = b\)\(\textrm{SG}(A') = a'\)\(\textrm{SG}(B') = b'\)

根据 \(\textrm{mex}\) 的性质可知:

\(a'\) 可以取遍 \([0,a)\), 以及一些大于 \(a\) 的值。

\(b'\) 可以取遍 \(\,[0,b)\), 以及一些大于 \(b\) 的值。

这里我们发现,若先手选择了一个局面的后继使后继局面的 \(\textrm{SG}\) 函数值大于当前局面本身的 \(\textrm{SG}\) 函数值,后手显然可以让局面的 \(\textrm{SG}\) 函数值再次等于当前的局面的 \(\textrm{SG}\) 函数值。所以让后继大于当前局面的 \(\textrm{SG}\) 函数值是没有意义的。

所以我们接下来对局面后继的选择只会是 \(\textrm{SG} \) 函数值小于原局面的 \(\textrm{SG}\) 函数值的后继。

我们采用数学归纳法:

1.

\(a=b=0\) 时,显然命题成立。

2.

假设局面 \((A'+B)\) 和局面 \((A+B')\) 都满足命题。

所以有:

\(\textrm{SG}(A'+B)\) 取遍 \([0,a' \oplus b)\)

\(\textrm{SG}(A+B')\) 取遍 \([0,a \oplus b')\)

\(c=a \oplus b=\sum_{i=1}^t{2^{P_i}}\),且满足 \(P_i>P_{i+1}\)

因为 \(a'<a\),所以有 \(a' \oplus b \ne a \oplus b\)\(a' \oplus b \ne c\)

因为 \(\,b'<b\),所以有 \(a \oplus b' \ne a \oplus b\)\(a \oplus b' \ne c\)

我们找到 \(c\) 在二进制下的最高位 \(P_i\),这时一定有一个数的这一位为 \(1\)(不妨为 \(a\)),另一个数的这一位为 \(0\)(不妨为 \(b\))。

所以\(a' \oplus b\) 取值集合与 \(a \oplus b'\) 取值集合的并集一定包含 \([0,2^{P_i})\)。然后我们将 \(a'\) 的第 \(P_i\) 位强制设为 \(1\),只看所有数的二进制位数低于\(P_i\)的二进制段,再用同样的方法计算取值集合并集。

这是我们会发现算出了这些集合:

\[[0,2^{P_1}),[0,2^{P_2}),...,[0,2^{P_t}) \]

但是每个集合都要加上高位上强制为 \(1\) 的位置,所以取值集合并集实际为

\[[0,2^{P_1}),[2^{P_1},2^{P_1} + 2^{P_2}),...,[\sum_{i=1}^{t-1}{2^{P_i}},\sum_{i=1}^t{2^{P_i}}) \]

上述集合的并集为:

\[[0,\sum_{i=1}^t{2^{P_i}}) \]

又因为:

\[\sum_{i=1}^t{2^{P_i}}=c \]

所以 \(a' \oplus b\)\(a \oplus b'\)的取值并集取遍:

\[[0,c) \]

又因为 \(a' \oplus b \ne c,a \oplus b' \ne c\),所以:

\[c=\mathrm{mex}_{a'<a,b'<b}\{ a' \oplus b , a \oplus b' \} \]

所以有:

\[\textrm{SG}(A+B) =\mathrm{mex}_{a'<a,b'<b}\{ a' \oplus b , a \oplus b' \} = c=a \oplus b = \textrm{SG}(A) \oplus \textrm{SG}(B) \]

所以当该局面后继的 \(\textrm{SG}\) 函数满足命题时,该局面的 \(\textrm{SG}\) 函数满足命题。

综上,由 1.2. 并根据数学归纳法,证得:

\[\textrm{SG}(A+B) = \textrm{SG}(A) \oplus \textrm{SG}(B) \]

即原命题成立。

END

完力(喜)。