刺客 vs 保镖
Maryam Mirzakhani 在 2014 年的报告中提出了如下的问题(视频的 25 分 50 秒处):
问题: 假设平面上有一个正方形的房间,房间的四面墙壁都是光滑的反射镜子。子弹在碰到墙壁时会遵循入射角等于出射角的规律无限反射下去。房间中有一位政要和一个刺客,他们的位置是固定的,但可能是房间中任何两点。能否在房间中放置有限数量的保镖,使得这些保镖可以封锁刺客的所有射击角度,从而确保政要不被子弹击中?
根据 这篇论文 的考据,这个问题曾经在 1989 年列宁格勒的数学竞赛中出现过。最近,通过 PBS 和 math3ma 的博客 的科普推广,这个问题又引起了不少人的兴趣。我强烈建议读者在深入阅读本文之前,先观看这些视频和博客。它们的讲解通俗易懂,即便对于普通读者来说也非常友好。
Greg Egan 在 他的博客中 进一步讨论了房间是正三角形和正六边形的情况。虽然他给出的答案是正确的,但是他对正六边形情形的解释有点让人难以理解(Greg Egan 的一贯风格)。
正三角形、正方形和正六边形房间是仅有的三种可以用有限多个保镖保护目标的情形,对其它正 \(N\) 边形房间(\(N\notin\{3,4,6\}\)),有限数量的保镖是不行的。
本文是对 math3ma 和 Greg Egan 博客文章的补充,我将主要针对正六边形的情况进行详细解释。我觉得从仿射 Weyl 群的角度来看这个问题会更清晰,不过这一概念可能对大多数读者来说较为陌生。本文将假定读者已具备群的相关基础知识,并尽可能结合直观图形加以说明。如果读者希望进一步了解仿射 Weyl 群,可以参考 (Humphreys 1990, chap. 4)。
本文的代码在 Github 上。这个项目包含了一个交互式脚本,你可以在窗口中点击并拖拽鼠标来查看刺客射击的轨迹以及保镖的位置:
正方形 | 正三角形 | 正六边形 |
反射和平移
在照镜子的时候,你和自己在镜子中的像的左右是相反的,即镜面反射会改变“手性”。因此无论怎么平移或者旋转,你都无法与自己在镜子中的像完全重合。
但是如果把镜子中的虚像通过另一面镜子再作一次反射,得到一个二次虚像,那么通过适当的平移或者旋转,你是可以和这个二次虚像完全重合的。这是因为两个反射变换的复合是一个平移或者旋转:
- 两个相交且夹角为 \(\theta\) 的镜面反射的复合是一个角度为 \(2\theta\) 的旋转。
- 两个平行且距离为 \(d\) 的镜面反射的复合是一个距离为 \(2d\) 的平移。
所以偶数次反射等同于若干次旋转和平移的叠加,手性不变;奇数次反射等同于若干次旋转和平移后再附加一次反射,手性改变。
观察上面盗梦空间的剧照,小李子位于两个平行的镜子中间,他有无穷多个虚像。这些虚像是交错出现的:那些面对他的虚像是经过奇数次反射得到的,这些虚像的手性相反,构成集合 \(L_1\);那些背对他的虚像是经过偶数次反射得到的(小李子本人看作 \(0\) 次反射的像),这些虚像手性相同,构成集合 \(L_2\)。假设两个镜子的距离为 \(d\),则每个 \(L_i\) 中的虚像以 \(2d\) 为间隔均匀分布在一条直线上。
如果我们想在两个镜子中间放置若干保镖,以防止摄影师从任何角度拍摄到小李子,则我们恰好需要 4 名保镖。他们的位置是摄影师和小李子的 4 个虚像的连线中点。这 4 个虚像是:小李子本人、第一次反射生成的两个虚像,以及任意一个二次反射生成的虚像。
为什么需要 4 名保镖呢?假设某个保镖 \(G\) 位于刺客和小李子本人的连线中点。\(G\) 的偶数次虚像以 \(2d\) 为间隔均匀排列,这些虚像在 \(L_2\) 上的投影间隔是 \(4d\),所以这些投影覆盖了 \(L_2\) 一半的格点。另一方面 \(G\) 的奇数次虚像一般来说是无用的。所以保镖 \(G\) 只能挡住小李子的所有虚像的 1/4。
正方形 | 正三角形 | 正六边形
理解正多边形房间情形的第一个关键,是要知道刺客的任何射击轨迹都可以展开为平面上的一条射线。刺客可以击中目标当且仅当这条射线经过目标的某个虚像。这个操作叫做展开 (unfolding)。与展开相对的操作是折叠 (folding) ,我们可以将刺客发出的任何射线折叠回房间变成一条射击轨迹。
当房间是正方形时,目标的所有虚像由 4 个不同的二维格点组成,如下图所示:
刺客只要朝着目标的任何一个虚像开枪就能击中目标,因为他和任何虚像之间的连线都可以通过折叠操作变成一条子弹的反射路径:
在 math3ma 的博客中已经证明了封锁一个二维格点需要 4 名保镖,所以一共需要 4 x 4=16 名保镖。
当房间是正三角形时,目标的所有虚像由 6 个不同的二维格点组成:
同样刺客与目标的任何虚像之间的连线都对应一条房间内的射击路径:
封锁每个二维格点需要 4 个保镖,所以正三角形的情形总共需要 4 x 6 = 24 名保镖。
正六边形是一个容易产生迷惑的情形。这时目标的虚像仍然由 6 个不同的二维格点构成:
但是,如果你仍然猜测需要 4 x 6 = 24 名保镖,那对不起,事情不是这样的。
注意在正六边形房间的情形,出现了一个不同的现象:沿着不同的路径反射,目标的虚像可以出现在另一个房间中不同的位置:
由于光路的可逆性,这个话也可以反过来说,即虚像房间中的一点,它的原像可能来自真实房间中若干个不同的位置。我们后面会说明这样的位置最多有 6 种不同的可能。对一个给定的保镖,我们知道他只有 1/4 的虚像是真正有效的;当借助刺客和这些虚像之间的连线将它们折叠回房间后,随着虚像不同,保镖最终的位置可能是这 6 个位置中的任何一个。所以保镖数目要乘以 6,即总共需要 4 x 6 x 6 = 144 名保镖。
下图也验证了这一点:
我选择了明星的 6 个虚像格点中的一个,用黄色的点标记;刺客与每个虚像连线的中点有一个保镖的虚像,这个虚像来自房间中某个真实的保镖(用青色的点标记)。把射线折叠回房间我们可以得到真实保镖的位置。然而即便对同一个保镖,随着他的虚像变化,这个位置也可能不同,有 6 种可能,所以封锁一个格点就需要 4 x 6 = 24 个保镖,封锁全部 6 个格点需要 144 个保镖!
仿射 Weyl 群
从群论的角度可以更好的解释上面的现象。
首先介绍一个记号:设 \(\alpha\in\mathbb{R}^2\) 是一个单位向量,我们用 \(H_{\alpha,k}\) 表示仿射直线 \[H_{\alpha,k}= \{x\in\mathbb{R}^2\mid (x,\alpha)=k\},\quad k\in\mathbb{Z}.\] 并用 \(s_{\alpha,k}\) 表示关于 \(H_{\alpha,k}\) 的反射。当 \(k=0\) 时我们把 \(H_{\alpha,0}\) 简写为 \(H_\alpha\),把 \(s_{\alpha,0}\) 简写为 \(s_{\alpha}\)。
正三角形、正方形、正六边形房间的共同之处,是房间的所有虚像可以密铺整个二维平面。而且它们是仅有的具有此性质的正多边形。这背后的原因是,这三种情形下,关于房间墙壁的反射生成的群 \(W\) 都是 仿射 Weyl 群。仿射 Weyl 群总是无限群,每个虚像房间都是通过将群元素作用在真实房间上得到的。
- 在正方形的情形,\(W=\widetilde{A}_1\times\widetilde{A}_1\)。
- 在正三角形和正六边形的情形,\(W=\widetilde{A}_2\)。
实际上在两个平行镜面的情形,尽管房间不是封闭多边形,\(W\) 也是仿射 Weyl 群 \(\widetilde{A}_1\)。
仿射 Weyl 群总可以分解为一个有限 Weyl 群 \(W_{\rm fin}\) 和一个格点群 \(L\) 的半直积: \[W = W_{\rm fin}\ltimes L.\] \(W_{\rm fin}\) 的根系 \(\Phi\) 是有限的;\(L\) 是 \(\Phi\) 的余根格点。
我们分别来考察它们:
在正方形的情形,假设房间 \(C=[0,1]\times[0,1]\) 是单位正方形。它的四面墙由两组平行的镜面组成,每组平行镜面生成的反射群是无穷二面体群 \(\widetilde{A}_1\)。由于这两组镜面互相垂直,所以它们合起来生成的反射群是两个 \(\widetilde{A}_1\) 的直积,即 \(W=\widetilde{A}_1\times\widetilde{A}_1\)。
我们来看看怎样把 \(W\) 拆成 \(W=W_{\rm fin}\ltimes L\) 的形式。
设 \(\alpha_1=(1,0),\alpha_2=(0,1)\) 是过原点的两个墙壁的法向量,记 \(\alpha_1^\vee=2\alpha_1\) 和 \(\alpha_2^\vee=2\alpha_2\)。在数学术语中,\(\alpha_1^\vee\) 和 \(\alpha_2^\vee\) 被称为 \(\alpha_1\) 和 \(\alpha_2\) 的余根 (coroot)。
记 \(s=s_{\alpha_1},t=s_{\alpha_2}\),则反射 \(s,t\) 生成的群是 Klein 群 \(K_4=\{1,s,t,st\}\)。它就是上面直积分解中的 \(W_{\rm fin}\)。
设 \(L=\mathbb{Z}\alpha_1^\vee + \mathbb{Z}\alpha_2^\vee=2\mathbb{Z}\) 是由余根 \(\alpha_1^\vee\) 和 \(\alpha_2^\vee\) 生成的二维格点群。则 \[\widetilde{A}_1\times\widetilde{A}_1 = K_4\ltimes 2\mathbb{Z}.\]
记真实房间为 \(C\),\(W\) 在 \(C\) 上的作用可以分成两步:首先将 \(K_4\) 中的某个元素作用在 \(C\) 上,得到 \(\{C,sC,tC,stC\}\) 之一,然后分别在 \(x,y\) 方向上平移偶数的距离。由于 \(K_4\) 是 4 阶群,这解释了为什么目标虚像由 4 个格点组成。
正三角形房间的情形是类似的。仍然记真实房间为 \(C\),并假设 \(C\) 的一个顶点位于原点。设经过原点的两面墙的法向量是 \(\alpha_1\) 和 \(\alpha_2\),它们的夹角是 \(-\pi/3\)。设 \(s=s_{\alpha_1},t=s_{\alpha_2}\) 是它们给出的反射,\(\alpha_1^\vee=2\alpha_1\) 和 \(\alpha_2^\vee=2\alpha_2\) 分别是 \(\alpha_1\) 和 \(\alpha_2\) 的余根。则 \(W\) 可以表示为 \(s,t\) 生成的有限二面体群 \(D_3\) 和余根格点 \(L=\mathbb{Z}\alpha_1^\vee + \mathbb{Z}\alpha_2^\vee\) 的半直积 \[W=\widetilde{A}_2=D_3\ltimes L.\] \(W\) 在 \(C\) 上的作用可以分成两步,首先用 \(D_3\) 中的某个元素作用在 \(C\) 上,得到环绕原点的 6 个房间 \(\{C,sC,tC,stC,tsC,stsC\}\) 之一,然后再将其沿着 \(L\) 中的一个格点进行平移。由于 \(D_3\) 是 6 阶群,所以目标虚像由 6 个不同的格点组成。
我们已经讨论了正方形和正三角形房间的情形,这两种情形中,群元素和房间都是一一对应的:对任何虚像房间 \(C'\),有且仅有唯一的群元素 \(w\in W\) 将真实房间 \(C\) 映射为 \(C'\)。但是在正六边形的情形,情况变得非常不同,群元素和房间是 6 对 1 的关系!
我们可以继续使用上图来分析。注意到正六边形房间给出的反射群和正三角形的情形一样,都是 \(\widetilde{A}_2\),因为它们都是由关于所有网格线的反射生成的。所以目标虚像也由 6 个不同的格点组成。任何虚像房间也可以分两步得到:先用 \(D_3\) 中的某个元素作用在真实房间上,再沿着余根格点中的一个向量平移过去。但是 \(D_3\) 保持正六边形不变,只是置换其内部的 6 个正三角形,所以最终的房间是由 \(L\) 唯一决定的。
这会导致什么后果呢?我们作如下分析:设 \(p\) 是真实房间内的一点,\(q\) 是 \(p\) 的某个虚像,从而存在 \(x\in D_3\) 和 \(t\in L\) 使得 \(q=x\cdot p + t\)。\(q\) 所在的格点是 \[q+L=q+\mathbb{Z}\alpha_1^\vee+\mathbb{Z}\alpha_2^\vee.\] 然而 \(p\) 并不是真实房间中唯一可以生成 \(q+L\) 的点。考虑集合 \(S=\{y\cdot p\mid y\in D_3\}\),由于 \(D_3\) 保持真实房间不变,所以 \(S\) 都是真实房间中的点。对任何 \(y\cdot p\in S\),用 \(xy^{-1}\in D_3\) 作用在 \(y\cdot p\) 上,得到 \(x\cdot p\),然后按照 \(L\) 进行平移,就可以得到格点 \(q+L\)。这就证明了 \(p\) 的一个虚像格点可以来自房间内 6 个不同的位置。所以对一个保镖来说,假设 \(L\) 是他的某个虚像格点(由奇数或者偶数次反射生成),对任何 \(q\in L\),刺客和 \(q\) 的连线给出一个 \(\widetilde{A}_2\) 中的元素 \(w\),\(w\) 将 \(q\) 映射回真实房间的某个位置 \(p\)。当 \(q\) 跑遍 \(L\) 时,\(p\) 有 6 个可能的位置。我们需要在每个位置上都放置一名保镖才能保证目标安全。这就是为什么保镖数目要乘以 6。