本书只讲一件事:游戏性(playfulness)是数学最重要的特质。数学不是从「有用」开始的,而是从「玩」开始的——巴比伦的泥板上,人们为了好玩而排算数字;希腊人把竞技场上的争胜精神带进了几何证明(「设此为事实,则……」的每一次反证都是一次对局);《九章算术》把解题写成「术」,一条「术」就是一段可以照着走的规则游戏;印度的谜题里藏着算法。而这场「玩」在二十世纪被彻底看穿:Hilbert 说数学是一场「按固定规则摆弄无意义记号的游戏」,Wittgenstein 说数学是「语言游戏」,Conway 更彻底——他直接把数定义成游戏:{ | } = 0,{0 | } = 1,{0 | 1} = ½,全部实数乃至超限序数都从对局中生长出来。本书要回答三个问题:为什么「有规则、有对局、有策略、有终局」这种结构恰好是数学最深的内核?为什么最漂亮的一些数学问题以游戏的面貌出现(Nim 的异或、Chomp 的策略偷取、Gale–Stewart 无限对局、Ehrenfeucht–Fraïssé 博弈刻画同构、交互证明 IP = PSPACE)?为什么「自由」——自由地选规则、自由地换视角、自由地玩——正是数学创造力的引擎?
本书不是一本益智游戏书。本册不教数独技巧,不收集脑筋急转弯,不写「巧解速算三百例」。每遇到一个游戏,要问的永远是三件事:它的数学结构是什么?它的策略能不能被证明?它通向哪一条定理、哪一个现代分支?——Nim 通向异或与 Sprague–Grundy 定理,Chomp 通向「策略偷取」这种不构造必胜法的存在性证明,超现实数通向序数的算术,折纸通向高次方程与 Galois 理论,赌局通向测度论与鞅,无限对局通向选择公理与决定性公理,生命游戏通向 Turing 完备性,围棋与扑克通向计算复杂性与现代博弈论。游戏的俗套是「好玩」;游戏的数学是「好玩背后的结构」——本书只玩后者。
本书按章组织:绪论摆出主旨——游戏为什么是数学的原初形态,从争胜、规则与自由三条线讲起,并给出全册路线图;第一章入门公平组合博弈——Nim 与异或判据(Bouton 定理)、P/N 位置、游戏的和与 Grundy 值(Sprague–Grundy 定理)、Chomp 与策略偷取、Wythoff 游戏与黄金比;第二章把数交给游戏——Conway 的 {L | R} 构造、生日归纳、超现实数是全序域、* 与 nimber、模糊(fuzzy)与非数游戏;第三章打开几何的游戏面——折纸公理与高次方程、Euler 的七桥与图论诞生、Hamilton 的 Icosian Game、15-拼图与置换奇偶性、魔方群、Hex 与策略偷取、铺砌与 Wang 砖块;第四章走进赌局——Pascal–Fermat 通信与期望的诞生、圣彼得堡悖论、赌徒破产、鞅与「赌博系统不可能」、随机游走与 Pólya 回归、Kuhn 扑克与混合策略、Monte Carlo;第五章玩到逻辑与无限——Gale–Stewart 的无限对局与决定性公理、Banach–Mazur 游戏与 Baire 性质、Ehrenfeucht–Fraïssé 博弈、证明的游戏(Curry–Howard 与对话)、生命游戏与 Turing 完备、扫雷与数独的 NP-完全性;第六章看现代前沿——von Neumann 的 minimax、Nash 均衡、演化博弈、机制设计与拍卖、乘法权重与学习、IP = PSPACE 与零知识证明、AlphaZero 的自我对弈,最后回到数学的自由精神;综合站用年表、人物谱、总图、两个综合实验与二十四题自查收束全书。
写作的三条约束(本书的自我要求)。① 结构先于技巧:任何一个游戏先摆棋盘、再定规则、再问「谁赢、为什么」,最后才谈胜负判据;判据必须被证明,而不是被「试出来的规律」冒充(把必胜判据统计当窍门,正是本书要打破的误读)。② 一步一图:凡能画的都画——Nim 的胜负位置树、Grundy 的递归 mex、{L | R} 的生日树、七桥的奇点计数、15-拼图的置换分解、魔方的置换环、赌局的二叉树、无限对局的博弈树、生命游戏的滑翔机。游戏最迷人的地方正在这些图上:一步棋、一次递归、一个等价,画出来便一目了然。③ 自给自足:不假设手边另有教材——异或与二进制、初等概率、群与置换、序数与良基归纳、可计算性的基本概念,都在需要它的那一页随用随补;每条定义同时给出形式陈述与一句大白话的直觉。个别深刻而整体的结论(Sprague–Grundy 定理、超现实数的域公理、Gale–Stewart 决定性、Nash 存在性、IP = PSPACE)给出精确陈述、完整证明思路与文献指引,数值与程序对拍在实验页随附、可自行复算。
页型节奏。每章以 导引 开篇(一页说清这一章要解决什么);主体是 讲义 页(概念、定理、证明,一步一图);每章配 例题 与 习题(先示范再放手)、知识地图 一页(本章概念怎么连成网)、小结(正面清单+易错清单)、思想卡(一句话立起本章的哲学)、挑战(一道通向文献的硬题)、实验(一段可复算的程序)、格物札记(中西算学传统里的平行直觉)、速查表(本章公式与记号一页备翻);章末另设 衔接讲义,把下一章的问题提前立起来。所有编号 可跳读:每一页都自带上下文,随手翻开一页也能读下去。
难度标记。讲义页用 ★–★★★★★ 标出阅读难度:★ 高中基础即可(Nim 的玩法、七桥、15-拼图),★★ 需要初等概率与线性代数的熟练经验(赌局、随机游走、魔方群,书内自给),★★★ 需要抽象代数与实分析的入门(Grundy 值的群结构、超现实数的域公理、Baire 性质,书内随用随补),★★★★ 需要数理逻辑与可计算性的经验(决定性公理、Ehrenfeucht–Fraïssé、Turing 完备、NP-完全性,书内随用随补),★★★★★ 需要现代博弈论与复杂性理论的观点(Nash 存在性、机制设计、IP = PSPACE、零知识,第六章疆界各页)。若只求理解主线,读绪论、第一章的 Nim 与 Sprague–Grundy、第二章的 {L | R} 与超现实数、第三、四章的经典游戏即可;若求完整掌握,按章顺序逐页推进,并把每章习题做完。
三条线索贯穿全书:
① 明线——从 Nim 到自由:一部「玩出来的数学」:先在公平组合博弈里学会「局面 = 结构、胜负 = 定理」(第一、二章),再把几何、概率、逻辑逐一带进游戏的语言(第三、四、五章),最后看现代数学如何把博弈当作定义与证明本身(第六章:均衡、机制、交互证明、自我对弈)——这正是数学从「消遣」长成「公理自由」的轨迹。
② 暗线——游戏三要素:规则、等价、策略。本书反复演练同一套动作:把游戏拆成局面(规则)、把局面化成标准形(等价,如 Grundy 值与超现实数的规范形)、再从标准形读出必胜策略(策略)。什么时候能把一个游戏「化简成数」,什么时候遇到了「非数的游戏」(*、↑),什么时候必须升到无限对局与公理层面,是全书的核心招式。
③ 接口——通往四个邻域。游戏是数学的枢纽:与代数(异或与二元域、游戏群、置换群)、概率与分析(期望、鞅、随机游走)、逻辑与计算(决定性、模型论博弈、计算复杂性、Turing 完备)三条战线直接相通,并与现代博弈论与经济学(均衡、机制设计)深度合流,第六章与综合站余韵两页逐条架桥。
写法约定(TEX 标准):博弈记 G、H(变量斜体),局面记 s,P/N 位置记 𝒫、𝒩;异或(nim-sum)记 ⊕,Grundy 值记 𝒢(G);游戏的和记 G + H;超现实数记 {L | R},生日记 b(G);博弈树记 T(G);鞅记 Mn,期望记 𝔼。变量用斜体,函数名与算子名(mex、nim、Sprague、Grundy、Nash、IP、PSPACE)用正体;关键一步配图,规则与策略逐章对照。
扫码进馆:四十个页面的末尾附有二维码卡——手机扫码(或直接输入卡上的网址)即可打开对应的游戏工坊,本书讲到的每一座「馆」都能上手玩。卡片分属主站的两个专区:数学游戏工坊合集与解谜的艺术。全部馆的总入口见全册结构总览(p191)与速查页(p203);书末另附「全书配套工坊总览」,纸书直接扫。
★ 二十世纪最著名的一本游戏研究著作给出了这样的定义:游戏是自由的(voluntary)、有规则的、自成目的的(把过程当作目的本身)活动。把这三条放在数学身上,会发现它们严丝合缝——数学的起点是自由(没有谁逼迫 Pythagoras 研究无理数),它的形态是规则(公理与推理规则),而它的目的从不是「有用」,而是把这场游戏玩下去、玩得漂亮。
本册的主张只有一个:游戏性是数学最重要的特质。不是「数学也可以娱乐」,也不是「游戏有助于学数学」,而是——规则、对局、策略、终局这四件事,构成了数学最内核的运作方式。有理数域上的二次互反律是一次漂亮的对局的结果;Nim 的胜负判据是一条线性代数定理;Conway 干脆把数定义成游戏。本册要沿着这条路走两千年:从希腊人把竞技精神带进证明,到 Hilbert 说数学是「按规则摆弄记号的游戏」,再到 Conway 把 ½ = {0 | 1} 写成一场对局,最后到 AlphaZero 在棋盘上自己教自己下棋。
本册不是一本益智游戏书。我们不教数独技巧,不收集脑筋急转弯,不写「巧解速算三百例」。每遇到一个游戏,要问的永远是三件事:它的数学结构是什么?它的策略能不能被证明?它通向哪一条定理、哪一个现代分支?游戏的俗套是「好玩」;游戏的数学是「好玩背后的结构」。一个游戏只有能生出一门学问,才配写进这本书。
读法(绪论 → 六章 → 综合站)。绪论建立语感:争胜、规则、自由三条线,加上判据、年表与路线图;第一章取子游戏与博弈的群结构(Nim → Sprague–Grundy);第二章数即游戏(Conway 的超现实数);第三章几何的游戏(折纸、七桥、魔方群);第四章概率与策略(赌局中的数学);第五章逻辑与无限的游戏(策略、选择与不可判定);第六章现代前沿(博弈论、算法与数学的自由精神)。综合站收全册。
★ 数学的第一次自我认识发生在希腊。Homer 笔下的英雄在竞技场上争胜(agōn),而 Euclid 把这种精神搬进了纸面——《几何原本》的每一个命题都是一场结构完整的对局:先从对手必须点头的前提出发(定义、公设、已证命题),再一步步走子(推理),最后把对手逼到无处可退(结论)。证明之所以要求「无懈可击」,正因为它在字面上是一场谁都无法耍赖的比赛。
反证法是这条线索最纯粹的形态。要证明「素数无穷多」,我们先替对手摆好立场——假设只有有限多个素数,然后按规则走子:把它们乘起来加一,得到的数既不被任何一个整除,又不可能是别的素数。对手被将死了。这个动作的形状:假设对手的立场 → 沿着规则推演 → 逼出矛盾。这正是一个双人博弈中「先手走一步、后手应对、直到分出胜负」的标准剧本。
希腊人还给这门游戏定下了「裁判规则」。哪些前提可以直接引用(公设与已证命题)、哪些步骤被允许(三段论)、什么算赢(矛盾或无矛盾的构造)——这一切在今天被写成形式系统的四要素,而在本册的语汇里,它就是棋盘、走法、终局。数学史上每一次基础危机(无理数、无穷小、集合论悖论),本质上都是有人发现棋盘上出现了一步无法判定的棋,于是数学家重画棋盘、重写规则,然后接着玩下去。
这场对局在二十世纪被重新发现了两次。一次是证明论中的「对话」观点:每一句话都由一方主张、另一方质疑,逻辑联结词获得游戏论的解释(第五章会讲到 Curry–Howard 对应与对话语义);一次是复杂性理论中的交互证明:证明者与验证者来回若干轮,验证者只在以极大概率被说服时接受——IP = PSPACE 定理说的正是「凡能被一场交互对局说服的,都可以被一场多项式空间的证明说服」(第六章)。从 Euclid 的纸面对局,到 P 与 V 的电线两端,数学一直是同一件东西:一场诚实的比赛。
★ 二十世纪的第一次回答来自 Hilbert:数学是一场按固定规则摆弄无意义记号的游戏。这个说法当年听起来像挑衅——「数学研究的真理与意义,被说成了符号游戏?」但它其实是一个精确定义的纲领:把数学写成形式系统:给出符号表、规定哪些符号串合式、列出公理、列出推理规则,然后「定理」就是能被规则一步步生成出来的符号串。
把这份定义与游戏对照,会发现它们逐条对齐。符号表是棋子与格位,合式规则是合法摆法,公理是开局布局,推理规则是允许的走法,而定理就是「按规则能走到、并停在终局」的局面。Hilbert 的纲领因此可以翻译成一句话:数学的可靠性 = 这场游戏不会把合法的局面走到自相矛盾。他想证明的「一致性」,就是证明棋盘上永远走不出「既赢又输」的死局。
Wittgenstein 把这条线推得更远。在他看来,数学根本不是关于对象的科学,而是一族语言游戏(Sprachspiel):符号的意义由它在游戏中的用法决定,而不是由它指称的对象决定。「2 + 2 = 4」之所以为真,不是因为某个柏拉图世界里的对象恒等,而是因为我们同意这样玩——规则是我们立的,因此也可以被改写。这一观点把「数学是发明还是发现」的争议转化成了更锋利的问题:规则的边界在哪里?我们能否走出自己立的规则?
五年之后,Gödel 给出了一个令人不安的答案:任何足够强的、一致的形式系统,都无法在自身内部证明自身的一致性;而且总存在「真但不可证」的命题。用游戏的比喻说:存在一些局面,规则既不能判它赢、也不能判它输——但作为「站在棋盘外的人」,我们看得见它是真的。这正是本册的核心张力:规则给了数学严谨,而规则的不完备给了数学自由。因为无法被规则穷尽,数学才必须不断创造新规则、新棋盘、新游戏——这就是 Hilbert 的形式游戏留下的最美遗产。
★★ 如果说 Hilbert 把数学看成游戏,那么 Conway 走得更远:他让数学成为游戏。一九七〇年前后,Conway 在研究围棋终局时发现,每一种局面都可以抽象成一个「游戏」,而两个游戏可以相加(两盘棋同时进行),于是问题变成:「游戏」这种对象,能不能像数一样被加、被比较、被排序?他的回答写成了《On Numbers and Games》——一本书同时造出了两样东西:组合博弈论与超现实数。
构造只有一行:G = {L | R},其中 L、R 是已经造好的游戏(分别表示「左方可走到的局面」与「右方可走到的局面」)。从空集开始:{ | } 是零号游戏,记作 0——没有走法,谁先走谁输,正是一个「零和的中立局面」。于是 {0 | } 是 1(左方可以先走到 0,把「先走者输」的局面交给对方),{ | 0} 是 −1,而 {0 | 1} 恰好是 ½——因为它「夹」在 0 与 1 中间,正是那个最小的、大于 0 又小于 1 的数。
「生日」是这套构造的时间轴。空集是第 0 天造出的;用已有的游戏当左右集合,得到第 1 天的 1、−1;第 2 天得到 2、½、−½、−2;如此下去,用超限归纳一直走到第 ω 天,就得到 ω 本身(第 n 天所有的自然数都被造完之后,那个「比所有自然数都大」的游戏),再往下还能造出 1/ω、√2、π……全部实数,乃至比实数丰富得多的对象,都从一场游戏中长了出来。第二章会用整整一章来完成这件事:证明这样造出的对象构成一个全序域,并让第一章的 Grundy 值在这里找到归宿。
这里藏着本册主线的第二个关键词:自由。数学的自由有三重形态。第一重是自由地选公理——十九世纪,Lobachevsky 与 Bolyai 拒绝 Euclid 的第五公设,造出了非欧几何:既然第五公设不能被前四条推出,我们凭什么不能反过来假设它不成立?这一跃换来了一整个新的几何宇宙(第三章的折纸会再遇到它)。第二重是自由地造对象——Cantor 造出无穷基数,Conway 造出超现实数:数学对象的合法性来自「能否被无矛盾地定义」,而不是来自「能否被直观到」。第三重是自由地换视角——Klein 的 Erlangen 纲领说:「几何学」就是「在某个变换群下不变的性质」,于是同一条定理由不同的群就有了不同的身份(第六章回望)。正因为数学是一场自由的游戏,它才能不断自我超越;而正因为游戏有规则,这份自由才不会滑向任意。
★ 现在该给「数学游戏」下一个可操作的判据了。日常语言里的「游戏」太宽(赌博是游戏、电子游戏是游戏、孩子的过家家也是游戏),本册需要一条能划出数学疆域的标准。我们采用四条判据:① 规则清晰(每一步的合法走法由规则完全确定);② 状态可判定(局面是数学对象,可以判定、比较、计数);③ 终局与胜负明确(什么时候结束、谁赢,有精确定义);④ 策略可被证明(胜利判据能够被数学地证明,而不是靠「试了很多次都对」)。
第四条是关键,也是本册与「益智」的分水岭。很多游戏都能被「玩」出规律:试 n = 1, 2, 3… 全对,于是宣称「必胜法」。数学不接受统计归纳——判据必须来自结构,必须能被证明对所有局面成立。第一章的 Bouton 定理之所以是定理而不是窍门,正在于它给出了证明:Nim 的胜负由各堆石子数的按位异或是否为零完全决定,与堆数、石子数的大小无关。
四条判据把游戏分成四个家族。最纯的一族是公平组合博弈(impartial combinatorial game):双方可走的走法完全相同,局面有限,无平局,终局永远是「不能动者输」——Nim、Chomp、Wythoff 游戏、Green Hackenbush 都属这里,第一章与第二章的主战场。第二族是一般零和博弈:规则可以不对称、可以含随机,胜负由收益矩阵给出,需要「混合策略」与 minimax 定理,扑克与拍卖在其中,第六章的主战场。第三族是无限对局:局数没有长度限制,胜负由「谁活到最后」判定,Gale–Stewart 与决定性公理所在,第五章的主战场。第四族是单人谜题:没有对手,但有规则与目标,于是「能否解出」变成一个判定问题,难度可以被测量——数独是 NP-完全、扫雷是 NP-完全,这是第四章与第五章的连接点。
划清边界之后,还要说清本册不写什么。不写纯技巧性的魔术(如「猜你想的数」这类把戏),因为它们没有可证明的结构;不写需要偶然运气的纯赌博(如彩票号码「规律」),因为它把胜负交给了概率而非策略;也不写「大脑训练」式的题目汇编,因为那里的目标是熟练度而不是理解。本册收录的每一个游戏,都必须能带出一张定理、一个构造或一个计算模型——这是筛选标准,也是本书的趣味所在。
★ 本册的历史观可以用三个转折点概括:每一次都是某个游戏逼出了数学的一大块新领域。
转折一:赌博 → 概率(1494–1654)。概率论的第一次呼吸来自赌桌。Pacioli 在《算术大全》里提出「未完成的赌局如何分赌本」,一百多年没人答对;直到 Pascal 与 Fermat(1654)在通信中用期望解决了它,概率论才开始有了自己的语言。随后 Cardano 早在十六世纪就写下《论赌博游戏》的手稿(出版却在死后),Huygens 把期望整理成公理。赌博不生产数学,但它迫出数学:期望、大数律、鞅、随机游走,全都是在「为什么赢不了」这个问题的压力下长出来的(第四章)。
转折二:取子 → 代数(1901–1970)。「谁取最后一颗石子谁赢」这类游戏看似幼稚,却需要真正的代数工具。一九〇一年 Bouton 发表 Nim 的异或判据——这是二元域上的线性代数第一次出现在游戏的胜负表里;此后 Sprague(1935)与 Grundy(1939)各自独立证明了那一定理:任何公平博弈都等价于一堆 Nim 石子,其「大小」由 Grundy 值给出。博弈于是构成了一个加法群。到了 Conway 那里(1970),游戏与数合流:{L | R} 既是局面又是数(第一、二章)。
转折三:对局 → 公理(1913–1975)。如果把游戏玩到无限,规则还够用吗?Zermelo 在一九一三年用选择公理讨论无限棋局;Gale 与 Stewart(1953)证明:任何开集上的无限对局都是决定的——一方必有必胜策略,这条定理在 ZFC 内可证,且不需要选择公理之外的东西。一旦把「所有对局都可决定」当作公理(AD),就与选择公理发生冲突——两种数学宇宙在此分道。二十世纪七十年代的无穷博弈理论最终让决定性成为描述集合论的核心议题(第五章)。
当代的续章。这份年表并没有停在上个世纪。二〇〇二年,Kayes 等人证明扫雷的判定问题是 NP-完全;二〇一六年 AlphaGo 击败人类顶尖棋手;一年后的 AlphaZero 用自我对弈从零学会国际象棋与围棋,把「博弈 + 学习」写成算法史上最著名的实验之一;二〇二三年起,Lean 与 Mathlib 让形式化证明进入机器可校验时代——Hilbert 的「符号游戏」终于有了真正的游戏机。游戏既是数学最古老的面貌,也是它最新鲜的战场。
★★ 全册的旅行可以画成一张两行的图(上图)。第一章与第二章是最纯的组合博弈:先把「公平博弈」拆成局面的有向图,用 Nim 学会异或判据,再把「值」的思想推到极致——Conway 把数本身变成游戏。第三章转向几何:折纸、七桥、15-拼图、魔方群让「游戏」长出拓扑、图论与群论的骨架。第四章是概率:赌局迫使数学发明期望与鞅,并在随机游走与扑克中演示混合策略。第五章进入逻辑与无限:无限对局逼出决定性公理,Ehrenfeucht–Fraïssé 用游戏刻画同构,生命游戏与扫雷把游戏连到 Turing 完备与 NP-完全。第六章是现代前沿:博弈论、机制设计、交互证明、自我对弈,最后回到「数学的自由精神」。综合站把六章收成一张年表、一张总图与两个可复算的实验。
每一章带走的「一张支票」。第一章:给定任何公平博弈,我能判断谁赢,并把它的值算成一个数。第二章:我能说明「数从何而来」,并把游戏的和、序、等价纳入一个域。第三章:我能把一个几何游戏翻译成图、置换群或拓扑定理。第四章:我能计算一个赌局的期望、终局概率,并证明某类必胜系统不存在。第五章:我能陈述支配有限与无限对局的定理,并把谜题的难度写成复杂性类。第六章:我能陈述 Nash 均衡的存在性,并说明交互证明与零知识「为什么是游戏」。
四条准备知识(书内随用随补)。① 二进制与异或:位运算的算术(第一章 p11 起给足);② 初等概率:期望、条件概率、独立(第四章 p100 起给足);③ 置换与群:群、轨道、置换的奇偶性(第三章 p88 起给足);④ 序数与归纳:超限归纳与良基序(第二章 p46 起给足)。只要具备高中代数的熟练度,本书的全部主线(第一、二、三、四章)都可读通;第五、六章需要一点数理逻辑与复杂性的耐心,但概念都在书内首次出现时解释。
读法建议(三种)。其一,主线速读:绪论 → 第一章(Nim、Grundy)→ 第二章(超现实数)→ 综合站,约四十页,把「局面 = 数」这条最漂亮的思想吃透。其二,主题跳跃:对几何感兴趣从第三章切入,对概率从第四章切入,对逻辑从第五章切入——每章首页的导引与地图页都足以独立成篇。其三,完整研读:按章顺序推进,做完全部习题与挑战,两个综合实验自己动手复算。无论哪条路,本册的口令:先问结构,再问策略,最后问它通向哪条定理。
★ 绪论小结:游戏与自由。
六页语感的账目。① 争胜:证明在结构上是一场对局,反证法是「让对手先走」(p3);② 规则:Hilbert 把数学定义为「按规则摆弄记号的游戏」,形式系统与游戏四要素逐条对应(p4);③ 自由:Conway 用 {L | R} 把数造出来,数学自由的三种形态(选公理、造对象、换视角)(p5);④ 判据:数学游戏的四条判据,与「益智」的分水岭在「策略能否被证明」(p6);⑤ 年表:赌博 → 概率、取子 → 代数、对局 → 公理三个转折(p7);⑥ 路线图:六章 + 综合站 + 四条准备知识(p8)。
本册的语法(四句话,先背下来)。① 「摆」:把游戏写成局面构成的有向图——棋盘先画出来,问题就看得见;② 「算」:给局面找一个不变量(异或、Grundy 值、期望、势函数),让胜负变成不变量的比较;③ 「化」:把局面化成标准形(等价类、规范形、数值),两个游戏同时进行就变成两个标准形相加;④ 「证」:任何判据都必须被证明对整个游戏类成立——这是本册与「益智书」的根本区别。
方法论预告(三条)。① 「先有限,再取极限」:组合博弈先假设局面有限,无限对局则交给公理(第五章);② 「换个对象看同一个问题」:同一个 Nim 在石子数、二进制向量、nimber、超现实数四个层面各有面貌,其中必有一层让答案显形;③ 「难度也是定理」:一个谜题「难」不是感觉,而是可被写成 NP-完全、PSPACE-难或不可判定的命题。
与相邻领域的握手。会发现:第一章的 Grundy 值正是那里「不变量与结构」思想的化身;在 Wythoff 游戏与 Beatty 序列里认出黄金比的老朋友;在第六章的博弈论里看到「不动点定理」的重现(Nash 均衡);在 Hex 的「不可能平局」里遇到 Jordan 曲线定理。同一批事实,换一种语言,就换一种力量——这正是本册反复要演示的事。
下一章预告。第一章「取子游戏与博弈的群结构」:从最简单的一堆石子开始,用二进制与异或算出 Nim 的胜负,把 P/N 位置画成一棵树,然后证明 Sprague–Grundy 定理——任何公平博弈都等价于一堆 Nim 石子,而它的「大小」可以算出来。
★ 本章从全世界最简单的游戏之一出发。Nim 的规则只有一句话:桌上若干堆石子(数目任意),两人轮流从任意一堆中取走任意正数颗石子,取走最后一颗石子的人获胜。它简单到可以在餐巾纸上玩,却完整地藏着一个代数结构——本章要把它挖出来,并顺着它走到组合博弈论的核心定理。
为什么从一个「幼稚」的游戏开始?因为 Nim 是公平组合博弈的原子:一九〇一年 Bouton 给出它的胜负判据(异或为零者必败),一九三九年前后 Sprague 与 Grundy 各自证明了一个惊人的一般结论——任何有限无平局的公平博弈,都等价于一堆大小确定的 Nim 石子。这个「大小」就是 Grundy 值。于是「谁会赢」这个看似要看遍全盘棋谱的问题,被压缩成了一次位运算。
本章的路线(见上图)。先备好两件工具:二进制与异或(p11)、P/N 位置与逆推(p13);然后用它们证明 Bouton 定理(p14)并看清它其实是二元域上的线性代数(p15)。接着做第一次抽象升级:把「两个游戏同时进行」定义成游戏的和(p16),引出 mex 与 Grundy 值(p17),证明 Sprague–Grundy 定理(p18–p19),并看到博弈的等价类构成一个交换群(p21)。最后用四个漂亮的应用收尾:竹节游戏(p20)、Chomp 与策略偷取(p22)、Wythoff 游戏与黄金比(p23)、对称与配对策略(p24)。
本章要建立的动作,将贯穿全书:① 把游戏画成有向图(局面是顶点,走法是边);② 给局面找一个不变量(异或、Grundy 值),使胜负变成不变量的比较;③ 把局面化成标准形(一堆等价大小的 Nim 石子),使「并行」变成「相加」。学会这三个动作,就掌握了组合博弈论的全部直觉。
★ 本章要用到的唯一工具是异或(exclusive or,记 ⊕)。它的定义简单到可以写进一行:两个二进制位相同则为 0,不同则为 1。把两个数写成二进制后逐位异或,就得到它们的异或。例如 5 = 101(2)、3 = 011(2),逐位异或得 110(2) = 6。
异或记成「无进位的加法」。普通加法在两位都是 1 时会进位(1 + 1 = 10(2)),而异或把进位直接丢掉(1 ⊕ 1 = 0)。丢掉进位之后,「加法」这个操作变得异常温顺:它满足交换律、结合律,每个元素自己是自己的逆元(a ⊕ a = 0),而 0 是单位元。用代数的话说:整数在异或下构成一个 ℤ2 上的向量空间——这正是本章定理「线性」味道的来源。
为什么异或会出现在 Nim 里?先记住一个直觉:异或度量的是「两个局面差在哪里」。若一堆石子被取走若干,它的二进制会变;异或恰好把这「变化」记录成一组「哪些位不同」的标记。在 Nim 中,胜负判据将恰好是「各堆石子数的异或是否为零」——「为零」意味着这些堆两两之间在每一位上都「配平」了,像一个完美的对称局面。而对称的局面,正是后手方最想看到的(p24 会把这个直觉讲透)。
三个必须练熟的运算事实(后面反复使用):① 异或的逆运算就是它自己:若 a ⊕ b = c,则 a = b ⊕ c——这条让「回零」的操作总可以实现;② 异或为 0 的一组数中,任何非空的子集的异或等于其余部分的异或——这条让对手无法破坏对称;③ 若一组数的异或非 0,则该组的最高位(最高那个 1)必出现在奇数个元素中——这条是 Bouton 定理证明的钥匙(p14)。
★ 规则。桌上有 n 堆石子,第 i 堆有 ai 颗。两位玩家轮流行动,每次必须从恰好一堆中取走至少一颗(可以取光整堆,但不可以跨堆取)。轮到谁时桌上已经没有石子,谁就输了——等价地说:取走最后一颗石子的人获胜。这就是 Nim(据说名字来自德语 nimm,「拿」)。
先玩两分钟,找找感觉。一堆石子:先手一次取光,必胜。两堆相等,比如 (4, 4):先手无论怎么取,后手只需在另一堆取同样多,就能保持两堆相等;最后后手取完最后一颗——两堆相等是必败位置。两堆不等,比如 (3, 4):先手把 4 那堆取成 3,局面变成 (3, 3) 交给对手——必胜走法就是「造出对称」。三堆呢?(1, 2, 3) 该往哪里走?(3, 4, 5) 呢?纯靠观察会越来越吃力——我们需要一个判据。
Nim 的三个特点,让它成为「原子游戏」。① 公平(impartial):双方可走的走法完全相同,规则不区分玩家;② 有限且无平局:石子总数每走一步严格减少,游戏必然在有限步内结束,且一定有一方无法行动(也就是输);③ 完全信息:局面公开,没有隐藏信息。凡是满足这三条的博弈(走法可相同、有限、无平局),本章称公平组合博弈。Sprague–Grundy 定理将说明:所有这样的游戏,胜负结构都不过是若干个「Nim 堆」的组合。
一个反直觉之处:堆的大小不重要,堆的「二进制形状」才重要。后面会看到,(1, 2, 3) 是必败位置,而 (1, 1, 1) 是必胜位置;(2, 2) 必败,而 (1, 2) 必胜。规律显然与数字的大小关系不大——这一切将由异或刻画。先把 (3, 4, 5) 这个「先手必胜」的例子放在这里:3 ⊕ 4 ⊕ 5 = 2 ≠ 0,必胜走法是把第三堆取成 3 ⊕ 4 = 7……等等,7 比 5 大,取不到;正确的算法在 p14 给出,那里会说明为什么「回零走法」总能存在(若不大于原堆就要换一堆算)。
★★ 判定博弈的第一步,是把「赢」这个动态概念换成一个静态标签。我们给每个局面两种标签:𝒫 位置(Previous player wins,上一位行动的玩家获胜,也就是「轮到谁走谁必败」)与 𝒩 位置(Next player wins,「轮到谁走谁必胜」)。终局(没有石子,无法行动)显然是 𝒫 位置——轮到的人无路可走,判负。
逆推三律(把标签从终局推回开局)。① 终局标 𝒫;② 若某局面能一步走到 𝒫,它标 𝒩(把必败的局面甩给对手);③ 若某局面所有走法都只能走进 𝒩,它标 𝒫(无论怎么走,对手都能赢)。这三条规则是自洽的:因为游戏有限且无平局,每个局面要么能一步入 𝒫(则它是 𝒩),要么所有后继都是 𝒩(则它是 𝒫),二者必居其一,绝不会出现「无法判定」的局面。
逆推法给出一个算法,但它通常太慢。对于 Nim,只要堆数或堆的大小稍大,局面数就爆炸(三堆各 30 颗就有 313 ≈ 3×104 个局面,实际游戏里动辄上亿)。我们需要的不是「算得出来」,而是一条闭式判据——一个像「异或是否为零」这样的公式,能立刻判定任意局面。这正是 Bouton 定理的价值:它把「逆推」换成了「按位异或」。
先看两堆的小表(下图)。把第 1 堆与第 2 堆的数目排成一张 5×5 的表,按逆推填标签:(0,0) 是 𝒫;任何能走到它的((0,1)、(1,0) 等)是 𝒩;再往上是……填完会看到对角线全是 𝒫,其余全是 𝒩——「两堆相等者必败」。用异或检验:a ⊕ b = 0 恰好等价于 a = b。表格与异或判据的吻合,是本章定理的第一个证据。
★★ Bouton 定理(1901)。在 Nim 中,局面 (a1, …, an) 是 𝒫 位置(轮到者必败)当且仅当 a1 ⊕ a2 ⊕ ⋯ ⊕ an = 0。换言之:各堆石子数的异或为零者必败,非零者必胜。
证明(两个方向,都只用「逆推三律」)。为叙述方便,记局面的值为 X = a1 ⊕ ⋯ ⊕ an。
方向一:若 X = 0,则任何合法走法之后 X ≠ 0。一次走法只改变一堆,设把 ai 改成 a'i < ai。新值 X' = X ⊕ ai ⊕ a'i = ai ⊕ a'i(用到 X = 0)。因为 ai ≠ a'i,所以这个异或非零。从零出发永远回不到零——终局(全零,X = 0)扮演了「陷阱」的角色:走进它的对手只能把非零局面交还出去。
方向二:若 X ≠ 0,则存在一步走法使 X = 0。设 X 的二进制中最高位的 1 在第 k 位(从 0 开始数)。因为异或的每一位等于「这一位为 1 的堆数的奇偶性」,所以有奇数个堆在第 k 位上是 1。取其中一个这样的堆,设它是 ai,令
a'i = ai ⊕ X
关键的两点:① a'i < ai——因为 X 的最高位是第 k 位,而 ai 在第 k 位上是 1,异或后这一位变 0、更高位不变,所以数值变小;② 把 ai 换成 a'i 后,新的异或为 X ⊕ ai ⊕ a'i = X ⊕ X = 0。于是任何非零局面都存在一步「回零走法」,且这一步合法(取走的石子数为正)。
合起来。终局异或为 0 且是 𝒫 位置;由方向一,异或为 0 的局面不可能走到异或为 0 的另一个局面,故它们「彼此隔离」;由方向二,异或非 0 的局面总能走到异或为 0。用逆推三律自终局反向归纳即得:异或为 0 ⟺ 𝒫 位置。◻
回头看 (3, 4, 5):3 ⊕ 4 ⊕ 5 = 010(2) = 2 ≠ 0,最高位是第 1 位(值 2),在第 1 位为 1 的堆是 3(011)与 5(101)——取 5:5 ⊕ 2 = 7 > 5 不合法;取 3:3 ⊕ 2 = 1 < 3 合法。必胜走法:把第一堆从 3 取成 1,得 (1, 4, 5)(验证 1 ⊕ 4 ⊕ 5 = 0 ✓)。
★★ Bouton 定理可以用线性代数的语言重写一遍,重写之后为什么它是「代数」而不是「窍门」就一目了然了。
把每个堆看成一个向量。设最大堆不超过 2m − 1,则每个 ai 可以写成 m 位二进制,也就是 ℤ2m 中的一个向量(在 ℤ2 里,1 + 1 = 0)。逐位异或恰好就是向量加法。于是 Bouton 定理变成一句话:局面是 𝒫 位置 ⟺ 全部堆向量之和为零向量。
「和为零」是一张对称性证书。在向量空间里,一组向量之和为零意味着它们「张成的部分互相抵消」——用扑克的比喻,就是这些堆的每一位上都有偶数(含零)次出现,形成完美的配对。这个视角下,后手的策略变得可以一句话说清:无论先手动哪一堆(在哪些位上做了改动),后手只需在「其余的堆」中补上同样的改动,就能把总和重新压回零;而方向二保证只要总和非零,就一定存在这样一处「补账」的位置(具体是哪一堆,由最高位决定)。「补账」在 ℤ2 里永远可行,因为每个元素都是自己的逆元。
线性代数的三个直接好处。① 判定是线性的:扫描一遍所有堆,累加异或即可,时间复杂度 O(n),与堆的数值大小无关;② 必胜走法可构造:算总和 X,找最高位、找该位为 1 的堆、把它改成 ai ⊕ X,O(n) 完成;③ 多种必胜走法可枚举:所有满足 a'i = ai ⊕ X < ai 的堆都是候选——这也是习题 1 的一部分。
一个警示。把 Nim 看成线性代数,意味着它的「结构」是线性结构;后面遇到的博弈若不再是线性的(如 Chomp、Wythoff),异或判据就失效,需要更一般的「Grundy 值」。但:Grundy 值理论的一般结论仍然说「每个博弈等价于一个 Nim 堆」——Nim 的线性结构,将成为一切公平博弈的「标准坐标」(p18)。
★★ 现在做本章最重要的一次抽象升级。Nim 之所以能被理论刻画,是因为它的局面有一个隐藏的加法结构:每一堆是一个独立的小游戏,整个 Nim 是这些小游戏「同时进行」的结果。把这一点形式化,就能把「多个游戏」变成一个「游戏」。
定义(游戏的和,disjunctive sum)。设 G、H 是两个公平博弈。它们的和 G + H 定义为一个新游戏:一个局面是「G 的一个局面」与「H 的一个局面」组成的有序对;轮到某人行动时,他必须选择其中一个游戏并走一步,另一个不动;谁无法行动(两个游戏都无法动)谁输。用石子的话说:桌上有两堆,但每次只许从一堆里取——这正是 Nim 的规则本身。
于是 Nim 获得了自己的身份。把「一堆 a 颗石子、每次取至少一颗」这个单人游戏记作 ∗a,则
Nim(a1, …, an) = ∗a1 + ∗a2 + ⋯ + ∗an
而 Bouton 定理说的是 𝒢(∗a) = a(一堆 a 的「值」就是 a),并且和的值等于值的异或:𝒢(G + H) = 𝒢(G) ⊕ 𝒢(H)。这条公式将在 p18 的定理中成为主角,它是「游戏的和 ↔ 数的加法」这座桥的最后一根梁。
为什么「和」的定义是自然的?因为它精确对应现实中的情形:一个棋盘上几个不互相干扰的区域(围棋终局的几块孤棋)、桌上几堆独立的石子、若干块互不相邻的多格骨牌——这些局部的走法互不影响,胜负却由它们共同决定。把局部抽象成游戏、把整体写成局部的和,是从「玩一个游戏」到「做一门理论」的第一步。下一节给每个游戏分配一个数(Grundy 值),加法规则就完全清楚了。
★★ 现在给每个公平博弈分配一个数——这就是 Grundy 值(也叫 nimber 值、nim-value)。它的定义只用到一个运算:mex。
定义(mex)。对任意非负整数集合 S,mex S 是最小的不属于 S 的非负整数。例如 mex{0,1,3} = 2、mex{1,2} = 0、mex{0,1,2} = 3、mex ∅ = 0(空集时最小缺席者是 0)。mex 是「找第一个缺口」的操作:把集合里的数从小到大排好,从 0 开始数,第一个没出现的数就是它。
定义(Grundy 值)。对游戏 G,
𝒢(G) = mex{ 𝒢(G′) : G′ 是 G 的一步后继 }
这是一条递归定义:要算 𝒢(G),先算出所有后继的 Grundy 值,再取 mex。因为游戏有限(走法使局面严格「下降」),递归会终止。终局(没有后继)的值是 mex ∅ = 0。
三条立刻可见的性质。① 𝒢(G) = 0 ⟺ G 是 𝒫 位置——因为「值非零」意味着后继中有值为 0 的(mex 的定义保证:若 k = mex S ≠ 0,则 0 ∈ S),而「值为零」意味着后继里没有 0;② 一堆 a 颗石子的 Grundy 值恰是 a:因为从 a 能走到 0, 1, …, a − 1,故 𝒢(∗a) = mex{0,1,…a−1} = a——这解释了 Bouton 定理里为什么「异或」是对的;③ Grundy 值可以重复出现:不同的博弈可以有相同的值,这正是下一节「等价」的基础。
把 Grundy 值当成「游戏的大小」。直觉上:值为 k 的游戏,在各种「组合」中表现出的作用和一堆 k 颗的 Nim 完全相同。下一节的 Sprague–Grundy 定理将把这句话变成精确的定理:在「和」的意义下,𝒢 值相等就是等价。
★★★ 组合博弈论的第一基本定理,由 Sprague(1935)与 Grundy(1939)各自独立证明。它的分量之重,值得反复读三遍。
定理(Sprague–Grundy)。设 G 是任意有限、无平局的公平博弈,𝒢(G) 是它的 Grundy 值。则对任意公平博弈 H:在「游戏的和」意义下,G 与「一堆 𝒢(G) 颗石子的 Nim」扮演完全相同的角色。特别地:
𝒢(G1 + G2 + ⋯ + Gn) = 𝒢(G1) ⊕ 𝒢(G2) ⊕ ⋯ ⊕ 𝒢(Gn)
读法一(胜负)。由它立刻得到本章反复用的判决:𝒢(G) = 0 ⟺ G 是 𝒫 位置。而「G 与一堆 0 颗等价」的另一面刻画更有名:G 是 𝒫 位置 ⟺ G + G 是 𝒫 位置——两个一模一样的游戏并排(后手总能镜像对手的走法,p24 会证明),谁也无法靠「自己的那一份」占便宜。于是「值相等」可以被定义为「差为零」,就像整数一样(p21 展开)。
读法二(计算)。要判断一个复杂博弈的和谁赢,只需:① 把整体拆成互不干扰的分量;② 对每个分量单独算 Grundy 值(分量局部小,递归可行);③ 把所有值异或起来:非零则先手必胜,为零则必败;④ 若要找必胜走法,则找一步使异或变 0 的走法(p14 的构造法在此通用)。「拆分 → 各自求值 → 异或」这三步,是组合博弈论的通用算法。
定理为什么配得上「第一基本定理」这个称号?因为它把「博弈」这个看起来无限丰富的对象类,压缩到了一个极简单的标准模型上:一堆 Nim 石子。凡有限的公平博弈——无论走法表多奇特(皇后的走法、骨牌的摆放、竹节的切断)——在加法的世界里都只是一个非负整数。这一节的证明放在下一页(p19),那里可以看到 mex 的两个漂亮性质如何撑起整座桥。
★★★ 证明分两步:先建立「Grundy 值为零 = 𝒫 位置」这条桥(引理 1),再建立「和的值 = 值的异或」(引理 2)。两条桥合起来,定理就成立了。
引理 1。对任意公平博弈 G:𝒢(G) = 0 ⟺ G 是 𝒫 位置。证明:对 G 的结构做良基归纳(对「局面的大小」,此处即博弈树的高度)。① 若 G 是终局,无后继,𝒢(G) = mex ∅ = 0,且终局正是 𝒫 位置(无路可走者负)——两边一致。② 若 G 有后继:由 mex 的定义,𝒢(G) = 0 等价于 0 ∉ {𝒢(G′)},即每个后继的值都非零;由归纳假设,这等价于「每个后继都不是 𝒫 位置」,即「所有走法都走向 𝒩 位置」——由逆推三律,这正是 𝒫 位置的刻画。◻
引理 2。对任意公平博弈 G、H:𝒢(G + H) = 𝒢(G) ⊕ 𝒢(H)。证明思路:记 x = 𝒢(G) ⊕ 𝒢(H)。需要验证两件事,才能用 mex 的定义下结论。
第一件:G + H 的任何后继的值都不等于 x。若走的是 G 这一边,走到 G′,新值是 𝒢(G′) ⊕ 𝒢(H)。若它等于 x = 𝒢(G) ⊕ 𝒢(H),两边同时异或 𝒢(H) 就得到 𝒢(G′) = 𝒢(G)——但这不可能,因为按 mex 的定义,G 的后继值集合里不含 𝒢(G) 本身(𝒢(G) = mex{…} 意味着它不在集合里)。同理走 H 那边也一样。所以 x 确实「缺席」,是待选的 mex 候选人。
第二件:任何小于 x 的非负整数 y,都能被某个后继取到。把 y 与 x 比较:取 y 中最高位(设为第 k 位)——在这位上 y < x 意味着 y 那位是 0、x 那位是 1。而 x 的第 k 位是 1 意味着 𝒢(G) 与 𝒢(H) 中恰有一个第 k 位为 1;设是 𝒢(G)(另一情形对称)。令 z = y ⊕ 𝒢(H),则 z 与 𝒢(G) 在第 k 位同为 1,且更高位相同(因为 y 与 x 在更高位一致),故 z < 𝒢(G) 在数值上成立……但要断言「z 是 G 的某个后继的值」,需要更细的论证(用 mex 的「小于者必出现」性质:若 k = mex S,则 0, 1, …, k−1 ∈ S)。严格的形式化留作习题(p31 挑战页给出完整版本)。
合起来。由引理 2 的两件事,mex{G+H 的后继值} = x,即 𝒢(G+H) = 𝒢(G) ⊕ 𝒢(H)。◻ 一般情形(n 个分量)由两两相加与异或的结合律归纳得到。特别注意这两个引理都没有用到 Nim 的任何特殊性——所以定理对一切公平博弈成立,这才有资格叫「第一基本定理」。
★★★ Sprague–Grundy 定理的威力在于:凡是能从局部拆开的博弈,都只需算局部的值。第一个漂亮的例子是竹节游戏(Green Hackenbush,由 Conway 命名并推广)。
规则。画一些绿色的线段(「竹枝」),每根线段的下端连在一个固定的「地面」上或连在别的线段上,形成一个连通的树状结构。两位玩家轮流切断一根绿线;被切断的线连同它上面连着的所有部分全部消失(掉到地上)。谁无法行动(没有绿线可切)谁输。
它是公平的(双方都能切任何一根线),有限(每步至少减少一根线),无平局——因此 Sprague–Grundy 定理适用,每个局面都有一个 Grundy 值。问题变成:怎么算?
单根「竹竿」(一条直线,n 节)的值是 n。用归纳:设 n 节竿的值为 vn。切最下面一节,整竿消失(得 0 节的局面,值 0);切第 k 节(从下往上数,k = 1, …, n),剩下的是下面 k − 1 节——因为切点以上全部落地。所以后继值集合是 {v0, v1, …, vn−1},mex 给出 vn = n。一根 n 节的竹竿 = 一堆 n 颗石子的 Nim。
树状结构要用「冒号原理」(colon principle):把挂在某个节点上的若干枝理解为一组并联的博弈——它们都依赖同一个「根」节点。可以证明:若某节点挂着的所有枝的 Grundy 值为 x1, …, xr,则这个节点连同它的枝整体等价于「把这些值按某种规则合并」的单枝(精确形式:合起来等价于一个值为「把各枝化为二进制后逐位做某种运算」的枝,对「并联」形(冒号)由 x1 ⊕ x2 ⊕ ⋯ 给出)。不必记住完整细节,记住方法论即可:把树拆成枝、把枝化成竿、把竿当成 Nim 堆。
第二个应用:Kayles(保龄球游戏)。一排 n 个瓶子,每人滚一次球,可击倒一个或相邻两个瓶子;击倒后那一段被断开,两侧成为两个独立的游戏。设 g(n) 为一排 n 个瓶子的值,则
g(n) = mex{ g(i) ⊕ g(n−1−i), g(j) ⊕ g(n−2−j) : 0 ≤ i, j }
(第一项对应「击倒一个」,把剩下分成左右两段;第二项对应「击倒两个」。)算出的数列(n = 0,1,2,…)是 0,1,2,3,1,4,3,2,1,4,2,6,4,1,2,7,…,它最终是周期的——这是组合博弈中的常见现象(证明周期性的方法叫「Guy–Smith 定理」,超出本册)。Kayles 展示了「拆分 + 递推 + mex」这套算法的典型用法。
★★★ Sprague–Grundy 定理有一个几乎自动的推论:公平博弈的等价类构成一个交换群。这是本章「群结构」标题的兑现处。
先把「等价」说清楚。定义 G ≡ H(读作「G 与 H 等价」)当且仅当「G + H 是 𝒫 位置」——直觉是「两局一起下,后手必胜,谁也占不到便宜」。由引理 2 立得:G ≡ H ⟺ 𝒢(G) = 𝒢(H)。于是等价类与「非负整数」(即 Grundy 值)一一对应。这些值在组合博弈论里有个专名:nimber。
三条群公理逐条验证。① 单位元:值 0 的类。凡 𝒢(G) = 0 的游戏(𝒫 位置)都等价于「空游戏」,即「什么都没有」,因为把它们加进任何博弈,只是把局面交给对手而改变不了胜负(想想「加一局必败的游戏」对全局的影响)。② 逆元:每个元素都是自己的逆元!因为 𝒢(G) ⊕ 𝒢(G) = 0,即 G + G ≡ 0——两个一模一样的博弈并排,后手必胜(镜像策略,p24)。③ 结合律与交换律:继承自「和」的定义与异或的代数性质(加法的顺序、结合方式不影响结果)。
由此得到一幅干净的图像。把每个公平博弈送到它的 Grundy 值,得到映射 𝒢:博弈(模等价)→ 非负整数(在异或下)。这是一个群同构——而且是「无穷维 ℤ2 向量空间」的语言:每个值都可以写成二进制串,串的每一位是一个「独立的方向」,异或就是逐位相加,平局就是零串。于是:
一切有限公平博弈 ≅ ⨁i≥0 ℤ2 (按二进制位分解)
这个结论有多强?它说:组合博弈论(公平、有限、无平局这一类)的分类问题被彻底解决了——每个博弈恰好属于一个等价类,类被一个非负整数标记,两个博弈的组合由加减(异或)给出。第一章的「群结构」标题至此兑现。当然,这只是「公平有限」这一狭小世界的胜利:一旦允许非公平(Left/Right 走法不同),等价类就不再由单个整数刻画,而是需要第二章的超现实数;一旦允许无限局,胜负判据又会反过来追问公理(第五章)。结构的边界,正是后续章节的起点。
★★ 并非所有公平博弈都能立刻算出 Grundy 值;有些博弈的完整分析至今仍是难题。Chomp 就是最著名的例子。
规则。一块 m × n 的巧克力(格子),两人轮流选一格「吃」掉——同时被吃掉的还有这一格右上方(含正上方与正右方)的所有格子(也就是保持「左上角的阶梯形」的矩形区域)。左下角那一格是毒药:谁被迫吃掉它谁输(等价地:谁吃掉最后一格毒药谁输)。
局面天然是一个「阶梯形状」(每行剩下的长度从下到上非增),所以局面不多也不少;即便如此,除了 1 × n(答案是先手取到只剩毒药)与少数小情形之外,没有已知的胜负判据——不知道 P 位置长什么样,不知道必胜走法怎么找。
但先手必胜是可以证明的。用一个漂亮的「不构造证明」:
策略偷取(strategy stealing)。假设(反证)后手有必胜策略 S。先手的第一步就吃左上角那一格——由于它右上方没有任何格子,这一手只吃掉一格,得到一个「除去左上角」的阶梯形局面。现在,后手必须走一步;无论他走什么,先手都可以照搬 S(把 S 当作自己的策略)。于是先手「偷」了后手的策略——但先手还有额外的一格已经吃掉了,局面只会对先手更有利(多吃不会被惩罚,因为目标是吃光、吃的越多越接近胜利)。矛盾。所以后手不可能有必胜策略,先手必胜。◻
这个证明的形状:它给出了「先手有必胜策略」的存在性,却完全没有给出这个策略是什么。这是组合博弈论中一类特殊的证明——存在性而不构造(non-constructive)。在 Nim 那里我们能算出一个必胜走法(异或),在 Chomp 这里我们只知道「有」,不知道「哪一个」。这类现象与逻辑中的「非构造性存在」是同一血脉:知道某物存在,却无法指出它。(第五章的「决定性 vs 选择公理」会把这个话题推到极致。)
策略偷取的适用条件(值得记住)。① 游戏是单调的:多吃/多走不会变差;② 存在一个「白吃一步」的开局走法(通常是最小的那一手);③ 对手的策略可以被照搬。凡是满足这三条的博弈,先手必胜都不需要看棋盘——一页纸就证明完。(有趣的是:策略偷取本身来自 Hex 游戏(p?第三章),Nash 在一九四八年的一篇笔记里用它证明了 Hex 的先手必胜。)
★★★ 现在换一个「规则稍强」的取子游戏。它会把一个让人意想不到的常数请进棋盘:黄金比。
Wythoff 游戏(1907)。两堆石子 (a, b),两人轮流行动,每一步可以:① 从任一单堆取走任意正数颗(Nim 的走法);或者 ② 从两堆各取走相同数目的颗数(+k, +k 型的对角线走法)。取走最后一颗者胜。这就好比把 Nim 与「对角线移动」合在一个棋盘上:在平面上的一枚棋子,可以向左、向下、或向左下(对角)移动任意步,到达 (0,0) 者胜。
P 位置长什么样?用逆推可以手算出前几个:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)…(按 a ≤ b 排列,交换亦同)。数列 an = 0, 1, 3, 4, 6, 8, 9, 11, … 与 bn = 0, 2, 5, 7, 10, 13, 15, 18, …。
定理(Wythoff,1907)。设 φ = (1 + √5)/2 ≈ 1.618 为黄金比,则 (a, b)(含顺序)是 𝒫 位置当且仅当它形如
(a, b) = (⌊nφ⌋, ⌊nφ2⌋) 或 (⌊nφ2⌋, ⌊nφ⌋),n = 0, 1, 2, …
为什么是黄金比?关键在一条「互补性」:𝒫 位置集合必须满足 ①(任意两个 𝒫 位置之间不能互相到达——否则前者就不是 𝒫)与 ②(任何非 𝒫 位置都能一步到达某个 𝒫 位置)。这两条逼迫 {an} 与 {bn} 成为两个互补的(即不交且并起来恰好是全体正整数)递增数列,且 bn − an = n。Beatty 定理(Rayleigh–Beatty)指出:两个形如 ⌊nα⌋、⌊nβ⌋ 的数列互补,当且仅当 1/α + 1/β = 1;结合 bn = an + n 可解出 α = φ。黄金比不是被设计师放进来的,它是「互补性」这条要求的唯一解。
Wythoff 游戏与第一章的理论关系。它不是「若干独立分量的和」(走法②把两堆绑在一起),所以不能直接用「各堆异或」。但它仍然是公平、有限、无平局的博弈,因而依然有 Grundy 值(不过是两堆的函数),依然服从 Sprague–Grundy 定理的框架——只是它的 𝒫 位置有了一个漂亮的闭式描述。它提醒我们:定理给出的是「存在一个坐标」,而算不算得出坐标,是另一回事。
★ 在引入 Grundy 值这套机器之前,人类对付博弈靠的是两种直觉:对称与配对。它们不但仍然有效,而且是理解本章定理的最佳入口。
对称策略。若局面由两块完全相同的部分组成(例如两堆石子相等、棋盘沿中轴镜像对称),则后手必胜:无论先手在其中一块上做什么,后手就在另一块的「镜像位置」做同样的事。关键的两点:① 镜像走法总是合法的(因为两块局面相同,先手能做后手也能做);② 后手永远不会先走到「无路可走」(每次轮到后手,先手刚动过,必有可镜像之处)。于是后手走完最后一步,先手面对空局判负。这就是「G + G 是 𝒫 位置」,也就是 p21 里「每个元素是自己的逆元」的游戏论含义。
配对策略。更一般地,我们不需要整个局面镜像对称,只需要能把「可动的对象」两两配对,使得:先手动掉某个对象后,后手总能在它的「伙伴」上找到一步相抵的走法。例如「一排 2n 枚硬币,每次可翻一枚或相邻两枚」这类游戏,把硬币两两配对(第 1、2 枚一对,第 3、4 枚一对…),后手总能用「伙伴」回应。配对策略的证明总比对称策略麻烦一点:必须验证「先手的每一步都不会破坏配对的可续性」——这一步是具体问题具体分析的。
与本章理论的联系。① 对称策略是「G + G ≡ 0」的直接演示;② Nim 中「两堆相等是 𝒫 位置」正是对称策略的特例;③ Wythoff 游戏的判据可以理解为「在斜对角线上寻找某种互补结构」;④ Chomp 的策略偷取(p22)本质上是一种「不对称的偷取」——它先手多做一手(吃掉左上角),把「对后手有利的对称」偷过来。⑤ 更深的联系:Erdős 与 Selfridge 的「策略偷取」、Hales–Jewett 与 Hex 的无平局定理(第三章)都依赖这一直觉。
一个反例提醒。不是所有看起来对称的局面都有对称策略。若对称的两部分之间存在「交叉走法」能同时影响两边(例如 Wythoff 的对角走法),镜像就不再可行——这正是 Wythoff 不能简单用对称策略解决的原因,也是它需要黄金比的原因。「看起来对称」与「在走法下真的对称」是两件事:后者要求对称性被整个走法系统保持。
★ 本章最想打破的一种思维习惯是:把「试出来的规律」当成判据。这在游戏研究里极其常见——有人试算了几十个 Nim 局面,发现「异或为 0 的似乎都输」,就宣称找到了窍门;有人在棋盘上找出一堆「必胜模式」,就写成攻略。这些做法在数学上的问题是:它们只是猜想,不是定理。
为什么统计归纳在博弈里格外危险?因为局面空间通常指数级增长:3 堆各 30 颗就有三万个局面,5 堆各 100 颗就有一百亿个。「试了前五十个都对」在数学上等于什么都没说——反例可能恰好藏在没试的那一格。历史上确有游戏被误判:许多「看起来有必胜策略」的局面在更大盘面上崩掉,其中有些(如 Chomp 的完整判据)至今无人解决。
定理的正确形态是三件事。① 全称陈述:对所有局面成立(「任意 n 堆,异或为 0 ⟺ 必败」);② 证明:给出逻辑链条,使反例在原则上不可能存在;③ 可操作:给出算法,能在有限时间内判定给定局面(最好还能给出必胜走法)。Bouton 定理三件事全都做到了:陈述是全称的,证明在 p14 给出,算法是 O(n) 的异或扫描。
另一个常见误读:把「存在必胜策略」误当成「知道必胜策略」。Chomp 是一个现成的例子(p22):我们证明了先手必胜,却不知道必胜走法是什么,对一般 m × n 至今无解。「证明存在」与「构造出来」是两件不同的事——数学中这类「非构造性存在」随处可见(第五章会看到它在公理层面的极端形态)。本册要培养的判断力是:分清「试出来的」与「证明了的」,也分清「存在」与「构造」。本章的真跑实验(p36)刻意把两件事并置:一边是蛮力逆推(笨但可靠,用它检查判据),一边是公式(快但需要证明)——两者对拍一致,才算真的相信了定理。
★★ 例题 1:Nim 的手算与必胜走法。下面三小题依次练习「判定」与「构造」两件事。
例 1-1(判定)。局面 (3, 4, 5),轮到先走,能赢吗?
解。算异或:3 = 011(2)、4 = 100(2)、5 = 101(2)。逐位:第 0 位 1⊕0⊕1 = 0,第 1 位 1⊕0⊕0 = 1,第 2 位 0⊕1⊕1 = 0。故 3⊕4⊕5 = 010(2) = 2 ≠ 0,先手必胜。
例 1-2(构造必胜走法)。承上,给出一步必胜走法。
解。先算 X = 2,最高位是第 1 位。在第 1 位为 1 的堆有:3 = 011(第 1 位 1)、5 = 101(第 1 位 0,不算)——等等,5 = 101 的第 1 位是 0,第 0 位是 1;4 = 100 第 1 位是 0。所以只有 3 在第 1 位为 1。把它改成 3 ⊕ 2 = 1,得到局面 (1, 4, 5)。验证:1⊕4⊕5 = 0 ✓,且 1 < 3 合法。必胜走法:把第一堆从 3 取成 1。(这个局面恰好只有这一步回零走法——实验页的蛮力枚举证实了这一点。)
例 1-3(多重回零走法)。局面 (7, 5, 2),求所有必胜走法。
解。7⊕5⊕2 = 111⊕101⊕010 = 000……算一下:7⊕5 = 2,2⊕2 = 0。异或为 0,这是必败局面——没有必胜走法(任何一步都会把非零局面交给对手)。这说明「先手必胜」不是普遍事实:判据必须每次都算。
例 1-4(把多堆当一个整体算)。局面 (1, 2, 3, 4, 5),判定并给出走法。
解。1⊕2 = 3,3⊕3 = 0,0⊕4 = 4,4⊕5 = 1。故 X = 1(最高位第 0 位),先手必胜。第 0 位为 1 的堆:1、3、5。逐一试算:1⊕1 = 0(把 1 取成 0,去掉整堆)→ 局面 (2,3,4,5),异或 2⊕3⊕4⊕5 = 0 ✓。必胜走法之一:取光第一堆。另外 3⊕1 = 2 < 3(把 3 取成 2)与 5⊕1 = 4 < 5(把 5 取成 4)也都是必胜走法——多重选择时,取「改动最大」的那一堆通常更利落,但数学上任何一步回零走法都同样必胜。
小结(手算的四步)。① 把每堆写成二进制(够用位数即可,挑最长的那堆定宽度);② 逐位异或,得 X;③ X = 0 则必败(此时应当把局面尽量往「难缠」里拖,因为对手若也懂判据就输,但万一对手失误……不,数学上输);④ X ≠ 0 则取 X 的最高位、在该位为 1 的堆中试 ai → ai ⊕ X,取到比原值小的那个即得回零走法。
练习(自己做)。① 判定 (2, 3)、(2, 2)、(1, 3, 4)、(6, 7, 1);② 对 (6, 5, 3) 给出全部必胜走法;③ 局面 (9, 8, 7, 6) 谁必胜?
★★★ 例题 2:算 Grundy 值(竹节与 Kayles)。这两个例子演示「拆分 + 递推 + mex」的完整流程。
例 2-1(单竿)。证明:一根 n 节竹竿的 Grundy 值等于 n。
解。对 n 归纳。切第 k 节(从下数,k = 1, …, n),剩下的恰好是下面 k − 1 节(上面全落地)。故后继值集合 S = {v0, …, vn−1}。由归纳假设 S = {0, 1, …, n − 1},于是 vn = mex S = n。◻(注意这个证明与 p17 的「一堆 a 颗石子)」是同一个论证——竹竿与 Nim 堆在数学上是同一个游戏。)
例 2-2(树状竹)。一根 3 节的主竿,在第二节处向上斜生一枝 2 节,求这个局面的 Grundy 值(只给思路)。
解。用「冒号原理」:挂在同一节点上的枝,可以被「合并」为一枝,其值由并联规则给出(对绿竹的冒号形,两个子枝的值 x, y 合起来等价于值为 x ⊕ y 的枝)。于是整个局面等价于:主竿 3 节 + 枝 2 节——把它们各当成 Nim 堆:3 ⊕ 2 = 1。局面值为 1,非零,先手(轮到的玩家)必胜;具体走法是把「值 1」消掉:在值为 3 的主竿上切到 2(3 ⊕ 1 = 2)。
例 2-3(Kayles 的递推)。用递推式算 g(0), …, g(6)。
解。递推:g(n) = mex{g(i) ⊕ g(n−1−i) : 0 ≤ i < n} ∪ {g(i) ⊕ g(n−2−i) : 0 ≤ i < n−1}。逐项:
g(0) = 0(无瓶可击);g(1) = mex{g(0)⊕g(0)} = mex{0} = 1;
g(2) = mex{g(0)⊕g(1), g(1)⊕g(0), g(0)⊕g(0)} = mex{1, 1, 0} = 2;
g(3) = mex{1⊕2, 0⊕0, 2⊕1, 0⊕1, 1⊕0} = mex{3, 0, 3, 1, 1} = 2……
等等——实验页给出的是 g(3) = 3。让我重算:n = 3。击倒一个瓶子:剩 (i, 2−i),i = 0,1,2 → 值 g(0)⊕g(2) = 0⊕2 = 2、g(1)⊕g(1) = 1⊕1 = 0、g(2)⊕g(0) = 2。击倒两个(相邻):剩 (i, 1−i),i = 0,1 → g(0)⊕g(1) = 1、g(1)⊕g(0) = 1。集合 {2, 0, 1},mex = 3 ✓。与真跑一致。继续可算 g(4) = 1、g(5) = 4、g(6) = 3。完整数列见实验页:0, 1, 2, 3, 1, 4, 3, 2, 1, 4, 2, 6, 4, …
要点。① 竹竿与 Nim 同构;② 树用冒号原理递归地「折平」;③ Kayles 这类「切分型」游戏用「枚举切点 + 左右异或」的递推,mex 收尾;④ 手算时务必与真跑或蛮力对拍——人最容易在 mex 上出错(把「最大值」当 mex,或漏掉某个切点)。
★★★ 例题 3:Wythoff 判据与对称局面的应用。
例 3-1(判定)。Wythoff 游戏中局面 (4, 11),谁必胜?
解。用公式:看 (a, b) 是否等于 (⌊nφ⌋, ⌊nφ2⌋)。注意 ⌊nφ2⌋ = ⌊nφ⌋ + n(因为 φ2 = φ + 1),故判据可写成「b − a = n 且 a = ⌊nφ⌋」。这里 b − a = 7,故需 n = 7,而 ⌊7φ⌋ = ⌊11.326⌋ = 11 ≠ 4——不是 𝒫 位置,先手(轮到者)必胜。
例 3-2(找走法)。承上,给出一步必胜走法。
解。要从 (4, 11) 走到某个 𝒫 位置。列出附近的 𝒫 位置:(3,5)、(4,7)、(6,10)、(8,13)。检查三种走法:① 删一堆(把某堆取空):(0, 11) 不是 𝒫(只有 (0,0) 是);② 单堆减少:把 11 减到 5 得 (4,5) 不是;减到 7 得 (4,7) ✓ —— 把第二堆从 11 取成 7 即可(取走 4 颗);③ 两堆各减同数:(4,11) → (3,10)? 不是 𝒫;→ (2,9)? 不是。(一般地,(4,11) 只有唯一一条通往 𝒫 的路——𝒫 位置的定义保证「每个非 𝒫 位置能到某个 𝒫,且只到唯一一个」。)
例 3-3(对称局面的判定)。一副 2n 张的牌,两人轮流拿牌,每次可拿 1 或 2 张,拿到最后一张者胜。谁必胜?
解。把牌分成 n 组、每组 2 张。配对策略:后手总在对手拿走一张时拿走同组另一张(若对手拿两张,那两张恰好可以同组——后手拿下一组的两张?不,对手拿了同一组的两张,后手就取另一组的两张?需仔细:配对法在这里更简单的形式是「每次取 3 的补数」——对手取 k 张,后手取 3 − k 张。因为每轮共取 3 张,只要 2n 是 3 的倍数,后手必胜;否则先手先取余数(2n mod 3 张)然后照此办理,先手必胜)。经验:凡「取子数目有上限」的游戏,先找「3 的补数」这类周期配对;它是配对策略最简的一次应用。
练习(自己做)。① 判定 (5, 8)、(9, 15)、(7, 12);② 一副 2n 张牌,每次可取 1–4 张,后手何时必胜?③ 若 Wythoff 游戏允许「两堆各取相同数」之外还允许「两堆之和取走任意多」——判据会变成什么?(提示:这是「删两堆中的任意部分」,答案为 a = b 的变形。)
★★ 习题 1:基础(异或、P/N、Grundy)。
1. 把下列数写成二进制并计算异或:6 ⊕ 9、12 ⊕ 10、15 ⊕ 7 ⊕ 8、1 ⊕ 2 ⊕ 4 ⊕ 8。提示:先把每个数写成不超过所需位数的二进制,再逐位比较「1 的个数是奇还是偶」。
2. 判定下列 Nim 局面的胜负(轮到者视角),并给出一步必胜走法(若必胜):(4, 4)、(1, 2)、(2, 3, 4)、(5, 6, 7)、(1, 1, 1)、(10, 10, 3)。
3. 证明:Nim 中「两堆相等」是 𝒫 位置。不依赖 Bouton 定理的对称策略直接证明(这是 p24 的手法)。
4. 证明:若 Nim 局面的异或为 0,则任何一步走法之后的异或都非 0。(这是 Bouton 定理的「方向一」,得细致一点。)
5. 计算 mex{2, 3, 5}、mex{0, 1, 2, 4, 5}、mex{1, 3, 5, 7}、mex{3}、mex ∅。
6. 从一堆 n 颗石子中每次可取 1、2 或 3 颗,取到最后者胜。求这个游戏的 Grundy 值 𝒢(n) 的公式,并指出 𝒫 位置的规律。递推算前几项,找周期(想想 4)。
7. 承上,若每次可取 1 至 k 颗,𝒫 位置是什么?与模 k + 1 有关。
8. 判定两堆 Nim 的 𝒫 位置集合,并说明它为何构成一条对角线。若把规则改为「两堆各取相同数(Wythoff)」或「两堆各取任意数但总数受限」,𝒫 位置会如何变形?
自检标准。能独立算出 1–5 题(含第 4 题的证明),说明已掌握本章前半;能独立完成 6–8,说明已理解「在 ⌈P 位置⌉ 上做逆推」的一般方法。
★★★ 习题 2:进阶(Sprague–Grundy、拆分、构造)。
9. 用 Sprague–Grundy 定理计算:两堆各 3 颗石子的 Nim 与一个「3 节竹竿 + 5 节竹竿」的竹节游戏并行(即四个分量同时进行:3、3、3、5),谁必胜?给出一组必胜走法。
10. 证明引理:「若 k = mex S,则 0, 1, …, k − 1 ∈ S 而 k ∉ S」。然后用它补全 p19 引理 2 的第二件事(「任何小于 x 的数都能被某个后继取到」)中略去的那一步论证。
11. 「减法游戏」:给定集合 S = {1, 3, 4},从一堆 n 颗中每次取 S 中的一个数目,取到最后者胜。求 𝒢(0..14),并指出是否为周期数列。
12. Mock Turtles / Ruler 游戏:从一堆 n 颗中每次取「任意 2 的幂次」颗(1, 2, 4, 8, …),取到最后者胜。猜并用递推验证 𝒢(n) 的公式。试 n = 0…10,看它是否等于 n 模 3 的某种函数。
13. Chomp 的 1×n 情形(一排 n 格的巧克力,毒药在最左):证明先手必胜(n ≥ 2)并给出必胜走法。
14. 用「策略偷取」证明:若一个博弈满足 ① 单调(多吃不亏)、② 存在「白吃一步」的最小开局走法,则先手必胜。指出 Chomp、Hex(第三章)各如何满足这两条。
15. Wythoff 游戏:证明两个 𝒫 位置之间不能互相到达(即「𝒫 位置集合是独立的」)。对「两堆各减同数」用差 b − a 不变,对「单堆减少」用差改变。
16. 用 Beatty 定理(⌊nα⌋ 与 ⌊nβ⌋ 互补 ⟺ 1/α + 1/β = 1)推导 Wythoff 判据中 α = φ。(提示:结合 bn − an = n。)
自检标准。第 10 题能把引理 2 的证明补完整,是本章的技术门槛;第 16 题能从互补性推出黄金比,是本章的美学门槛。两题都做完,第一章就算通了。
本章的概念网络可以读成三条链(见下图)。
链一(判定链)。游戏 → 有向图 → 𝒫/𝒩 标签 → 逆推三律 → 需要闭式判据 → Bouton 定理(异或为 0)。这条链回答「谁赢」。
链二(估值链)。局面 → Grundy 值(mex 递归)→ 游戏的和 → Sprague–Grundy 定理(和的值 = 值的异或)。这条链回答「怎么把一个游戏折算成数」。
链三(结构链)。值 → 等价类 → nimber → 交换群(ℤ2 无穷直和)→ 分类完成。这条链回答「博弈的世界长什么样」。
三个动作的对应关系。① 画图(链一):把局面与走法画成有向图,是一切分析的起点;② 找不变量(链一、二的交汇):异或、Grundy 值都是「在走法下按规则变化」的量,胜负由它是否为零决定;③ 化标准形(链三):把一个游戏换成它的 Grundy 值,就把它送进了加法群——此后「并行」变成「相加」。
本章边界(重要)。本章的全部结论都建立在三个假设上:公平(双方走法相同)、有限(局数有界)、无平局。一旦破坏其中任意一条,理论就要升级:非公平 → 需要方向(Left/Right)与超现实数(第二章);含随机 → 需要期望与混合策略(第四章);无限 → 需要公理(第五章)。把边界记清楚,比记结论更重要。
★★ 小结(一):局面即结构。
正面清单。① 公平组合博弈的三个特征:双方走法相同、有限、无平局(p12);② 局面图:顶点是局面、边是合法走法,游戏 = 图上的行走;③ 𝒫/𝒩 位置:终局是 𝒫;能一步到 𝒫 的是 𝒩;所有走法都到 𝒩 的是 𝒫(逆推三律);④ Nim 的规则与三个特点;⑤ Bouton 定理:异或为 0 ⟺ 必败,双向证明齐全;⑥ 异或的代数:ℤ2 上的无进位加法,线性结构;⑦ 游戏的和:G + H 每次只动一个分量,Nim 是单堆游戏之和;⑧ mex 与 Grundy 值的递归定义;⑨ Sprague–Grundy 定理:一切有限公平博弈 ≅ 一堆 Nim;⑩ 等价类构成交换群(nimber)。
易错清单(每条都来自真实的手算事故)。① 把「异或为 0」记成「石子数的和为零」——完全无关,异或是按位运算;② 把「必败位置」理解成「一定输给任何人」——它只说明「若对手懂判据,必输」,对手失误时当然还能赢;③ 忘了「取最后一颗者胜」意味着终局是 𝒫——若改为「取最后者输(misère play)」,Bouton 判据会变(只多一条例外规则,见习题);④ 把 mex 当成 max——mex 是「最小的缺席者」,mex{0,1,2} = 3 而不是 2;⑤ 用「堆的大小」直觉判断——数字大小与胜负无关((1,2,3) 必败而 (3,4,5) 必胜);⑥ 把「两个游戏和的值」算成「值的和」——是异或,不是加;⑦ 在「非公平」或「含随机」的游戏上误用本章结论——边界之外要换工具。
一句话的总结。本章把「谁会赢」这个问题从「看棋盘」搬到了「算不变量」——局面是结构,胜负是结构上的一个函数(值是否为零)。这是组合博弈论的第一课,也是后续所有内容的模板。
★★★ 小结(二):把局面化成数。
算法清单(遇到任何有限公平博弈时的标准流程)。① 拆:把整体分成互不干扰的分量(若不能拆,跳过此步,直接对整体求值);② 求值:对每个分量递归算 Grundy 值(mex 后继值集合);③ 合并:把所有值异或起来;④ 判决:异或为 0 则轮到者必败,非 0 则必胜;⑤ 构造:若必胜,找一步使异或变 0 的走法(在某分量上按「最高位」规则改动)。
三个本类游戏的「值工具箱」。① 取子型(一堆 n 颗,可取的数目属于集合 S):𝒢(n) = mex{𝒢(n − s) : s ∈ S, s ≤ n},通常最终周期化;② 切分型(Kayles、Dawson's Kayles、多米诺摆放):枚举切点,左右两段的值异或后取 mex;③ 树型(Green Hackenbush):单竿值 = 节数,树用冒号原理递归折平。
「化成数」这件事的意义,怎么强调都不过分。它有两个层次。第一层是技术:算一个数比记一张胜负表容易得多,运算(异或)也比「模拟对局」快得多。第二层是结构:一旦局面被化成数,两个游戏「同时进行」就变成了两个数「相加」,而「谁赢」变成了「和是否为零」——博弈论被翻译成了算术。这正是本册主线的第一个范式:换一种描述,让困难变成简单。
下一章的动机。本章的「值」是非负整数,只能表达「公平博弈」这一狭小世界。若允许左右双方走法不同(例如国际象棋里白方与黑方走法不同、围棋里的先手优势),等价类不再是整数,而需要一个更丰富的数值系统——在这个系统里,「小于零」「等于零」「大于零」分别对应「右方必胜」「先手必败」「左方必胜」,而每个游戏都能被赋予一个「数」。Conway 造出的正是这个系统:超现实数。第二章将走进它——并证明本章的 Grundy 值只是它的一小片影子。
本章真正的技术革命不是异或,而是「值」这个念头。我们没有去找必胜走法的清单(那是无穷无尽的),而是给每个局面分配一个数,并证明「胜负 ⟺ 值是否为零」。
这个念头的力量在于可组合性:值一旦被定义,两个游戏并列就变成两个数相加,整体胜负由一次加法决定。于是「指数级的局面空间」被压缩成「一次算术」——这就是所有「不变量方法」的共同形状:找一个在运动下按规则变化的量,让终极问题变成关于这个量的简单问题。
把它与数学史对照:Descartes 用坐标把几何变成方程;Noether 用不变量把对称变成守恒量;信息论用熵把「不确定性」变成一个数。本章的 Grundy 值就是这套思想在博弈上的第一次亮相——而且是最干净的一次:值与胜负的关系不需要任何额外假设,因为它就是由「胜负」递归定义的。
一个提醒:值能回答「谁赢」,却不能回答「赢几步」或「赢得漂亮不漂亮」。值论是存在性的,不是策略论的全部。知道「我会赢」与「知道怎么赢」,本章第一次把两者的差距摆在了桌面上(Chomp)。
— 第一章 · 思想卡
延伸思考(三问)。① 如果给每个局面分配的不是数而是一个向量或矩阵,「胜负 = 值为零」这个框架还成立吗?(提示:想一想「和」的运算是否还有交换、结合、可逆三性。)② 若游戏允许平局,𝒫/𝒩 二分就不够了——需要第三种标签(第三章的 Hex 无平局定理正是一条「消灭平局」的定理)。③ 若游戏允许无限对局,「值」还定义得出来吗?(第五章会看到,答案与公理的选择有关。)
★★★★ 挑战 1:完整证明 Sprague–Grundy 定理。p19 的证明在引理 2 的第二件事上「略过了一步」——现在把它补完。按下面的规范写作。
第一步(良定义)。对游戏的博弈树高度做良基归纳:终局高度 0,其余 h(G) = 1 + max{h(G′)}。证明 𝒢(G) 只依赖 G 的后继的值集合,故归纳良定义。说明为什么「公平 + 有限 + 无平局」保证高度有限。
第二步(引理 1 的双向)。① 若 𝒢(G) = 0:由 mex 定义,0 ∉ {𝒢(G′)},故所有后继值非零;由归纳假设,后继都不是 𝒫(都是 𝒩),由逆推三律 G 是 𝒫。② 若 𝒢(G) ≠ 0:设 k = 𝒢(G),由 mex 的第二条性质 0 ∈ {𝒢(G′)}(因为 0 < k 必出现),即存在后继值 0,由归纳假设该后继是 𝒫,故 G 是 𝒩。◻
第三步(引理 2,含被省略的那一步)。记 x = 𝒢(G) ⊕ 𝒢(H)。要证 mex{𝒢(G+H 的后继)} = x,需两件事。
(a) x 不在后继值集合中。p19 已证(用「𝒢(G) ∉ {𝒢(G′)}」与异或可逆)。
(b) 每个 0 ≤ y < x 都在后继值集合中。取 y,令 k 为 x ⊕ y 的最高位;则 x 与 y 在第 k 位不同。分两种情形(这正是被省略的那一步):
情形 1:𝒢(G) 在第 k 位为 1。令 g′ = y ⊕ 𝒢(H)。可验证 g′ < 𝒢(G)(比较最高不同位)。由 mex 性质 (ii),g′ ∈ {𝒢(G′)},即存在 G′ 使 𝒢(G′) = g′。于是在 G + H 中走 G → G′,得到值 g′ ⊕ 𝒢(H) = y ✓。
情形 2:𝒢(H) 在第 k 位为 1。对称地取 H′ 使 𝒢(H′) = y ⊕ 𝒢(G),在 H 上走一步即得值 y ✓。
由 (a)(b),mex{…} = x,即 𝒢(G+H) = x。◻
挑战 2(选做):形式化策略偷取。精确定义「单调博弈」(每个局面的「资源集合」在走法下单调不减地减少,且多吃一步不会使任何走法失效),然后证明:单调 + 存在「最小白吃步」⟹ 先手必胜。指出 Chomp 的「吃左上角」为什么是白吃步,以及为什么 Hex(第三章)也满足(在那里「白吃」表现为多占一个对自己无害的格子)。
挑战 3(研究型):misère Nim。把「取最后者胜」改成「取最后者输」(misère play),Bouton 判据如何修改?算几个小局面找出规律,再查阅文献(Bouton 1901 之后的经典结果),并写出完整判据与证明思路。
★★ 实验:Grundy 值求解器真跑(对拍验证)。本节的所有数字都来自本地脚本 p36_lab.py(纯 Python 标准库),输出存于 qa/p36_out.txt,可自行复算。
实验一:Nim 的异或判据 vs 蛮力逆推。蛮力:把每个局面标记为「轮到者必胜/必败」,用备忘录化的逆推(枚举所有走法)。对拍范围:1–4 堆、每堆不超过 8 颗。
① Nim:异或判据 vs 蛮力逆推 对拍局面数 = 710(1–4 堆,每堆 ≤ 8) 判据不符数 = 0 全一致 ✓ (3,4,5):xor = 345 = 2 → 先手必胜?蛮力:True 回零走法(把某堆 a 取到 a'):[(3, 1, (1, 4, 5))]
两件事值得注意:① 710 个局面零例外——判据与蛮力逐条一致,这是对 Bouton 定理的独立检验;② (3,4,5) 的回零走法只有一个(把 3 改成 1),与 p26 手算一致——「必胜走法可能有多个,也可能只有一个」。
实验二:Wythoff 的黄金比判据 vs 蛮力。
② Wythoff:黄金比判据 vs 蛮力逆推 对拍局面数 = 496(0 ≤ a ≤ b ≤ 30) 判据不符数 = 0 全一致 ✓ P 位置(前 10 个)= [(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20),(14,23)] (⌊nφ⌋,⌊nφ2⌋) 前 8 个 = [(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18)]
可见「𝒫 位置 = (⌊nφ⌋, ⌊nφ2⌋)」在小范围内完全正确,且这些点互不相同、也不共线——这正是 p23 所说的「互补性」的数值影子。
实验三:Kayles 的 Grundy 数列。
③ Kayles 的 Grundy 数列(递推 mex) g(0..24) = [0,1,2,3,1,4,3,2,1,4,2,6,4,1,2,7,1,4,3,2,1,4,6,7,4] 未出现的值(0–8 中): [5, 8] 前 24 项的最大值 = 7 ;取到的不同值 = [0,1,2,3,4,6,7]
数列 0,1,2,3,1,4,3,2,1,4,2,6,4,… 与教科书一致。它最终是周期的(周期 12,从 n = 71 起),前 24 项还看不出周期——这也是「不能靠前几项猜规律」的实例。
实验四:Chomp 小棋盘的蛮力 P/N。
④ Chomp 小棋盘的蛮力 P/N(m 行 n 列) 行\列 1 2 3 4 5 6 1 先手败 先手胜 先手胜 先手胜 先手胜 先手胜 2 先手胜 先手胜 先手胜 先手胜 先手胜 先手胜 3 先手胜 先手胜 先手胜 先手胜 先手胜 先手胜 4 先手胜 先手胜 先手胜 先手胜 先手胜 先手胜 5 先手胜 先手胜 先手胜 先手胜 先手胜 先手胜 6 先手胜 先手胜 先手胜 先手胜 先手胜 先手胜 除 1×1 外,全部 m,n ∈ [1,6] 的先手是否必胜?True
数值证据与策略偷取的证明一致:除 1×1(先手被迫吃毒药)之外,所有 m × n 的 Chomp 都是先手必胜——但仔细:表格里只写了「先手胜」,没有写「怎么胜」。这正是 p22 强调的:证明给出存在性,不给出构造。
四个实验的共同结论。① 判据(异或、黄金比)与蛮力逆推逐条一致,说明定理不是巧合;② Grundy 递推给出可见的数列,且数列的规律性(周期性)需要小心对待;③ 「存在必胜策略」与「知道必胜走法」是两件事(Chomp 是活证据)。本册所有实验页都遵循同一格式:可复算的脚本 + 可核对的输出 + 与理论的对拍。自己动手跑一遍——「跑过」与「读过」在数学上差别巨大。
本章讲的「取子游戏」,在中国古代有两支近亲:一支是算法化的「术」,一支是棋戏化的「势」。
先说「术」。《九章算术》的写法是「术曰:……」,每一条「术」都是一串可以照着做的动作:把某数写在某位、以某数乘之、以某数除之、以余数为答。这种「程序化」的写作与本章的游戏规则在结构上完全一致——规则给出一串允许的动作,玩家照着走即可。事实上很多中算题目本身就是游戏:把一堆物按规则分配、合并、取余,答案就是终局。「术」是中国数学最早的游戏说明书。
再说「势」。围棋与六博的传统孕育了另一套语汇:「先手」「后手」「势」「劫」「气」。《棋经十三篇》里「宁输数子,勿失一先」正是本章「先手优势」的直觉表达;而「势」相当于本章的局面值——棋手凭经验给局面估一个「价值」,判据则是「谁的价值占优」。棋手数千年用直觉做的事,本章把它变成了一个可计算的不变量。孙武「凡战者,以正合,以奇胜」同样可以读成策略分层:正兵是「保证不输的对称走法」(𝒫 位置思维),奇兵是「抓住对手失误的一击」(𝒩 位置思维)。
两支线索的差别值得琢磨。中算传统更早写出了算法(《九章》的「术」是真正的程序),却在「对所有局面都成立」的普遍性证明上投入较少;古希腊传统恰好相反——Euclid 的每个命题都要「对所有情形」成立,为此发明了公理与演绎。(这不是优劣,而是两种文化的数学取向。)本章的内容恰好是两者的合流:Nim 的判据既是一条「术」(O(n) 可执行的算法),又是一条定理(对一切局面成立的证明)。
一个具体的中算游戏:约瑟夫问题。「今有围兵,从某处数起,每数至 k 者出列,问何处可生」——这是中国古代算书与印度数学里反复出现的题目,本质是「报数淘汰」游戏。它的解法(递推 J(n) = (J(n−1) + k) mod n)正是本章「递推 + mex/取模」手法的东方版本——用递推把大局面化归为小局面,是两种传统共有的核心技巧。(这个游戏在第三章与第五章还会以不同面貌出现。)
★ 速查:第一章概念与公式。
一、记号。𝒫 位置(Previous player wins,轮到者必败);𝒩 位置(Next player wins,轮到者必胜);⊕ 异或;𝒢(G) Grundy 值;G + H 游戏的和;mex S 最小缺席非负整数;∗a 一堆 a 颗的取子游戏。
二、定义。① 公平组合博弈:双方走法相同、有限、无平局;② 局面图:顶点 = 局面、边 = 合法走法;③ 逆推三律:终局 𝒫;能到 𝒫 者为 𝒩;后继全 𝒩 者为 𝒫;④ 𝒢(G) = mex{𝒢(G′)};⑤ G ≡ H ⟺ 𝒢(G) = 𝒢(H) ⟺ G+H 是 𝒫 位置。
三、核心定理。① Bouton 定理:Nim 中 a1 ⊕ ⋯ ⊕ an = 0 ⟺ 𝒫 位置;② Sprague–Grundy 定理:𝒢(G1 + ⋯ + Gn) = 𝒢(G1) ⊕ ⋯ ⊕ 𝒢(Gn);任何有限公平博弈 ≅ 一堆 Nim;③ Wythoff 判据:𝒫 位置 = (⌊nφ⌋, ⌊nφ2⌋);④ 对称/配对策略:G + G 是 𝒫 位置;⑤ 策略偷取:单调 + 白吃步 ⟹ 先手必胜(存在性)。
四、算法。判定 O(n):累异或;构造 O(n):取 X 最高位 → 找该位为 1 的堆 → 改成 ai ⊕ X;求值:递归 mex(或递推 + 找周期)。
五、常用恒等式。a ⊕ a = 0;a ⊕ b = c ⟹ a = b ⊕ c;𝒢(∗a) = a;mex{0,1,…m−1} = m;若 k = mex S 则 {0,…k−1} ⊆ S, k ∉ S。
六、典型数值(实验真跑)。Nim 对拍 710 局面零例外;Wythoff 对拍 496 局面零例外;Kayles g(0..24) = 0,1,2,3,1,4,3,2,1,4,2,6,4,1,2,7,1,4,3,2,1,4,6,7,4;Chomp 除 1×1 外全先手胜。
七、三个动作。画图(局面 → 有向图)· 找不变量(异或、Grundy 值)· 化标准形(局面 → 数 → 加法群)。
★★ 第二章预告:数即游戏。
本章留下的最大悬念。我们把每个公平博弈折算成一个非负整数(Grundy 值),并证明了「和 = 异或」。但回头看这个框架的一个缺口:它只处理「公平」博弈——双方走法完全相同。一旦左右双方走法不同(围棋里先手优势、象棋里白黑走法不同、博弈论里的「零和矩阵博弈」),整数就不够用了:我们需要能表达「左方有利」与「右方有利」的量,而且这两个量必须能相加减、能比较大小。
Conway 的回答。他把「博弈」本身当成数:一个博弈写成 G = {L | R},其中 L 是左方能走到的局面集合、R 是右方能走到的集合。若左方的每个选择都优于右方的每个选择(形式地说:L 中任何元素都不大于 R 中任何元素),则 {L | R} 是一个数;否则它是一个「非数的游戏」。从这个定义出发:
0 = { | } 1 = {0 | } −1 = { | 0} ½ = {0 | 1} 2 = {1 | } ω = {0,1,2,… | }
整数、二进分数、实数、无穷大与无穷小都从「生日」归纳中生长出来,这就是超现实数(surreal numbers)。
第二章要完成的四件事。① 构造:定义 {L | R}、生日、序与加法,证明「数类」构成一个全序域;② 嵌入:把实数嵌入超现实数,看清 ½、1/3、√2、π 各自是「第几天」被造出来的;③ 非数的游戏:∗ = {0 | 0}(先手必胜的中立局面)、↑ = {0 | ∗},它们与任何数都「不可比」(fuzzy)——第一章的 Nim 值(nimber)正是这些非数游戏的化身,本章将把这条线索接回去;④ 合流:证明对公平博弈而言,「超现实数意义下的值和」与「Grundy 值的异或」说的是同一件事的两面。
带着三个问题进入第二章:① 为什么 {0 | 1} 一定是 ½,而不是「某个全新的数」?② 若 L 中有元素不小于 R 中元素(「左右打架」),{L | R} 是什么?③ 「所有数都是游戏」这句话,反过来对游戏成立吗——每个游戏都是一个数吗?(答案:不,∗ 就不是数。而这正是第二章最让人兴奋的地方。)
一个预告性的比喻。第一章我们学会了「把游戏算成数」;第二章我们要学「把数看成游戏」。视角翻转之后,算术本身变成了博弈论的一个特例——「1 + 1 = 2」将被读成「两个必胜的半步相叠,得到一个更大的必胜」。这不是比喻,而是一条定理。
★ 第一章的胜利有一个隐藏前提:博弈必须是公平的——双方可走的走法完全相同。正因为公平,每个局面才能折算成一个非负整数(Grundy 值),而「两盘棋同时下」才变成「两个数异或」。现在把这条假设拿掉:若左方与右方的可走法不同(象棋里白黑走法不同、围棋里的先手优势、矩阵博弈里行与列不对称),整数就不够用了——我们需要一个能同时表达「左方有利」与「右方有利」、并且可以相加减、比大小的数值系统。
Conway 的答案大胆到近乎鲁莽:把「游戏」本身定义成数。一个博弈写成 G = {L | R},L 是左方能走到的局面之集、R 是右方能走到的局面之集;两个博弈的「并行」定义成加法(每次只动一边)。从这一个记号出发,Conway 造出了 0 = { | }、1 = {0 | }、½ = {0 | 1},进而造出全部整数、二进分数、实数、序数,甚至比实数还多——这就是超现实数(surreal numbers)。
本章的路线(见下图)。先用 p41–p43 立起三块砖:游戏的形式定义 {L | R}、序与等价的递归定义、加法与负元。接着用 p44 的「数的判据」(每个左元素都小于每个右元素)把「游戏」分成「数」与「非数游戏」两类,用 p45 的「生日」给构造排出时间轴,然后在 p46–p48 一天天把 0, ±1, ±2, ±½, ±¼, ±¾, ±3/2 造出来。p49–p51 证明这些数构成全序域(比较、加法群、乘法),p52–p53 把实数与超限数 ω、1/ω 嵌进来,最后 p54 遇见本章另一半主角——不是数的游戏 ∗ = {0 | 0} 与 ↑ = {0 | ∗},它们正是第一章 nimber 的化身。
本章要交出的支票只有一张:「数」不再是被给予的神秘对象,而是从游戏规则里被造出来的东西;「1 + 1 = 2」将被读成「两个半步之胜相叠」。这不是比喻,而是一条可以证明的定理。
★★ 定义(游戏)。一个游戏 G 是一对集合 G = {L | R},其中 L、R 中的每个元素本身也是一个游戏(分别称为 G 的左选项与右选项)。轮到左方行动时,他从 L 中挑一个作为新局面;轮到右方行动时,从 R 中挑一个。若轮到某人而对应的集合为空,他无路可走,判负——这就是「正常玩法」(normal play)。
两个直觉要点。① L 与 R 是「选择」,不是「后果」:它们记录「如果轮到左方,他能把局面变成哪些样子」。② 左右不必对称:L 与 R 可以完全不同,这正是第一章「公平博弈」(L 与 R 结构相同)之外的新天地。
从空集开始。最简的游戏是 { | }:左右都无可选项。谁轮到它谁就输——因此它天然扮演「零」的角色,记作 0。再往前一步:{0 | } 表示「左方能走到 0(把「轮到就输」的局面甩给右方),右方无路可走」——这是一个对左方有利的游戏,记作 1。对称地 { | 0} = −1。接受这个记号,p46 会严格证明它们确实是数。
为什么用「集合」而不是「单个局面」?因为一个局面下左方常有多条走法(例如象棋里十几种着法)。把这些着法统统收进一个集合,既保留全部信息,又让「一个游戏」保持为一个对象——这是 Conway 构造的关键设计:用集合的整体而不是逐个走法来刻画局面。有了它,p42 才敢把「比较」与「相加」也递归地定义在集合上。
★★★ 定义了对象,下一步是定义比较。对游戏而言,「G ≤ H」的直觉是:在 G 里站在左方,不会比在 H 里更差。但这句话不能直接用(「更好」是什么?),于是 Conway 把比较递归地定义在选项上:
G ≤ H ⟺ 不存在 GL ≥ H 且 不存在 HR ≤ G
读法。要判断 G ≤ H,只需排除两种「反例」:① G 的某个左选项已经 ≥ H(说明左方在 G 里有比 H 更好的选择,「G 不超过 H」就不可信);② H 的某个右选项 ≤ G(右方在 H 里有比 G 更差的选择,同理)。两种反例都不存在,才记 G ≤ H。式中的 ≥、≤ 又用到定义本身——这是一个递归定义,其合法性由「选项的生日更小」保证(p45)。
由 ≤ 派生的三个概念。① 相等:G = H 当且仅当 G ≤ H 且 H ≤ G。注意这是游戏的相等,不是「长得一样」——{ | } 与 {−1 | 1} 形状不同却相等(都等于 0)。② 严格小于:G < H 当且仅当 G ≤ H 且 H ≰ G。③ 模糊:G ‖ H 当且仅当既不 G ≤ H,也不 H ≤ G——单凭「≤」一个关系就同时造出了「相等」「小于」和「不可比」三种情形。
一个立刻的例子。0 = { | }、1 = {0 | }。验证 0 ≤ 1:0 没有左选项(反例①不存在),1 没有右选项(反例②不存在)——故 0 ≤ 1 成立。再验证 1 ≤ 0:1 的左选项是 0,而 0 ≥ 0 成立,正好是反例——故 1 ≤ 0 不成立。于是 0 < 1,与直觉一致。整章的证明都要用这个「查反例」的动作。
★★★ 定义(和)。两个游戏 G = {GL | GR}、H = {HL | HR} 的和为
G + H = { GL + H, G + HL | GR + H, G + HR }
它的现实含义是「两盘棋同时进行」:左方的每一步,要么在左盘上走(得到 GL + H),要么在右盘上走(得到 G + HL);右方同理。这正是一章「游戏的和」(p16)的推广——只是现在左右走法可以不同。
定义(负元)。−G = { −GR | −GL }:把左右两个集合对调,再把每个选项取负。直观上这就是「把棋盘换个方向坐」:原来左方能做的,现在都归右方做。负元是把「左方优势」翻转成「右方优势」的开关。
两条基本律(都可对生日归纳证明)。① 交换律:G + H = H + G——因为定义中「GL + H」与「H + GL」在归纳假设下相等,逐个选项配对即可。② 结合律:(G + H) + K = G + (H + K)——同理逐项展开、配对。证明的模式是统一的:把要证的等式两边都展开成 {… | …},再对选项逐个用归纳假设,最后比较选项集合是否相等。
一个方便的直觉。先把每个游戏想成「一张有向图上的棋子」;加法就是把若干棋子放在各自的图上,每次只推一个;负元则是「镜像」。p46 会看到 1 + (−1) = 0,即「左方必胜 + 右方必胜 = 后手必胜」——和为零。「和」这个运算是全章的发动机:序、域、实数全都建立在它上面。
★★★ 现在到了本章的分水岭——什么样的 {L | R} 才是数?
定义(数)。游戏 G = {L | R} 是数,当且仅当 L 的每个元素都严格小于 R 的每个元素:
∀ GL ∈ L, ∀ GR ∈ R: GL < GR
为什么这条判据如此关键?因为它把「左右打架」(某个左选项 ≥ 某个右选项)与「左右不打架」分开了。不打架时,{L | R} 落在一条有序的直线上——它「夹」在 max L 与 min R 之间,成为一个可以比较、可以排序的对象,也就是一个「数」。一旦打架,就无法把左右揉成一条线,只能作为一个「游戏」存在。
主角与非主角。主角是数:0 = { | }、1 = {0 | }、½ = {0 | 1}……它们构成全序域。非主角是「非数游戏」(是游戏但不是数),第一个例子就在眼前:∗ = {0 | 0}。0 < 0 不成立,故 ∗ 不是数——它的含义是「先手必胜的中立局面」,第一章 Nim 里的 ∗1 就是它。
三个层次,分清。① 游戏是最大的类(一切 {L | R});② 非数游戏是其中「左右打架」的那部分;③ 数是其中「每个左元素 < 每个右元素」的那部分。本章用一整章的力气证明第③部分是(真)全序域,同时也要留着第②部分——因为它承载了一章的胜负结构。
★★★ 递归定义必须有一个「落地」的度量,否则会无限循环。这个度量就是生日(birthday)。
定义(生日)。游戏 G 的生日 b(G) 是「严格大于 G 的所有左右选项的生日」的最小序数:
b(G) = 最小的序数 α,使 α > b(GL) 且 α > b(GR)(对所有选项)
空集情形:0 = { | } 没有任何选项,故 b(0) = 0——第 0 天。用第 0 天的数当左右集合,得到的是第 1 天的游戏(生日 1),依此类推。于是所有游戏被排成一条「天梯」:0、1、2、…、ω、…,序列可以是超限的,这正是「超现实」一名的由来。
良基归纳。生日的用处是让「对游戏做归纳」合法:要证明关于所有游戏的命题 P(G),只需证明「假设 P 对所有生日小于 α 的游戏都成立,则 P 对生日为 α 的游戏也成立」。因为每个游戏的选项生日都更小,这个「回溯」永不循环。本章的每一条定义(序、加法、乘法)和每一个证明,都默认在做生日归纳。
一组重要的计数事实(实验 p66 真跑验证)。第 n 天新造出的数恰有 2n 个(n ≥ 1);到第 n 天为止累计 2n+1 − 1 个。特别地,第 n 天恰好造出全部分母不超过 2n−1 的二进分数——这就是 p48 的主题。
★★ 第 0 天:只有一个数。唯一没有选项的游戏是 0 = { | }。
第 1 天:±1。用第 0 天的数(只有 0)作选项,可能的组合只有三种:{0 | }、{ | 0}、{0 | 0}。前两个是数(0 < 空、空 < 0 自然成立),第三个不是数(0 < 0 不成立)。于是
1 = {0 | } (左方走一步到 0,右方无路可走 ⟹ 左方必胜)
−1 = { | 0} (右方必胜) · ∗ = {0 | 0} (先手必胜)
验证 0 < 1。由 p42 的定义:0 ≤ 1 成立(0 无左选项、1 无右选项,两种反例都不存在);而 1 ≤ 0 不成立(1 的左选项 0 ≥ 0 就是反例)。故 0 < 1。对称地 −1 < 0。
验证 0 + G = G(0 是加法单位元)。展开 0 + 1 = { | } + {0 | }:左选项只有来自 1 的左边 {0 + 0}(0 的左右皆空),右选项为空。即 0 + 1 = {0 + 0 | }。若已知 0 + 0 = 0(把 { | } + { | } 展开即得),则 0 + 1 = {0 | } = 1。一般地 0 + G = G 对一切游戏成立(对生日归纳):因为 0 没有任何选项,展开后式子原样回落。
还有一件事:{−1 | 1} = 0。虽然形状与 { | } 不同,但由 p42 可验证 {−1|1} ≤ 0 且 0 ≤ {−1|1},故两者相等。「相等」是游戏的相等,不是书写的相同——这是本章最容易踩的坑之一(p55 专门讲)。
★★ 第 2 天:2、½、−2、−½。现在左右集合可以取 −1, 0, 1 中任意「合法」的组合。逐一检查后,新的数有四个:
2 = {1 | } · −2 = { | −1} · ½ = {0 | 1} · −½ = {−1 | 0}
(其余组合要么与已有数相等,要么左右打架不是数:{0 | 0} 已是 ∗,{−1 | 1} = 0,{1 | 0} 打架。)
为什么 {0 | 1} 一定是 ½?因为它是「大于 0、小于 1」的最简数。验证两步:① 0 ≤ {0|1} 且 {0|1} ≤ 1(由 p42 定义直接可查);② 若某个数 G 满足 0 < G < 1,则必有 ½ ≤ G——即 ½ 是 0 与 1 之间的最小数。「最简单者胜出」是 Conway 构造的核心规则,p56 给出完整证明。
重点验证:½ + ½ = 1。展开
½ + ½ = {0|1} + {0|1} = { 0 + ½, ½ + 0 | 1 + ½, ½ + 1 }
若已知 0 + ½ = ½(单位元)与 ½ + 0 = ½,则左选项集合化为 {½};右选项是 1 + ½ 与 ½ + 1。由定义逐项算出 1 + ½ = {1 | 2} = 3/2。于是
½ + ½ = { ½ | 3/2, 3/2 } = { ½ | 3/2 }
验证 {½ | 3/2} = 1:分别检验 {½|3/2} ≤ 1 与 1 ≤ {½|3/2},两者都成立(因为 ½ < 1 < 3/2,1 恰好夹在中间且是最简者)。故 ½ + ½ = 1。◻ 实验 p66 用程序把这一串等式逐条复算了一遍。
★★ 第 3 天:±3、±3/2、±3/4、±1/4。取第 2 天的数(−2,−1,−½,0,½,1,2)作选项,得到 8 个新数(第 2 天的两倍):
3 = {2 | } · 3/2 = {1 | 2} · 3/4 = {½ | 1} · 1/4 = {0 | ½}
分母的规律:第 1 天只出现整数(分母 1),第 2 天出现 ½(分母 2),第 3 天出现 ¼、¾(分母 4)。每过一天,可用的分母往前进一档(乘以 2)。
定理(有限天的二进分数)。一个数 x 在第 n 天之内被造出,当且仅当 x = m/2k(m 为整数、k ≤ n−1),即 x 是一个二进分数(dyadic rational)。◻
证明思路(对 n 归纳)。① 若 x 的生日 ≤ n,由判据 x = {L|R} 夹在 max L 与 min R 之间;这两个都是分母 ≤ 2n−2 的二进分数,而它们之间最简的二进分数分母 ≤ 2n−1,故 x 是二进分数。② 反过来,每个 m/2k(k ≤ n−1)都能在第 n 天之前构造:它夹在两个相邻的、分母更小的二进分数之间。
一个漂亮的口号:½ 不是「0 与 1 之间的一个新符号」,而是「0 与 1 之间最简单的那个二进分数」。同理 1/4 是 0 与 ½ 之间最简的二进分数,3/4 是 ½ 与 1 之间最简的。于是第 n 天的全部数,就是在已有二进分数的每个相邻间隙里插中点,再把最外两端各推一格——一棵每天翻倍的二叉树(实验 p66 打印了第 0–4 天的完整名单)。
★★★ 现在证明:全体数在关系 ≤ 下构成一个全序。需要三条:自反、传递,以及「任意两个数可比」(三分律)。
① 自反:G ≤ G。对生日归纳。若 G ≤ G 不成立,则要么存在 GL ≥ G,要么存在 GR ≤ G。但对数而言,每个左选项 GL < G、每个右选项 GR > G——两种反例都不可能出现。
② 传递:G ≤ H 且 H ≤ K ⟹ G ≤ K。反证。设 G ≤ H、H ≤ K 而 G ≰ K。由 G ≰ K,存在反例,分两种:(a) 有左选项 GL ≥ K。由 G ≤ H 得 H ≰ GL(否则 GL 成了反例);而由 GL ≥ K 与 H ≤ K,用归纳的传递性得 H ≤ GL,矛盾。(b) 有右选项 KR ≤ G。由 H ≤ K 得 KR ≰ H;由 KR ≤ G 与 G ≤ H 得 KR ≤ H,矛盾。两条都矛盾,故传递性成立。注意这里的归纳是对「三元组生日之和」做的——良基归纳的典型用法。
③ 三分律。任意两个数 G、H,必有 G ≤ H 或 H ≤ G。这一条对一般游戏不成立(∗ ‖ 0),但对数成立——它等价于「数之间的 ≤ 能由左右选项的夹逼决定」。数之所以能排成一条线,正是「每个左选项 < 每个右选项」这条判据的直接后果。三条合起来,数在 ≤ 下是全序。
★★★ 定理。全体数在加法下构成一个交换群:① 0 是单位元;② 每个数有负元,且 G + (−G) = 0;③ 加法的交换律与结合律成立。
① 单位元。0 + G = G 与 G + 0 = G:对生日归纳。展开 0 + G = { 0 + GL | 0 + GR }(0 左右皆空,故只剩 G 的选项),由归纳假设 0 + GL = GL,于是右边原样等于 {GL | GR} = G。
② 负元。证明 G + (−G) = 0(分两半:先证 G + (−G) ≤ 0,再证 0 ≤ G + (−G))。以第一半为例:要证 G + (−G) ≤ 0,只需排除 0 的右选项(无)与和式的左选项。和式的左选项形如 GL + (−G) 或 G + (−GR)。以 GL + (−G) 为例:由归纳假设 GL + (−GL) = 0,再用单调性 −G ≤ −GL(因 GL < G)得 GL + (−G) ≤ GL + (−GL) = 0,故左选项 ≰ 0 的反例不存在——得 G + (−G) ≤ 0。另一半对称。
③ 交换与结合已在 p43 说明(逐项配对 + 归纳)。四者合起来,数构成交换群——而且是无挠的:若 n · G = 0(n ≥ 1)则 G = 0。
这条定理的意义。它说明「游戏的和」这套为胜负而设的运算,在「数」这一子类上退化成我们熟悉的加法——{L|R} 造出的数,其加法就是普通加法。于是「½ + ½ = 1」不再是一个需要小心核对的等式,而是群公理的推论。把「游戏」造得足够好,它自己会给出算术。
★★★★ 有了加法群,还需要乘法。× 的递归定义比加法复杂得多,因为「G 的选项乘以 H 的选项」会产生交叉项。
定义(乘法)。对任意游戏 G、H,
G · H = { GLH + GHL − GLHL, GRH + GHR − GRHR | GLH + GHR − GLHR, GRH + GHL − GRHL }
这个怪物从哪里来?来自我们在中学就学过的分配律的逆向使用。我们希望乘法满足分配律 (a + b)c = ac + bc 与交换律 ab = ba。若 G = {GL | GR},则形式上 G 是「GL 与 GR 的夹缝」。乘上 H 后,左方(对乘积有利)能用的手段是:在 G 上退到 GL 而 H 不动,或在 H 上退到 HL 而 G 不动,两种「退一步」叠加。但两次各退一步会重复计算那块小矩形 GLHL,所以要减掉它——这正是公式里 − GLHL 的来历(面积法)。四个式子分别对应:左方退 G、左方退 H、右方退 G、右方退 H。
定理(有序域)。全体数在 +, ·, ≤ 下构成一个全序域:交换律、结合律、分配律、每个非零元有逆元 G−1 均成立,且序与运算相容(G ≤ H ⟹ G + K ≤ H + K;K > 0, G ≤ H ⟹ GK ≤ HK)。这个域的证明是组合博弈论中最长的一段技术性论证,完整路线见挑战页 p65。它的结论却极简:我们造出了数域——而且是「生来就有序」的那一个。
先看两个乘法例子。1 · H = H(单位元);2 · ½ = 1(½ 的乘法逆元就是 2)。用定义算 (−1)·(−1):由 −1 = { | 0} 展开后可得 (−1)·(−1) = {0 | } = 1——「负负得正」在这里是被证明的,而不是被规定的。
★★★★ 二进分数只是实数的一小部分。1/3、√2、π 呢?它们在第 ω 天(自然数天之后的那一天)被造出。
关键工具(最简性 + 夹逼)。对数而言,{L | R} 的值就是「严格夹在 max L 与 min R 之间的最简数」。当左右集合是无穷的(第 ω 天允许),就能「直取极限」:
√2 = { L | R },L = { x : 二进分数且 x2 < 2 },R = { x : 二进分数且 x2 > 2 }
因为 L 中每个元素都小于 R 中每个元素(左右不打架),所以这是一个数;又因为左右两族无限逼近 √2,它就是这个「割」唯一的数。同样的手法可定义 π = { L | R }(L、R 分别取 π 的全体二进分数下界与上界)。
与 Dedekind 切割的对照(p67 格物札记续谈)。Dedekind 造实数的方式是:在有理数集上取一个「切割」(A, B)(A 中每个数都小于 B 中每个数),把「切割」当作一个实数。Conway 的做法在形式上几乎一样:{L | R} 也是「左边一族、右边一族」——区别在于 Conway 的左右两族本身就是数(游戏),而且这套构造从 0 出发、不需要事先给定有理数或任何实数。Dedekind 从「已知的」造「未知的」;Conway 从「空」造「一切」。
一个深刻的结果。每个实数都有至多可数的生日(每个实数都在第 ≤ ω 天或某个可数序数天被造出);但超现实数整体是真类(p53),比实数多得多。「嵌入」一词的含义是:实数是超现实数的一个子域,而超现实数在保留实数全部结构的同时,还额外装下了无穷大与无穷小。
★★★★ 现在让「天」数走到无穷。
先造无穷大。第 ω 天允许使用所有自然数(它们分别在第 0,1,2,… 天被造出)。于是
ω = {0, 1, 2, 3, … | }
它大于每一个自然数(左选项全是自然数、无右选项),因此是一个「比所有自然数都大」的数。但:它不是「∞」,而是一个真正的数——它可以加、可以乘、可以比较:ω + 1 = {ω | }、2ω、ω2 都造得出来。
再造无穷小。把 ω 取负得 −ω;而「1/ω」由
1/ω = {0 | 1, ½, ¼, ⅛, …}
定义:它大于 0,却小于每一个正数(因为右选项取遍所有正二进分数)。这就是一个正的无穷小(infinitesimal)。最早的正无穷小常写作 ε = 1/ω,满足 0 < ε < 1/n 对一切自然数 n 成立。于是我们在同一个数域里,同时拥有了无穷大与无穷小——这在实数域里是不可能的(Archimedes 性质禁止之),而超现实数域容得下它们。
「真类」的意思。超现实数不是集合,而是真类(proper class):因为「所有序数」本身就是一个真类,而每个序数 α 都对应一个超现实数(第 α 天造出的那个「比所有更小序数都大」的数)。若超现实数是集合,则它包含全体序数,与 Burali–Forti 悖论(不存在「所有序数」的集合)矛盾。所以「数的世界」之大,超出了集合论的容量——它是 ZFC 里能谈论、却装不进一个集合的对象。
★★★★ 最后,回到本章另一半主角:不是数的游戏。
第一个例子:∗ = {0 | 0}。左右都能走到 0,但 0 < 0 不成立,故 ∗ 不是数。它的含义是先手必胜:无论谁先走,都走到 0(轮到对手就输),所以「谁先走谁赢」——这是第一章里 Grundy 值为 1 的局面 ∗1。更一般地,∗n = {0, ∗1, …, ∗(n−1) | 0, ∗1, …, ∗(n−1)} 就是第一章的 nimber n。
模糊(fuzzy)关系。既然 ∗ 不是数,试着比较它与 0:验证 0 ≤ ∗——需「无 ∗R ≤ 0」,但 ∗R = 0 而 0 ≤ 0 成立,故不满足——0 ≤ ∗ 假。同理 ∗ ≤ 0 假(0 ≤ ∗L = 0 成立)。于是 ∗ ‖ 0(读作「∗ 与 0 模糊」):既不 ≤,也不 ≥。这正是「先手必胜」在序关系上的表现——一个先手必胜的局面,既不能说它「对左方有利」,也不能说「对右方有利」。
第二个例子:↑ = {0 | ∗}。左方能走到 0、右方只能走到 ∗。可证 0 < ↑(左方略占优),且 ↑ ‖ ∗(与 ∗ 模糊)。↑ 是一个正的无穷小:它大于 0,却小于任何正数——和 1/ω 一样小,但不同于 1/ω(↑ − 1/ω 又是一个更小的、与 0 模糊的量)。↑ 的负元 ↓ = −↑ = {∗ | 0} 是负无穷小。这些「又小又模糊」的量,正是围棋残局、象棋先手优势这类「说不清谁好一点」的局面的数学化身。
nimber 上的序很怪。对 nimber 而言,要么相等,要么模糊:∗n ‖ ∗m 当 n ≠ m。也就是说「∗1 与 ∗2 哪个大」没有意义——它们不可比。(回想第一章:nimber 的「大小」由异或给出,而不是由整数序给出;「∗n 与 ∗m 相加」才是它们的算术。)第一章说「每个公平博弈等价于一堆 Nim」,第二章说「这些等价类就是这些模糊的游戏」——两句话说的是同一件事。
本章至此完整。数(每个左元素 < 每个右元素)组成全序域;非数游戏(左右打架)则是一章 nimber 与各种「优越/劣势/模糊」局面的家园。「游戏」比「数」大得多,而「数」只是其中秩序最好的那一部分。
★★ 本章最常被误传的一句话是:「超现实数就是实数再加上无穷大和无穷小。」它错在把超现实数想成了往实数上「外挂」几个符号。真相是:超现实数是从头造出来的一整个域,实数只是它的一部分,而无穷大与无穷小是这套构造自然生长的产物,不是外挂件。
误读一:把 ω 当作「新符号」。有人以为 ω 是「最大的自然数」那样的符号,被手写进公式里。不是的:ω = {0,1,2,… | } 是一个由已有数作左右集合造出的对象,它的每一条性质(ω > n 对一切自然数、ω + 1 = {ω | } 等)都由定义推出。没有任何符号是「规定」出来的,全部是「构造」出来的。
误读二:把 {0 | 1} 当作「0 与 1 之间的某个新数」。这个说法听起来对,其实指错了重点:{0|1} 不是「某个」新数,而是唯一确定的 ½——0 与 1 之间生日最小的那个数(p56 给出证明)。它不是一个含糊的「中间物」,而是一个有名字、可计算、参与一切算术的普通数字。
误读三:以为「每个实数都要人为指定生日」。恰恰相反:每个实数都在某个可数生日被造出(p52)。½ 在第 2 天,1/3 在第 ω 天(它是 {1/4, 1/4+1/16, … | 1/2, 1/2−1/16, …} 型的无穷夹逼),√2、π 亦然——没有一个是「外挂」进来的。
误读四:把「等价」当成「书写相同」。{ | } 与 {−1 | 1} 写法不同,却是同一个数 0;½ 也可以写成 {−1, 0 | 1}。游戏的「相等」由 ≤ 双向定义,而不是由长相定义(p42)。
那么超现实数的「多」到底在哪里?在于它的密度结构:实数之间没有「最小的正实数」,但超现实数在 0 附近有一整条无穷小阶梯:1/ω > 1/ω2 > 1/ω3 > … > ↑ > 0,每一层附近又叠一层……实数只有一条线,超现实数在每一点的邻域里还藏着一个「无穷小的世界」——这就是它比实数「大得多」的确切含义(它是真类,见 p53)。
★★ 例题 1:证明 {0 | 1} = ½。这是全章第一个「值」的确定,必须按定义一步步验。
目标。记 ½ := {0 | 1}(它是一个数,因 0 < 1)。要证它「就是 ½」,即它与「直觉里的 ½」一致:夹在 0 与 1 中间、且是最简的那个。分三小步。
(a) ½ ≤ 1。按 p42 判据,要排除两种反例。反例①「某个 ½L ≥ 1」:½L = 0,而 0 ≥ 1 不成立(由 0 < 1)——反例①不存在。反例②「某个 1R ≤ ½」:1 = {0 | } 无右选项——反例②不存在。故 ½ ≤ 1 成立。
(b) 0 ≤ ½。反例①「某个 0L ≥ ½」:0 = { | } 无左选项——不存在。反例②「某个 ½R ≤ 0」:½R = 1,而 1 ≤ 0 不成立——不存在。故 0 ≤ ½。
(c) ½ 是 (0, 1) 中最简的数(「最简单者胜出」)。要说明「{0 | 1} 的值不可能是别的数」,只需说明:在开区间 (0, 1) 之内,½ 的生日最小。逐个检查更小的生日:第 0 天的数只有 0(不在 (0,1) 内);第 1 天的数只有 −1, 1(也不在 (0,1) 内)。而 ½ = {0|1} 的生日是 2,且 0 < ½ < 1。故 (0,1) 中生日最小者就是 ½——这正是 {0|1} 的「最简性」含义。
一个必须纠正的流行说法。常有人把 (c) 写成「任何满足 0 < G < 1 的数 G 都有 ½ ≤ G」——这是错的:取 G = ¼,则 0 < ¼ < 1 但 ¼ < ½。反例提醒我们「最简」指的是生日最小,而不是「值最小」或「被所有中间数压住」。
结论。{0 | 1} = ½:它大于 0、小于 1,且是这对间隙里被「最简性」唯一选中的那个数。同理 {1 | 2} = 3/2、{0 | ½} = ¼、{½ | 1} = ¾——「夹在两个数中间最简者」是本章唯一的值判定规则。
练习(自己做)。① 用同样三步证明 {1 | 2} = 3/2;② 判定 {0 | 2} 是什么数(提示:先看 (0,2) 中生日最小者);③ 判定 {−½ | ½} 是什么数。
★★★ 例题 2:加法与序的计算。用 p43 的加法定义逐项展开,再靠「最简性」收尾。四小题,全靠同一套动作:展开 → 用单位元/已知等式化简选项 → 取最简。
例 2-1(½ + ½ = 1)。展开 {0|1} + {0|1}:左选项 {0 + ½, ½ + 0} = {½, ½} = {½};右选项 {1 + ½, ½ + 1} = {3/2, 3/2} = {3/2}。故 ½ + ½ = {½ | 3/2}。由最简性((½, 3/2) 中生日最小者),它是 1。故 ½ + ½ = 1。◻
例 2-2(¼ + ½ = ¾)。¼ = {0 | ½}、½ = {0 | 1}。左选项:¼L + ½ = 0 + ½ = ½;¼ + ½L = ¼ + 0 = ¼。取较大者 ½。右选项:¼R + ½ = ½ + ½ = 1;¼ + ½R = ¼ + 1 = 5/4。取较小者 1。于是 ¼ + ½ = {½ | 1},最简者 = ¾。故 ¼ + ½ = ¾。◻(与实验 p66 的 1/4 + 1/2 = 3/4 OK 一致。)
例 2-3(−½ + 1 = ½)。−½ = {−1 | 0}、1 = {0 | }。左选项:(−½)L + 1 = −1 + 1 = 0;−½ + 1L = −½ + 0 = −½。取较大者 0。右选项:(−½)R + 1 = 0 + 1 = 1(1 无右选项)。于是 −½ + 1 = {0 | 1} = ½。◻ 这个 {0 | 1} 再次出现,恰好回到例 2-1 的主角。
例 2-4(序的计算:½ ≤ 1、−½ ≤ ½)。前者已在 p56 证过。后者:要证 {−1|0} ≤ {0|1}。反例①「(−½)L ≥ ½」:−1 ≥ ½?否。反例②「½R ≤ −½」:1 ≤ −½?否。两种反例都不存在,故 −½ ≤ ½。由 −½ ≤ ½ 与 ½ + (−½) = 0,又得「负数小于正数」——一切都从定义推出。
要点。① 展开加法时,左选项集只保留最大者、右选项集只保留最小者(更弱的选项被支配,不影响 mex/最简性);② 判断和式的值,永远是「取夹在左右之间的最简数」;③ 手算务必与实验 p66 对拍——那里把 ½+½=1、¼+½=¾、−½+1=½、1+1=2 都用程序验证了一遍。
★★★ 例题 3:nimber 的语法。nimber 是「非数游戏」的主角,也是第一章 Grundy 值的真身。本例题把两章接起来。
例 3-1(∗ + ∗ = 0)。∗ = {0 | 0}。展开:左选项 {0 + ∗, ∗ + 0} = {∗, ∗} = {∗};右选项同样 {∗}。故 ∗ + ∗ = {∗ | ∗}。而 ∗ 是它自己的负元(左右对称),所以 ∗ + ∗ = 0。直观:两个「先手必胜」并列,后手必胜——后手只要镜像先手在另一份里的走法(第一章 p24 的对称策略)。
例 3-2(∗ + ∗ + ∗ = ∗)。由例 3-1,∗ + ∗ = 0,故 ∗ + ∗ + ∗ = (∗ + ∗) + ∗ = 0 + ∗ = ∗。「三个先手必胜并列」又是先手必胜——这正是异或:1 ⊕ 1 ⊕ 1 = 1。
例 3-3(nimber 的定义与第一章的对应)。对 n ≥ 0,定义
∗n = { 0, ∗1, …, ∗(n−1) | 0, ∗1, …, ∗(n−1) }
则 ∗0 = 0、∗1 = ∗、∗2 = {0, ∗ | 0, ∗}。它与第一章的 Grundy 值一一对应:任何公平博弈 G 在「和」的意义下等价于 ∗𝒢(G);而「和 = 异或」就是
∗n + ∗m = ∗(n ⊕ m)
例 3-4(∗2 + ∗3 = ∗1)。用上式:2 ⊕ 3 = 10(2) ⊕ 11(2) = 01(2) = 1,故 ∗2 + ∗3 = ∗1。(也可直接展开验证,但用对应的 Grundy 值最快。)——由此可见,第一章的「群结构」在本章获得了新名字:那些等价类就是这些模糊的 nimber。
例 3-5(nimber 之间不可比)。已知 ∗1 ‖ 0(p54)。一般地 ∗n ‖ ∗m(n ≠ m)。所以「∗2 与 ∗3 谁大」没有答案——它们不可比。要比较它们,只能用和与异或这套「nimber 算术」,而不是整数序。
练习(自己做)。① 算出 ∗4 + ∗6、∗7 + ∗7;② 说明 ∗n + ∗n = 0(用「每个 nimber 是自身负元」);③ 为什么 ∗ 与 0 不可比,而 ½ 与 0 可比?
★★ 习题 1:构造与验证(基础)。
1. 求出下列游戏的值(先判断是不是数,再用「最简性」定值):{1 | 2}、{1 | 3}、{−1 | 1}、{0 | 2}、{−2 | 0}、{½ | 1}。提示:{0|2} 的答案不是「1 与 2 之间随便一个数」,而是区间 (0,2) 中生日最小者。
2. 证明 0 是加法单位元:对一切游戏 G,0 + G = G。写出对生日的归纳步骤(说明展开后为何「原样回落」)。
3. 证明 −(−G) = G(负元的对合性)。对生日归纳,直接用负元的定义 −G = {−GR | −GL} 展开两次。
4. 求下列游戏的生日:{ | }、{0 | }、{ | 0}、{1 | 2}、{½ | 1}、{0 | ½}。生日 = 1 + 左右选项生日的最大值(空集情形取 0)。
5. 判断下列哪些是数(哪些左右打架):{0 | 1}、{0 | 0}、{1 | 0}、{−1 | 1}、{−½ | ½}、{1 | −1}。
6. 用定义展开验证 1 + 1 = 2(逐项写出左、右选项,再用最简性收尾)。
7. 验证 ½ ≤ 1 与 0 ≤ ½(写出被排除的两种反例)。
8. 证明 0 < ½ < 1 是严格的:即 {0|1} ≠ 0 且 {0|1} ≠ 1。用「严格小于」的定义(≤ 成立而反向 ≤ 不成立)。
自检标准。能独立做 1–4,说明已掌握「游戏 → 值 / 生日」的基本换算;能完成 5–8,说明已理解「数判据」与「最简性」这两把尺子——它们是本章全部技术的基础。
★★★ 习题 2:序、域与游戏(进阶)。
9. 完整证明 ≤ 的传递性:若 G ≤ H 且 H ≤ K 则 G ≤ K。把 p49 的两类反例写全,并指明每一步用到的归纳假设。
10. 证明 ↑ = {0 | ∗} 满足 0 < ↑ 且 ↑ ‖ ∗(与 ∗ 模糊)。证 0 < ↑ 用判据;证 ↑ ‖ ∗ 需分别说明 ↑ ≤ ∗ 与 ∗ ≤ ↑ 各因哪个反例而失败。
11. 证明 {0, ∗ | } 不是数(指出一对打架的左右元素)。再判断 {∗ | 0}、{0 | ∗} 是否为数。
12. 用乘法定义(p51)算 (−1)·(−1) = 1 的思路:写出 −1 = { | 0}、1 = {0 | },展开四个选项式子,说明为何结果是 {0 | }。
13. 证明:若 G 是数则 G + (−G) = 0。这就是 p50 ② 的完整版;特别写清「单调性 GL < G ⟹ −G ≤ −GL」这一步。
14. 逐项展开证明 ¼ + ½ = ¾(左选项取最大、右选项取最小,再用最简性)。
15. 证明「第 n 天造出的数恰为分母不超过 2n−1 的二进分数」的第一段(若 x 生日 ≤ n 则是二进分数)。
16. 用 Grundy 值证明 ∗n + ∗m = ∗(n ⊕ m),并算出 ∗4 + ∗6、∗5 + ∗2 + ∗7 的值。
自检标准。第 9、13 题是技术门槛(归纳的写法);第 10、11 题是「非数游戏」的门槛;第 16 题是两章合流的门槛。做完这组题,第二章的骨架就真正立住了。
本章的概念网络可以读成四条线(见下图)。
线一(构造线)。{L | R} → 生日 → 第 0/1/2/3 天的逐日构造 → 二进分数 → 实数 → 超限数 ω、1/ω。这条线回答「数从何而来」。
线二(运算线)。序与等价 → 加法与负元 → 乘法 → 全序域。这条线回答「造出的东西能否像数一样运算」。
线三(判据线)。数的判据(每个左元素 < 每个右元素)→ 三分律 → 全序。这条线回答「什么样的游戏才配叫数」。
线四(旁支)。左右打架的游戏 → ∗、↑、nimber → 模糊关系 ‖。这条线把第一章的 Grundy 值收进本章——非数游戏就是 nimber。
三个动作的对应关系。① 造:用已有游戏作左右集合,造一个新游戏(这是本章唯一的原始操作);② 比:用「查反例」判断 ≤,进而得等号与模糊;③ 化:把游戏化成「最简的数」或「某个 nimber」,让运算变成普通算术。与第一章对照:那里把局面化成整数(Grundy 值),这里把游戏化成数或 nimber——同一套「化标准形」的思想。
本章的边界。本章的域只包含「数」;「非数游戏」只被部分刻画(我们知道了 ∗、↑,但一般的非数游戏理论远超本册)。而无限对局、随机博弈则完全在射程之外(第四、五章)。把边界记清楚,比记结论更重要。
★★ 小结(一):游戏即数。
正面清单。① 游戏的形式定义:G = {L | R},左方从 L 取、右方从 R 取,无路可走者输(p41);② 序与等价:G ≤ H ⟺ 不存在 GL ≥ H 且不存在 HR ≤ G(p42);③ 加法与负元:G + H 与 −G 的定义、交换律、结合律(p43);④ 数的判据:每个左元素 < 每个右元素(p44);⑤ 生日与良基归纳(p45);⑥ 0/1/½ 的构造顺序:0 = { | }、1 = {0 | }、−1 = { | 0}、½ = {0 | 1}(p46–p47)。
易错清单(每条都来自真实的手算事故)。① 把「左元素小于右元素」记反:判据是每个 L 都小于每个 R;写成「大于」或「存在一个」都不对。② 把等价当成相等:{ | } 与 {−1 | 1} 书写不同却相等(p42)。③ 以为 {0 | 1} 是「新数」:它就是 ½(p56)。④ 把「最简」理解成「值最小」:最简指生日最小;区间 (0,1) 里 ¼ 比 ½ 小,却不是最简者。⑤ 把 ∗ 当成数:∗ = {0|0} 因 0 < 0 不成立而不是数。⑥ 把模糊当「相等」:G ‖ H 表示既不 ≤ 也不 ≥(p54)。⑦ 以为「ω 是最大的自然数」:ω 不是自然数,它比一切自然数都大,且 ω + 1 > ω。
一句话的总结。本章把「数」这个最古老的对象,从「公理给定的」变成了「由游戏规则构造出来的」——{L | R} 是唯一的原始操作,其余全部是它的产物。造得出来,就无需假设;能运算,才配叫数。
★★★ 小结(二):从公平博弈到全序域。
本章与第一章的接口(三处对接)。① 值 ↔ nimber:第一章把公平博弈折算成非负整数 𝒢(G),第二章把这些等价类认作 ∗n——是游戏但不是数。② 和 ↔ 异或:第一章的和 = 异或,第二章把它写成 ∗n + ∗m = ∗(n ⊕ m)(p58)。③ 对称策略 ↔ 负元:第一章的「G + G 是 𝒫 位置」正是第二章的「∗n + ∗n = 0」,也就是「每个 nimber 是自身的负元」。第一章的全部结论,都能在第二章的语言里重述一遍。
两章的分工。第一章处理公平博弈,得到整数(模等价);第二章允许左右不同,得到全序域与超现实数。前者是后者的一个切片:非负整数都嵌在超现实数里,而 nimber 是超现实数旁边那层「模糊的影子」。
算法清单(遇到一个 {L | R} 时的标准流程)。① 判:检查是否每个左元素 < 每个右元素——是数还是非数游戏?② 定值:若是数,取夹在 max L 与 min R 之间的最简数;③ 算生日:b(G) = 1 + max 选项生日;④ 运算:需要加减乘时,按递归定义展开、逐项配对、取最简;⑤ 接第一章:若是非数游戏,试着把它对应到一个 nimber。
通往第三章的钩子。本章把「游戏」翻译成了「数」。那么下一个问题自然冒出来:当游戏不再是抽象的石子,而是几何对象呢?折纸的一张纸、七桥的一幅图、魔方的 43 252 003 274 489 856 000 个状态——它们的「游戏」是什么结构?答案不会是一个数,而会是一个群、一张图、一个拓扑空间。第三章要把「游戏 → 结构」这条主线,从代数接到几何上。
本章最震撼的不是任何一个等式,而是「数可以被造出来」这个念头本身。在大多数人的数学经验里,数是「给定的」:自然数在柏拉图的天上,实数由 Dedekind 切割或 Cauchy 列「定义」,一切都要先有一个背景域。Conway 反过来做:先写下一个空的规则 { | },然后让规则自己长出全部的数。
这条路的历史可以追到 Dedekind 与 Cantor:Dedekind 用「切割」把实数从未知变成已知,Cantor 用「对角线」造出超越数。但他们都是在有理数之上动手;Conway 把地基一路拆到「什么都没有」——0 是空集。这是数学自由的极致形态:不预设对象,只预设规则。
把它与逻辑对照:Hilbert 说「不矛盾即可存在」;本章给出这句话的一个可运行样本。{L | R} 之所以是合法的数,不需要任何直观(没有画出来的点、没有量出来的长度),只需要它不自相矛盾(每个左元素 < 每个右元素)。于是 ½、√2、ω、1/ω 一个接一个被规则「生成」——规则的产能远大于直观的想象。
但自由不等于任意。Contrary to 直觉,这套构造比「随便规定」严格得多:每个数都必须由前一层的数「夹」出来,且只能取最简者。若有两条路能造出同一个值,它们必须相等(p42 的等号定义保证)。规则给了自由,也给了自由唯一性——这才是数学自由的完整形态:想怎么造都行,但造出来的东西必须服从它自己的后果。
最后留一个哲学问题:既然数可以由我们「造」出来,那它到底是发明的还是发现的?本章的答案藏在构造里——规则是我们发明的,但规则的全部后果是我们发现的。Conway 发明了 { | } 与「最简者胜出」,但他不能发明 ½ + ½ = 1;那是规则自己的结论。自由与必然,在同一条构造里握手。
— 第二章 · 思想卡
延伸思考(三问)。① 如果我们把「数的判据」放松为「每个左元素 ≤ 每个右元素」(允许相等),会造出什么?(提示:那正是非数游戏 ∗ 的入口。)② 如果不用「最简者胜出」,而用「左族最大者与右族最小者之间随便挑一个」,构造还唯一吗?③ 本章的构造只用了「集合」与「序数」;若把序数换成别的良基序,还能造出「数」吗?(这是「组合博弈论」推广到一般良基结构时的真问题。)
★★★★ 挑战:把「数是全序域」完整证明一遍。这是本册技术含量最高的一段论证,也是本章全部定义的价值所在。按下面的四步规范写作,每一步都要标明「对生日归纳」以及对哪个式子归纳。
第一步(全序)。定义 G ≤ H(p42),依次证明:① 自反(对数是显然的:每个左元素 < G < 每个右元素);② 传递(反证 + 对三元组生日之和归纳,p49 给了骨架);③ 三分律(任意两数可比)。关键:这三条只对「数」成立,对一般游戏不成立——指明哪里用到了「左右不打架」。
第二步(加法群)。① 0 是单位元;② G + (−G) = 0(分 ≤ 与 ≥ 两半,用到引理 A:GL < G ⟹ −G ≤ −GL);③ 交换律、结合律(逐项配对 + 归纳)。
第三步(乘法与有序域)。① 先证乘法良定义:对 G、H 的「选项对数之和」归纳,说明公式 p51 的左右选项确实「每个左 < 每个右」(否则乘出的不是数);② 证交换律 GH = HG(公式对 G、H 对称);③ 证结合律与分配律(本章最长的两段归纳,建议先证分配律);④ 证 1 = {0 | } 是乘法单位元。
第四步(序与运算相容 + 逆元)。① 单调性(引理 A 的乘法版):G ≥ H 且 K ≥ 0 则 GK ≥ HK——先证 K > 0 的情形;② 逆元(引理 B):对 G > 0,令
G−1 = { 0, GL/G, (GL + 1)/G… | … }(按 Conway 的构造,形如「用已有数逼近 1/G」)
并证明 G · G−1 = 1(对 G 的生日归纳,用乘法单调性把 1 夹在 G·G−1 两侧)。四步合起来:数在 +, ·, ≤ 下构成全序域。◻
参考文献(自学者按此顺序读)。① Conway《On Numbers and Games》(1976)——原始文献,本章的全部构造出自此书;② Gonshor《An Introduction to the Theory of Surreal Numbers》(1986)——最适合初学者的严格教材;③ Berlekamp–Conway–Guy《Winning Ways for Your Mathematical Plays》(1982)——组合博弈论的应用百科;④ Siegel《Combinatorial Game Theory》(2013)——现代标准参考书,含本挑战的完整证明。
★★ 实验:超现实数的有限 Day 构造真跑。本节所有数字都来自本地脚本 qa/p66_lab.py(纯 Python 标准库,实现 {L | R} 的逐天构造、递归加法与 ≤),输出存于 qa/p66_out.txt,可自行复算。
实验一:逐天构造与计数。按生日逐天枚举所有「数」(用「值只依赖 max L 与 min R」做等价筛 + 规范形去重),得到:
① 逐天构造:Day 0-4 的全部数
Day 0 : 0
Day 1 : -1, 0, 1
Day 2 : -2, -1, -1/2, 0, 1/2, 1, 2
Day 3 : -3, -2, -3/2, -1, -3/4, -1/2, -1/4, 0, 1/4, 1/2, 3/4, 1, 3/2, 2, 3
Day 4 : -4, -3, -5/2, -2, -7/4, -3/2, -5/4, -1, -7/8, -3/4, -5/8, -1/2,
-3/8, -1/4, -1/8, 0, 1/8, 1/4, 3/8, 1/2, 5/8, 3/4, 7/8,
1, 5/4, 3/2, 7/4, 2, 5/2, 3, 4
Day n 新造出的数:
Day 0 新增 ( 1 个): 0
Day 1 新增 ( 2 个): -1, 1
Day 2 新增 ( 4 个): -2, -1/2, 1/2, 2
Day 3 新增 ( 8 个): -3, -3/2, -3/4, -1/4, 1/4, 3/4, 3/2, 3
Day 4 新增 (16 个): -4, -5/2, -7/4, -5/4, -7/8, -5/8, -3/8, -1/8,
1/8, 3/8, 5/8, 7/8, 5/4, 7/4, 5/2, 4可见 Day n 新造出的数恰为 2n 个(Day 3 八个、Day 4 十六个),且每天新增的数正好是「上个日子所有数的两倍」——与 p48 的定理一致。
③ 计数统计
Day 新增个数 累计个数 正数个数 负数个数(累计)
0 1 1 0 0
1 2 3 1 1
2 4 7 3 3
3 8 15 7 7
4 16 31 15 15
规律核对:Day n 新增应 = 2n;累计应 = 2n+1-1
计数规律是否全部吻合: True
按分母(2 的幂)统计 Day 4 新增数:
分母 20 : 2 个 分母 21 : 2 个
分母 22 : 4 个 分母 23 : 8 个实验二:{L | R} 的递归加法与 ≤(与二进数值对拍)。脚本用符号展开构造规范形,再按 Conway 定义实现 ≤ 与加法,逐条验证:
② {L|R} 的递归加法与 <= 验证(与二进数值对拍)
符号展开 -> 规范形 -> 值:
0 = {|} -> 值 = 0
1 = {0|} -> 值 = 1
-1 = {|0} -> 值 = -1
2 = {0,1|} -> 值 = 2
1/2 = {0|1} -> 值 = 1/2
-1/2 = {-1|0} -> 值 = -1/2
1/4 = {0|1,1/2} -> 值 = 1/4
3/4 = {0,1/2|1} -> 值 = 3/4
3/2 = {0,1|2} -> 值 = 3/2
加法验证:
1/2 + 1/2 = 1 (期望 1) OK
1/4 + 1/2 = 3/4 (期望 3/4) OK
-1/2 + 1 = 1/2 (期望 1/2) OK
1 + 1 = 2 (期望 2) OK
3/4 + 1/4 = 1 (期望 1) OK
-1 + -1 = -2 (期望 -2) OK
序关系验证 (<=):
1/2 <= 1 ? True 1 <= 1/2 ? False
0 <= 1/2 ? True 1/2 <= 1/2 ? True
-1/2 <= 1/2 ? True 3/2 <= 2 ? True
1/2 + 1/2 = 1 的「游戏等式」核对:
le(1/2+1/2, 1) 且 le(1, 1/2+1/2) 是否都成立? True
{0|1} 的规范形是否为 1/2 ? True (L = [0] , R = [1])三个值得注意之处。① 1/2 + 1/2 = 1、1/4 + 1/2 = 3/4、−1/2 + 1 = 1/2、1 + 1 = 2 全部通过——递归加法与二进数值逐条吻合,这是对 p43/p47 的独立检验;② {0|1} 的规范形(左集为 {0}、右集为 {1})核实了 p56 的结论 {0|1} = ½;③ 序关系的验证(含 ½ ≤ ½ 的自反)与理论一致。
第四个环节(与理论对拍)。实验刻意把「蛮力逐天枚举」与「公式(2n 计数、二进分数定理)」并置:枚举是笨但可靠的,公式快但需要证明——两者对拍一致,才算真的相信了 p48 的定理。本册实验页都遵循同一格式:可复算的脚本 + 可核对的输出 + 与理论的对拍。
极限的提醒。本实验只跑到 Day 4(因为 2n 增长很快)。1/3、√2、ω 需要第 ω 天——那已经超出「有限枚举」的射程,只能靠 p52 的「割」来理解。「有限天可枚举,超限天靠构造」正是本章的分界线。
本章的「造数」不是孤例:它是一条从十九世纪延伸到二十世纪的方法论主线,而且在中国的算学传统里有自己的回声。
先说 Dedekind 切割。一八七二年,Dedekind 发现有理数轴是「不完整」的:√2 处有个洞。他的修补办法是:把一个「切割」(把有理数分成 (A, B),A 中每一个都小于 B 中每一个)定义为实数。于是 √2 就是「平方小于 2 的有理数全体 / 平方大于 2 的有理数全体」这个切割。这是一个公理化补全:不再问「实数是什么」,只规定「实数是切割」,然后证明这样得到的对象满足实数的全部要求。
再说 Conway 生日构造。形式上看,二者几乎一样——都是「左边一族、右边一族,中间夹一个数」。但有一处决定性的差别:Dedekind 的切割需要事先给定有理数轴(背景域),而 Conway 的 {L | R} 从空集出发、不需要任何背景。有理数、实数、ω、1/ω 全部是这套规则的产物,而不是前提。Dedekind「补全已知」,Conway「生成一切」——这是「公理化」与「构造性」的典型对照。
中算传统的回声。中国的算学对「用已知夹出未知」这套动作异常熟悉。《九章算术》的「盈不足」(双假设法)就是一场漂亮的夹逼:先给两个猜测值分别算出「盈」与「不足」,再按线性插值定出真正的解——用两次试算把答案夹住。更著名的例子是刘徽的割圆术:用正多边形(内接与外切)从两侧逼近圆的面积,π 被夹在两个上、下界之间。可以发现这与 Conway 的 {L | R} 在结构上同构:左边一族(内接/不足)、右边一族(外切/盈),中间那个被夹住的量就是要找的数。「左右夹逼、取中间」,是一个跨越文化与世纪的普遍算法。
为什么强调「构造性」?因为公理化的造数需要先相信背景对象存在(有理数、实数),而构造性的造数只需要接受规则。前者回答「这个对象应当满足什么性质」,后者回答「这个对象是怎么来的」。在数学基础上,这两条路各有所长:公理化便于推理,构造性便于理解「最小假设」。本章选择构造性,正是为了展示数学的自由——不预设对象,只忠实于规则,让数自己长出来。这也解释了本章为什么从 { | } 这个「什么都没有」的游戏开始。
★ 速查:第二章概念与公式。
一、记号。{L | R} 游戏(L 左选项、R 右选项);≤ 序;= 游戏相等;‖ 模糊;b(G) 生日;G + H 和;−G 负元;∗n nimber;↑、↓ 正/负无穷小。
二、定义。① 游戏:{L | R},无路可走者输;② G ≤ H ⟺ 不存在 GL ≥ H 且不存在 HR ≤ G;③ G = H ⟺ G ≤ H 且 H ≤ G;④ 数是左元素全小于右元素的游戏;⑤ G + H = {GL+H, G+HL | GR+H, G+HR};⑥ −G = {−GR | −GL};⑦ b(G) = 1 + max 选项生日。
三、核心定理。① 数判据:{L|R} 是数 ⟺ 每个左元素 < 每个右元素;② 最简性:{L|R}(数)的值 = 夹在 max L 与 min R 间生日最小的数;③ 生日归纳:第 n 天新增数 = 2n,累计 = 2n+1 − 1;④ 二进分数定理:有限天造出 ⟺ 二进分数 m/2k;⑤ 全序域:数在 +, ·, ≤ 下构成全序域;⑥ 乘法:G·H = {GLH+GHL−GLHL, … | …};⑦ nimber:∗n + ∗m = ∗(n ⊕ m),∗n ‖ ∗m(n ≠ m)。
四、常用数值。0 = { | };1 = {0 | };−1 = { | 0};2 = {1 | };½ = {0 | 1};−½ = {−1 | 0};¼ = {0 | ½};¾ = {½ | 1};3/2 = {1 | 2};ω = {0,1,2,… | };1/ω = {0 | 1, ½, ¼, …};∗ = {0 | 0};↑ = {0 | ∗}。常用等式:½ + ½ = 1、¼ + ½ = ¾、−½ + 1 = ½、G + (−G) = 0、∗ + ∗ = 0。
五、与第一章的接口。Grundy 值 𝒢(G) ↔ nimber ∗n;「和 = 异或」↔ ∗n + ∗m = ∗(n ⊕ m);「G + G 是 𝒫 位置」↔「∗n + ∗n = 0」(每个 nimber 是自身负元)。
六、典型数值(实验真跑)。Day 0–4 全部数:0;±1;±2, ±½;±3, ±3/2, ±¾, ±¼;±4, ±5/2, ±7/4, ±5/4, ±7/8, ±5/8, ±3/8, ±1/8。Day n 新增 2n 个,验证全部通过。
七、三个动作。造({L|R})· 比(查反例判 ≤)· 化(化成最简数或 nimber)。
★★ 第三章预告:几何的游戏。
本章留下的接口。我们把「游戏」翻译成了「数」:抽象的 {L | R} 一步步长成全序域,而公平博弈的等价类落在 ∗n(nimber)上。但:本册遇到的「游戏」到目前为止都是抽象的——一堆石子、一个 {L|R}。如果游戏的对象是几何的呢?一张可以折的方纸、一座七座桥的城、一个每面都有颜色的魔方——它们的「游戏」是什么结构?
第三章的问题。几何从来是玩出来的:折纸(Origami)比尺规更强——Huzita–Hatori 公理允许的六种折叠操作能解三次方程,从而「三等分角」与「倍立方」在折纸上都成为可能;七桥问题是 Euler 为消遣而写的一页论文,却诞生了图论,「奇点计数」判据讲出了一笔画游戏的全部秘密;15-拼图的不可解性用置换的奇偶性一锤定音;魔方群是 43 252 003 274 489 856 000 个状态的置换群,而「上帝之数 = 20」是一条关于群直径的定理;Hex 的「不可能平局」是拓扑的对偶性,策略偷取在其中再次登场。
为什么它们属于同一套框架?因为本章的「结构 + 策略 + 等价」三件套在这里依然成立:① 结构——折纸的每一步是一次反射,七桥的每一步是走过一条边,魔方的每一步是一次置换;它们分别对应反射群、图、置换群。② 策略——「能否三等分角」「能否一笔画完」「魔方能否还原为 k 步」都是可以证明的判断,而不是手感。③ 等价——两个折纸构造是否达成同一个几何效果、两个图是否同构、两个魔方状态是否同属一个共轭类,都是「把一个对象化成标准形」的动作——与本章「把游戏化成数」同源。
本章的三个悬念。① 折纸为什么能解三次方程,而尺规不能?(答案在「可构造数域的次数」上。)② 一笔画游戏的判据(Euler 回路)为什么只看「奇点的个数」?③ 魔方的「上帝之数」为什么是 20 而不是 100?(这是群的直径问题,用双向 BFS + 群论剪枝证明。)
一个预告性的比喻。第二章说「游戏即数」,把游戏折算成一个代数对象;第三章要说「游戏即结构」——把游戏折算成一张图、一个群、一个拓扑空间。视角再翻转一次:数只是结构的一种,几何是更丰富的那一种。带上本章的行囊(造对象、查反例、取标准形),我们进入折纸与魔方的世界。
★ 几何从来是玩出来的。用一根绳子与几根木桩丈量土地,用一张纸对折出全等三角形,用七块薄板拼出一只鹅——这些动作都发生在「定理」这个词诞生之前。本章的主张依旧只有一个:不看这些游戏「好不好玩」,只看它们「生出了什么」。折纸生出了计算几何与 Galois 理论的应用,七桥生出了图论,15-拼图生出了排列群的不变量,魔方生出了组合群论,Hex 生出了拓扑对偶,Wang 砖块则把几何游戏一路带到了不可判定性的门口。
六场游戏,三条通路(见上图)。第一条是「图形 → 图」:把折痕、桥、街道抽象成顶点与边,几何问题就变成图上的行走问题,于是有了 Euler 的一笔画判据(p74–p75)。第二条是「操作 → 置换群」:把每一次翻折、每一次转动记录下来,游戏的操作生成一个置换群,而群的不变量(奇偶性、阶、直径)就是游戏的秘密(p77–p80)。第三条是「胜负 → 拓扑不变量」:Hex 的「不可能平局」与策略偷取,把胜负问题变成一条关于曲线与连通性的定理(p83–p84)。
为什么从折纸讲起?因为折纸是「几何游戏」最古老的形态,也是最能说明本册主张的例子:它看起来像儿童手工,却在二十世纪被整理成一组精确的公理(Huzita–Hatori),并显示出比尺规更强的构造能力——用折纸可以三等分任意角、可以倍立方,而这些恰恰是古希腊三大作图难题中尺规做不到的两件。一门「游戏」比一门「学科」做得更多,这不是巧合,而是因为它允许的操作更大胆。
本章的支票。读完本章,应当能把一个几何游戏翻译成三种东西中的至少一种:一张图(然后查 Euler 判据)、一个置换群(然后算它的奇偶性与阶)、一个拓扑不变量(然后证明某类局面不存在)。本章末尾的实验页会真的把这三种翻译跑一遍:用置换把 15-拼图与魔方实现出来,验证「14-15 谜题不可解」与「R U R′ U′ 六次还原」。
★ 折纸被当作数学,晚得令人意外。在一九八〇年代以前,折纸在数学家眼里只是儿童手工;直到日本数学家 Huzita 在一九八九年的会议上列出了六条「一次折叠能做什么」的公理,Jacques Justin 与 Koshiro Hatori 随后加以整理与补充——特别是 Hatori 在二〇〇一年补上了第七条。今天这七条被称为 Huzita–Hatori 公理,它们把「折纸」正式变成一门有公理、有推理、有可证明定理的几何学。
七条公理说的是「一次折叠能做什么」。前四条很朴素:O1 过两个已知点折一条线;O2 把一点折到另一点(折痕是这两点的中垂线);O3 把一条线折到另一条线上(折痕是角平分线);O4 过一点作已知直线的垂线。后三条则藏着魔法:O5 把点 p1 折到线 l1 上,同时要求折痕经过另一个点 p2;O6 把 p1 折到 l1、p2 折到 l2 上,两个条件同时满足;O7 把 p 折到 l1 上,同时折痕垂直于 l2。
O1–O4 与尺规对照一下。尺规作图的两把「钥匙」是:直线与直线求交、直线与圆求交、圆与圆求交——用代数说,它们每次只引入一个二次方程。而 O1–O4 恰好也只能实现同样的事情(过两点作线、作中垂线、作角平分线、作垂线,都是尺规能做的)。所以只用前四条公理的折纸,和尺规一样强,也不更强。折纸的全部威力,都在 O5、O6、O7 这三条里。
这三条的特别之处在于:它们把「折痕」当成一个待定的对象,而不是给定的操作。O2 说「折痕在哪里」——它是两点的中垂线,直接给出;O5 却说「折痕必须同时满足两个条件(使 p1 落在 l1 上、并经过 p2)」,这是一个约束条件,折痕是它的解。解这样的方程,会出现二次(甚至三次)的代数障碍——这正是折纸超越尺规的入口。下一页会把这件代数的事画成一张几何的图。
★★ 上一页留下一个问题:O5、O6、O7 为什么能给出二次以上的方程?答案是一条漂亮的几何对偶:把点折到线上,折痕恰好是某条抛物线的切线。
先把「抛物线的定义」回忆一下。平面内到一个定点(焦点 F)与到一条定直线(准线 l)距离相等的所有点,构成一条抛物线。现在设纸上有定点 P 与定直线 l,我们想折一次,使 P 落到 l 上。设折痕是一条直线 c,折叠后 P 的像记作 P′,则 c 是线段 PP′ 的中垂线。于是「P′ 在 l 上」这件事,等价于:c 上存在一点(PP′ 的中点),它到 P 与到 l 的距离相等——也就是落在以 P 为焦点、l 为准线的抛物线上。再注意 c 与该抛物线的交点正是 PP′ 的中点,且 c 在该点与抛物线相切。
结论(本页的图正是它):「把 P 折到 l 上」的所有折痕,就是该抛物线的全体切线。现在加上 O5 的第二个条件——折痕必须经过定点 Q。于是问题变成:求过定点 Q 的抛物线的切线。把「过 Q 的直线」与「抛物线」联立并令判别式为 0,得到一个关于切线斜率的三次方程。这就是折纸能解三次方程的全部秘密:它把「解三次方程」翻译成了「过定点作抛物线的切线」。
折纸大师 Abe 的三次「神话」。把这个能力用起来,可以做到三件尺规做不到的事:① 三等分任意角(尺规做不到,因为一般角的三等分等价于解一个不可约的三次方程);② 倍立方(作出 ∛2,即解 x3 = 2);③ 作出正七边形(它要求解分圆方程中剩下的一个三次因子)。这三件事被称为「折纸的三大业绩」,前两件是古希腊留给后世的著名难题,第三件也曾被认为不可能。
注意这里已经出现了一条重要的分界。折纸能做二次与三次,所以它能解的方程比尺规多;但它仍然不能解一般五次方程(那需要五次扩张,折纸给不出)。下一页用 Galois 理论把这条界线说成一句话:折纸可构造的数的「次数」只能是 2 与 3 的乘积。
★★★ 现在用 Galois 理论把上一页的直觉变成一条精确的分界。先回忆一句关键的话:几何作图的能力,等价于代数构造的能力。给定一组初始点,能作出的点,其坐标落在由初始点坐标生成的一个域里;而每作一步(画圆、画线、求交点),最多把这个域做一次二次扩张。
尺规的账。设初始数据生成的域是 K(例如从单位长度出发,K = ℚ)。直线与圆、圆与圆的交点,坐标都满足一个二次方程,所以新坐标系是 K(√d) 形式的二次扩张。作 n 步,就得到一座「扩张塔」ℚ = K0 ⊆ K1 ⊆ … ⊆ Kn,每一步 [Kk+1 : Kk] = 2。于是任何尺规可构造的数的次数都是 2 的幂:[Kn : ℚ] = 2n。
这条「2 的幂」立刻判死了两个古希腊难题。倍立方要作出 ∛2,它的极小多项式是 x3 − 2,次数 3,不是 2 的幂,所以尺规作不出。三等分任意角同理:要求解一个一般不可约的三次方程(例如三等分 60° 等价于解 8x3 − 6x = 1,其判别式表明多项式不可约,次数 3),也作不出。这两个「不可能」都不是因为数学家不够聪明,而是因为「2 的幂」这条代数铁律。
折纸的账要多一列。O5、O6、O7 允许的折法,其解满足二次或三次方程,所以折纸的扩张塔每一步可以乘 2 或乘 3。于是折纸可构造的数的次数形如 2a 3b:倍立方(次数 3)能做,三等分角(次数 3)能做,正七边形(次数 3)能做。但这本账也画出了折纸的边界:一般五次方程的 Galois 群是 S5,不是可解群,需要五次扩张——折纸同样做不到。
于是「游戏比学科强」这句话有了精确的形式:不是折纸打败了尺规,而是折纸的游戏规则允许的操作集合更大,因此它对应的「可构造数域」是一族更大的域。把游戏规则翻译成一个「允许的扩张次数集合」,再对照方程的可解性——这正是 Galois 理论最迷人的用法,而它第一次被这样用,是在一场关于折纸的游戏里。
★ 一七三六年,东普鲁士的哥尼斯堡城横跨普雷格尔河,河中有两座岛,岛与两岸之间架着七座桥。市民们津津乐道一个消遣:能否走遍七座桥,每座桥恰好走一次,最后回到出发地?没有人成功,也没有人说得清为什么。这一年,Euler 把这个「无聊的问题」写成论文,给出了一劳永逸的答案,顺带开创了一门后来叫作图论的学问。
Euler 的第一步是「抽象」——也是全章最重要的一步。他注意到:桥的具体长短、宽窄、形状全都无关紧要;真正有关的只有「谁连着谁」。于是把四块陆地缩成四个点(北岸、南岸、两座岛),把每座桥画成连接两点的线,得到一张「七条边的图」。这一步把几何问题换成了图的问题:不再问「多远」,只问「连通」。Euler 说,这种研究属于「位置的几何」(geometria situs),与长度、面积无关。
第二步是「计数」,而且只数一个东西:每个点上连了几条线(顶点的度数)。设想真的走完了这一圈。每当路线「经过」一个中间顶点,必然是从一条边进、从另一条边出——一进一出,成对消耗该点的边。所以,如果每条边恰好走一次且最后回到起点,那么每个顶点的边都必须两两配对,度数为偶数。反之,若某个点连着奇数条边,总有一条边「配对不上」,只能停留在那里——无法回到起点。
第三步是「对表」。看看哥尼斯堡这幅图:北岸连三座桥(度 3)、南岸连三座(度 3)、东岸连三座(度 3)、中间的岛连五座(度 5)——四个顶点的度数全是奇数。Euler 的判据立刻判定:不存在这样的走法。七桥谜题不是「很难解」,而是「根本无解」。一旦抽象成图,「无解」就成了一条可以证明的定理,而不是靠试。
这里要特别记住一件事:Euler 只用了「奇偶」。他没有关心桥有多长、岛有多大,只关心每个顶点连着奇数条还是偶数条边。「找一个在问题变换下保持不变的量,用它来判定」——这正是本册反复出现的动作,而它的第一次登场,就是这张七桥图。下一页把这个判据补成完整的一笔画定理。
★ 七桥问题只处理了一次走遍所有边;把它的判据一般化,就得到「一笔画」的完整定理。一笔画游戏的规则是:给出一张图,能否用一笔把每条边恰好画一次(不许抬笔重描)?答案由 Euler 在 1736 年的同一篇论文里给出。
定理(Euler 一笔画判据)。设 G 是连通图(忽略孤立点)。① 存在欧拉回路(闭合一笔画,回到起点)当且仅当每个顶点的度数都是偶数;② 存在欧拉路径(开放一笔画,不要求回到起点)当且仅当恰有 0 个或 2 个奇度顶点——若恰有 2 个,则路径的两端必是这两个奇度顶点。
必要性(为什么奇度点不行)。看路线「经过」一个顶点时的情形:进一条边、出一条边,边成对消耗。若顶点不是起点也不是终点,它的每条边都必须这样配对,故度数为偶;若顶点是起点或终点,它「进出的次数」比别处少一次配对,度数为奇。于是在一笔画里,奇度顶点只能有 0 个(闭合)或恰好 2 个(开放,且就是两端)。哥尼斯堡有四个奇度点,故连开放的一笔画都不存在。
充分性(为什么偶数就够了)——给一个能造出路线的方法。若所有点度为偶,从任意点出发随便走,只走没走过的边:因为每到一个点都能再出去(偶度保证「进的边」与「出的边」配得起来),只有回到出发点时才被迫停下;把得到的圈记下,若还有没用过的边,就在与圈相交的点上再走一个圈,然后把两个圈「拼」起来。反复进行,直到用完所有边。这就是 Hierholzer 算法,它不只证明存在,还真的给出画法,复杂度是线性的。恰有两个奇度点时,从其中一个奇度点出发、到另一个结束,同样的论证适用。
这一页当成「游戏规则 → 判定定理」的典范。游戏的规则极其简单(每条边正好画一次),可它导出了一条干净的二分判据(「是否全为偶度」)。而且这条判据只依赖一个不变量——度数的奇偶,与图的形状、大小、边数全无关。这正是本章要训练的翻译:把「能不能玩通」翻译成「某个整数是奇还是偶」。后面 15-拼图(p77–p78)与魔方(p79)会是同一种翻译的两次升级——从「度数的奇偶」升级到「置换的奇偶」。
★★ 七桥问题问的是「每条边恰好走一次」;把「边」换成「点」,就得到另一个孪生问题:能否走遍每个顶点恰好一次,最后回到起点?后一个问题以一桩游戏史闻名:一八五七年,爱尔兰数学家 Hamilton 发明了一副棋,把它命名为 Icosian Game(「周游世界」棋),并在两年后以二十五英镑卖给了玩具商。Hamilton 也许是历史上第一位把自己发明的数学游戏拿去卖的数学家。
游戏怎么玩?棋盘是一个正十二面体(二十个顶点),每个顶点标上一座著名城市。玩家沿边行走,要求每个城市恰好访问一次,最后回到出发的城市——这正是一条绕世界一周的旅行路线。这样一条「经过每个顶点恰好一次的圈」,今天叫 Hamilton 回路;如果只要求经过每个顶点恰好一次、不要求回来,就叫 Hamilton 路径。
它与 Euler 问题长得极像,命运却天差地别。欧拉回路可以在线性时间内判定(数度数),而且判据简洁到一句话;Hamilton 回路则没有已知的多项式算法——判定「图里有没有 Hamilton 回路」是NP-完全的(Karp 在 1972 年列入他的二十一个经典问题)。换句话说:「边的问题」易,「点的问题」难。这是本章第一次遇到「复杂性」这位不速之客,第四章与第五章会正式与它打交道。
为什么十二面体特别适合做这个游戏?因为正十二面体图是 3-正则的:每个顶点恰好连三条边。3-正则」是 Hamilton 问题最经典的结构(著名的 Tait 猜想就与 3-正则平面图有关,它在 1946 年被 Tutte 反例推翻)。Hamilton 用一个漂亮的多面体做棋盘,无意中把玩家引到了一个既迷人又棘手的谜题地带——他以为在卖玩具,其实在卖一道 NP-完全问题。
★★ 一八七〇年代,一位美国邮政局长 Noyes Palmer Chapman 发明了一种滑块拼图;一八八〇年它在美国引发了一场空前的狂热——史称 「14-15 谜题」狂潮。人们排队到玩具店门口,华尔街的经纪人在营业时间偷偷摆弄它,甚至有报道说一位店主因为顾客整夜不走而报警。这款游戏卖出了数百万份,它的魔力来自一个数学事实:有两种几乎一样、看起来都该能解的局面,其中一种根本无解。
规则先讲清楚。一个 4 × 4 的方框里放十五块编号 1 到 15 的滑块,留一个空格;每次移动只能把与空格相邻的滑块滑进空格(即空格与邻格「交换」)。目标是排成 1, 2, …, 15 的整齐顺序。设初始局面已经很整齐,唯独 14 与 15 换了位置——把这两块换回来,行不行?
关键的翻译:把局面看成一个置换。把十六个格子编号,空格也当成第 16 号「棋子」。于是一个局面就是 S16 中的一个置换 σ:σ(位置) 表示「现在放在该位置的棋子编号」。而每一步移动,恰恰是空格与某个相邻格子的一次对换(transposition)——也就是把 σ 右乘一个对换。
不变量出现了。一个对换总是改变置换的奇偶性:偶置换乘对换变奇,奇置换乘对换变偶。既然每一步都翻转奇偶性,那么「奇偶性」本身不是一个不变量——但结合空格的位置一起看。空格每移动一步,就跨到一个相邻格;而相邻格在棋盘的黑白染色下颜色相反。于是「置换奇偶性 ⊕ 空格所在格的颜色」在每一步下同时翻转两次,保持不变——这是一个真正的不变量(下一 p 会把这点写精确)。
用它来看 14-15 局面。「把 14 与 15 互换、其余不动」是棋盘上的一次对换,即奇置换,而空格的位置没有变(在同一个格子里,颜色相同)。与目标局面(恒等置换,偶)相比,这个不变量的值不同——所以它不可达。注意这个论证的力量:它不需要聪明,只需要会数奇偶。正是这种「一个整数就够了」的判据,才是数学游戏的标志。
★★ 这一页把上一页的直觉写成一个严格的证明。记号:σ 是「16 个位置的置换」(空格算作第 16 号棋子),sgn(σ) 是它的符号(偶置换为 +1,奇置换为 −1)。
定理。在 4 × 4 滑块拼图中,把十六个格子按棋盘方式黑白染色。定义
「不变量」 I = sgn(σ) · (−1)空格所在格的颜色,其中颜色取值为 0(浅)或 1(深)。则 I 在任意一次合法移动下不变。因此,两个 I 值不同的局面互不可达。
证明。一次合法移动把空格与相邻格 c 交换,于是 σ 右乘一个对换 (c, 空格),故 sgn(σ) 乘上 −1(对换是奇置换,这一点由「逆序数每次恰改变 1」立得)。同时,空格从一格移到相邻格,相邻两格颜色相反,故 (−1)颜色 也乘上 −1。两个因子同时变号,乘积不变。◻
把两个局面代进去。① 目标局面:σ 是恒等置换,sgn = +1;检查空格(右下角,第 4 行第 4 列)。在「行列号之和为偶」取浅色的染色下,右下角 4 + 4 = 8 为偶(浅色),对应因子 +1。故 I = +1。② 14-15 局面:把目标局面中的 14 与 15 互换,这是一个对换,所以 sgn = −1;空格位置没动,颜色因子仍是 +1。故 I = −1。两者不等,故不可达。
换一个更好数的判据(逆序数版)。把棋盘从上到下、从左到右读成一串(跳过空格),数其中的逆序数 inv(前面比后面大的对数)。可以证明:局面可解当且仅当 inv 加上「空格从下数所在的行号」为奇数。用 14-15 局面检验:逆序数恰为 1(15 在 14 前),空格在第 4 行(从下数第 1 行),1 + 1 = 2 为偶——不可解。两个判据说的是同一件事,逆序数版手算更快(p87 例题会用它)。
最后说一句「不可解」的意义。它不是「现在没人解得出」,而是在数学上永远不可能——因为不变量堵死了所有路径。这正是本册反复主张的:游戏的「难」有两种,一种是无知,一种是被定理封锁;这一页属于后者。而 Sam Loyd 正是靠悬赏一千美元求解这个被定理判死的局面而成名,成了历史上最著名的「数学骗局」之一。
★★ 一九七四年,匈牙利建筑学教授 Rubik 造出了那个后来风靡全球的立方体。他关心的是机械结构,但数学家的第一反应是:把所有转动的可能结果收集起来,得到的是什么?答案是一个群,今天我们叫它魔方群。
先把「转动」定义清楚。取六个基本操作:U(上)、D(下)、L(左)、R(右)、F(前)、B(后),每个都把相应的一面顺时针转 90°。以 R 为例:它把右面的 4 个角块转成一个 4-循环、4 个棱块转成一个 4-循环,同时把上、前、下、后四个面的右列各转成一个 4-循环——总共 5 个 4-循环,另有 34 个贴纸不动。魔方群就是这六个置换生成的群:G = ⟨U, D, L, R, F, B⟩。
它有多大?|𝒢| = 43 252 003 274 489 856 000 ≈ 4.3 × 1019。这个数不是估出来的,是数出来的:8 个角块有 8! 种排列、每个角块有 3 种朝向(但最后一个由前七个决定,故 37);12 个棱块有 12! 种排列、每个有 2 种朝向(同样 211);再除以 2,因为「角块排列的奇偶」必须与「棱块排列的奇偶」一致。乘起来就得到上面这个十九位数。
为什么必须用群来理解它?因为魔方上手的第一步错觉就是「每块都能独立转」——其实不能。动了这一块,必然连累别的块。把这件约束用群的语言写出来,就清楚了:① 轨道告诉我们哪些块可以互相到达(角块只与角块换位、棱块只与棱块换位);② 循环分解把一个操作写成若干不相交循环的乘积,让「转了多少次复原」一眼可算(阶 = 各循环长度的最小公倍数);③ 换位子 [R, U] = R U R−1U−1 是「只动三块、其余不动」的精细工具,全部速拧公式都是它的变体。
于是三个日常问题都变成了群的问题。「这个局面能不能还原?」= 它是否属于 𝒢(不属于的就是被人拆装过的非法状态,占全部排列的 11/12);「最少几步能还原?」= 群上从该元素到恒等的距离,而最大值就是下一页的「上帝之数」;「两个公式等价吗?」= 群元素的相等。p88 的例题与 p96 的实验会把这些转化真的算一遍。
★★★ 上一页说魔方有 4.3 × 1019 个状态。一个自然的度量随之出现:把这些状态排成一张图(顶点是状态,边是一次转动),这张图的「直径」是多少?也就是说,从一个最「乱」的状态出发,最少需要几步才能还原?这个最坏情况的最少步数,被戏称为 God’s Number(上帝之数)——因为「只有上帝」才会永远用最短的解法。
「宇宙年龄内不可能穷举」——这个直觉哪里错了?如果老老实实枚举 4.3 × 1019 个状态,即使用每秒十亿次的机器,也要上千年。可数学家并没有放弃,他们做了三件事。① 用对称性压缩:把魔方整体翻个身、转个向,难度不变——空间中有 24 种朝向,再加镜像共约 48 倍,于是「需要检查的状态」一下少了一个数量级。② 把大问题切成陪集:以子群 H = ⟨U, F2, R2, D, B2, L2⟩ 的陪集为单位,2 217 093 120 个陪集再用「集合覆盖」技巧减到 55 882 296 个;每个陪集一台现代 PC 二十秒就能算完。③ 只找「≤ 20 步的解」,不求最优解:因为下界 20 已经由 superflip 状态证明,只需对每个状态找到一条不超过 20 步的路。三五台机器跑不完,就借来谷歌的闲置算力——总共约 35 CPU 年,2010 年 7 月,结论落地:d = 20。
这段历史本身就是一堂方法论课。下表是上界的追踪:1980 年下界 18;1981 Thistlethwaite 证 52;1990 Kloosterman 降到 42;1992 Reid 证 39、Winter 当天再降到 37;1995 Reid 借 Kociemba 的两阶段算法证到 29,同一年他用 superflip 证明下界 20;2005–2008 Radu、Kunkle–Cooperman、Rokicki 把它从 28 一路压到 22;2010 四位作者合证 20。每条新界线都不是「更用力地枚举」,而是「更聪明地理解群的结构」。
「20」这个数的价值在哪?它是一个精确的定理:任何打乱的合法魔方,都可以在 20 步内还原;而且确实存在需要 20 步的状态(如下界的 superflip——所有棱块翻面、角块归位)。这就是「宇宙年龄内不可穷举」的直觉被打破的方式:不是算得更快,而是把「算全部」换成「用群论与对称性只算必要的那一小部分」。本章到此为止已经见过两种「不变量」——度数奇偶与置换奇偶;这一页给出第三种:群上的距离(直径)。
★★ 铺砌(tiling)是最古老也最现代的几何游戏:给一块区域,能不能用给定的骨牌把它刚好铺满、不重不漏?最朴素的骨牌是多米诺(domino)——两个方格并排;把单格换成更多方格的连通图形,就叫多格骨牌(polyomino):三格骨牌(tromino)、L 形、T 形……铺砌的迷人之处在于:它问的是一个「存在性」,而最有力的证明工具竟是「染色」。
先看一个经典问题。拿一张 8 × 8 的棋盘,挖掉两个对角格,剩下的 62 格能否用 31 块多米诺骨牌铺满?凭直觉很难判断。但把棋盘按棋盘方式黑白染色,事情立刻明了:每个多米诺骨牌覆盖一个黑格与一个白格;所以若能被骨牌铺满,黑格数必须等于白格数。原棋盘黑 32、白 32;挖掉的两个角颜色相同(对角格同色),于是剩下黑 30、白 32——不等,故不能铺。
把「染色」提炼成一般工具:权函数。给每个格子赋一个「权」(可以是整数、也可以是复数),使得任何一块骨牌覆盖的格子权重之和恒为常数 c。那么「整块区域能被铺满」的一个必要条件就是:所有格子的权和必须是 c 的整数倍。若不是整数倍,就断定「铺不了」。棋盘染色就是最平凡的例子(黑白 = 权 ±1,c = 0)。
把它升级到复数。要证「n × n 的棋盘挖掉一格后不能被 L 形三格骨牌铺满」(当 3 | n),黑白染色不够用,得给格子赋 三次单位根 1, ω, ω2 的权(沿行列循环取),此时每块 L 形的权和恒为 0,而整块区域的权和不为 0——于是不能铺。这就是「权函数」的威力:它把「几何上不可能」翻译成「代数上和不对」。
铺砌游戏与本章其余部分的关系,值得点破。它和 15-拼图共享同一个骨架:找一个守恒量(不变量),用它判定「能不能到」。15-拼图的不变量是置换奇偶,铺砌的不变量是权和。而下一页的 Wang 砖块会把这条路走到底——当「能不能铺」这个问题本身被证明无法用算法判定时,几何游戏就撞上了逻辑的地基。
★★★★ 上一页的铺砌问题是「给定区域和骨牌,能不能铺」。把它反过来:给定一组砖块,能不能铺满整个无限平面?这就是 Wang 砖块(Wang tiles)问题。它的规则干净得可爱:每块砖是一个正方形,四条边各涂一种颜色;拼接时相邻两边的颜色必须相同。没有旋转、没有翻转——只有「颜色对不对」。
一九六一年,逻辑学家 Hao Wang 提出一个猜想。他研究了这类砖块后提出:「如果一组砖块能铺满平面,那么一定能用周期的方式铺满」——也就是说,铺满这件事若能成,就存在一种「按固定图案重复」的铺法。如果这个猜想成立,铺砌问题就变得可判定(周期性可以被机械地搜索出来)。这个猜想看起来非常自然,几乎没人怀疑。
但一九六六年,他的学生 Berger 给出了否证。Berger 构造出一组(最初有 20 426 块)砖块:它们能铺满平面,但任何铺法都必然是非周期的——不存在周期性铺法。这一下把 Wang 的猜想彻底推翻。更惊人的是它的副产品:Berger 证明了「给定砖块集能否铺满平面」这个问题是不可判定的——也就是说,不存在一个算法,对任意输入的砖块集都能在有限时间内正确回答「能」或「不能」。
为什么「非周期」与「不可判定」是一回事?因为若能铺满就一定可以周期铺,那么「能否铺满」就等价于「能否周期铺」,而周期性可以被枚举搜索——于是问题可判定。既然问题不可判定,就必然存在能铺满却无法周期铺的砖块集。逻辑上的「不可判定」与几何上的「非周期」在这里被绑在了一起,这是二十世纪数学最漂亮的几处缝合之一。
从此,非周期铺砌成了迷人的研究对象。Berger 的 20 426 块太大,几十年来人们不断削减:Penrose 在一九七四年给出只用两种菱形(有匹配规则)的非周期铺砌,图像如同镶嵌的星芒;对 Wang 砖块,最小非周期集的记录一路降到 13(Culik)、11(Kari 与 Culik)。这一页的核心:一个关于「把方块拼起来」的游戏,最终把答案交给了「停机问题」那一侧——它告诉我们,几何游戏里也藏着人类算法够不到的地方。这正是第五章「逻辑与无限的游戏」要展开的主题。
★★★ Hex 是一个几乎不需要解释的游戏。棋盘是菱形排列的一堆六边形。红方要设法让自己的棋子连成一条从上边到下边的通路,蓝方要连成一条从左边到右边的通路;两人轮流落子,先连成的获胜。它由丹麦人 Piet Hein 在一九四二年发明,几年后美国的 John Nash 独立重新发明(所以又叫「Nash」或「John」),而 Nash 为它证明的第一条定理就让人吃惊:Hex 不可能平局。
为什么「不可能平局」不是显然的?棋盘上格子有限,两人落满最后一格时必然有人先连成——这听起来像废话。但稍想一下会发现不然:填满棋盘时,红方的棋子一定连成上—下吗?他完全可能东一块西一块,既不连通上边也不连通下边。所以要证明的是:在任何一个「红蓝二染色」的 Hex 棋盘上,要么红连通上—下,要么蓝连通左—右,二者必居其一。这是一条关于平面镶嵌的拓扑定理,一点也不显然。
证明的一条路线:Jordan 曲线定理。假设红方已经有了一条上—下的通路。把它看成平面上的一条折线(走六边形的中心)。这条折线从上边延伸到下边,把整个菱形棋盘分成了左右两块(这是 Jordan 曲线定理在「带边界的矩形」上的版本:一条连接两条对边的曲线会把区域割开)。此时左边那一块里,如果蓝方要连成左—右通路,它必须从左边出发、走到右边——可它被红方的折线挡住了,只能留在左半边。于是红方的通路「堵塞」了蓝方的通路,两者不能共存。
还差「必有一方存在」这一半,它更需要技巧。常用的办法是 Sperner 引理的离散版本:给三角剖分的顶点按规则上色,则必存在一个包含三种颜色的小三角形。把 Hex 棋盘的格子与「边界上的小段」对应起来上色,Sperner 引理保证:一定存在一条连通的同色链从一边贯穿到另一边。或者用「对偶路径」论证:从棋盘的一个角出发,沿着红蓝格子之间的缝隙走,这条路会在某处「撞到」一条必须存在的同色通路。三条路线(Jordan / Sperner / 阻塞)说的是同一件事,只需选一条最顺手的写出来。
结论有双重价值。一方面,它保证了游戏不会和局——棋盘填满时胜负已分,这消除了「无限拖延」的可能(对照第一章「有限、无平局」的公理)。另一方面,它给了 Hex 一个漂亮的身份:一个把「平面拓扑」变成「落子规则」的游戏。而「不可能平局」一旦成立,下一步「先手是否必胜」就可以用一个极巧的论证回答——这就是下一页的策略偷取。
★★★ Hex 的另一条定理同样由 Nash 证明,而且思路近乎「狡猾」:Hex 的先手必胜。这条定理的形态——它证明了必胜策略存在,却没有指出该怎么下。这是本册第二次遇到这种「存在性证明」(第一次是第一章 p22 的 Chomp)。
定理(Nash)。在 Hex 中,先手有必胜策略。
证明(策略偷取)。用反证法。假设后手有必胜策略,我们导出矛盾。
① 先看对称性。Hex 的规则对双方完全一样(先手要连上—下,后手要连左—右——这在六边形棋盘上其实是「同一个要求」旋转了 60°),棋盘也没有任何偏向。于是「先手」与「后手」这两个角色是对称的,没有谁在规则上更占便宜。
② 再看单调性:多一枚自己的棋子绝不吃亏。这是一句需要想一下的话——在 Hex 里,棋子越多,能连成通路的机会只增不减;多余的棋子不会挡住自己的路(它只挡对方)。形式地说:若某个局面下有一个必胜策略,那么在任何「多一枚棋子、其余不变」的局面下,同样必胜(把多出来的那枚忽略即可,若对手恰好走在多出来的那格,就随便再走一步)。
③ 最后「偷」一步。先手随便走一步(比如棋盘正中央),然后假装自己刚才没走、现在轮到自己是「后手」,按假设中后手的必胜策略来应对。这个「假装」的关键在于:先手多出的那一枚棋子只会帮忙,不会添乱(由 ②)。于是这个策略在真正的对局里依然有效——它给出的任何走法都合法,且保证赢。矛盾出现了:我们假设后手必胜,却推出先手也能赢;而「不可能平局」(p83)又排除了「两人都不赢」。唯一的可能是:后手根本没有必胜策略,先手必胜。◻
为什么这叫「策略偷取」?因为它不设计一条具体的路线,只说:「假如对手的胜利办法存在,我就把它偷过来用。」它与第一章的 Chomp 是同一招:Chomp 里先手先「白吃」左上角,再假装是后手;那里的「白吃步」与这里的「随便一步」扮演同一个角色——都是「多一步不吃亏」的落脚点。而当棋盘比较小时(四阶以内),可以用计算机把它蛮力算出来,验证先手确实必胜;棋盘一大,蛮力失效,只剩这条策略偷取的论证。这就是「不变量 + 存在性」的又一次胜利:我们不需要知道赢的走法,也能知道赢家是谁。
★ 本章一路讲了折纸、七桥、15-拼图、魔方、Hex、铺砌,难免有人要问一个尖锐的问题:「七巧板、华容道这些益智玩具,不也是数学吗?」这句话里有对有错,值得仔细拆开——因为它正是本书与「益智游戏书」的分水岭。
先把两种说法摆出来。一种说法是:「凡是需要动脑筋的游戏都是数学游戏」——因为动脑就要推理,推理就是数学。这个说法太大,会把猜字谜、脑筋急转弯、甚至「谁是卧底」都算进来,而这些游戏里既没有可判定的结构,也没有能被证明的定理。另一种说法是:「玩具就是玩具,与数学无关」——这又太小,会把七桥问题(也起源于一个消遣)与 Icosian Game(Hamilton 卖的玩具)一并赶出数学。
正确的判据有三条,缺一不可。① 有结构:游戏的状态能写成数学对象(图、置换、组态、概率空间),且有精确的规则;② 有可证明的策略:胜负判据能被证明对所有局面成立,而不只是「试过很多次都对」;③ 通向一条定理:玩到最后能长出真正的数学(一条判据、一个不变量、一门理论)。用这三条去筛,玩具与数学的界线立刻清晰了。
拿七巧板检验。如果只问「能不能拼出天鹅、帆船、奔马」,那确实只是拼图技巧,不是数学——因为「拼法」既无普遍结构,也无证明。但若改问:「七巧板的七块面积各是多少?哪些多边形能被七块拼成?为什么某些图形(如正方形挖去一角)一定拼不出?」——这时面积约束、刚性约束、铺砌不变量纷纷登场,七巧板就变成了一门有定理的拼图几何(p97 的札记会展开)。同一个玩具,问法不同,身份就不同。
拿华容道检验,答案恰好相反。华容道(把曹操移出出口)看似是个纯粹的玩具,但它有严格的状态空间(每个滑块的位置构成一个有向图),有置换/位置不变量(哪些局面可达、哪些不可达可以被证明),而且它的求解问题已被证明是NP-难的。所以华容道是数学,而且是相当硬的数学——它与 15-拼图是同一族(p77–p78 的置换奇偶性正是它的第一件武器)。
再看魔方。有人说「魔方靠背公式,不算数学」——恰恰相反。背公式是玩家的事,理解公式为什么有效是数学的事:为什么 R U R−1U−1 只动三块?(换位子)为什么某些局面永远还原不了?(群结构)最少几步一定能还原?(God’s Number = 20)。魔方是本章数学含量最高的玩具之一,它的问题之一(直径)用掉了 35 CPU 年。
★★ 例题 1:一笔画判定与 Euler 路径。用 p75 的判据判定下面三张图,并在能画时写出具体路径。
图 G1。四个顶点 A、B、C、D,边为 AB, BC, CA, CD。逐个算度数:A 连 B、C,度 2;B 连 A、C,度 2;C 连 A、B、D,度 3;D 只连 C,度 1。奇度顶点是 C 与 D,恰好两个——所以存在欧拉路径(开放一笔画),两端必是 C 与 D;但不存在欧拉回路(因为不是全偶)。一条路径:D → C → A → B → C,四条边各走一次,起点 D、终点 C。
图 G2。顶点 A、B、C、D、E,边为 AB, BC, CA, CD, CE, DE。度数:A 连 B、C,度 2;B 连 A、C,度 2;C 连 A、B、D、E,度 4;D 连 C、E,度 2;E 连 C、D,度 2。全部为偶——存在欧拉回路。一条回路:A → B → C → D → E → C → A,六条边各一次,回到 A。
图 G3。四个顶点排成「四边形加两条对角线」:AB, BC, CD, DA, AC, BD。度数:每个顶点都连 3 条边(例如 A 连 B、D、C)。四个奇度顶点——一笔画不存在(无论开闭)。理由:要把每条边配成对,需要奇度顶点为 0 或 2 个;四个奇度点必然留下两条「配对不上」的边。这类图至少需要「两笔」才能画完(一笔解决一对奇度点)。
小结(判定的四步手算)。① 数出每个顶点的度数;② 数奇度顶点的个数 k;③ k = 0 → 欧拉回路;k = 2 → 欧拉路径(起终点就是这两个点);k ≥ 4 → 一笔画不存在(需要 k/2 笔);④ 注意:图必须连通,否则先分块讨论。这里再次出现「只数一个整数」的判据:把「有没有一笔画」翻译成「奇度点有几个」。
★★ 例题 2:15-拼图的可解性判定。用 p78 的判据(逆序数版)逐一手算。
判据(背下来)。把棋盘从上到下、从左到右读成一串,跳过空格,数逆序数 inv(前面的数比后面大的对数);再记空格从下数所在的行号 r(最下面一行 r = 1)。局面可解 ⟺ inv + r 为奇数。
例 2-1(经典 14-15 局面)。局面为
1 2 3 4 / 5 6 7 8 / 9 10 11 12 / 13 15 14 ␣
解。读成一串(跳过空格):1,2,…,13,15,14。逆序只出现在 (15,14) 这一对:inv = 1。空格在最后一行(第 4 行),从下数 r = 1。故 inv + r = 2,为偶数 ⇒ 不可解。这与 p78 的证明一致:14-15 互换是一次对换(奇置换),而空格没动——不变量堵死了这条路。
例 2-2(空格挪到倒数第二行)。局面为
1 2 3 4 / 5 6 7 8 / 9 10 11 12 / 13 15 ␣ 14
解。读成一串:1,…,13,15,14,仍是 inv = 1(注意跳过空格后顺序不变)。空格现在在第 4 行第 3 列,仍在最后一行,从下数 r = 1。故 1 + 1 = 2,偶数 ⇒ 不可解。可见「把空格挪一挪」并不改变可解性——因为空格的左右移动同时翻转了 inv 与 r 中的一个,判据的和不变。
例 2-3(干净的可解局面)。从已解局面出发,把第 15 号滑块与空格交换再与第 12 号交换,得到:
1 2 3 4 / 5 6 7 8 / 9 10 11 ␣ / 13 14 15 12
解。读成一串:1,…,11,13,14,15,12。逆序只来自末尾的 12:它前面有 13,14,15 三个都比它大,故 inv = 3。空格在第 3 行(从下数第 2 行),r = 2。故 3 + 2 = 5,为奇数 ⇒ 可解。
例 2-4(一眼假的快判)。若把某个局面的前两行完全颠倒:4 3 2 1 / 8 7 6 5 / 9 10 11 12 / 13 14 15 ␣。解。读成 4,3,2,1,8,7,6,5,9,…,15。前八个数的逆序:(4,3),(4,2),(4,1),(3,2),(3,1),(2,1) 共 6 个,加上第二行同样 6 个,共 inv = 12;空格在最底行 r = 1;12 + 1 = 13 为奇 ⇒ 可解。(注:同一条判据对 3 × 3 的 8-拼图略有不同——那里棋盘是奇数宽,判据简化为「inv 为偶」。p96 的实验会验证这一点。)
练习(自己做)。① 判断 ␣ 2 3 4 / 1 5 6 7 / 8 9 10 11 / 12 13 14 15 是否可解;② 把已解局面的第 1 号与第 2 号互换(空格在右下),可否解?③ 若棋盘改为 3 × 3(8-拼图),判据怎样简化?为什么?
★★★ 例题 3:魔方的置换计算。把一次操作写成置换的乘积,判断它的奇偶性与阶。
约定。用 U, D, L, R, F, B 表示六个面的顺时针 90° 转动(俯视该面时顺时针),带撇号表示逆时针。每个基本转动都是若干不相交循环的乘积。
例 3-1(单面转动的置换与阶)。求 R 的循环分解与阶。
解。看右面所在的那一层(9 个小块)。R 把右面的 4 个角块转成一个 4-循环、4 个棱块转成一个 4-循环;同时把上、前、下、后四个面的右列(每列 3 个贴纸)各转成一个 4-循环。于是 R 在 54 个贴纸上恰好是 5 个 4-循环的乘积(另有 34 个贴纸不动)。阶 = 各循环长度的最小公倍数 lcm(4,4,4,4,4) = 4。也就是说,同一个面连转四次回到原样——这是「单靠一个面转动的重复」的周期。
例 3-2(R 的奇偶性)。求 R 作为 54 元置换的符号。
解。一个长度 L 的循环的符号是 (−1)L−1;L = 4 时是 −1(奇)。这里 5 个 4-循环相乘,总符号 (−1)5 = −1。所以每次 90° 转动(无论哪个面)都是奇置换;而 180° 转动(如 U2)是 5 个 4-循环的平方 = 5 对 2-循环 = 10 个对换,符号 (−1)10 = +1,是偶置换。这也说明:还原魔方所用的步数若全是 90° 转动,必为偶数步——但这不是一条好判据(因为 180° 转动掺进来就失效)。
例 3-3(sexy move 的阶)。把 R U R−1U−1 写成置换乘积,求它的阶。
解。先算整体置换(用计算机或手工追踪都可以;p96 的实验用 54 个贴纸的置换程序来算)。结果是:R U R−1U−1 的循环长度为 (3,3,2,2,2,2,…) 一类组合,其阶为 lcm = 6。换句话说:把 R U R−1U−1 连做六次,魔方回到原样。这正是速拧界著名的「六遍定律」——它不是口诀,而是「置换的阶 = 循环长度的最小公倍数」这条群论事实的直接推论。(实验输出里可以看到:R 阶 4、R U R−1U−1 阶 6、它的平方阶 3。)
例 3-4(为什么单面转动的重复有周期,而换位子没有明显周期)。R4 = e 是一个「短周期」;而一个看似更复杂的公式 R U R−1U−1 的阶是 6(也很短);但有些公式的阶极大(如某些「打乱公式」的阶可达数十万)。通用事实:任何置换的阶都等于其循环长度的最小公倍数,因此永远是一个「可以被算出来的有限数」。这就把「转多少次回去」这个问题彻底解决了——不需要试,只要看循环。
要点。① 基本转动 = 5 个 4-循环;② 符号 = 循环符号之积;③ 阶 = 循环长度的最小公倍数;④ 这些都在 p96 的实验里被真跑验证。
★★ 习题 1:基础(折纸、七桥、拼图)。
1. 写出 Huzita–Hatori 七条公理中认为「最像尺规」的四条,并说明为什么 O1–O4 合起来不超出尺规的能力范围。提示:想想它们各自等价于「作中垂线 / 角平分线 / 垂线」。
2. 解释「把点 P 折到直线 l 上」的所有折痕为什么是以 P 为焦点、l 为准线的抛物线的切线。用「折叠 = 中垂线」与抛物线的定义。
3. 用「度数」证明:一般角的三等分不能由尺规完成(设三等分 60° 角,导出三次方程 8x3 − 6x − 1 = 0,再论证它不可约)。
4. 画出哥尼斯堡七桥的图,标出每个顶点的度数,并用 Euler 判据说明为什么「一次走遍七桥」不可能。若再修一座桥(连接两座岛),问题会变得可解吗?
5. 判定下列各图是否存在欧拉回路 / 欧拉路径(列出每个顶点的度数再判断):① 三角形加一个悬挂点;② 五边形加一条对角线;③ 完全图 K4;④ 立方体图(8 个顶点、12 条边)。
6. 在 4 × 4 拼图上判定:① 14 与 15 互换、空格在右下;② 空格在左上、其余归位;③ 前两行颠倒。分别写出逆序数与结论。判据:inv + 空格从下数行号 为奇 ⟺ 可解。
7. 证明:把 15-拼图的两块相邻滑块互换(其余与空格都不动)一定不可解。一次对换改变置换奇偶性,而空格没动。
8. 一个 8 × 8 棋盘,挖掉两个异色格(一黑一白),能否用多米诺骨牌铺满?挖掉两个同色格呢?用染色论证回答,并举出反例说明「黑白各 31 个」也不一定够。
自检标准。能独立完成 1–4,说明已掌握「几何 → 图/不变量」的基本翻译;能完成 5–8,说明已能在具体局面上运用判据。
★★★ 习题 2:进阶(群、铺砌、Hex)。
9. 证明:任何长度 L 的循环的符号是 (−1)L−1。用它验证 p88 中「R 是奇置换」的结论。
10. 一个置换的阶定义为最小的正整数 k 使 σk = e。证明:阶 = 所有循环长度的最小公倍数。据此判断「R 连转 5 次」是否等于恒等。
11. 解释为什么魔方合法状态的数目是 8! · 37 · 12! · 211 / 2,并说明那个「除以 2」的约束是什么。角块排列的奇偶与棱块排列的奇偶必须一致。
12. 用权函数法(给格子赋三次单位根权)证明:当 3 | n 时,n × n 棋盘挖去一格后不能用 L 形三格骨牌铺满。让每块 L 形覆盖的三个格子权和恒为 0。
13. 说明为什么「m × n 棋盘用多米诺铺满」是平凡的(有简单判据),而「用给定形状的多格骨牌铺满」可以变得很难。举一个认为是 NP-完全的铺砌问题。
14. 陈述并证明 Hex 的「不可能平局」定理的其中一半:若红方已连成上—下通路,则蓝方不可能连成左—右通路。用 Jordan 曲线定理:一条连接两条对边的曲线把区域分成两块。
15. 用「策略偷取」证明:在 Hex 中若把棋盘规则做一点改动(允许先手先连成任一对边都算赢),先手仍然必胜。指出这里的「单调性」用在哪里。
16. 综合题:证明 7 × 7 的 Hex 棋盘上先手必胜,但不要给出必胜策略——然后说明「为什么给不出策略并不妨碍这是一个定理」。回指第一章 Chomp 与 p84 的策略偷取。
自检标准。第 10、11 题是本章群论的技术门槛;第 12 题的权函数与第 14 题的拓扑论证是本章的两件「重型工具」。能独立完成四题以上,第三章就算通了。
本章的六场游戏,可以读成同一条流水线的六次运转(见下图)。
通路一(图形 → 图 → 判定定理)。把折痕、桥、街道抽象成「顶点 + 边」,几何问题就变成图上的行走问题。于是 Euler 判据登场:度数全偶 ⟺ 一笔画闭合;恰两个奇度点 ⟺ 一笔画开放。这条通路回答「能不能玩通」。
通路二(操作 → 置换群 → 阶与不变量)。把每一次翻折、每一次转动写成置换,游戏的操作集合就生成一个置换群。于是「可不可达」= 不变量是否相同(15-拼图的置换奇偶);「最少几步」= 群上的距离(魔方的 God’s Number = 20);「转几次回去」= 置换的阶(循环长度的最小公倍数)。这条通路回答「要玩多久」。
通路三(胜负 → 拓扑不变量)。把棋盘看成一个平面区域,玩家的目标看成一族曲线。于是「不可能平局」= 连接两边的一族曲线必存在且唯一(Jordan 曲线 / Sperner);「先手必胜」= 策略偷取的存在性论证。这条通路回答「谁赢」。
三条通路共用一个骨架。无论翻译成哪种语言,最后都归结为:找一个在「移动」下保持不变的量,让「能不能到」「谁赢」变成关于这个量的简单问题——奇数还是偶数、相等还是不相等、距离是否为零。这与第一章「把局面化成数」是同一件事,只是「数」换成了「奇偶」「群元素」「拓扑类别」。本章边界(重要):这里讲的全是「完全信息、无随机、无对手随机性」的游戏;一旦引入随机与不完全信息,判据就要再升级——那是第四章的赌局要交付的支票。
★★ 小结(一):把图形变成不变量。
正面清单。① 折纸的七条公理(Huzita–Hatori),O5、O6、O7 允许解二次与三次方程(p71);② 折痕 = 抛物线的切线:把点折到线上 ⇔ 作抛物线切线 ⇔ 解三次方程(p72);③ 尺规 vs 折纸:尺规的扩张次数是 2n,折纸的是 2a3b——所以折纸能三等分角、倍立方、作正七边形(p73);④ 七桥问题:问题无解,因为四个顶点全为奇度(p74);⑤ Euler 判据:全偶 ⟺ 欧拉回路,恰两奇 ⟺ 欧拉路径(p75);⑥ Hamilton 回路:经过每个顶点恰好一次,判定是 NP-完全的(p76);⑦ 15-拼图的置换不变量:奇偶性与空格颜色共同守恒,14-15 局面不可解(p77–p78);⑧ 逆序数判据:inv + 空格从下数行号 为奇 ⟺ 可解(p78/p87);⑨ 魔方群:6 个基本转动生成 4.3 × 1019 个状态,|𝒢| = 8!·37·12!·211/2(p79);⑩ God’s Number = 20,直径定理,2010 年用约 35 CPU 年证明(p80);⑪ 染色(权函数)论证:每块骨牌权和恒为 c ⇒ 区域权和须是 c 的倍数(p81);⑫ Wang 砖块:铺砌问题不可判定,非周期集存在(p82);⑬ Hex 无平局与先手必胜(p83–p84)。
易错清单(每条都来自真实的手算事故)。① 把「奇度顶点有 4 个」当成「可以分两笔」——对,但要注意:一笔画只能解决一对奇度点,k 个奇度点至少要 k/2 笔;② 忘记「图必须连通」——不连通时先分块讨论,判据只对每一块成立;③ 用「置换奇偶」单独判定 15-拼图而不看空格颜色——两个因子必须一起看(否则结论会翻);④ 把「15-拼图」与「8-拼图」的判据混用——奇数宽(3×3)时判据简化为「逆序数偶」,偶数宽(4×4)时才要加空格行号;⑤ 把「R 连转四次」记成「R 是 4-循环」——R 是 5 个 4-循环的乘积,阶才是 4;⑥ 把「折叠次数」当成「可在纸上折几次」——数学上的折纸是理想化的,不受纸张厚度限制;⑦ 以为「God’s Number = 20」意味着「随机打乱的魔方平均 20 步」——20 是最坏情况(直径),平均步数其实接近 18;⑧ 把「铺砌不可判定」理解成「我们不够聪明」——不可判定是定理:不存在任何算法能判定它,与聪明无关。
一句话的总结。本章把「能不能玩通 / 谁赢」这个问题,从「看棋盘」搬到了「算不变量」——图形是结构,胜负是这个结构上的一个守恒量。这是几何游戏的第一课,也是第一章「局面即数」思想在几何世界的翻版。
★★★ 小结(二):几何游戏的三种翻译。
翻译一:图形 → 图。操作:把区域的连通关系抽成顶点与边;保留的量:度数、连通性、回路结构;得到的判据:Euler(能否一笔画)、Hamilton(能否经过每点一次)、平面性(能否不交叉地画在纸上)。适用对象:一切「行走类」游戏(七桥、一笔画、迷宫、骑士巡游)。
翻译二:操作 → 置换群。操作:把每一次合法移动写成一个置换,全部操作生成一个群;保留的量:置换的奇偶性、循环长度、群的阶与直径;得到的判据:可解 ⟺ 不变量相同(15-拼图、华容道),最少步数 = 群上的距离(魔方),周期 = 循环长度的最小公倍数。适用对象:一切「滑块 / 转动类」游戏。
翻译三:胜负 → 拓扑不变量。操作:把棋盘看成平面区域,把「连成通路」看成一族曲线;保留的量:连通分支数、曲线是否分隔平面、区域的对偶结构;得到的判据:不可能平局(Hex 的 Jordan/Sperner 论证)、先手必胜(策略偷取的存在性)。适用对象:一切「连通 / 分割类」游戏(Hex、桥牌中的连通、地理图着色)。
三条翻译的对照表(也是本章的复习提纲)。① 图形 → 图:不变量是「度数的奇偶」;② 操作 → 置换:不变量是「置换的奇偶 / 群上的距离」;③ 胜负 → 拓扑:不变量是「曲线是否把区域分隔」。三者形状完全一样:先找一个守恒量,再读判据。
与第一章「局面 → 数」的对照,非常值得做一次。第一章的路线是「局面 → Grundy 值 → 异或 → 胜负」;本章的路线是「局面 → 图 / 置换 / 拓扑 → 不变量 → 胜负」。两条路线共用同一个信念:胜负是一个可以被算出来的量,不是一个需要背下来的经验。区别在于「量」的载体不同——第一章的量住在整数里(异或群),本章的量住在图的度数里、置换的奇偶里、平面的连通性里。换句话说:第一章教「把游戏算成一个数」,本章教「把游戏翻译成一种结构」。而把这两件事推到极致——把数本身也算成游戏——就是第二章做的事。
下一章的动机(先埋一条线)。本章处理的全是「完全信息」的游戏:棋盘公开、走法确定、没有骰子。可现实中的游戏常常带随机——掷骰子、抽牌、抛硬币。一旦引入随机,「能不能赢」的问题就变了性质:它不再问「存在一条必胜路线吗」,而问「赢的概率是多少、能否被证明无法提高」。这正是第四章「赌局中的数学」要回答的,也是本章结尾要交给下一章的一张支票。
本章最深的一层,不是任何单条判据,而是一个反复出现的事实:最好的理论,常常从一场游戏开始。
七桥是市民的消遣,Euler 却从中生出了图论;折纸是儿童的手工,二十世纪从中生出了计算几何与 Galois 理论的一次漂亮应用;15-拼图是一场商业狂热,却把置换群的奇偶性带进了数学;魔方是玩具店里的商品,却生出了组合群论里关于直径与生成元的研究;Wang 砖块是逻辑学家的一张纸片游戏,却生出了不可判定性与非周期铺砌;Hex 是两个人轮流落子的消遣,却把 Jordan 曲线定理与策略偷取请上了同一张棋盘。
为什么游戏能生长出理论?因为游戏天然具备理论所需要的四件东西:规则是精确的(不含糊、可执行),状态是有限的(可以被穷举、被分类),目标是明确的(有胜负,因此有「能不能」这类命题),玩法是自由的(玩家可以尝试任何合法走法,于是能看见模式的边界)。一个游戏就是一座预先造好的实验室:规则是仪器,局面是标本,胜负是实验结果。要做的只是给它配一套语言。
更深一层:游戏训练的是「提问的能力」。同一个七巧板,问「怎样拼出天鹅」得到的是技巧,问「哪些多边形能拼、面积约束是什么」得到的是几何。同一个魔方,问「怎样快速还原」得到的是手法,问「最少几步一定能还原」得到的是直径定理。玩具本身不含数学,是「问法」把它变成了数学。本章的六场游戏,其实演示的是同一个动作:把「好不好玩」的问题,换成一个「可以被证明」的问题。
最后这条主张的力度。它不是「数学也可以很有趣」这种温和的说法,而是一个更强的断言:数学的自由精神,正来自游戏——规则是人定的(可以改写),目标是人选的(可以更换),而一旦规则与目标定下,「什么能赢」就是一个客观的、可以被证明的事实。自由地定规则,诚实地说结论——这就是数学,也是游戏。
— 第三章 · 思想卡
延伸思考(三问)。① 若允许折纸无限次、纸张无限薄,它能解五次方程吗?(提示:扩张次数仍形如 2a3b,而一般五次的 Galois 群需要 5 次扩张。)② 若把 Hex 的「不能平局」换成「允许平局」,策略偷取还成立吗?此时「先手必胜」的结论可能退化为「先手不败」。③ 一个游戏「很难」与它「很有趣」是不是一回事?本章给了两个反例:七桥无解(不能玩,但生出了图论),Chomp 知道先手必胜却不知怎么走(能玩,但策略未知)。
★★★★ 挑战:把 p83–p84 的两条结论写成完整的证明。本页给出一条明确的写作规范,照它写。
第一部分:无平局定理(选择一条拓扑路线写完整)。命题是:在任意红蓝二染色的 n × n Hex 棋盘上,「红连通上—下」与「蓝连通左—右」恰有其一成立。注意这是「存在性 + 唯一性」两半:① 至少一者成立(这一半难,需要拓扑工具);② 二者不能同真(这一半用 Jordan 曲线定理即可)。
路线①(Jordan 曲线定理)。把棋盘看成一个平面区域。若红方有上—下通路,把这条通路上各格的中心连成一条折线 γ,它从上边伸到下边。Jordan 曲线定理(的矩形版本)说:γ 连同两条被它连接的对边,把矩形分成左右两块。蓝方要连左—右,就必须穿过 γ,而 γ 上全是红格、蓝方不能落子——矛盾。这证明了唯一性那一半。要证「至少一者成立」,可对「谁先达到」做归纳,或用下面的路线②。
路线②(Sperner 引理)。把 Hex 棋盘做三角剖分:每个六边形格子在三条「方向」上留下三段边界。给每一小段按它是否紧贴红格 / 蓝格 / 边界上色(三色)。离散 Sperner 引理断言:这样的染色下,必存在一个包含三色的小三角形。追踪这些小三角形所形成的链,就得到一条红(或蓝)的贯穿路径。Sperner 引理是 Brouwer 不动点定理的离散版本,Gale 一九七九年的论文正是用 Brouwer 不动点定理证明 Hex 无平局——这也解释了为什么 Hex 与拓扑关系如此之深。
路线③(对偶阻塞,把两条路「绑」在一起)。在棋盘的红格与蓝格之间,考虑它们交界处的「缝隙」。从棋盘左上角的两条边界交点出发,沿缝隙走一条自避路径:规则是「尽量贴着蓝格走」。这条路只有两个可能的出口——上边与左边(靠近蓝方的两条边)或下边与右边(红方的两条边)。若它从下边或右边逃出,则它一路上贴着走的蓝格构成一条贯穿路径;否则它自己就给出红方的贯穿路径。这一路线最「组合」,不需要引入实数的拓扑定理,适合喜欢离散论证的。
第二部分:先手必胜(策略偷取,三步写清)。① 对称:Hex 的规则对双方相同(先手连上—下、后手连左—右在六边形棋盘上互为旋转),故角色对称,无人占规则便宜。② 单调:多一枚己方棋子绝不会有害——形式化:若局面 S 对某方是必胜的,则 S 再多一枚该方棋子的局面仍是必胜(若对手走在这枚多出的棋子上,己方随便再走一步即可)。③ 白吃一步:先手先下第一手,然后假装自己没下、装作后手,套用假设中后手的必胜策略;由 ②,多出的那枚棋子只会帮忙。于是「后手必胜」的假设导致「先手也必胜」的矛盾。关键在于:此处必须用上「无平局」——正因为不可能平局,矛盾才能排除「两人都不赢」,逼出「先手必胜」。
第三部分(研究型选做):把结论推广。① 若把棋盘改成边长不等的矩形,无平局定理是否仍成立?(提示:需要重新定义「连接哪两条边」。)② 若允许某一方先落两手,先手是否仍必胜?③ 用计算机对 n ≤ 6 的 Hex 棋盘蛮力求先手的第一步最优落点,并与理论对照(理论只说明有必胜策略,不说明落在哪)。
★★ 实验:置换奇偶性与魔方群真跑。本节所有数字来自本地脚本 qa/p96_lab.py(纯 Python 标准库,无第三方依赖),输出存于 qa/p96_out.txt,可自行复算。实验的目标是与理论对拍,而不是「跑出一个好看的结果」。
实验一:15-拼图的可解性判据 vs 蛮力。把 16 个格子上的棋子实现成一个置换,用逆序数判据(inv + 空格从下数行号 为奇 ⟺ 可解)做判定;再拿两条独立的证据对拍:一条是从已解局面做 3000 步合法随机游走(判据必须恒为可解),另一条是 3 × 3 的 8-拼图——它的状态总数为 9! = 362880,可以直接 BFS 穷举,把「可达」与「判据」逐状态比较。
① 15-puzzle:置换实现 + 可解性判据(与理论对拍) 已解局面 [1..15,0]:inv = 0 判据 -> 可解 14-15 局面 [1..13,15,14,0]:inv = 1 判据 -> 不可解 随机打乱 1000 次:判据认为可解的数目 = 536(比例 0.536,理论 0.500) 从已解局面合法游走 3000 步后,判据判为不可解的次数 = 0 (应为 0) 3x3(8-拼图)BFS 可达状态数 = 181440 (理论 9!/2 = 181440) 枚举全部 9! = 362880 个排列:判据与 BFS 可达性不符数 = 0
三件事值得注意。① 经典 14-15 局面被判为不可解——与 p78 的证明一致,这是「定理」而不是「经验」。② 合法游走 3000 步零违背:从已解局面出发做合法的空格移动,永远走不到判据说的「不可解」区,说明奇偶性真的是移动下的不变量。③ 3 × 3 全枚举零不符:362880 个排列一个不差地与 BFS 可达集吻合——这是对判据(尤其是「奇数宽棋盘只需看逆序数」这条分支)最硬的检验,它也顺带告诉我们:随机打乱的可解比例是 1/2(实测 0.536),因为恰有一半排列不可达。
实验二:魔方的置换实现。把 54 个贴纸用几何法编号(每个贴纸有一个三维中心与一个法向),旋转一个面就等于「把该层的贴纸按 90° 旋转后重新对表」——这样 6 个基本转动自动得到,不必手抄循环表。然后验证两个由群论预言的事实:R 的阶为 4、sexy move R U R−1U−1 的阶为 6。
② 魔方:54 个贴纸的置换实现(几何法构造,不手抄循环) R 的置换:动 20 个贴纸,34 个不动;循环长度 = 34 个 1,5 个 4 order(R) = 4 (理论 4) sexy = R U R' U' :order = 6 (理论 6) sexy 是恒等置换吗?False ;(sexy)6 是恒等吗?True order(U) = 4 (理论 4) order(R U R' U' R U R' U') = 3 (理论 3)
输出里的两条最要紧:「R 动 20 个贴纸、34 个不动,循环长度是 34 个 1 与 5 个 4」——这正好印证 p79/p88 的分析(一个面转动的 5 个 4-循环);「R U R−1U−1 的阶是 6、其平方的阶是 3」——这就是速拧界的「六遍定律」,而它不过是「置换的阶 = 循环长度的最小公倍数」的直接推论。
实验三:随机状态的循环分解统计。随机生成 200 个魔方状态(每个由 15 至 30 步随机转动得到),统计其置换的循环结构与符号。
③ 随机状态的置换循环分解统计(200 例,每例 15..30 步随机转动)
循环个数:min = 10 max = 26 mean = 15.70
最长循环长度:min = 6 max = 22 mean = 14.05
不动点个数:mean = 8.44
奇置换占比 = 0.470
例:R U R' U' F R U R' U' F' 的循环长度列表 = [2,2,2,2,3,3,9]
该置换的阶 = 18三个实验的共同结论。① 15-拼图的可解性判据与三条独立证据(游走不变、8-拼图 BFS、随机比例)完全一致——定理不是巧合;② 魔方的阶(4、6、3)与群论预测逐条吻合,说明「照公式转」背后是一条可以被证明的群论事实;③ 随机状态的循环分解显示:一个看起来杂乱无章的状态,其置换只有寥寥十几个循环,阶却可能很大(例中为 18)——这正是「置换群」视角比「逐块观察」有力的地方。本册所有实验页遵循同一格式:可复算的脚本 + 可核对的输出 + 与理论的对拍。自己跑一遍。
复算方法。在 qa/ 目录下运行 python p96_lab.py,输出与本节一致即可。脚本内含两个「对拍」环节:8-拼图的全枚举 BFS(蛮力)与判据(公式);魔方的几何置换(构造)与群论预测(阶)。
本章讲的折纸与拼图,在中国古代各有近亲:一支是「七巧板」与「鲁班锁」的形制传统,一支是《周髀》以来的「勾股」与「折矩」传统。
先说七巧板(Tangram)。一块正方形被切成七块:两个大三角形、一个中三角形、两个小三角形、一个正方形、一个平行四边形。它的数学含量全在三个问题上。① 面积:若原正方形边长为 1,七块的面积分别是 1/4, 1/4, 1/8, 1/16, 1/16, 1/8, 1/8,总和恰好为 1——这是可以精确算出的(也正是七巧板可爱的地方:它把面积关系藏在形状里)。② 约束:并非所有多边形都能拼出;能拼出哪些、为什么某些(如挖去一角的正方形)不能拼,需要用到边对齐与面积的可加性论证(p81 的染色/权函数思想在这里再次出现)。③ 刚性:若把七块看成可以沿边「铰接」的薄片,则「某些形状可以连续变形、某些被几何约束锁死」——这是计算几何里的铰接链问题。把七巧板从「拼图册」里拿出来、放到这三个问题上,它就成了数学;这正是本章 p85 判据的一次实例。
再说鲁班锁(六根木条,Burr puzzle)。六根带榫卯的木条要互相咬合成一个十字结构,拆开与装回都不许旋转、只允许平移。这不是手艺,而是一个组合计数问题:给定六根木条的缺口形状,共有多少种可解的装配方式?Bill Cutler 在一九七八年用计算机枚举了「六根全对称」情形的全部 1.26 × 109 种工艺组合,并给出著名的分类(这是「Burr puzzle 的完整解」)。而更迷人的是它的结构:鲁班锁的可行性完全由「哪根先抽出」决定——即一个偏序与拓扑约束问题,与本章 Hex 的「通路阻塞」是同一类思考。
最后说《周髀算经》的「折矩」。中算的造形传统以「矩」(直角尺)为核心工具:把矩折过来可以得到勾股关系,把矩叠起来可以丈量高远。《周髀算经》里「故折矩以勾广三、股修四、径隅五」——「折矩」这个词本身就点出了「操作造形」的思路:通过一套可照做的动作(术)来构造几何对象。这与本章的折纸公理(Huzita–Hatori)在精神上完全同构:先给出「允许的操作」,再研究「这些操作能造出什么、造不出什么」。
中西对照有三点值得记下。① 都从「可操作的规矩」出发:折纸有七条公理、中算有「术曰」;② 都把「形」化为可算的量:折纸要算扩张次数,中算要算面积与比例;③ 差别在「普遍性证明」的侧重:折纸公理体系以「对所有构造成立」为目标,中算的「术」则更早给出可执行程序(参见第一章 p37 的同一对照)。本章的七巧板与折纸,正是这两支传统在「形」这一侧的合流。
★ 速查:第三章概念与公式。
一、记号。[K : ℚ] 域的扩张次数;sgn(σ) 置换符号;inv 逆序数;𝒢 魔方群;[G, H] 换位子;d 群的直径(God’s Number)。
二、折纸。① Huzita–Hatori 七公理:O1 过两点;O2 中垂线;O3 角平分线;O4 垂线;O5 p1 → l1 且过 p2;O6 p1 → l1, p2 → l2;O7 p → l1 且垂直于 l2。② 折痕 = 以 P 为焦点、l 为准线的抛物线的切线。③ 尺规可构造数满足 [K : ℚ] = 2n;折纸的是 2a3b。④ 折纸能做:三等分角、倍立方(∛2,次数 3)、正七边形。
三、图与一笔画。① 顶点度数 = 连边条数。② Euler:连通图有欧拉回路 ⟺ 全偶;有欧拉路径 ⟺ 奇度点为 0 或 2 个(为 2 时即两端);奇度点 k 个 ⇒ 至少 k/2 笔。③ 七桥:A,B,C,D 度数为 3,3,5,3,全奇 ⇒ 无解。④ Hamilton 回路:经过每个顶点恰好一次;判定 NP-完全。⑤ 3-正则平面图与 Tait 猜想。
四、置换与拼图。① 局面 = 置换 σ ∈ S16;每步 = 一次对换(改变奇偶)。② 长度 L 循环的符号 (−1)L−1。③ 15-拼图判据:inv + 空格从下数行号 为奇 ⟺ 可解(偶数宽);奇数宽(3×3)简化为 inv 偶 ⟺ 可解。④ 14-15 局面:inv = 1,1 + 1 = 2 偶 ⇒ 不可解。
五、魔方群。① 𝒢 = ⟨U, D, L, R, F, B⟩;② 基本转动 = 5 个 4-循环;③ |𝒢| = 8! · 37 · 12! · 211 / 2 = 43 252 003 274 489 856 000;④ order(R) = 4、order(R U R−1U−1) = 6、order(R U R−1U−1)2 = 3;⑤ 置换的阶 = 循环长度的最小公倍数。
六、God’s Number。上界历史:1981 Thistlethwaite 52;1990 Kloosterman 42;1992 Reid 39(Winter 37);1995 Reid 29,同年证下界 20(superflip);2005–2008 降至 22;2010 Rokicki–Kociemba–Davidson–Dethridge 证 d = 20(约 35 CPU 年)。
七、铺砌的染色技巧。① 多米诺必盖一黑一白 ⇒ 黑白数须相等;② 权函数:使每块骨牌的权和恒为 c,则区域权和须为 c 的倍数;③ L 形三格骨牌用三次单位根 1, ω, ω2 加权。④ Wang 砖块:铺砌问题不可判定;最小的非周期集为 11 块;Penrose 铺砌(1974)。
八、Hex。① 红连上—下、蓝连左—右;② 不可能平局(Jordan 曲线 / Sperner / 对偶阻塞);③ 先手必胜(策略偷取:对称 + 单调 + 白吃一步)。
★★ 第四章预告:赌局中的数学。
本章留下的最大缺口。本章的每一场游戏都是完全信息的:棋盘公开、走法确定、没有骰子、没有暗牌。所以「谁赢」可以被一条判据一次性解决——Euler 判据、置换奇偶、God’s Number、Hex 无平局,全是确定性的结论。可现实中的游戏常常带随机:掷骰子、发牌、抛硬币、猜对方的意图。一旦引入随机,问题的性质就变了:它不再问「是否存在一条必胜路线」,而问「赢的概率是多少,能否被证明无法提高」。
一个历史性的转折点。一四九四年,Pacioli 在《算术大全》里记下一个赌徒的问题:一局赌局尚未结束,双方各赢若干轮,赌本该如何分配才算公平?这个问题一百多年没人答对,直到一六五四年 Pascal 与 Fermat 在通信中用期望给出答案——概率论就这样从赌桌上诞生了。赌博不生产数学,但它迫使数学发明新工具:期望、条件概率、大数律、鞅,都是在「为什么赢不了」这个问题的压力下长出来的。
第四章要回答四个问题。① 期望是什么、为什么它不是「平均能赢」的保证——圣彼得堡悖论会暴露期望的裂缝;② 为什么「加倍投注」之类的赌博系统一定不能改变期望——鞅(fair game 的数学化)会给出定理级的回答,这不是劝告而是证明;③ 随机游走的命运——Pólya 定理说一维、二维的随机游走必然返回起点,三维却「一去不还」;④ 当游戏含隐藏信息时怎么打——Kuhn 扑克演示混合策略与均衡:最优策略不是「总出某一张」,而是按一个精确的概率分布随机化。
与本章的接口在哪里?回味本章反复出现的动作:找一个在「移动」下守恒的量(度数的奇偶、置换的奇偶、曲线的分隔)。第四章会把这个动作升级为:找一个在「随机」下不随时间改变的量——鞅。「不变量」与「鞅」是同一个思想的两副面孔:一个对确定性游戏说「到不了这里」,一个对随机游戏说「期望不会变」。带着这个类比进入第四章,可以发现赌局与棋盘原来在说同一种语言。
带三个问题进入第四章。① 若一个游戏既有随机又有对手(如扑克),它的「值」如何定义?② 「赢不了」是一条定理还是一条经验?给出一个可以被证明的例子。③ 一维随机游走必然返回起点——这件事与本章的「一笔画」有没有结构上的相似?(提示:都想用「有限状态的守恒量」来判定长期行为。)
一张支票。第三章交出的支票是:我能把一个几何游戏翻译成图、置换群或拓扑不变量,并从翻译里读出判据。第四章要交出的支票是:我能计算一个含随机游戏的期望与终局概率,并证明「某类必胜系统」不存在。两张支票的格式完全一样——把「能不能赢 / 赢多少」翻译成一个可计算的量,再用一条定理封住它。
★ 本章走进赌场,但立刻记住一件事:我们的目标不是赢钱,而是明白为什么赢不了。赌桌是数学史上最好的实验室之一——它把「不确定」摆到桌面上,逼着人们给「公平」一个定义。概率论的第一次呼吸就发生在一场未完成的赌局里。
赌博是概率的母亲。期望(p103)、大数定律(p107)、赌徒破产(p108)、鞅(p109–110)、随机游走(p111–112)、混合策略(p113)——这些概念没有一个是从天上掉下来的,它们全部在「如何分配赌本」「长期会赢还是会输」这类具体压力下长出来。甚至 Monte Carlo 方法(p114)反过来把赌博的随机性变成了最有力的计算工具:赌场的核心构件(随机数),成了科学的引擎。
本章的路线(见上图)。先回到历史现场:Cardano 的手稿(p101)与 Pascal–Fermat 的一六五四年通信(p102)如何造出「期望」这个概念(p103–104)。接着看期望的三道裂缝与补救:圣彼得堡悖论(p105)迫出效用(p106);大数律(p107)让赌场稳赚,赌徒破产(p108)让赌客必败。然后进入本章的数学核心:鞅的定义(p109)与鞅定理(p110),并顺着随机游走(p111)走到 Pólya 的著名答案(p112)。最后两个现代应用:Kuhn 扑克的混合策略(p113)与 Monte Carlo 模拟(p114)。
本章要建立的两个动作。① 把「不确定」写成一个随机变量,用分布、期望、方差来刻画它;② 把「策略」写成条件期望——「下一步该怎么做」等价于「在已知信息下,各种选择的期望是多少」。这两个动作是概率论与博弈论共同的语言;第五章会把它严格化为测度论里的条件期望,第六章则用它陈述 Nash 均衡。
★ 概率论的第一份手稿出自一位赌徒兼医生:Girolamo Cardano(1501–1576)。他一生好赌,也一生行医、写书、教书,晚年甚至因儿子的罪案而被牵连入狱。他在十六世纪六十年代写成《论赌博游戏》(Liber de Ludo Aleae),但这部书稿要等到他一六六三年去世后才出版——比 Pascal 与 Fermat 的通信还晚上十年。它的名字本身,就是一部概率论史的开场白。
Cardano 迈出的第一步,是把「赌局」当成一个有限的样本空间。掷两枚骰子有多少种结果?他正确地指出:应当数有序数对,共 6 × 6 = 36 种,且它们等可能。由此,和为 7 的情形有 (1,6),…,(6,1) 共 6 种,概率 6/36 = 1/6;而和为 2 只有 (1,1) 一种,概率 1/36。当时的常见错误是把「和 2,3,…,12」这十一种结果当作等可能——Cardano 纠正的正是这个错误。这一步今天看很朴素,却是「先数清样本空间,再数有利结果」这条全部初等概率论的操作规范。
第二步,是给出公平赔率的判据。Cardano 写道:若某结果出现的「机会」有 a 种、不出现有 b 种,则公平的赌注之比应为 a : b。用今天的话:公平赌局的赔率 = 概率之比,也就是说,赌局的期望应当为零。他还研究了多次掷骰的复合事件、骰子不匀时如何反推概率,甚至提出了「多次试验的平均」这一思想。「期望」的雏形就在这几行字里——只是他还没有一个名字给它。
Cardano 缺的是什么?他缺两样东西:① 一个把「机会」写成数的形式定义(概率是什么,他只有直觉);② 一条把「部分信息」与「全部信息」联系起来的规则(条件概率与独立性)。这两样要等到 Pascal、Fermat、Huygens 那一代人。但方向是 Cardano 定下的:把赌博当作一个可以计算的对象,而不是命运的捉弄。本页的分布图就是他的核心工具的样本——两骰之和的三角形分布,是概率论里第一个被画清楚的概率分布。
★ 概率论正式诞生的日期通常被定在一六五四年七月到十月之间——那是 Blaise Pascal 与 Pierre de Fermat 就一道赌博题往返通信的几个月。题目来自一位职业赌徒 Chevalier de Méré,他向 Pascal 提出了后来被称为点数分配问题(problem of points,又叫分赌本问题)的难题。
问题的陈述。两位玩家约定:先赢满 n 局者拿走全部赌本(例如 64 枚金币)。赌局进行到一半,比分为 a : b(双方均未达 n),此时赌局被迫中断。问:这 64 枚金币该如何公平地分配?
当时的两种错误答案。第一种是「按已胜局数分」,比例 a : b——看起来最自然,但它忽略了一件事:领先者已经「接近」胜利,这个接近程度没有被计入。第二种是「按剩余所需局数分」,比例 (n−b) : (n−a)——同样只用了当前比分,没有考虑未来会怎么走。Pacioli(1494)与 Cardano 都在这道题上给出过不满意的答案。
Fermat 的解法(枚举法)。把「未来所有可能的走向」全部列出来,每一条走向赋予相等概率,再数出 A 胜、B 胜各占几条。Pascal 的解法(递推法)。把问题化归为一步:设想先进行下一局——无论谁赢,都会得到一个新的比分,而那个新比分的答案可以事先算好。于是
份额(a, b) = ½ · 份额(a+1, b) + ½ · 份额(a, b+1)
这是一个递推方程,边界条件是「先到 n 局者得全部赌本」。上图用一个具体例子演示这条递推:比分 2 : 1、先到 3 局,答案 48 : 16。这两种解法给出同一个答案——而它们背后的共同对象,就是「期望」。Pascal 把这套计算整理成《论算术三角形》,那里出现了著名的帕斯卡三角与「期望」的第一次系统使用。
★★ 现在把 Pascal 与 Fermat 手上的技术抽象成定义。定义(期望)。设离散随机变量 X 以概率 pi 取值 xi,则它的期望(expectation,也叫数学期望、均值)为
𝔼[X] = Σi xi pi = x1p1 + x2p2 + ⋯
读法:以概率为权的加权平均。掷一枚均匀骰子,𝔼[X] = (1+2+3+4+5+6)/6 = 3.5。一个常被忽略的事实:期望不一定是随机变量能取到的值——骰子永远掷不出 3.5,但「长期平均」必趋向 3.5。这个区别将在 p107(大数律)与 p115(误读页)反复出现。
公平赌局的定义。设某赌局中净收益为随机变量 X(赢为正、输为负)。若 𝔼[X] = 0,称这个赌局是公平的(fair);若 𝔼[X] < 0,则长期必亏。「公平」在这里第一次获得了一个精确的数学含义——不是「运气均等」的感觉,而是一个积分的零值。(第一章的「公平博弈」指的是「双方走法相同」,是另一个意思;本册用「公平赌局」来指期望为零的赌局,两者在上下文中分辨。)
三条立刻要用到的性质。① 线性性:𝔼[X + Y] = 𝔼[X] + 𝔼[Y],且 𝔼[cX] = c𝔼[X]——这条对任意两个随机变量(哪怕不独立)都成立,它是概率论里最省力的工具。② 条件期望:𝔼[X | A] = Σ xi P(X = xi | A),即在事件 A 已发生的条件下重新分配概率。③ 全期望公式:𝔼[X] = Σj P(Aj) 𝔼[X | Aj]——把样本空间按 Aj 分块,先算各块的期望再按概率加权。这三条合起来,就是 Pascal 递推法的全部技术内容(p104 会用它把分赌本问题算完)。
一个警示。期望刻画的是「长期平均」,它对单次结果一无所知,也对「风险」一无所知。𝔼[X] = 0 的赌局里,可能赢很多、也可能输光——后者叫破产,是 p108 的主题。用期望判断一个赌局「值不值得进」,只是第一步;第二步要看方差与破产概率。
★★ 上页给了分赌本问题的两种解法,本页把它算完,并说清为什么它是「期望」的第一次正式亮相。设先赢 3 局者获胜、赌本 64、当前比分 2 : 1(A 领先)。
第一步:定边界。若比分为 3 : 0、3 : 1、3 : 2 之类,A 已获胜,份额为 64;反之 B 已获胜时 A 的份额为 0。这是递推的「基」。
第二步:用对称性切开最接近终局的那个局面。比分 2 : 2 是一个完全对称的局面:双方各差一局、下一局的胜负以 1/2 分摊,此后无论谁赢都立刻终局。于是 份额A(2,2) = ½ · 64 + ½ · 0 = 32——两人各 32,正如直觉所要求。
第三步:退回一步,用全期望公式。比分 2 : 1 时,下一局:A 若赢(概率 1/2),立即到达 3 : 1,拿全部 64;B 若赢(概率 1/2),进入 2 : 2,由第二步知其份额为 32。故
份额A(2,1) = ½ · 64 + ½ · 32 = 32 + 16 = 48
B 的份额相应为 64 − 48 = 16。
Fermat 的枚举法给出同样的答案,且更直观。从 2 : 1 起,最多再打 2 局(因为 A 再赢 1 局即结束,且 B 需要连赢 2 局才能反超)。把「未来最多 2 局」的胜负序列全部列出,共 22 = 4 条等可能路径(即使提前结束也要「补足」想象的局数,以保持等可能):AA, AB, BA, BB。其中 A 获胜的情形是 AA, AB, BA 共 3 条,B 获胜只有 BB 一条。故 A 胜的概率 3/4,份额 3/4 · 64 = 48。与递推法一致。
为什么这是「期望」的第一次亮相?答案的形状:公平分配的比例不是「已得点数之比」,也不是「还需要赢的局数之比」,而是「继续把赌局进行到底时各自获胜的概率之比」——也就是「各自最终所得赌金的期望之比」。公平 = 期望。这条判据一旦被看清,就立刻超出了赌桌:任何「不确定的将来」都可以用期望折算成当下的价值。三百多年后,金融资产的定价、保险的费率、算法的随机化,用的都还是这同一条原则。
★★ 期望的定义有一个漂亮的推论:只要把一个赌局的「公平价格」定义为它的期望,任何赌局都可定价。但十八世纪初,一位瑞士数学家发现了一个能把这个推论打碎的赌局。
★★ 期望的定义有一个漂亮的推论:只要把一个赌局的「公平价格」定义为它的期望,任何赌局都可定价。但十八世纪初,一位瑞士数学家发现了一个能把这个推论打碎的赌局。
规则(圣彼得堡赌局)。反复抛掷一枚均匀硬币,直到第一次出现正面为止。若正面第一次出现在第 n 次,庄家付给出 2n 枚金币(即 2, 4, 8, 16, …)。问:愿意付多少入场费来玩这个赌局?
按期望算,答案荒谬。「首次正面在第 n 次」的概率是 (1/2)n(前 n−1 次都是反面,第 n 次正面)。于是
𝔼[奖金] = Σn≥1 2n · (1/2)n = Σn≥1 1 = 1 + 1 + 1 + ⋯ = ∞
每一项乘积都是 1,无穷多项相加发散。数学上的「公平入场费」是无穷大——也就是说,应当愿意付任意多的钱去玩这一局。但任何神志清醒的人只愿付几块钱,甚至几毛钱。这就是著名的圣彼得堡悖论:期望无穷大,而理性行为有界。
历史。这道题由 Nikolaus Bernoulli 在一七一三年左右提出,一七三八年由他的兄弟 Daniel Bernoulli 发表在一份圣彼得堡的学术刊物上,因而得名(同期刊物上还有 Cramer 的独立解答)。paradox 的锋利之处在于:它不是算错了,而是揭穿了「期望 = 价值」这条隐含假设。如果期望真的是理性的定价,那么这个赌局就该卖出天价;既然没有人出天价,那么「价值」一定不等于期望。
悖论的三个侧面。① 数学的侧面:期望无穷大时,期望失去了作为决策依据的资格(无穷大不可比较)。② 心理的侧面:极高奖金出现的概率极低,人对「几乎不可能发生的事」给予的权重远低于概率所给的(极端尾部效应)。③ 经济与理论的侧面:一个足够大的赌场会破产,因此奖金不可能真的无限增长;一旦给奖金加上上限 M,期望就变成有限值 ≈ log2M。下一页 Bernoulli 的回答(效用)将给这个悖论一个延续三百年的答案。
★★ Daniel Bernoulli 的回答只有一句话:价值不由金额决定,而由金额带来的「效用」决定。一枚金币对穷人与对富人的意义不同;第一百枚金币带来的快乐,远小于第一枚。这个朴素的观察一旦被写成函数,圣彼得堡悖论就迎刃而解。
定义(效用函数)。设财富 x 带来的主观价值为 u(x),称为效用函数。Bernoulli 取 u(x) = log x(他写的是 log x;同时期 Cramer 倾向 u(x) = √x,两者都是凹函数,即增速递减)。凹性是关键:它编码了「边际效用递减」。
用效用重算圣彼得堡赌局。若奖金为 2n,其对数效用的期望为
𝔼[u] = Σn≥1 (1/2)n · log 2n = Σn≥1 n log 2 / 2n = 2 log 2 ≈ 1.386
(用恒等式 Σ n/2n = 2。)期望效用是有限的!于是「公平入场费」——即让期望效用与不玩的效用(0)相等的入场费——被解为一个有限的小数目(约等于 e1.386 ≈ 4 枚金币的量级,视基准而定)。悖论消失了:不是期望算错了,而是我们把「金额」错当成了「价值」。
从 Bernoulli 到现代决策论。这条思路在两百年后成长为期望效用理论:von Neumann 与 Morgenstern(1944)证明,只要偏好满足若干条自然的公理(完备、传递、连续、独立),就存在一个效用函数 u,使得「理性抉择 = 最大化期望效用」。这是现代经济学与博弈论的地基,也是第六章 Nash 均衡的技术前提。
但保留一点怀疑。为什么一定是对数?为什么不是 √x、不是 −e−x?事实上,效用函数只在「正仿射变换」下唯一,形状并无客观依据。二十世纪后半叶的行为经济学(Kahneman 与 Tversky 的前景理论)正是从这里发起挑战:人对「损失」的敏感远大于对「收益」,权重也不是概率本身。圣彼得堡悖论的真正遗产,是它第一次把「数学的价」与「人心的价」分开,并让「如何度量价值」成为一门独立的学问。
★★ 期望描述了「长期平均」,但凭什么说「长期」一定逼近这个值?这条保证就是大数定律(law of large numbers)——概率论最重要的定理之一。它有两种强度,本页只作陈述(证明需要不等式与测度论的技术,超出本册主线)。
设定。设 X1, X2, … 是独立同分布的随机变量,公共期望 𝜇 = 𝔼[Xi] 有限,样本均值 X̄n = (X1 + ⋯ + Xn)/n。
弱大数律(Khintchine, 1929)。对任意 ε > 0,P(|X̄n − 𝜇| > ε) → 0(n → ∞)。读作:样本均值「依概率」收敛到期望——只要试验次数足够多,平均值偏离期望较远的概率就任意小。
强大数律(Borel 1909 / Kolmogorov 1933)。P(X̄n → 𝜇) = 1。读作:样本均值「几乎必然」收敛——除了一个概率为零的例外集合,每条样本路径上的平均值都真的收敛。强律蕴含弱律,且给出了更强的结论。
频率主义解释。若 Xi 是「第 i 次掷骰是否掷出 6」的指示变量(是记 1、否记 0),则 𝔼[Xi] = 1/6,大数律说:掷出 6 的频率(= X̄n)几乎必然收敛到 1/6。这正是「概率就是长期频率」这一解释的数学依据(同时也是它必须小心的地方——上图三条曲线都用不同的伪随机种子,它们各走各的,但都被同一水平线吸引)。
大数律解释了赌场为什么稳赚。赌客玩的每一局都是随机的(大数律管不了单局),但赌场每天开成千上万局:赌场自己的收益均值几乎必然收敛到它每局的正期望。于是「单局看运气,长期看期望」——赌客玩得越久、次数越多,他的平均收益越精确地等于那个负的期望值。这是概率论中「把不确定性变成确定性」的最有力的一条定理,也是本页与 p108(赌徒破产)、p110(鞅定理)共同构成的商业算术。
★★ 大数律告诉我们赌客平均会输。但一个赌客真正关心的是另一个问题:在我把本金输光之前,能不能先赢到目标?这个问题的答案由「赌徒破产」(gambler's ruin)给出。
模型。一个赌徒有 k 枚金币(0 < k < N)。每一局,他以概率 p 赢 1 枚、以概率 q = 1 − p 输 1 枚。他设定目标 N:达到 N 就收手,输到 0 就被迫离场。这是一个带两个吸收壁的一维随机游走(p111 会正式定义它)。
公平赌局(p = q = 1/2)。设 f(k) 为从 k 出发最终「输光」的概率。由全概率分解(对第一步用全期望思想):
f(k) = ½ f(k−1) + ½ f(k+1), f(0) = 1, f(N) = 0
这个差分方程的通解是线性的:f(k) = 1 − k/N(代入验证即可)。于是从 k 出发、目标 N,输光的概率恰是 1 − k/N——起点越靠近目标,越安全;若固定 k 而让 N → ∞(赌场资金无穷),破产概率趋于 1。在公平赌局里,只要对手的钱比多得多,迟早输光——不是因为运气差,而是因为「公平」只保证期望为零,不保证不破产。
赌场有优势(p < 1/2)。同样的差分方程,通解变成指数型:
f(k) = [ (q/p)k − (q/p)N ] / [ 1 − (q/p)N ]
当 N 很大时,分母近似于 1,破产概率近似为 (q/p)k。这个公式的残酷之处在于:即使赌场只有一点点优势(比如轮盘的 p ≈ 0.4865),只要本金有限、目标越高,破产概率就越接近 1。「见好就收」能降低在某个目标下的破产概率(N 小),但代价是目标也小——这是一场没有免费午餐的权衡。
与 p110 的接口。赌徒破产公式是鞅定理(p110)的一个直接应用:公平赌局是鞅,在「有界停时」(结局被 0 与 N 夹住)下 𝔼[Xτ] = 𝔼[X0] = k,而终局只有 0 与 N 两个值,由此立刻解出破产概率。下一页先把鞅定义清楚。
★★★ 现在给「公平赌局」一个真正的数学名字。它叫鞅(martingale)。这个词在法语里原本指一种「必赢的投注策略」(也就是 p110 要证明不存在的那种东西),数学家把它借来命名这个「平均而言一步也不动」的过程,本身就是一个漂亮的反讽。
定义(鞅)。设 X0, X1, X2, … 是一列随机变量,ℱn 表示「到第 n 期为止所积累的全部信息」(数学上称为滤流,满足 ℱ0 ⊆ ℱ1 ⊆ ⋯)。若对每个 n,Xn 由 ℱn 完全确定,且
𝔼[Xn+1 | ℱn] = Xn
则称 (Xn) 关于 (ℱn) 是一个鞅。读作:在已知全部历史信息的前提下,下一期的期望恰好等于当前值——没有任何可预测的涨落方向。
立刻推出:𝔼[Xn] 与 n 无关。对定义两边取期望并用全期望公式:𝔼[Xn+1] = 𝔼[𝔼[Xn+1 | ℱn]] = 𝔼[Xn],逐期归纳得 𝔼[Xn] = 𝔼[X0]。这就是「公平赌局」的精确含义:无论玩多少期,赌资的期望值永远是开盘时的那个数。
两个变体。① 下鞅(submartingale):𝔼[Xn+1 | ℱn] ≥ Xn,平均而言趋势向上(对玩家有利,例如「买了彩票以后才想起来去兑奖」这种聊以自慰的说法当然不算)。② 上鞅(supermartingale):≤,趋势向下。赌场优势下,赌客的赌资是一个上鞅——每玩一期,期望就往下掉一点。公平赌局正好是两者的交界。
最简单的例子。简单对称随机游走 Sn = X1 + ⋯ + Xn(Xi = ±1 等可能)是鞅:𝔼[Sn+1 | ℱn] = Sn + 𝔼[Xn+1] = Sn。但:「鞅」说的是期望不动,而不是「值不动」——上图三条路径抖得很厉害,只是它们都围绕着初始值上下摆动,没有任何一条能系统性地跑赢期望。「无法预测方向」正是鞅的定量含义。
★★★ 本章最重要的一页。「加倍投注」(martingale system,也叫马丁格尔)是流传最广的赌博系统:押 1 元;若输,就翻倍押 2 元;再输押 4 元……只要赢一次,就不仅收回之前所有损失,还净赚 1 元。听起来必赢。本页要证明它是错的——而这里的「错」是一条定理,不是一句告诫。
先看清它为什么「看起来」对。设每次押 2k(k = 0, 1, 2, …)。若前 k 次全输,共赔 1 + 2 + ⋯ + 2k−1 = 2k − 1;第 k+1 次押 2k 而赢,收回 2k+1 的一半即 2k,净赚 2k − (2k − 1) = 1。无论连输多久,只要最终赢一次,就净赚 1。而「最终赢一次」的概率在无限多次试验中为 1——这似乎是完美的套利。
错在哪里?两条硬约束。① 资金必须是无限的:连输 k 次就需要 2k+1 − 1 的资金,连输 20 次需要百万量级,连输 30 次需要十亿量级——现实中的本金总会在某一刻被击穿。② 赌桌有下注上限(table limit):赌场对单注设了封顶(比如 500),一旦需要的翻倍数额超过上限,策略就被强制打断,长连输的那一次只能认赔。任何一条被触发,策略就崩了——而且是在「之前连续小赢」的假象之上,一次性亏掉全部。
定理(可选停时定理的特例)。设 (Xn) 是鞅,τ 是停时(「停止时刻」由历史信息决定,不看未来)。若 τ 有界(存在 M 使 τ ≤ M),则
𝔼[Xτ] = 𝔼[X0]
读法:如果在有限步内停止,那么停止时的期望赌资 = 开盘赌资。加倍投注想达到的「+1 必赚」需要 τ 是「第一次赢之前」这个无界停时——而定理的条件此时不成立,结论 𝔼[Xτ] = 𝔼[X0] 也不再成立;恰恰在这里,𝔼[Xτ] 可以小于 𝔼[X0](因为被强制平仓的那条路径损失巨大)。换句话说:无限资金的假设正是让定理失效的那一步,而现实永远是有界的。
这不是告诫,是定理。它没有说「赌博不好」(那是道德判断),它说的是一个纯粹的事实:在一个上鞅(赌场有优势)下,任何基于历史的投注策略,其终局赌资的期望都不超过初始赌资。「改变赌注序列」不改变期望——这是全部赌博系统(不分好坏)被判死刑的数学原因。p117 会用具体数字演示:本金 1000、上限 10000 的马丁格尔,平均收益率仍然是负的。下一章 p125 的挑战页会给出这条定理的完整陈述与证明路线。
★★ 鞅理论里最常被研究的例子是随机游走。它简单到可以画在纸上,却是布朗运动、扩散方程、股票价格模型(随机分析)的共同起点。
定义。设 X1, X2, … 独立同分布,取值为 +1 与 −1 各以概率 1/2。令 S0 = 0、Sn = X1 + ⋯ + Xn,称 (Sn) 为简单对称随机游走。它是鞅(p109 已验算),且它的位置只会是「与 n 同奇偶」的整数。
三条基本事实(本页与下页都用)。① 方差随时间线性增长:𝔼[Sn] = 0,𝔼[Sn2] = n(因为各 Xi 独立且方差为 1)。于是「典型涨落」的量级是 √n——这就是图上路径的宽度随 n 增加而变宽的原因,也是 1/√n 这个普遍尺度(p114 的 Monte Carlo 精度、p112 的回归判据)的来源。
② 位置的分布是二项分布:P(Sn = 2k − n) = C(n, k) / 2n。当 n 大时,由中心极限定理,Sn/√n 的分布趋于标准正态——这就是从离散随机游走到连续布朗运动的桥梁。
③ 首次通过时间:设 Ta = min{n : Sn = a}(首次到达水平 a > 0 的时刻)。一个优美的结论是 𝔼[Ta] = ∞(尽管 Ta 以概率 1 有限)。这个「有限但期望无穷」的现象,是鞅论证的一个漂亮应用:把 (Sn2 − n) 验证为鞅,在停时 Ta ∧ m 上取期望再令 m → ∞,即得 𝔼[Ta] = a2(对首达 ±a 的两壁版本)。它同时告诉我们:「几乎必然到达」与「平均等待有限」是两件不同的事——这正是下页 Pólya 定理的预备。
与赌徒破产的联系。赌博就是随机游走:把输赢记为 ±1,赌资就是 k + Sn。p108 的公式因此可以整段翻译成随机游走的语言:破产概率 = 「在到达 N 之前先到达 0」的概率。同一个对象,两种写法——这正是概率论里「换语言」的力量。
★★★ 随机游走有一个令人意外的「维度依赖」:把它放在不同的空间里,长期行为会完全不同。这就是 George Pólya 一九二一年证明的著名定理。
定理(Pólya, 1921)。设 (Sn) 是 d 维格点 ℤd 上的简单对称随机游走(每步等概率地走向一个相邻格点),从原点出发。则
d = 1, 2 时:Sn 以概率 1 返回原点(常返);d ≥ 3 时:返回原点只以概率 p < 1 发生(暂态)。
一维与二维必返,三维一去不还。这是一个反直觉的结论:多出一个维度,随机游走就多出一条「逃走」的通道,返回的概率便严格小于 1。三维情形有精确值:
p = 1 − 1/u3 ≈ 1 − 1/1.5164 ≈ 0.3405
其中 u3 = 1.516386… 是一个由 Watson 型三重积分给出的常数。也就是说,三维格点上的醉酒水手,只有约 34% 的概率能回到出发的那盏路灯下。(这句俗语流传甚广,其严格内容正是 Pólya 定理。)
一维情形怎么证?关键判据是:常返 ⟺ 访问原点的次数的期望为无穷。访问次数的期望为
Σn≥0 P(Sn = 0)
奇数步不可能回零,故只看偶数项:P(S2n = 0) = C(2n, n)/22n。由 Stirling 公式,C(2n, n)/22n ~ 1/√(π n)。于是这个级数的通项按 1/√n 衰减,而 Σ 1/√n 发散,故期望访问次数无穷,一维常返。二维的同项衰减为 ~ 1/n,级数仍发散(临界!);三维的通项衰减为 ~ n−3/2,级数收敛,故返回概率严格小于 1。「发散 / 收敛」的分界线恰好落在维度 2 与 3 之间——这是数学中「临界维度」最早也最著名的例子之一。
它为什么重要?Pólya 定理是「维度决定长期行为」这一现象的源头。它在物理上是扩散与相变的语言(三维以上的临界指数与低维不同),在概率论上是「常返 vs 暂态」的分类范本,在本册里则是随机游走理论的高潮——把 p108(赌徒破产)、p110(鞅)、p111(首次通过时间)三条线收在一个漂亮的定理上。下一节换一个方向:从「赌局的随机」转到「策略的选择」。
★★★ 到目前为止,本章的博弈都是「对自然的赌」——骰子不会观察。真实赌局还有一个对手:牌桌上的人会读行为。这时「策略」有了新的含义,而概率论反过来成为策略的语言。
零和博弈的矩阵形式。一个双人零和博弈用收益矩阵 A = (aij) 描述:行玩家选行 i、列玩家选列 j,行玩家的收益为 aij(列玩家得到 −aij)。匹配硬币是最小的例子:行猜「正」列也「正」则行赢 1,否则行输 1。上图左的矩阵就是它。
纯策略可能没有均衡。在匹配硬币里,行玩家无论固定选 U 还是 D,列玩家都能选一列让他输;反向亦然。任何确定的行为都会被对手利用。怎么办?答案是随机化。行玩家以概率 1/2 选 U、1/2 选 D;列玩家同样。这样的概率分布称为混合策略,而随机化不是「不确定」,恰恰是对手无法预测的确定性保证。
minimax 定理(von Neumann, 1928)。对任意有限的零和博弈矩阵 A:
maxx miny x⊤A y = miny maxx x⊤A y
(x, y 取遍混合策略,即概率分布。)这个公共值称为博弈的值。它的意思是:在混合策略的世界里,「先想最坏情况再选最佳」与「先想最好情况再防最坏」给出同一个数——博弈有了一个可以相互承认的胜负平准线。这条定理是第六章 Nash 均衡的先声(把「零和」放宽到「一般博弈」)。
Kuhn 扑克(1950)。这是最小的扑克模型:一副三张牌 J < Q < K,两位玩家各发一张,各下 1 单位底注,随后玩家 1 可以「过牌」或「下注 1」,玩家 2 可以「过牌」「跟注」或「加注」……牌大者赢。这是一个有隐藏信息的零和博弈,它的均衡混合策略正是「诈唬」的数学定义:
玩家 1 持 J 时:以 1/3 的概率「下注」诈唬,2/3 过牌;持 Q 时总是过牌;持 K 时总是下注。
可以证明,在这个均衡下博弈的值是 −1/18 ≈ −0.0556(对玩家 1)。诈唬概率 1/3 不是随便取的:它恰好使对手「跟注」与「弃牌」的期望相等,从而使对手无法通过调整应对来占便宜。「诈唬要有恰当频率」这句牌桌格言,在这里第一次变成一条方程。
★★ 本章的收尾是一个有趣的反转:赌博的随机性,最终变成了科学的工具。这个工具叫 Monte Carlo 方法。
故事。一九四六年,Stanislaw Ulam 在洛斯阿拉莫斯参与曼哈顿计划,因一场病卧床,百无聊赖地玩纸牌接龙(solitaire)。他忽然想到:与其用组合分析精确算出接龙获胜的概率,不如直接随机发牌、模拟很多局,再数频率。这个念头被他带给了 John von Neumann,后者立刻意识到它可用于计算中子扩散——那些积分写不出闭式解的问题。方法的代号由 Nicholas Metropolis 提议,取自摩纳哥的赌场城市蒙特卡洛——一个赌博的名字,给了最严肃的计算。
核心思想。设要计算某量 𝜃(面积、积分、期望)。若能把 𝜃 写成某个随机变量的期望 𝜃 = 𝔼[Y],就独立地抽取大量样本 Y1, …, Yn,用样本均值 Ȳn 估计 𝜃。由大数律(p107),估计值几乎必然收敛到真值;而由中心极限定理,误差的标准差是 σ/√n,其中 σ 是 Y 的标准差。
例:用 Monte Carlo 估 π。取单位正方形 [0,1]2,在其中独立均匀撒 n 个点,数落在四分之一圆 x2 + y2 ≤ 1 内的个数。命中概率为四分之一圆面积 π/4,故 π ≈ 4 × (命中数/n)。上图就是一次真跑的散点(绿点为命中)。这个估计是无偏的,误差约 2.4/√n 量级——想多一位小数,就要多一百倍的点。
O(1/√n) 的利与弊。利:收敛速度与维度无关——这是 Monte Carlo 在一百维积分上碾压网格法的原因(网格法的误差随维数指数恶化)。弊:收敛太慢,一位有效数字要百倍代价。现代改进(重要性采样、对偶变量、准 Monte Carlo、MCMC)本质上都是想办法降低那个 σ 或改善尺度。从 Ulam 的纸牌到今天的物理模拟、金融定价、机器学习训练,Monte Carlo 是「随机性」给科学最慷慨的礼物——而它恰好诞生于一场赌局。
★ 本章最容易产生的一种误读是:把期望值当成「必然会发生的结果」。掷一枚骰子,期望是 3.5——于是有人认为「下一把多半是 3 或 4」。这是双重的错:期望 3.5 并不预测单次结果(骰子根本掷不出 3.5),它只描述大量重复的平均(p107 的大数律)。
误读一:期望 = 单次结果。一次试验的取值是随机的,与期望可以差得很远。方差(或标准差)刻画的就是这个「差多远」。一个期望为 1 元、标准差为 1000 元的赌局,和期望为 1 元、标准差为 0.01 元的赌局,在「该不该玩」上是完全不同的两件事。只说期望,等于只说了一半。
误读二:期望为正 = 长期必赚。这里的「长期」有两个陷阱。① 样本必须足够大:大数律只说「趋于」,不保证「多久」;正期望的最优策略在有限的次数里完全可能亏损(这是方差的作用)。② 可能在「长期」到来之前就出局:p108 的赌徒破产与 p110 的鞅定理说明,只要本金有限,「活到平均兑现」就不是免费的。正期望回答「平均会赚多少」,不回答「有多少概率撑到那一天」。
误读三:期望无穷大 = 价值无穷大。这是圣彼得堡悖论(p105)的核心教训。当期望发散时,𝔼[X] = ∞ 这个符号并不给出任何可操作的定价;把「∞」当作「值无穷多钱」,是把一个形式记号当成了现实判断。Bernoulli 的补救(p106)正是:换一个刻画「价值」的函数(效用),让原本散发的量收敛。
误读四:时间平均 = 群体平均。这是最隐蔽的一条。设想一个赌局:以 1/2 概率让财富翻十倍、以 1/2 概率让财富剩十分之一。期望倍数是 (10 + 0.1)/2 = 5.05 > 1,看起来该玩;但若连续玩很多次,财富几乎必然持续缩水(几何平均 √(10 × 0.1) = 1,长期不增反降)。「许多人的平均结果」与「一个人反复玩的时间平均」可以截然相反——这一区别在现代随机分析与经济学里被称为「非遍历性」,是「期望值万能论」最大的裂缝。
正确的用法。期望是有力的工具,但要放在正确的位置:① 它给「大量独立重复」定价;② 它必须与方差、破产概率、可达性一起看;③ 当收益非线性(效用)时,要最大化的是期望效用而不是期望金额。本册从不否认期望,只是拒绝把期望当成唯一的判据。
★★ 例题 1:点数分配问题的完整计算。用 p103 的全期望公式与 p104 的递推,把分赌本算到底。
例 1-1(基本情形)。先赢 3 局者胜,赌本 64,当前比分 2 : 1(A 领先),问公平分割。
解。设 f(a, b) 为 A 应得的份额。边界:f(3, ·) = 64、f(·, 3) = 0。递推:f(a, b) = ½ f(a+1, b) + ½ f(a, b+1)。逐层回推:
f(2,2) = ½·64 + ½·0 = 32; f(2,1) = ½·64 + ½·32 = 48
故 A 得 48、B 得 16。检验:用 Fermat 枚举法,从 2 : 1 起最多再打 2 局,4 条等可能路径 AA, AB, BA, BB 中 A 胜 3 条,概率 3/4,3/4 · 64 = 48 ✓。
例 1-2(比分 3 : 1,先赢 5 局)。赌本 64,A 已 3 分、B 已 1 分,先到 5 分者胜。求 A 的份额。
解。A 还差 2 局、B 还差 4 局。等价于「A 先赢 2 局即胜」。把「A 还需 2 局、B 还需 4 局」记作状态 (2, 4)(数字为各人还需要的胜局数),递推 g(m, n) = ½ g(m−1, n) + ½ g(m, n−1),边界 g(0, ·) = 64、g(·, 0) = 0。逐步算出:
g(1,1) = 32, g(1,2) = ½·64 + ½·32 = 48, g(1,3) = ½·64 + ½·48 = 56, g(1,4) = 60
g(2,1) = ½·32 + ½·64 = 48, g(2,2) = ½·48 + ½·32 = 40, g(2,3) = ½·56 + ½·40 = 48, g(2,4) = ½·60 + ½·48 = 54
故 A 得 54、B 得 10。注意一个反直觉之处:比分 3 : 1(还差 2 : 4)时 A 得 54,而比分 2 : 1(还差 1 : 2)时 A 得 48——哪一方更「领先」,不能只看已得点数,要看「还需几局」。
例 1-3(公式核对)。证明:若两人各还需 m、n 局,则 A 获胜的概率为 Σk=0m−1 C(m+n−1, k) / 2m+n−1。
解(思路)。设想无论胜负都继续打满 m + n − 1 局(提前分出胜负也照打,不影响最终谁「先到」)。在这 m+n−1 局中,A 最终获胜 ⟺ A 至少赢 m 局 ⟺ B 至多赢 n−1 局。故 A 胜的概率为 Σk=0m−1 C(m+n−1, k)/2m+n−1(对 k 求和:A 只赢 k 局、B 赢 m+n−1−k 局)。代入 m=1, n=2:Σk=00 C(2,0)/4 = 1/4 是 B 胜的概率,A 胜 3/4 ✓,与例 1-1 一致。
练习(自己做)。① 比分 0 : 0、先赢 4 局,赌本 32,双方份额各多少?② 先赢 7 局、比分 4 : 2,赌本 128,A 的份额?③ 用例 1-3 的公式验证前两题的答案。
★★★ 例题 2:马丁格尔系统的数学分析。用 p126 的真跑数据,把「加倍投注」的失败算成具体数字。
问题设定。本金 B = 1000,赌桌上限 L = 10000,策略:每轮从 1 开始下注,输了就把赌注翻倍,赢了就回到 1;目标是「本金达到 B + 100 就收手」,或在资金耗尽时被迫离场。用公平硬币(p = 0.5)与略有优势的庄家(p = 0.49)各模拟 10000 次。
先做理论分析:破产阈值。若连续输掉 1, 2, 4, …, 2k−1 共 k 注,累计亏损 2k − 1。下一注需要 2k,若剩余资金 1000 − (2k − 1) < 2k,即 2k+1 > 1001 时,策略被迫中断。算得 29 = 512 ≤ 1001 < 1024 = 210,故能承受的最长连输是 9 注;第 10 次连输(概率 2−10 ≈ 1/1024)就足以击穿本金。赌桌上限 10000 远大于本金,不是本例的瓶颈——真正的瓶颈是本金有限。
真跑结果(qa/p126_out.txt,10000 次模拟)。
(3) Martingale: bankroll=1000, table limit=10000, stop at +100 or ruin p=0.50 mean final bankroll = 1006.39 ruin rate = 0.0851 p=0.49 mean final bankroll = 973.83 ruin rate = 0.1147
逐条解读。① 公平硬币(p = 0.5)下,终局资金均值 1006,与初始 1000 几乎相等——这正是鞅定理(p110)的数值证据:马丁格尔改变不了期望。(精确地说,终局资金只能是 0 或 1100,故均值 = 1100 × (1 − 破产率);理论上的公平破产率为 1 − 1000/1100 ≈ 9.1%,模拟得 8.5%,落在统计误差内。)② 一旦庄家有 1% 的优势(p = 0.49),均值立即跌到 974、破产率升到 11.5%——小小的赌场优势被「本金有限」放大成了一笔确定的损失。③ 两次模拟里,破产率都不为零,而破产意味着之前所有「+1 的小赢」一次归零。
结论(写成定理的语气)。在鞅(公平)或有偏(p < 0.5)的赌局里,任何基于历史改变赌注序列的策略,都不能把终局资金的期望抬高到初始资金之上;本金有限时,策略还会以正概率破产。马丁格尔没有让玩家变富,它只是把「很多次小赢」与「极少数次大亏」打包重组——而大亏那一次,往往就是终局。p125 的挑战页会给出这条定理的完整陈述与证明路线。
练习(自己做)。① 若本金升到 20000、上限 100000,破产阈值变成连输几注?② 若目标改为 +1(每轮只赚一次就收手),破产率会怎样变化?为什么它仍然不为零?③ 用赌徒破产公式(p108)估算「从 1000 涨到 1100 之前先跌破 0」的概率,与模拟值比较。
★★★ 例题 3:2×2 零和博弈的混合策略均衡(手算)。用 p113 的 minimax 定理,把一个具体矩阵算到均衡与博弈值。
例 3-1(匹配硬币)。矩阵 A = [[1, −1], [−1, 1]](行选 U/D,列选 L/R,行赢为正)。求均衡与博弈值。
解。设行以概率 (p, 1 − p) 混合。列选 L 时行的期望收益 uL = p · 1 + (1 − p)(−1) = 2p − 1;列选 R 时 uR = p(−1) + (1 − p)·1 = 1 − 2p。均衡要求列无法通过选择来改善(即两个纯策略收益相等):2p − 1 = 1 − 2p ⟹ p = 1/2。同理列也取 (1/2, 1/2)。博弈值 = 2(1/2) − 1 = 0。对称的零和博弈值为 0——这正是「公平」在博弈里的含义。
例 3-2(一般 2×2)。矩阵 A = [[3, −1], [−2, 4]]。求行、列的最优混合策略与博弈值。
解(行的混合)。设行以概率 (p, 1 − p) 选上/下。列的两列收益:uL = 3p + (−2)(1 − p) = 5p − 2,uR = (−1)p + 4(1 − p) = 4 − 5p。令两者相等(列无从选择):5p − 2 = 4 − 5p ⟹ 10p = 6 ⟹ p = 3/5。
行最优混合 = (3/5, 2/5),博弈值 v = 5(3/5) − 2 = 1
解(列的混合)。设列以概率 (q, 1 − q) 选左/右。行的两行收益:uU = 3q + (−1)(1 − q) = 4q − 1,uD = (−2)q + 4(1 − q) = 4 − 6q。令相等:4q − 1 = 4 − 6q ⟹ 10q = 5 ⟹ q = 1/2。
列最优混合 = (1/2, 1/2),博弈值 v = 4(1/2) − 1 = 1 ✓
两个方向给出同一个值 v = 1——这不是巧合,而是 minimax 定理的内容:maxx miny 与 miny maxx 相等。顺带一句:这个矩阵有「鞍点」吗?检查纯策略:行列都无单点最优(3 是行在 L 下的最大值,但列会躲到 R 去得 −1…),故没有纯策略均衡,必须混合。这也是「猜来猜去」的博弈为什么总要用随机化的原因。
练习(自己做)。① 求 [[2, 0], [0, 1]] 与 [[0, 2], [3, 0]] 的混合均衡与值。② 矩阵 [[1, 2], [3, 4]] 有纯策略均衡吗?若有,是哪一格?③ 3×2 的矩阵如何手算?(提示:先猜「被用到的列」,让行的几行收益相等。)
★★ 习题 1:期望与赌局(基础)。
1. 计算下列期望:① 掷一枚均匀骰子所得点数;② 掷两枚均匀骰子所得点数之和;③ 从 1 到 100 中均匀随机取一个整数;④ 以概率 1/3 得 6 元、以概率 2/3 得 0 元。提示:期望是「取值 × 概率」的求和;②可用线性性(两枚分别算再相加)。
2. 一个赌局:以概率 1/2 赢 5 元、以概率 1/2 输 6 元。它的期望是多少?公平吗?若玩 1000 次,期望的净收益约是多少?
3. 证明期望的线性性:对任意随机变量 X, Y 与常数 a, b,𝔼[aX + bY] = a𝔼[X] + b𝔼[Y](整数取值情形)。重点:证明中不要用到「X 与 Y 独立」。
4. 用全期望公式计算:先掷一枚骰子得点数 n,再掷 n 枚硬币数正面。求总正面数的期望。条件于 n 时,正面数期望为 n/2;再对 n 取期望。
5. 点数分配:先赢 3 局者胜,赌本 100,当前比分 1 : 1。公平分割是多少?用对称性:1:1 完全对称,答案一目了然。
6. 承上,比分改为 2 : 0(先赢 3 局),赌本 100。A 应得多少?给出两种解法(递推与枚举)。
7. 圣彼得堡赌局:若把奖金改为 2n 但只在 n ≤ 10 时有效(超过 10 次不出正面则奖金为 0),期望是多少?
8. 一个人寿保险的简化模型:保险公司以概率 0.001 赔付 100 万元,保费为 1500 元。求保险公司从一份保单上的期望收益。若卖出 10 万份,期望总收益是多少?
自检标准。能独立完成 1–4(尤其是第 3 题不借助独立性、第 4 题的全期望分解),说明已掌握期望的基本运算;能完成 5–8,说明能把期望用到具体赌局与定价问题上。
★★★ 习题 2:鞅、随机游走与混合策略(进阶)。
9. 验证 (Sn) 与 (Sn2 − n) 都是鞅(Sn 为简单对称随机游走)。两者都只需用「增量的条件期望为零 / 增量的条件方差为 1」。
10. 用 (Sn2 − n) 是鞅这一事实,推导从 0 出发首次到达 ±a(两壁)所需时间 T 满足 𝔼[T] = a2。在停时 T ∧ m 上取期望,再令 m → ∞。
11. 赌徒破产公式:赌徒有 50 元、目标 100 元、每局赢的概率 p = 0.5。破产概率是多少?若 p = 0.48,用公式估算(可用计算器算 (0.52/0.48)50 的量级)。
12. 说明「加倍投注」为什么需要「无限本金 + 无下注上限」。若本金为 B、每次从 1 开始翻倍,最长能承受几次连输?给出关于 B 的表达式。
13. 陈述可选停时定理的一个特例(有界停时下鞅的期望不变),并用它解释:为什么「在公平赌局里,任何有界的投注策略都不能改变期望」?
14. Pólya 定理:解释为什么「一维、二维必返」而「三维可能一去不返」。指出 Σ P(S2n = 0) 在 d = 2 与 d = 3 时的收敛性差别。二维的返回概率 ~ 1/n(发散),三维的 ~ 1/n3/2(收敛)。
15. 求矩阵 [[4, 0], [0, 1]] 与 [[2, 1], [1, 2]] 的混合策略均衡与博弈值(后者是「协调型」,说明它有几个均衡)。
16. Kuhn 扑克:说明为什么「持 J 时以 1/3 概率诈唬」是最优的——即为什么诈唬概率取 1/3 时,对手「跟注」与「弃牌」的期望相等。
自检标准。第 9–10 题把「鞅」变成一个可用工具;第 11–13 题把赌徒破产与马丁格尔的失败接到鞅定理上;第 14–16 题检验能否在随机游走与混合策略之间自由切换。这八题做完,第四章的主线就通了。
本章的概念网络可以读成三条链(见下图)。
链一(定价链)。赌局 → 随机变量 X → 分布 → 期望 𝔼[X] → 「公平」的定义(期望为零)→ 分赌本问题的答案(p102–104)。这条链回答「一个不确定的将来值多少钱」。
链二(长期链)。期望 → 大数律(p107)→ 频率收敛到概率 → 赌场稳赚。这条链回答「长期会发生什么」。它的反面是赌徒破产(p108):长期对赌客不利,而本金有限加速了结局。
链三(策略链)。随机过程 → 条件期望 𝔼[Xn+1 | ℱn] → 鞅 / 上下鞅(p109)→ 可选停时定理(p110、p125)→ 「赌博系统不可能」。这条链回答「改变策略能不能改变命运」。答案是不能——而这就是本章的支票。
两条分支与两个接口。从鞅出发有两条分支:① 随机游走(p111)与 Pólya 回归定理(p112),研究过程的几何行为;② 混合策略(p113)与 Kuhn 扑克,把概率分布用到「对手会观察」的博弈上。两个接口通向下章:随机游走与鞅的严格化需要测度论(滤流、条件期望的存在性),无限对局与决定性则在第五章展开。
本章的边界(重要)。本章的全部结论都建立在「随机变量有良定义的期望」这一前提上。一旦允许连续分布、无穷值、不可测集、无限对局,就需要测度论的工具:σ-代数、可测函数、Radon–Nikodym 定理让条件期望成为一般对象;可选停时定理的完整形式需要一致可积性。把边界记清楚,比记结论更重要——这正是第五章「逻辑与无限」要接手的部分。
★★ 小结(一):期望与公平。
正面清单。① 随机变量与分布:把「不确定的结果」写成可取不同值的量,配上一个概率分布;② 期望:𝔼[X] = Σ xipi,是「以概率为权的加权平均」,描述长期平均而非单次结果(p103);③ 线性性:𝔼[X + Y] = 𝔼[X] + 𝔼[Y],不需要独立;④ 条件期望与全期望公式:𝔼[X] = Σ P(Aj) 𝔼[X | Aj];⑤ 公平赌局:𝔼[X] = 0;⑥ 公平分割赌本 = 期望(p104);⑦ 效用与期望效用:不确定性下的「价值」不是金额而是效用(p106)。
易错清单(每条都来自真实的手算事故)。① 把期望当成「最可能的值」——众数与期望是两回事(骰子的期望 3.5,众数却是 1 至 6 的每一个);② 把「期望 = 3.5」当成「下次会出 3 或 4」——期望不预测单次(p115);③ 忘掉方差的角色——两个期望相同的赌局可能风险天差地别;④ 把「长期」当成「很快」——大数律不给出收敛速率;⑤ 用期望做无穷的定价——圣彼得堡的期望是 ∞,∞ 不能比较大小;⑥ 在条件概率上偷懒——「已知发生了 A」之后,样本空间已经改变,必须重新归一化;⑦ 默认独立——除非题干或论证给出,否则不要假设独立(线性性不需要独立,但乘法法则需要)。
一句话的总结。本章把「公平」从一个形容词变成了一个方程:公平 ⟺ 期望为零。这看似只是一个记号,却立刻给出了分配赌本、评估保险、给期权定价的通用原则——把「不确定的将来」按住它的概率加权,折成当下的一个数。
★★★ 小结(二):从赌局到测度论。
算法清单(遇到任何「不确定的收益」时的标准流程)。① 建模:把收益写成随机变量 X,写清样本空间与概率;② 算期望:𝔼[X] = Σ xipi,善用线性性与全期望分解;③ 评估风险:算方差、标准差,必要时算破产概率(p108);④ 检查可达性:本金是否有限?是否会在期望兑现前出局?⑤ 若含策略:把策略写成条件期望,检验它是否改变期望(鞅定理说不能);⑥ 若含效用:把「最大化期望金额」换成「最大化期望效用」。
本章定理的分层(从初等到现代)。① 期望的线性性:只用到求和的交换(初等);② 大数律:弱律用 Chebyshev 不等式即可,强律需要 Borel–Cantelli 引理(p107);③ 赌徒破产:解一个二阶差分方程(p108);④ 鞅定理 / 可选停时:需要条件期望与一致可积性(p110、p125);⑤ Pólya 回归:需要 Fourier 分析或 Stirling 估计(p112);⑥ minimax:需要线性规划或不动点(p113、第六章)。同一条主线「如何对付不确定」,其难度可以有六个台阶——这就是本册「一步一图、随用随补」的用意。
两个动作的哲学。本章塑造了两个贯穿全书的动作。第一,把不确定写成随机变量——于是「不知道」变成了「有分布的已知」,混沌获得了一个可以计算的形状。第二,把策略写成条件期望——「下一步怎么做」等价于「在已有的信息下,各种选择的期望是多少」。这两个动作合起来,就是把「赌」变成「算」。
下一章的动机。本章的期望与条件期望都建立在「概率可以相加、可以取极限」这一直觉上。但若事件有无穷多个、若对局永不结束、若「必胜策略」需要在一列无穷的走法上定义,直觉就不够用了:需要一个能让「无穷可加」合法的框架——测度论;还需要一个能讨论「任意长的对局」的逻辑框架——决定性公理。第五章将从 Gale–Stewart 定理出发,证明任何开集上的无限对局都是决定的;再把「证明本身」写成一场游戏(证明者与质疑者),并让扫雷与数独的难度成为一条可计算的定理。第四章把赌局变成了数学;第五章要把数学本身变成赌局。
本章真正的技术革命不是期望公式,而是「随机变量」这个念头。我们没有停在「不确定」这三个字上,而是给每次不确定的结果分配一个数值、再给每个数值分配一个概率——于是「不知道」变成了「有分布的已知」。混沌第一次获得了一个可以计算的形状。
这个念头的力量在于可加性。随机变量可以相加,期望可以相加;「两个赌局一起玩」变成两个随机变量相加,「平均而言会怎样」变成一个数。于是无穷无尽的偶然事件被压缩成一次算术。这与第一章的 Grundy 值、第二章的超现实数是同一条思路:找一个能承载运算的对象,把「怎么走」翻译成「值多少」。
把它与数学史对照:Descartes 用坐标把几何变成方程;Noether 用不变量把对称变成守恒量;Shannon 用熵把「不确定性」本身变成一个数——而期望是「不确定性」第一次被赋予可计算的价值。赌桌逼出了这个概念,但它的用武之地远不止赌桌:保险、金融、物理、算法、机器学习,全都在用「随机变量 + 期望」这套语法说话。
但思想卡要留下一个警告。期望回答「平均会怎样」,不回答「会怎样」。一个期望为正的赌局,仍可能让一个人破产;一个期望为无穷的赌局,仍可能一文不值(圣彼得堡)。结构(分布)比数字(期望)更根本;而可达性(能不能活到平均兑现)又比结构更贴近命运。本册反复强调这一点,因为「用期望值判断一切」是最常见、也最危险的简化。
— 第四章 · 思想卡
延伸思考(三问)。① 若把「概率」换成「权重」(不要求和为 1),期望变为加权和——这种更一般的「加权平均」还能保持线性性吗?(提示:能,且这正是第五章测度论里积分的起点。)② 「时间平均 ≠ 群体平均」(p115 的误读四)在什么条件下会相等?这个条件叫「遍历性」,它与随机游走是否常返(p112)有何联系?③ 鞅定理说「改变策略不能改变期望」——那么,是否存在某个「不是期望」的指标,是策略真的能改变的?
★★★★ 挑战 1:完整陈述并证明可选停时定理(有界停时情形)。p110 只给了定理的一个特例,现在把它写成可操作的形式。
第一步(定义「停时」)。随机变量 τ 取值于 {0, 1, 2, …} ∪ {∞},称它是停时,若「τ = n」这一事件完全由前 n 期的信息 ℱn 决定(即「何时停」不能偷看未来)。构造两个反例:一个「看未来才决定停」的量不是停时,一个「只看现在」的量是停时。
第二步(有界停时的证明)。设 τ ≤ M。利用
Xτ = X0 + Σn=0M−1 (Xn+1 − Xn) · 1{τ > n}
两边取期望。关键是验证每一项的期望为零:由于事件 {τ > n} 由 ℱn 决定,用「塔性质」𝔼[𝔼[Z | ℱn] · 1A] = 𝔼[Z · 1A](A ∈ ℱn)与鞅定义 𝔼[Xn+1 − Xn | ℱn] = 0,可逐项消掉,得 𝔼[Xτ] = 𝔼[X0]。◻
第三步(无界停时)。一般情形用 τ ∧ n(截断停时)逼近:𝔼[Xτ∧n] = 𝔼[X0] 对每个 n 成立;令 n → ∞,需要把极限与期望交换——这需要一致可积性(uniform integrability),或控制收敛(若 Xn 被某个可积变量控制)。说明:若缺少一致可积,「期望交换」可能失败——这正是加倍投注被击穿的地方。
挑战 2:用 OST 重新证明赌徒破产公式。设 Xn = k + Sn(Sn 为公平随机游走),τ 为首次达到 0 或 N 的时刻。写出 𝔼[Xτ] = k,注意到 Xτ 只取 0 或 N,立即解出破产概率 1 − k/N。并把「赌桌上限」翻译成「τ 有界」的精确语句。
挑战 3(选做):加倍投注的严格终结。写出「加倍投注」策略对应的停时,说明它为什么无界(需要「第一次赢之前」这一随机时刻),然后证明:一旦本金有限(等价地,τ 被有界),策略的期望收益恰好为零(公平赌局)或为负(有偏赌局)。
文献(供延伸阅读)。① D. Williams, Probability with Martingales(Cambridge, 1991)——第 10–11 章是本章内容的经典参考;② R. Durrett, Probability: Theory and Examples(第 5 版)——第 4–5 章;③ J. M. Steele, Stochastic Calculus and Financial Applications——第 2 章把 OST 与赌博系统讲得最清楚。
★★ 实验:Monte Carlo 与鞅的真跑。本节所有数字都来自本地脚本 p126_lab.py(纯 Python 标准库),输出存于 qa/p126_out.txt,可自行复算。
实验一:用随机模拟估算 π,验证 O(1/√n)。在单位正方形内均匀撒 n 个点,数落在四分之一圆内的比例,乘以 4 作为 π 的估计。
(1) Monte Carlo estimate of pi (error ~ C/sqrt(n)) n estimate abs.error err*sqrt(n) 1000 3.21200 0.070407 2.2265 10000 3.14280 0.001207 0.1207 100000 3.14032 0.001273 0.4024 1000000 3.14306 0.001471 1.4713 true pi = 3.14159 ratio err(1e5)/err(1e6) = 0.865 (O(1/sqrt n) predicts ~ 3.162)
解读。估计值随样本量增加而靠近真值。最后一行值得仔细看:单看 1e5 与 1e6 的误差之比是 0.865,与 √10 ≈ 3.16 不同——因为误差本身是随机的(这次的 1e6 恰好离真值稍远)。正确的读法是看 err × √n 这一列:它在 0.12 到 2.2 之间有界波动,没有系统性增长——这正是 O(1/√n) 的证据:误差以 1/√n 的量级收缩,但前面的常数是随机的。不能靠单独两次的比值验证收敛阶——这是实验设计的一个教训。
实验二:赌徒破产(10000 次模拟 vs 解析公式)。赌徒从 100 出发,目标 200,每局 +1 或 −1。
(2) Gambler ruin: start k=100, target N=200, 10000 runs each
p simulated formula
0.50 0.5093 0.5000
0.49 0.9820 0.9820
note: fair game p=0.5 -> ruin prob = 1 - k/N = 0.5 ;
small house edge p=0.49 pushes ruin prob above 0.98解读。模拟值与公式惊人地吻合(0.5093 vs 0.5000、0.9820 vs 0.9820)。0.02 的差距是 10000 次模拟的统计误差(这类比例的标准差约 √(0.5·0.5/10000) ≈ 0.005,几次实验波动几个 0.005 很正常)。更值得注意的是第二行:仅仅 2% 的赌场优势,就把破产概率从 50% 抬到了 98%。这就是「本金有限 + 微小优势」的威力,p108 的指数公式在这里得到了数值确认。
实验三:马丁格尔策略(本金 1000、上限 10000、注 1 起翻倍)。每轮从 1 开始,输了翻倍,赢了回 1;到「本金 +100」或破产为止,各模拟 10000 次。
(3) Martingale: bankroll=1000, table limit=10000, stop at +100 or ruin
p=0.50 mean final bankroll = 1006.39 ruin rate = 0.0851
p=0.49 mean final bankroll = 973.83 ruin rate = 0.1147
note: fair p=0.5 -> mean stays ~1000 (martingale does NOT beat a fair game);
p=0.49 -> mean drops below 1000: no betting system beats a house edge解读。① 公平硬币下,终局资金均值 1006,与初始 1000 几乎相等——鞅定理(p110)的数值证据。(终局资金只能是 0 或 1100,故「均值 ≈ 1000」等价于「破产率 ≈ 9.1%」;模拟得 8.5%,在统计误差内。)② 庄家只要多 1% 的优势,均值就掉到 974、破产率升到 11.5%——马丁格尔把「很多次小赢 + 极少数次大亏」打包,而大亏那一次就是终局。③ 两次的破产率都不为零,说明「必胜」是假象。
实验四:大数律(掷骰均值的收敛)。
(4) Law of large numbers: running mean of a fair die (expect 3.5) n running mean 100 3.3900 1000 3.4140 10000 3.4764 100000 3.5021 target expectation = 3.5000 (spread shrinks like sigma/sqrt(n); sigma of one die = 1.7078)
解读。样本均值从 3.39、3.41、3.48 一路逼近 3.5000,与理论值完全一致——这是大数律(p107)最直白的演示。单骰的标准差是 1.7078,故 100 次试验时均值的标准差约 1.71/√100 ≈ 0.17,一万次约 0.017——「波动按 √n 收缩」这条尺度律,正是本章从蒙特卡洛精度到随机游走宽度反复出现的同一个常数。
四个实验的共同结论。① 判据(O(1/√n))与蛮力/公式逐条一致,说明定理不是巧合;② 模拟值与解析值总会有统计误差,必须给出「误差多大」才谈「吻合」;③ 「期望不变」与「结局分布」是两件事——马丁格尔的均值几乎不变,破产率却实实在在。本册所有实验页都遵循同一格式:可复算的脚本 + 可核对的输出 + 与理论的对拍。自己动手跑一遍。
本章的期望是「以概率为权的加权平均」。有趣的是,中算传统里早有一个几乎同构的物件:盈不足术。
盈不足术出自《九章算术》卷七。它的典型问题是:「今有共买物,人出八,盈三;人出七,不足四。问人数、物价各几何。」意为:一起买东西,若每人出 8 钱,则多出 3 钱;若每人出 7 钱,则还差 4 钱。求人数与物价。书中的「术曰」给出:人数 = (盈 + 不足) ÷ (两假设之差) = (3 + 4) ÷ (8 − 7) = 7;物价 = 8 × 7 − 3 = 53。这条「术」与本章的期望放在一起看:它们的形式完全相同——都是在两个「偏了」的值之间,按偏差大小反向加权,插出那个「恰好对」的值。
一般形式就是线性插值。若在假设 x1 处偏差为 e1(盈)、在 x2 处偏差为 −e2(不足),则真值
x = (e2x1 + e1x2) / (e1 + e2)
这是以 e1, e2 为权的加权平均——权重不是概率,而是「偏差」。结构上,它与期望 𝔼[X] = Σ xipi 是同一种操作:把若干候选值按某个「重要性」加权合并成一个代表值。两者只在一点上不同:期望的权重是「发生的可能性」,盈不足的权重是「偏离的大小」。
这条术的传播史本身就是一段跨文化的数学史。盈不足术随丝绸之路西传,阿拉伯数学家称之为 al-khaṭāʼayn(「两个错误」),再由 Fibonacci 在一二〇二年的《计算之书》里以 elchataym 的名字引入欧洲——正是它把「假设—校正」的迭代思想带进了西方代数。而这是一条可直接迭代的算法:把一次校正的结果当作新的假设,反复逼近,就是「牛顿法」等数值方法的远祖。
中算的另一支:比例与分配。《九章算术》里还有大量「按比例分配」的题目(「衰分」术)——把总量按各方的「率」分摊。例如「今有金,五分之三与七分之四,分与之」,本质上就是以「率」为概率的加权平均。本章的「分赌本按胜出概率分配」(p104),与「衰分按率分配」,在数学上是同一条原则的两个面孔:都是在「各部分应得多少」这个问题上,用一个可以争议、但必须一致的「权重」来裁决。
对照与差别。中算更早写出可执行、可迭代的「术」(盈不足、衰分、方程),把「算法」推到了很高的水平;而「期望」的现代形态要求先有概率空间(样本空间、事件、概率测度)这一整套结构——这是 Pascal 之后三百年才补齐的。本章与格物札记并列的意义正在这里:同一条加权平均的直觉,一支长成了可执行的算法传统,一支长成了可证明的随机性理论。
★ 速查:第四章概念与公式。
一、记号。X, Y 随机变量;𝔼[X] 期望;Var(X)、σ 方差与标准差;P(A | B) 条件概率;𝔼[X | ℱ] 条件期望;(Sn) 随机游走;τ 停时;ℱn 滤流(信息集合)。
二、定义。① 期望:𝔼[X] = Σ xipi;② 公平赌局:𝔼[X] = 0;③ 方差:Var(X) = 𝔼[(X − 𝔼[X])2];④ 条件期望:𝔼[X | A] = Σ xi P(X = xi | A);⑤ 鞅:𝔼[Xn+1 | ℱn] = Xn(下鞅 ≥、上鞅 ≤);⑥ 停时:{τ = n} ∈ ℱn;⑦ 效用与期望效用:𝔼[u(X)]。
三、核心定理。① 线性性:𝔼[aX + bY] = a𝔼[X] + b𝔼[Y](无需独立);② 全期望:𝔼[X] = Σj P(Aj) 𝔼[X | Aj];③ 大数律:X̄n → 𝜇(依概率 / 几乎必然);④ 赌徒破产:公平 1 − k/N,有偏 [(q/p)k − (q/p)N]/[1 − (q/p)N];⑤ 可选停时:τ ≤ M 时 𝔼[Xτ] = 𝔼[X0];⑥ Pólya:d = 1, 2 常返、d ≥ 3 暂态,p3 = 1 − 1/u3 ≈ 0.3405;⑦ minimax:maxx miny = miny maxx。
四、典型数值。单骰期望 3.5、方差 35/12;两骰和期望 7;分赌本 2:1、先到 3 局 → 48 : 16;圣彼得堡期望 ∞、对数效用期望 2 log 2 ≈ 1.386;Kuhn 扑克博弈值 −1/18 ≈ −0.0556;三维返回概率 ≈ 0.3405。
五、实验真跑(qa/p126_out.txt)。Monte Carlo 估 π:n = 106 时误差约 1.5 × 10−3,err·√n 有界;赌徒破产 10000 次:公平 0.5093 vs 公式 0.5000、p = 0.49 时 0.9820 vs 0.9820;马丁格尔(本金 1000、上限 10000)10000 次:公平均值 1006、破产率 8.5%,p = 0.49 时均值 974、破产率 11.5%;掷骰均值收敛 3.39 → 3.41 → 3.48 → 3.5000。
六、两个动作。把不确定写成随机变量(分布 · 期望 · 方差)· 把策略写成条件期望(鞅 · 停时)。
★★ 第五章预告:逻辑与无限的游戏。
本章留下的两个悬念。第一个悬念关于「无穷」:本章的期望、鞅、停时都假设了「概率可以相加、可以取极限」,但在事件有无穷多个、对局永不结束的时候,这些操作需要一套更严密的框架——测度论。第二个悬念关于「策略」:本章讨论的都是「有限的、有明确终局」的博弈;如果把游戏玩到无限,「必胜策略」这句话本身就该被重新定义——凭什么说一方「一定赢」?
第五章要完成的四件事。① Gale–Stewart 定理:任何开集上的无限对局都是决定的——一方必有必胜策略;这条在 ZFC 内可证的结论是描述集合论的起点。② 决定性公理(AD):若要求「所有」对局都可决定,就必须放弃选择公理——两种「数学宇宙」在此分道扬镳。③ 证明是一场游戏:Curry–Howard 对应与对话语义把「证明」写成证明者与质疑者的对局,逻辑联结词获得游戏论的解释。④ 谜题的难度是定理:生命游戏是 Turing 完备的元胞自动机,扫雷与数独的判定问题是 NP-完全——「难」第一次有了精确的含义(与复杂度类挂钩)。
带着本章的两个动作进入第五章。第一,把不确定写成随机变量——第五章会把这套语言推广到无穷:随机变量成为可测函数,期望成为积分,条件期望由 Radon–Nikodym 定理保证存在(本章的 𝔼[X | ℱ] 在这里才第一次获得无歧义的定义)。第二,把策略写成条件期望——第五章会把「策略」推广到「一列无穷的走法选择」,并追问:这种策略的存在性需要什么公理?
带着三个问题进入第五章。① 一个「永不结束」的对局,凭什么说其中一方「必胜」?② 若承认「所有集合都可良序」(选择公理)与「所有对局都可决定」(AD)不能同时成立,会保留哪一个,为什么?③ 「一个谜题很难」这句话,能不能写成一个可证明的数学命题?(答案都可以,而且答案就在下一章。)
一个预告性的比喻。第四章说:赌桌上的一切,最终由期望与鞅裁决。第五章要说:连「裁决」这件事本身,也是一场赌局——证明者押上「这是真的」,质疑者押上「这是假的」,规则由公理给出,胜负由逻辑判定。本册的主旨由此完成一次漂亮的回环:数学不只是在游戏里找结构,数学本身就是一场自由而诚实的游戏。
★ 前面各章的游戏都在有限步内结束:石子取完了、棋盘填满了、赌局结束了,胜负随之揭晓。本章把这个限制拿掉——若一局棋要走无限多步,胜负该怎么判?这不是文字游戏。一旦允许「无限对局」,数学的地基就被牵动:我们会发现,「凡对局都必有一方拥有必胜策略」这句话本身需要一条公理,而这条公理与另一条被普遍使用的公理(选择公理)并不相容。
本章的路线(见上图)。先用最一般的方式定义无限对局 GA:两位玩家轮流走 ω 步,产生一条无限序列,胜负由这条序列是否落在事先给定的集合 A 里决定(5.1)。接着证明第一个真正的定理:若 A 是开集,则这一局必然决定——一方必有必胜策略(Gale–Stewart 1953,5.2 陈述、5.3 证明)。然后是本章的高潮:如果要求每一个 A 都可决定,就得到决定性公理 AD(5.4);而 AD 与选择公理 AC 冲突,两种「数学宇宙」在此分道(5.5)。
游戏还给逻辑一把新钥匙。用 Banach–Mazur 游戏可以把实数的「大 / 小」(meager 与 comeager)翻译成胜负(5.6–5.7);Borel 集的可决定性(Martin 1975)把游戏与描述集合论的投影层级连起来(5.8)。在逻辑那一侧,Ehrenfeucht–Fraïssé 博弈用一场来回对局刻画两个结构是否「看上去一样」(5.9–5.10);Curry–Howard 对应把「证明」重新解释为一场游戏——命题是类型、证明是策略、证明的化简是计算(5.11–5.12)。最后回到可计算性:Post 对应问题(5.13)是不可判定的,而数独、扫雷、俄罗斯方块的难度也都是一条定理(5.14)。
本章的支票。读完本章,要能做到两件事:① 能陈述支配无限对局的定理(Gale–Stewart 的开集决定性、Borel 决定性、以及 AD 的地位),并说清它们各自用到了哪些公理;② 能把一个谜题的难度写成一个复杂性类——不是「很难」,而是「NP-完全」或「不可判定」。「无限」改变了什么?改变的是我们对「规则」本身的信念:规则是我们立的,而规则的边界,恰恰是自由的起点。
★★ 第一章的游戏有「最后一步」,胜负在终局揭晓。无限对局没有最后一步:它的对局长度是 ω(自然数那么多个回合),胜负要在整条无限序列上宣读。
定义(无限对局)。固定一个非空集合 X(最常用的是 X = 2 = {0, 1},即每手取一个比特;或 X = ω = {0, 1, 2, …})。两位玩家 I 与 II 轮流从 X 中取一个符号:I 取 x0,II 取 x1,I 取 x2,如此共 ω 步,得到无限序列 x = (x0, x1, x2, …) ∈ Xω。再固定一个集合 A ⊆ Xω,称为获胜集(payoff set)。规则只有一句:玩家 I 获胜,当且仅当 x ∈ A;否则玩家 II 获胜。这个对局记作 GA。
A 的地位。它不是「棋盘」,而是胜负判定书:A 划定哪些无限序列算 I 赢。同一套走法配不同的 A,就是完全不同的游戏。例如取 X = 2、A =「第 3 位是 0 的全体序列」,则 I 只要在他能控制的那个回合把该位写成 0 就赢了——例题 1(p146)会手算这个例子。
策略的定义必须适应「无限」。一个(对 I 的)策略是一个函数 σ:输入是到目前为止的有限历史 (x0, …, x2k)(轮到 I 走的情形),输出是 I 下一步要取的符号。若不管 II 怎么走,按 σ 走出的序列 x 总满足 x ∈ A,就称 σ 是 I 的必胜策略。决定性(determinacy)指的是:I 与 II 中必有一方拥有必胜策略。两边不可能都有(若都有,把这方策略对上那方策略会得到一条序列,既在 A 内又不在 A 内,矛盾),但两边都没有是可能的——这正是本章的核心悬念。
与第一章的差别在哪里?① 没有终局,所以「逆推三律」失效——不能从终局往回推;② 必胜策略是无穷长的函数,其存在性不再能靠穷举判定;③ 胜负所依赖的 A 可以是极其复杂的集合,而 A 的复杂度决定了这一局是否可决定、以及证明它可决定要用多强的公理。本章要研究的,正是「A 复杂到什么程度时 GA 仍然决定」。(第一章的回答是「有限局面必决定」,那是逆推的功劳;这里没有终局可逆推,答案要难得多。)
★★ 第一个可决定的对局类来自拓扑。在序列空间 Xω 上有一个自然拓扑(乘积拓扑,把 X 看作离散空间):一个柱集(cylinder)是「固定住前若干位、后面随便」的集合,记作
Ns = { x ∈ Xω : s ⊏ x } (s 是一条有限序列,读作「序列以 s 为前缀」)
全体柱集构成这个拓扑的基:任何开集都是若干个柱集的并。于是「A 是开集」有一个对博弈极其友好的等价刻画:
A 开 ⟺ 若 x ∈ A,则存在有限前缀 s ⊏ x 使 Ns ⊆ A
这条性质用博弈的语言读出来,就是「前几手就决定」。如果最终的序列 x 属于 A(即 I 要赢),那么在走出有限个符号之后胜负就已经定了:前缀 s 一旦确定,无论后面两位玩家怎么走,序列都逃不出柱集 Ns ⊆ A。所以开集游戏虽然在形式上走无限步,实质上是一个「会在有限步内揭晓」的游戏——这正是它可被证明为决定性的原因。
定理(Gale–Stewart,1953)。设 A ⊆ Xω 是开集,则 GA 决定:I 与 II 中必有一方拥有必胜策略。这条定理的证明只用到了 ZF(不需要选择公理),它也是描述集合论「决定性」研究的起点:闭集、Fσ 集、Gδσ 集……一层层往上,可决定性的门槛逐渐抬高,直到触及公理的分界线(5.8)。
历史与意义。Gale 与 Stewart 在 1953 年的短文中提出这个问题,并解决了开集与闭集的情形,同时问:能否把所有 A 都包括进来?那个问题引出了二十世纪最重要的公理之争之一(5.4–5.5)。下一节给出开集决定性的完整证明——它的骨架非常干净:「反证 + 不变量 + 开集的前缀性质」。
★★★ 现在给出开集决定性的完整证明。它的长度不到一页,却包含了一个漂亮的思想:把「后手没有必胜策略」这句否定的话,变成一个可以沿着对局维持下去的不变量。
定理(Gale–Stewart,开集情形)。若 A ⊆ Xω 是开集,则 GA 决定。
证明。要证明「I 有必胜策略」或「II 有必胜策略」。我们证明它的等价形式:若 II 没有必胜策略,则 I 有必胜策略(这个方向成立,determinacy 就成立)。
第 1 步(定义「不确定」局面)。把一条有限的进行中记录 p = (x0, …, xn−1) 称为不确定的(II-strategy-free),若从 p 出发继续下,玩家 II 仍然没有必胜策略。假设前提是:空历史(开局)是不确定的。
第 2 步(关键引理)。设 p 不确定,且轮到 I 走,则存在 I 的一手 a,使 p⌢a(在 p 后接上 a)仍不确定。证明:反设对 I 的每一手 a,局面 p⌢a 都(对 II 而言)是确定的,即 II 从每个 p⌢a 都有必胜策略 σa。那么 II 从 p 出发就有必胜策略:等 I 走完他的第一手 a,再启用 σa。这与「p 不确定」矛盾。◻
第 3 步(构造 I 的策略)。让 I 始终按引理走:每当他行动时,选择那一手 a,使得新局面仍不确定。由第 1 步的假设与第 2 步的引理(对 I 的每个回合可用),这个选择永远存在,于是 I 的策略被良定义。
第 4 步(这个策略必胜)。设它产生无限序列 x。若 x ∉ A:因 A 是开集,其补集是闭集,故存在有限前缀 s ⊏ x 使柱集 Ns ∩ A = ∅——也就是说,从 s 出发无论怎么走都出不了 A,II 从 s 必胜(他什么都不用做)。但按 I 的策略,s 是(某个 I 回合之后的)不确定局面,与「II 从 s 必胜」矛盾。因此 x ∈ A,即 I 赢。可见 I 的策略是必胜策略。◻
三个值得记住的细节。① 证明只用 ZF:没有用到选择公理,「不确定性」的传播完全是构造性的;② 「开集」用在了唯一一处——第 4 步里「x ∉ A 蕴含存在有限前缀 s 使 Ns ∩ A = ∅」,这正是「补集闭」;③ 对称地把「开」换成「闭」、把两位玩家互换,可得闭集也决定。下一节的 AD 就是把这个结论推广到「所有集合」——而那一步会撞上公理。
★★★ 开集决定性的证明让人跃跃欲试:能不能对所有集合 A 都证明 GA 决定?把它直接当作一条公理,就是决定性公理。
定义(决定性公理 AD)。对每一个集合 A ⊆ ωω,对局 GA 都是决定的(I 与 II 中必有一方有必胜策略)。
AD 不是「显然」的,也不是「无害」的:它是一条关于全体实数集的强力陈述。它的推论之丰富,几乎每一条都让人意外——因为它们同时给出了实数集「正则性」的整套性质:
ZF + AD ⊢ 每个实数集都 Lebesgue 可测;每个实数集都有 Baire 性质;每个不可数实数集都含一个完备子集(完备集性质)
为什么「可决定」会推出「可测」与「有 Baire 性质」?直觉是:一个对局若能决定,那么胜负就可以由「某一方的一场对局策略」刻画,而策略是一个「按有限信息决策」的规则——它天然带着「可用开集 / 可数运算逼近」的痕迹。精确的桥梁是一条定理:若每个对局都决定,就不存在「不可测」或「无 Baire 性质」的集合(否则可以构造出一个既不决定的对局)。5.6 的 Banach–Mazur 游戏会把「Baire 性质」直接翻译成一条可决定性命题,那时这个直觉会变得可触摸。
AD 还有更深的推论。在 ZF + AD 中:ω1 是可测基数(第二条不可达的无穷),所有实数集都有完备集性质(于是「连续统假设的某种形式」被逼出来:实数集的基数只能是可数或连续统),并且实数集不可良序——于是选择公理 AC 不成立。
一致性强度。ZF + AD 不是 ZF 的定理(连一致性都需要强假设):由 Martin、Steel、Woodin 的工作,ZF + AD 的一致性等价于 ZFC 加上「存在无穷多个 Woodin 基数」的一致性——这是一条远超出 ZFC 的大基数假设。换句话说:要不要相信「一切对局都决定」,等价于要不要相信存在这样一批巨大的基数。这把「规则的选择」推到了数学的最深处。
★★★ 上一节说 AD 推出「一切实数集可测」,本节要说清它与选择公理 AC 的正面冲突——这是一条定理,不是口味之争。
回顾 AC 的威力。选择公理说:对任何一族非空集合 ({Xi})i∈I,都存在一个「选择函数」,从每个 Xi 中挑出一个元素。它在现代数学里无处不在:分析里要用它选出收敛子列的极限、代数里要用它造出极大理想、拓扑里要用它证明 Tychonoff 定理。但它也有「不受」的推论。
Vitali 构造:AC 给出一个不可测集。在 [0, 1] 上定义等价关系 x ~ y 当且仅当 x − y ∈ ℚ(差是有理数)。每个等价类都是可数的,而 [0, 1] 被分成不可数多个这样的类。用 AC 从每个等价类中挑出一个代表,把这些代表组成集合 V。可以证明:V 不能是 Lebesgue 可测的——若 V 可测、测度为 m,则可数多个「平移 V + q」(q ∈ ℚ)会覆盖 [0, 1] 又塞得进 [0, 2],从而既可加性又平移到矛盾(m = 0 与 m > 0 都不成立)。不可测集的唯一「原料」就是 AC。同理,用 AC 得到的实数良序也能造出无 Baire 性质的集合。
现在两边对撞。一边:ZFC ⊢「存在不可测集、存在无 Baire 性质的集合」。另一边:ZF + AD ⊢「一切实数集可测、一切集有 Baire 性质」。两句话不可能同时为真,于是
ZF + AC + AD 是不一致的
两种宇宙各有各的代价。在 ZF + AD 里,得到了实数集的完美正则性(可测、有 Baire 性质、完备集性质),代价是许多经典的「选择型」定理失效:不是每个向量空间都有基、不是每个环都有极大理想、ω1 上的可数加性测度会出现(这在 ZFC 里不可能)。相反,在 ZFC 里可以放心地选择,但要接受「存在不可测的病态集合」这个副作用。
于是问题被重新表述。数学家不是问「哪一条是真理」,而是问「我想在哪种宇宙里工作」——若做分析、代数,ZFC 是默认的工作台;若研究描述集合论中的正则性质,ZF + AD(或其推广 PD、大基数下的更强形式)反而让「一切集合都规矩」成为定理。这正是本册主张的数学自由的一次最深刻的演示:公理是一种选择,选择意味着代价,而诚实就是承认这份代价。
★★★ 现在把「游戏」当作测量工具来用:用一场对局去刻画一个实数集的「大小」。这一节的主角是 Banach–Mazur 游戏,它把「Baire 性质」变成一条纯粹的胜负命题。
规则。给定实数集的子集 X ⊆ ℝ。两位玩家轮流选取开区间,要求后选的区间包含在前一个之内:
I0 ⊇ I1 ⊇ I2 ⊇ ⋯(I 取下标偶数者、II 取下标奇数者)
对局无限进行。终局看交集:玩家 I 想使 ⋂n In ∩ X ≠ ∅(交集「碰到」X);玩家 II 想使它不碰 X。这就是 Banach–Mazur 游戏 BM(X)。
定理(Banach–Mazur / Oxtoby)。① 玩家 II 有必胜策略 当且仅当 X 是 meager(第一纲集:可数个无处稠密集的并——「拓扑意义下的小」);② 玩家 I 有必胜策略 当且仅当 X 在某个开区间上 comeager(「拓扑意义下的大」)。
为什么 meager 会让 II 必胜?若 X = ⋃n Nn,每个 Nn 无处稠密(不含任何区间的闭包)。II 的策略就是「逐个躲开」:第 n 回合时,他挑一个子区间,使它的闭包整个落在 ℝ ∖ Nn 里(因为 Nn 无处稠密,任何区间里都有一段完全避开它)。这样第 n 个无处稠密集被躲过,最终交集避开了所有 Nn,也就落在 X 之外。反过来,若 X 不是 meager(在某个区间上 comeager),I 就能用同样的「追逐」策略保证交集落在 X 内。
这条定理的分量在于:它把 Baire 性质变成了一条可决定性断言。回忆 X 有 Baire 性质,意思是存在开集 U 使对称差 X △ U 是 meager。现在看 BM(X):若 BM(X) 决定,则要么 II 有必胜策略(X 在限制的区间上是 meager ⟹ 在开集意义下「小」)、要么 I 有必胜策略(X 在那里 comeager ⟹ 与某开集只差一个 meager 集)。两者合起来,恰好就是 X 有 Baire 性质。于是得到本章第一个「决定性 ⟹ 正则性」的实例:
若对所有 X,BM(X) 都决定,则每个 X 都有 Baire 性质
而在 ZFC 里我们知道(由 AC)存在无 Baire 性质的集合,所以必存在某个 BM(X) 不可决定。这说明:「并非所有对局都决定」不是猜测,而是一条可被证明的定理(在 ZFC 内)。AD 正是宣称这种病态不会出现。
★★★ 上一节我们得到了一条「决定性 ⟹ 正则性」的实例。本节把这条思路讲透:把实数集的「大 / 小」翻译成游戏论陈述,会看到一个漂亮的二分结构,它同时照亮了 5.6 的 Baire 游戏与 5.4 的 AD。
两套「大小」的语汇。在实数集上有两套并行的二分:拓扑的是 meager(可数个无处稠密集之并,「小」)与 comeager(补集 meager,「大」);测度的是零测集(「小」)与全测集(「大」)。两套二分互不包含:存在 meager 但全测的集合(把有理数挖掉、填上一种构造),也存在非 meager 但零测的集合(如某种 Cantor 型集)。「小」不是一个绝对概念,而是相对于所选「度量方式」的。
游戏刻画把拓扑那一套完全接住。由 5.6 的定理:BM(X) 中 II 必胜 ⟺ X meager;I 必胜 ⟺ X 局部 comeager。把两条合起来,「X 有 Baire 性质」就等价于「BM(X) 决定」——一个有 Baire 性质的集合「几乎是一个开集」(差一个 meager 集),而开集游戏的胜负又由有限前缀决定(5.2),两者因此严丝合缝。
于是 AD 的作用一目了然。AD 说「每个 BM(X) 都决定」,由上面的等价,立刻得到「每个 X 都有 Baire 性质」。这正是 5.4 列出的 AD 推论之一,而这里给出了它最直观的来路:把「正则性」换成「对局可决定」,而 AD 正是「对局都可决定」。同理,Lebesgue 可测性也有一个「测度版」的游戏刻画(用区间长度的和来判定),AD 同样推出「一切集可测」。游戏论于是成了「正则性」的统一语言:可测、Baire 性质、完备集性质,都能被写成「某个对局决定」。
反面的证据同样重要。在 ZFC 中,由 AC 造出的 Vitali 集既不可测、又无 Baire 性质(5.5)。由本节的等价,对应的 Banach–Mazur 游戏必然不可决定。这给出一个在整个 ZFC 内可证的结论:「所有对局都决定」在 ZFC 中是假的;AD 只能在一个放弃 AC 的宇宙里成立。5.6 与本节合起来,把「公理的分道」从抽象的口号变成了具体的、可以指认的目标。
★★★★ 5.2 解决了开集,5.3 解决了闭集。「再往上」怎么办?答案是一层一层爬:Borel 集、再是投影集。每一层的可决定性,对应着一份不同的公理账单。
Borel 集是「从开集出发、可数多次取补与可数并」造出的集合。它们构成一条从开集开始的层级(Σ01 ⊆ Σ02 ⊆ ⋯,直到ω1 层)。定理(Martin,1975):每个 Borel 集都决定。这条定理完全在 ZFC 内可证——但它必须实质地用到幂集:Harvey Friedman 证明,只要把幂集公理削弱到 Vω+ω 以内,Borel 决定性就不可证(事实上失败)。这是数学史上罕见的、能看到「公理被真正使用」的地方:一条漂亮的定理,其证明长度随 Borel 层级超限增长,非幂集不可。
投影集是「从 Borel 出发、允许任意实数作参数后取投影」造出的集合,形成投影层级:
Σ11(解析集)⊆ Π11 ⊆ Σ12 ⊆ Π12 ⊆ ⋯(投影集 = 各层之并)
其中 Σ11 集是「连续像 / 投影」,也等价于「某个多项式方程组的解集」(这就是 Hilbert 第十问题与实代数几何相连的地方)。定理(Martin–Solovay 等):从一个可测基数出发,可得每个 Σ11 集都决定;更高层的 Π11、Σ12 … 需要越来越强的大基数(n 个 Woodin 基数可得 Σ1n+1 决定性)。把整个投影层级都收下,就是投影决定性 PD,它由无穷多个 Woodin 基数导出(Martin–Steel)。
这幅阶梯图告诉我们的核心事实:可决定性不是「是 / 否」二值,而是一条随集合复杂度上升、公理强度同步上升的曲线。底部(开、闭、Borel)在 ZFC 内可证;中段(解析集及投影集)需要大基数;顶端(全体集合,即 AD)需要最强的那一档。反过来,由可决定性也能反推大基数:例如 Σ11 决定性蕴含 ω1 在 L 中不可达——「可决定」与「大基数」是同一枚硬币的两面。
一个哲学注脚。这阶梯暗示:集合越复杂,就越多地暴露「我们站在哪套公理上」。这正是本章反复要传达的「把无限玩到深处,规则本身成为话题」。
★★ 换一个完全不同的游戏。这一次棋盘不是石子,而是两个数学结构;两位玩家也不再争胜负,而是争「能不能看出两者的差别」。
规则(n 轮 EF 博弈)。给定两个结构 A、B(同一个语言,例如都是「带一个二元关系 < 的集合」)。有两位玩家:
· Spoiler(「破坏者」):每轮从 A 或 B 中任选一侧,从中挑一个元素;
· Duplicator(「复制者」):必须在另一侧挑一个元素来「对应」。
如此进行 n 轮。记 Spoiler 在 A 中选出的元素为 a1, …, ar、在 B 中选出的为 b1, …, bs,Duplicator 的回应把它们配成一一对应。Duplicator 赢,当且仅当这个对应是部分同构:即它在两边的元素之间保持了全部关系(例如「ai < aj」与「bi < bj」同真同假)。一旦某一轮无法这样配,Spoiler 赢。
直觉。Spoiler 在「拷问」:他挑一个元素,要求 Duplicator 在另一边找出结构上「一模一样位置」的元素。Duplicator 有 n 轮必胜策略,就意味着:无论怎么挑 n 个元素,两结构在局部上都无法被区分。反之,Spoiler 若能在 n 轮内逼出「无法对应」的一步,就说明两结构存在一个「n 深」的差别。
与量词的联系(下一节展开)。一轮博弈对应一个量词:「Spoiler 挑 a」= 「存在 a」或「对一切 a」,取决于他挑的是哪一侧、以及谁想证明什么。于是 n 轮博弈恰好对应「量词嵌套深度 ≤ n 的语句」——这就是 EF 定理的内容(p140)。下一节会给出精确陈述,并用有限序的表格把这个「计数能力」演示出来。
★★★ 上一节的游戏不是消遣:它精确地刻画了逻辑区分能力。这就是Ehrenfeucht–Fraïssé 定理(Ehrenfeucht 1961;其思想可追溯到 Fraïssé 1954)。
先定义量词秩。语句(公式)的量词秩是其中量词嵌套的最大深度,与量词的个数无关。例如 ∃x(x = x) 秩 1;∃x∃y(x < y) 秩 2;而 ∃x(∃y(y < x) ∧ ∃y(x < y)) 也只有秩 2(两个 ∃y 是并列的,不嵌套)。这个定义与 EF 的轮数一一对应:每一轮博弈引入一个量词。
定理(Ehrenfeucht–Fraïssé)。设 A、B 是两个结构。以下等价:① Duplicator 在 n 轮 EF 博弈中有必胜策略;② A 与 B 满足完全相同的一组量词秩 ≤ n 的语句。特别地:Duplicator 对所有 n 都胜,当且仅当 A 与 B 初等等价(满足同一阶逻辑的全部语句)。
证明的两个方向(直觉版)。(⟸) 若两结构满足同一组秩 ≤ n 的语句,则 Duplicator 可按下法应对:每当 Spoiler 走一步(对应一个量词),Duplicator 只需保证「当前的部分对应可以扩张到 n 轮」——这条「可扩张性」恰好被「满足同一组语句」保证。(⟹) 反过来,若 Duplicator 有必胜策略 τ,则对任何秩 ≤ n 的语句 φ,可以按 φ 的量词结构沿 τ 做归纳,证明 A ⊨ φ ⟺ B ⊨ φ。Spoiler 的每一步对应「∃」或「∀」,Duplicator 的必胜策略就是把「∀ 的要求」逐一兑现成「∃ 的见证」。
例子一(有限序,真跑验证)。对两个有限线性序,设大小为 m, n。实验页(p156)用蛮力搜索得到的判据是:Duplicator 赢 n 轮 ⟺ m = n 或 min(m, n) ≥ 2n − 1(阈值 1, 3, 7, 15, …)。这解释了秩 n 的语句能「数」到多细:秩 2 能识别「是否存在中间元素」(语句 ∃x(∃y(y < x) ∧ ∃y(x < y))),于是大小为 2 与 3 的序在秩 2 被区分;而 3 与 4 要到更高秩才被区分。
例子二(ℚ 与 ℝ)。(ℚ, <) 与 (ℝ, <) 都是无端点的稠密线性序。可以证明 Duplicator 在这里对一切 n 都有必胜策略(用「保持左右既有元素的稠密插入」策略),故两结构初等等价——一阶逻辑无法区分它们。但两者不同构(ℚ 可数、ℝ 不可数)。这是一个跨越第一章与本章的奇妙现象:「一阶逻辑下一样」与「结构上同一个」是两件不同的事。(若把语言加强,例如加入「是完备的」这类二阶 / 拓扑性质,两者才分开。)
★★★ 前面几节把「对局」用在集合与结构上。本节要把它用在证明本身:证明就是一场游戏,而这场游戏有一个精确的「翻译表」——Curry–Howard 对应。
核心等式只有三行。命题 = 类型;证明 = 程序;证明的化简 = 计算。这条对应来自 Haskell Curry(1934,组合逻辑与 Hilbert 系统)与 William Howard(1969,自然演绎与简单类型),如今是类型论与程序设计语言的基石(Coq、Lean、Agda 都建立在它上面)。直觉是这样:
· 若要证 A → B,标准的做法是「假设 A,推出 B」——这与「写一个函数:输入 A,输出 B」完全同形;
· 若要证 A ∧ B,要分别给出 A 的证明与 B 的证明——这正是「一对值(a, b)」,即乘积类型;
· 若要证 A ∨ B,只需给出其中之一——这正是「标签加值」,即和类型;
· ⊥(假)没有任何证明——对应空类型(没有任何程序)。既然空类型不能有元素,「从 ⊥ 出发能推出任何 C」(爆炸原理)就对应「从空类型到任意类型的函数」——这样的函数存在(它永远不需要被调用)。
「化简 = 计算」是最漂亮的一条。一个证明里若出现「先引入一个假设、再立刻使用它」(在编程里叫「先定义函数、再立刻调用」),就是一段冗余。把它删掉——证明的对称简化(cut-elimination / β-归约)——恰好就是程序的一次计算(求值)。于是「一个证明」不只是「一串合法的推理」,还是一件「可以被执行的程序」:给出输入(已证的前提),它就算出结论的证明。这就是「证明即计算」(proofs as programs)的内容。
对话视角:证明是一场对局。把一句话读成一场争辩:Prover 主张「A → B」,Skeptic 可以反问「那给我一个 A」(此时双方角色互换,Skeptic 暂时变成主张 A 的一方),Prover 必须据此给出 B 的证明。Prover 的「证明」正好就是他的必胜策略:无论 Skeptic 如何质疑,他总能回应。这正是 p3 里「证明是一场谁都无法耍赖的比赛」的精确形态:一个证明 = 一套应对一切质疑的策略。
为什么这一页属于「无限与逻辑的游戏」?因为它把逻辑本身还原成了一场博弈:联结词是走法规则、量词是对方的挑子、证明是一套必胜策略、计算是策略的化简。下一节把联结词的游戏规则逐条写清,并指出线性逻辑如何用「资源」把这场对局进一步细化。
★★★ 上一节说「证明是游戏」。本节把这场游戏的走法规则写清楚:每个逻辑联结词对应一条选人规则(谁有选择权),而「量词」对应玩家的挑子。
设定。两位玩家:Prover(主张「命题 φ 成立」,负责辩护)与 Skeptic(负责质疑)。一个证明,就是 Prover 应对 Skeptic 全部质疑的必胜策略。
合取 A ∧ B:由质疑者选择。要辩护「A 且 B」,必须两样都给。于是 Skeptic 有权要求「先看 A」或「先看 B」,Prover 必须拿出被点中的那一个。这与编程里的「投影」一致:一个 A × B 的对值,可以由使用者决定取第一分量还是第二分量。
析取 A ∨ B:由主张者选择。要辩护「A 或 B」,只需给其中一个即可。于是 Prover 有权选择辩护 A 还是 B。这正是「A ∨ B 的证明是一个带标签的和」:Prover 贴上标签,宣布他打算用哪一边。
蕴含 A → B:交换角色。要辩护「若 A 则 B」,Prover 必须能做到「给定一个 A 的证明,给出 B 的证明」。因此规则是:Skeptic 先扮演「主张 A」的一方,给出一个 A 的证明;然后双方交换角色,Prover 必须据此给出 B 的证明。这与 Curry–Howard 里「A → B 对应函数类型」完全吻合——「先接收一个 A,再返回一个 B」。
否定 ¬A:整体交换角色。¬A 定义为 A → ⊥。要辩护「A 不成立」,就是「若 Skeptic 能给出 A 的证明,Prover 就得出一个矛盾」。于是规则化为交换双方角色:Skeptic 主张 A,Prover 负责反驳。这条「换位」正是经典逻辑中 ¬¬A → A(双重否定)这类原则的游戏论来源——它有用与否,取决于是否允许玩家「在策略上换位」(直觉主义逻辑不允许,于是 ¬¬A → A 不成立)。
线性逻辑:把「资源」加进对局。经典逻辑里,一个已证的前提可以反复使用(「A 的证明」可以被无限次调用)。Girard 的线性逻辑把「使用次数」写进规则:乘法联结词 ⊗(张量积)与 ⅋(par)表示两边同时承担资源——A ⊗ B 是说「A 与 B 的证明各消耗一份、不能重复用」;而加法联结词 & 与 ⊕ 表示「一方单独做选择」(& 由 Skeptic 选、⊕ 由 Prover 选),与经典逻辑里的 ∧、∨ 相似。这样一来,「逻辑推理」被读成了「有限资源的博弈」——这与第一章「取子游戏里石子只能取一次」的资源观遥相呼应。
小结这一节。联结词 = 走法规则(谁选、谁回应);量词 = 对方的挑子(「对一切 x」= 对手任选一个 x);证明 = 必胜策略;证明化简 = 策略的化简。逻辑,从头到尾是一场游戏。
★★★ 现在从逻辑转向可计算性。本节的主角是 Post 对应问题(Post Correspondence Problem,PCP),它把「无限」的困难变成一个看上去像小孩子拼图的问题。
规则。给一套有限张骨牌,每张骨牌上写着一串字符,分「上串」与「下串」两行,例如 (a / ab)、(b / a)、(ca / c)。骨牌可以无限次重复使用。问:能否挑出一个有限的骨牌序列(按顺序排好),使得把所有上串依次拼接的结果,恰好等于所有下串依次拼接的结果?——若存在,称该 PCP 实例有解。
它是一个「一人的对局」。没有对手,只有规则与目标;「有解」意味着存在一条通关的路径。这类问题在绪论的四条判据下属于「单人谜题」(第四族),但它的难度远超数独——它是不可判定的。
定理(Post,1946)。PCP 是不可判定的:不存在一个算法,能对所有 PCP 实例判定它是否有解。证明思路是把它归约到 Turing 机的停机问题——用骨牌的上 / 下两行分别「模拟 Turing 机的两条轨道」(下串记录机器状态,上串记录配置),使「上串 = 下串」恰好对应于「机器停机」。于是「骨牌能否拼平」与「这台机器是否停机」是同一个问题。
为什么 PCP 如此重要?因为它是一个「瘦」得惊人的不可判定问题:没有量词、没有算术、只有字符串拼接。许多其他不可判定性结果都通过 PCP 中转。最著名的一条是关于上下文无关文法的:判断一个上下文无关文法是否歧义(同一个串有两种不同的语法分析树)是不可判定的——证明正是从 PCP 归约而来(把每张骨牌变成一个产生式,上 / 下两串对应两种推导)。此外,PCP 也用来证明某些「字符串重写系统」「程序等价性」乃至无限棋局的不可判定性:只要能把 PCP 编码进一个博弈的走法里,这个博弈就继承了不可判定性。
与本章主题的呼应。本章一开始把「游戏」推向了无限对局,那里的困难来自「太多的集合、太强的公理」;PCP 展示的是另一种「无限」——搜索空间的无限:解的长度没有上限,所以「试遍所有序列」永远无法完成。两种无限,两种困难:一种要我们在公理之间取舍,一种告诉我们某些问题根本没有算法。下一节把这种「难度」精确量化为复杂性类。
★★ 本章始于「把游戏玩到无限」,终于回到具体的谜题。本节要说明:一个谜题「难不难」不是感觉,而是一条可以被证明的定理——它可以被写成一个复杂性类。
先记住复杂性类的三分。① P:能被确定性算法在多项式时间内解出的判定问题(「容易」);② NP:解能被多项式时间验证的问题(「答案容易检查,但未必容易找到」);③ NP-完全:NP 中「最难」的一类——任何 NP 问题都能多项式时间归约到它。只要有一个 NP-完全问题落入 P,就推出 P = NP(一个悬而未决的世纪难题)。
数独:判定问题是 NP-完全的。这里说的是广义的数独:把 9 × 9 换成 n2 × n2(每块 n × n),问「给定的部分填法能否补全」。Yato 与 Seta(2003)证明:这个判定问题(以及「是否存在第二个解」的 ASP 问题)是 NP-完全的。归约的做法是把 3-SAT 编码进数独:用「变量—取值」格(例如某一行的一对格子代表变量 xi 取真 / 取假),用约束块(行、列、宫的互异规则)强制「每个变量恰好取一个值」,再用专门的「子句块」检查「每个子句至少有一个真文字」。于是「3-SAT 实例可满足」恰好对应「这个数独盘面可解」。注意:这只说明广义数独难;固定 9 × 9 的实例是有限的(尽管数目巨大),理论上存在查表算法,只是没人会去写。
扫雷:判定问题是 NP-完全的。Richard Kaye(2000)证明:给一个扫雷盘面(已知哪些格被翻开、上面的数字是多少),问「是否存在一种雷的布局与所有数字一致」是 NP-完全的。归约的技巧很漂亮:用一排雷与数字表示「线(导线)」,用特定的小方块组合表示「与门 / 或门 / 非门」,于是任何布尔电路都能被编码成一个扫雷盘面——电路可满足性(SAT)从而归约到扫雷。这就是「扫雷难」的精确含义。
俄罗斯方块:n×n 板的判定问题 NP-完全。Demaine、Hohenberger、Liben-Nowell(2003)证明:给定一列下落方块的顺序与一个 n × n 的板,判定「能否清空」是 NP-完全的(甚至近似也很难)。这提醒我们:连「消方块」这样看似无害的游戏,其难度也可能是一条硬定理。
回到本章的支票。现在应当能说:判定一个谜题难不难 = 判定它的判定问题属于哪个复杂性类。数独与扫雷是 NP-完全(答案验证容易、寻找困难),PCP 是不可判定(连算法都不存在),而生命游戏的某些性质(如下一步有多少活细胞之外的「最终命运」问题)也是不可判定的(p156 的真跑会给出可计算的一面)。「难度是定理」——这正是本册反复主张的一句话。
★ 本章出现了许多「不能决定」「不可判定」的字眼,它们极易被误读成悲观的结论:「数学有漏洞」「这个问题没有答案」「既然证不出来,那怎么写都行」。这些读法都错了。本页把三种「不能决定」分清楚,并说明它们其实是正面的定理。
误读一:不可判定 = 没有答案。不。停机问题(Turing 1936)对每一台具体的机器都有确定的答案(它要么最终停机、要么不停);不可判定说的是「不存在一个算法能对全部输入都给出答案」,而不是「问题本身没有答案」。「哥德巴赫猜想」的真值此刻就已确定(尽管我们不知道它是哪个),它属于「未知」而不是「不可判定」。
误读二:不可判定 = 数学的失败。恰恰相反。Gödel 不完备定理(1931)说:任何足够强、一致的形式系统,都存在「真而不可证」的命题。这不是系统的缺陷,而是一条关于「形式化」本身的定理:任何固定的规则体系都无法穷尽真理。Turing 停机定理同理——它不说明「程序有 bug」,而是刻画了计算的边界。这两条是现代逻辑最伟大的正面成就,它们把「能做什么」与「不能做什么」画成了一张精确的地图。
误读三:既然不可证,就可以随便写。不。不可判定不等于「没有约束」:在 ZFC 中,连续统假设 CH 既不可证也不可反驳(Gödel 1940、Cohen 1963),但这是一个独立命题——它可以分别在 ZFC + CH 与 ZFC + ¬CH 两套公理下研究,各自都是自洽的数学宇宙。这正是 5.5 的「公理的分道」。「自由」在此有精确含义:可以选公理,但必须诚实地承担它的全部推论。
三种「不能决定」,数学含义完全不同。① 不可判定:不存在任何算法来判定,例如停机问题、Post 对应问题(5.13);② 独立:在给定的公理系统中既不可证也不可反驳,例如 CH 之于 ZFC、以及本章 AD 与 AC 的关系;③ 未知:目前尚未解决,例如 P 是否等于 NP、黎曼猜想。把这三者混为一谈,是本章最常见的错误。
本章的立场:边界即自由。开集决定性(5.2–5.3)告诉我们「有限复杂度的对局必然决定」;AD 与 AC 的冲突(5.5)说明「越往深处走,就必须在公理之间做选择」;PCP(5.13)与谜题(5.14)则说明「有些问题根本没有算法」。正因为规则不能穷尽,数学才必须不断创造新规则、新棋盘、新游戏——这恰恰是「游戏性是数学最重要特质」的深层理由。
★★ 例题 1:Gale–Stewart 的最简情形。取最简单的序列空间 X = 2 = {0, 1},玩家 I 取偶数位 x0, x2, x4, …,玩家 II 取奇数位 x1, x3, x5, …——每位玩家完全控制自己那一半位置。下面三个获胜集各手算一次。
例 1-1。设 A = { x ∈ 2ω : x2 = 0 }(序列的第 3 位为 0)。谁有必胜策略?
解。第 2 位属于偶数位,由玩家 I 控制。I 的策略极简单:在他该走第 2 位时(即他的第二步)写下 0。无论 II 在前两步写了什么,最终序列的第 2 位都是 0,故 x ∈ A,I 胜。所以玩家 I 有必胜策略。A 是一个柱集(只固定第 2 位),因而既开又闭,Gale–Stewart 定理(5.2)给出同样的结论。
例 1-2。设 A = { x : x1 = 0 }(第 2 位为 0)。谁赢?
解。第 1 位是奇数位,由玩家 II 控制。II 的必胜策略同样是「直接写坏它」:在他的第一步(即写下 x1 时)写下 1。于是最终序列 x1 = 1,x ∉ A,玩家 II 胜。「谁赢」在这里由「这个坐标属于谁」完全决定。
例 1-3。设 A = { x : x0 = x2 }(第 1 位与第 3 位相同)。谁赢?
解。第 0、2 位都在玩家 I 手里。I 策略:先走 x0(随便取 0 或 1,记作 b),两步后走 x2 = b。于是 x0 = x2 恒成立,I 胜。更一般地:凡是「只由偶数位决定」的获胜集,玩家 I 都能照着它的定义往下写,从而必胜;凡是「只由奇数位决定」的,玩家 II 必胜。
为什么这几个例子都「决定」?因为它们都只依赖有限个坐标,因而 A 是柱集(clopen,既开又闭)。由 5.2 的定理,开集必决定——这几个例子正是定理最平坦的落地。反过来,当获胜集依赖无穷多个位(例如「x 中 1 的个数有限」或「x 最终会变成全 1」),分析就不再平凡:后者属于 Σ03 层,可决定性要靠更强的定理(5.8)。
练习(自己做)。① A = { x : x3 = 1 },谁赢?② A = { x : x0 = 0 或 x1 = 0 },谁赢?(提示:I 写下 x0 = 0 就赢了。)③ 若把「第 3 位为 0」改成「有无穷多位为 0」,这个 A 还是开集吗?它的可决定性需要什么?(这是本章习题 2 的第 6 题。)
★★★ 例题 2:EF 博弈小例。取「线性序」语言(一个二元关系 <),用 [m] 表示大小为 m 的有限序 1 < 2 < ⋯ < m。由 p140 的判据(实验页也验证过):Duplicator 赢 n 轮 ⟺ m = n 或 min(m, n) ≥ 2n − 1。下面逐个手算,并写出区分语句。
例 2-1([1] 与 [2],2 轮)。谁赢?区分语句是什么?
解。m = 1, n = 2,n = 2 轮:min = 1 < 3 且 1 ≠ 2,故 Spoiler 赢。区分语句:∃x∃y(x < y)(秩 2,即「至少两个元素」)——它在 [2] 中真、在 [1] 中假。Spoiler 的策略:先在 [2] 中挑一个元素,Duplicator 只能挑 [1] 中唯一的元素;Spoiler 再在 [2] 中挑另一个元素,Duplicator 无处可挑与前者「不等」的元素——配不成部分同构,Spoiler 胜。
例 2-2([2] 与 [3],2 轮)。谁赢?
解。m = 2, n = 3:min = 2 < 3 且不等,故 Spoiler 赢。区分语句是「存在一个中间元素」:
σ ≡ ∃x ( ∃y(y < x) ∧ ∃y(x < y) )
它的量词秩恰好是 2(两个 ∃y 并列,不嵌套);[3] 满足它(元素 2 是中间元素),[2] 不满足。Spoiler 的策略正是去「量那个中间元素」:先挑 [3] 的中间元素 2,Duplicator 只能应 [2] 的 1 或 2;随后 Spoiler 在「应点较小」的那一侧再走一步,逼出矛盾。(这个例子提醒:秩 n 的语句能「数」的不是元素的绝对个数,而是结构位置。)
例 2-3([3] 与 [4])。2 轮谁赢?3 轮呢?
解。① 2 轮:min = 3 ≥ 22 − 1 = 3,故 Duplicator 赢——[3] 与 [4] 在秩 ≤ 2 的语句上无法区分(都用 σ 见分晓的「中间元素」两者都有,都能「数 2 个并列的 ∃」)。② 3 轮:min = 3 < 23 − 1 = 7 且 3 ≠ 4,故 Spoiler 赢——秩 3 的语句已能区分它们,例如「[3] 中每个元素至多……」(具体语句留作习题)。同一个例子在不同轮数下胜负翻转,正说明「EF 的轮数 = 逻辑的深度」。
例 2-4([2] 与 [2])。任意轮谁赢?
解。两结构同构(都是两点链),Duplicator 有平凡必胜策略:Spoiler 挑一个,Duplicator 挑「对应的那一个」(保持同构的镜像)。故对一切 n,Duplicator 赢——这也印证判据中「m = n ⟹ 恒胜」这一条。
练习(自己做)。① [4] 与 [5] 在几轮内胜负翻转?(用阈值 2n − 1。)② 写出例 2-1 中 Spoiler 的完整必胜策略(逐轮写清)。③ 若语言再加一个一元谓词 P(例如「是红点」),判据会如何变化?(提示:此时「同构」要求谓词也对应。)
★★★ 例题 3:数独的 NP-完全性归约示意。本例题只讲归约的构造思路(完整证明见 Yato–Seta 2003)。目标是:把任何一个 3-SAT 实例编码成一个广义数独(n2 × n2 盘面),使「3-SAT 可满足」⟺「数独可解」。
第一步:用「格」表示变量。广义数独的每一行是一串格子,格子里填 1, …, n2 之一,且每行 / 每列 / 每宫内部互不相同——「每行互不相同」这条规则本身就是一个「恰好取一个值」的约束。于是我们对每个布尔变量 xi 预留一行(变量行),在其中放两个「关注格」:一个代表 xi = 真、一个代表 xi = 假。行内互异规则会强制这两个格不能同时取同一个数——这正是「变量恰好取一个真值」的雏形。
第二步:用「符号位」强制二选一。把「真 / 假」编码为两个特定数字(例如 1 与 2)。在变量行里预填一些格子,使得两个关注格中「恰好一个」被逼成 1(真)、另一个逼成 2(假)。这样,「变量的取值」就被盘面规则锁定了。
第三步:用「子句块」检查每个子句。每个 3-SAT 子句是一个三元析取,例如 (x2 ∨ ¬x3 ∨ x7)。为每个子句设一个子句块(一小片区域),其规则(行 / 列 / 宫的互异)被设计成:只有当下拉到的「文字」中至少有一个为真的时候,这块区域才能被填满。常用的技巧是「重言块」:在块内预填一个模式,逼迫「至少一个文字对应的格取到『真』的数字」。
第四步:读回。若数独有解,则存在一个满足全部子句的真值指派(从变量行读出 xi 的真假);反之,任一可满足的指派都能把盘面补全。于是 3-SAT ≤p 广义数独,数独的判定问题是 NP-难;又因一个解能在多项式时间内验证,它落在 NP 中,故 NP-完全。
要留意的两点。① 归约针对的是广义数独(n 任意),而不是固定的 9 × 9:固定 9 × 9 的实例只有有限多个,原则上存在「查表」的常数时间算法(尽管表大得无法写出)。「NP-完全」说的是问题族,不是某一个盘面。② 同样的「预填 + 规则互异」手法也用来把 SAT 编码进扫雷(用雷与数字表示电路,见 5.14)与俄罗斯方块(用落块编码计算)——归约的通用形状是:把「自由变量」放进盘面,把「约束」写进规则,让「求解盘面」等价于「满足约束」。
练习(自己做)。① 若把数独的限制从「3-SAT」换成「2-SAT」,归约会怎样?结论会变成 P 吗?(回忆:2-SAT 属于 P。)② 为什么「验证一个解」只需要多项式时间?(提示:只需检查每行 / 每列 / 每宫的互异性。)③ 若把「是否存在第二个解」(ASP)也拿来问,为什么它仍是 NP-完全的?(试想:给定一个解,判定「另有一个」等价于判定什么?)
★★ 习题 1:无限对局与逻辑(基础)。
1. 写出无限对局 GA 的完整定义(序列空间、轮次、获胜集、赢的条件),并说明「策略」与「必胜策略」的区别。提示:策略是函数;必胜策略要求「无论对手怎么走」都赢。
2. 说明为什么一个对局不可能双方都有必胜策略。(提示:把两方的策略对上,得到一条既在 A 内又不在 A 内的序列。)
3. 判断下列 A ⊆ 2ω 是否为开集,并说明理由:① {x : x0 = 0};② {x : x0 = x1 = ⋯ = xk = 0}(某个固定 k);③ {x : x 中只有有限个 1};④ {x : x 最终恒为 0}。
4. 叙述 Gale–Stewart 定理(开集情形)的精确陈述,并指出其证明中「开集」被用在了哪一步。
5. 把 p133 的证明改写成「闭集情形」:若 A 是闭集,则 GA 决定。对称地交换两位玩家,并把「开集的前缀性质」换成「闭集的补集是开集」。
6. 证明:若 A 是既开又闭的柱集(只固定有限个坐标),则 GA 的决定性可直接手算得出——谁控制「决定性的那个坐标」谁赢。用例题 1 的三个例子说明。
7. 陈述决定性公理 AD,并写出它推出的三条「正则性」结论。说明为什么 AD 与选择公理 AC 不能同时成立。
8. 用 Banach–Mazur 游戏说明「X 是 meager」与「玩家 II 有必胜策略」的等价性。
自检标准。能独立完成 1–4 与 7,说明已掌握本章前半的骨架;能写清 5、6、8 的证明,说明已理解「决定性、正则性、游戏」三者的桥。
★★★ 习题 2:EF 博弈与复杂性(进阶)。
9. 写出 EF 博弈的完整规则,并证明「Duplicator 若赢了 n 轮,则它也赢任何 m ≤ n 轮」。
10. 证明:[m] 与 [n](有限序)的 Duplicator 在 1 轮恒胜。(提示:一轮只需保证单个元素之间的对应——没有关系被违反。)
11. 对 [2] 与 [3],写出 Spoiler 在 2 轮中的完整必胜策略(逐步写出「挑哪个结构中的哪个元素」与「为什么 Duplicator 无法回应」)。
12. 验证阈值公式:[3] 与 [4] 在 2 轮时 Duplicator 胜、在 3 轮时 Spoiler 胜。并解释「2n − 1」这个阈值从何而来(提示:秩 n 的语句能「二分数轴」的层数)。
13. 证明 (ℚ, <) 与 (ℝ, <) 初等等价:写出 Duplicator 对任意 n 的必胜策略(保持「已选元素仍可被任意稠密插入」)。
14. 说明 (ℚ, <) 与 (ℝ, <) 不同构,但初等等价。举出一条能区分它们的非一阶性质(例如「完备性」或「基数」)。
15. 给出「一对 [m] 与 [n] 在 k 轮可区分」的一个算法,并用它复算实验页的表格。
16. 判定下列问题所属的复杂性类,并说明理由:① 给定 3-SAT 实例,判定是否可满足(NP-完全);② 给定带部分填法的广义数独,判定是否可解(NP-完全);③ 给定 PCP 实例,判定是否有解(不可判定)。比较「验证解难不难」与「找解难不难」,并回想 5.13、5.14。
自检标准。第 11–13 题能写清「Spoiler 的策略」与「Duplicator 的策略」,是本章的技术门槛;第 16 题能把「难度」翻译成复杂性类,是本章支票的兑现。两题都做完,第五章就算通了。
第五章的概念网络可以读成两条链(见下图)。
链一(对局链):从「无限对局」到「公理的分道」。无限对局 GA(5.1)→ 开集 / 闭集决定性(Gale–Stewart 1953,5.2–5.3,ZF 内可证)→ Borel 决定性(Martin 1975,ZFC 内可证但必须用幂集,5.8)→ 投影层级(需要可测基数、Woodin 基数)→ 全体集合即 AD(5.4)→ 与 AC 冲突(5.5)。这条链回答「无限对局能决定到什么程度,以及每进一步要付什么公理代价」。
链二(工具链):把游戏当作语言。Banach–Mazur 游戏把「Baire 性质」翻译成胜负(5.6–5.7);EF 博弈把「初等等价」翻译成「Duplicator 能否赢 n 轮」(5.9–5.10);对话语义与 Curry–Howard 把「证明」翻译成「策略」、把「化简」翻译成「计算」(5.11–5.12);最后 PCP(5.13)与数独 / 扫雷 / 俄罗斯方块(5.14)把「难度」翻译成「不可判定 / NP-完全」。这条链回答「游戏这种形式,能为别的数学分支做什么」。
「无限」究竟改变了什么?有三点。① 胜负不再由终局决定,而由整条无限序列(获胜集 A)决定——于是「逆推」失效,工具必须换成拓扑与描述集合论;② 策略是无穷对象,其存在性不能穷举,只能证明或假设——于是出现了「决定性」这个介于定理与公理之间的谱系;③ 公理成为话题:AC 与 AD 的分道说明,「哪种集合存在」可以由我们选择,而选择要付出代价。
与前四章的联结。第一章的「值」(Grundy 数)与第二章的超现实数都建立在「有限」之上;本章把「有限」这条地基拿掉,立刻看到结构性结论(如 G + G 是 𝒫 位置)不再够用——需要新的语言(拓扑、逻辑、公理)。这正是本册的暗线:换一种描述,让困难变成可见、可证、可选择的。
★★ 小结(一):无限改变了什么。
正面清单。① 无限对局 GA:两位玩家轮流走 ω 步,胜负由无限序列是否落在获胜集 A 里决定(5.1);② 决定性与必胜策略:一方必有必胜策略者称「决定」(5.1);③ Gale–Stewart 定理:开集(及闭集)必决定,ZF 内可证(5.2–5.3);④ 决定性公理 AD:一切 A 都可决定;推出「一切实数集可测 / 有 Baire 性质 / 含完备子集」(5.4);⑤ AD 与 AC 冲突:Vitali 集不可测不可 Baire,与 AD 矛盾(5.5);⑥ Banach–Mazur 游戏:II 必胜 ⟺ X meager,I 必胜 ⟺ X 局部 comeager(5.6–5.7);⑦ Borel 决定性与投影层级:Martin 1975,逐层需越来越强的大基数(5.8);⑧ EF 博弈:Duplicator 赢 n 轮 ⟺ 两结构同量词秩 ≤ n 的语句(5.9–5.10);⑨ Curry–Howard / 对话语义:命题 = 类型、证明 = 程序、联结词 = 走法规则(5.11–5.12);⑩ PCP 不可判定(5.13);⑪ 数独 / 扫雷 / 俄罗斯方块 NP-完全(5.14)。
易错清单(每条都来自真实的理解事故)。① 把「不可判定」当成「没有答案」——答案存在,只是没有普遍算法(p145);② 把 AD 与「决定一切对局」之外的用法混淆,或忘了 AD 蕴含 AC 失效;③ 把「独立」(如 CH)与「不可判定」(如停机问题)混为一谈;④ 以为开集决定性需要选择公理——它只要 ZF(5.3);⑤ 把 Borel 决定性的证明当成「显然」——它必须实质用到幂集(Friedman);⑥ 把 EF 的「轮数」与「量词个数」混淆——对应的是嵌套深度(量词秩),不是个数;⑦ 把「初等等价」当成「同构」——ℚ 与 ℝ 是反例(5.10);⑧ 把 NP-完全与「没有算法」混淆——NP-完全问题有算法(只是可能指数时间),不可判定问题才没有算法(p144、p145)。
一句话的总结。无限把「胜负」从终局搬到了整条序列,于是「必胜策略是否存在」从一个可逆推的问题变成了一个需要拓扑、逻辑与公理的问题。本章最重要的收获不是某一串定理,而是一种态度:面对「不能决定」,先分清它是不可判定、独立还是未知,再决定用哪一套规则去和它打交道。
★★★ 小结(二):公理的取舍。
为什么数学家会在 ZFC 与 ZF + AD 之间选择?因为这两套公理各自的「收益」不同,而收益对应着具体的研究领域。
选择 ZFC 的理由。① 通用性:分析、代数、拓扑、概率的绝大多数定理都依赖选择公理(Hahn–Banach、Tychonoff、极大理想、测度的可数加性);② 构造性传统:实数可良序、可以谈基与维数、可以做超限构造;③ 已是默认语言:几乎所有数学论文都在 ZFC 的框架里写作。代价:接受「存在不可测集、存在无 Baire 性质的集合」这些病态对象,以及由此产生的各种反例。
选择 ZF + AD 的理由。① 正则性定理:一切实数集可测、有 Baire 性质、含完备子集——「每个集合都规规矩矩」,这在描述集合论与遍历论里是极大的便利;② 优美的结构理论:在 AD 下,实数的「可定义」层级有极其整齐的行为(例如 Wadge 序、可决定性层级);③ 与大基数的统一:AD 的一致性强度恰好等于「无穷多个 Woodin 基数」,把「集合的正则性」与「集合论宇宙的高度」绑在一起。代价:放弃 AC,许多「选择型」经典定理失效,且需要一个额外的大基数假设来担保一致性。
这不是「谁对谁错」,而是「在哪种宇宙里工作」。数学的自由体现在:我们可以自由地选择公理系统,然后严格地推导它的全部后果。但这自由并不等于任意:① 一旦选定公理,推论就必须被诚实地接受(在 ZFC 里必须接受不可测集的存在);② 不同公理系统的结论可以互相「翻译」,只要把假设写清楚(「在 ZFC + CH 中……」「在 ZF + AD 中……」);③ 公理的选择常常由审美与用途驱动,而这两种理由都不是「真」的证明——它们是对「我想研究什么」的诚实承认。
辩证的一面:自由与约束。本章反复出现的主题是「数学自由」。但自由的形状:它不是「随便怎么说都行」,而是「自由地定规则,然后不折不扣地遵守它」。AD 让「一切集合规整」成为定理,代价是失去 AC;ZFC 让我们能自由选择,代价是接受病态对象。每一次选择都是一次交换——而承认这场交换的必然性,正是数学诚实(integrity)的体现。
据此重新读出本章的标题。「逻辑与无限的游戏:策略、选择与不可判定」——三个词各自对应一层:策略(必胜策略的存在性即决定性)、选择(选择公理 AC 与它的取舍)、不可判定(有些问题没有算法,有些命题独立于公理)。把这三层叠在一起,我们看到的就是数学这座大厦最深处的那几根柱子:规则、选择与边界。
本章从「把游戏玩到无限」出发,最后却停在一个哲学问题上:规则从哪里来,它的边界在哪里,我们能不能走出自己立的规则?
开集决定性(5.2–5.3)给我们一个温暖的回答:在一定复杂度之内,胜负总是有定论的——只要描述不太复杂,就必有一方拥有必胜策略。这像是一个许诺:规则够用。
但 AD 与 AC 的冲突(5.5)紧接着撤回了这份许诺的无条件性:一旦要求「所有对局都可决定」,就必须放弃选择公理;而选择公理几乎是半个现代数学的氧气。「一切对局都决定」与「可以自由选择」不能同时拥有——这不是我们的能力不足,而是一条定理。Gödel 与 Turing 早已预告了这件事:足够强的规则系统无法穷尽真理。本章把它推到了无限对局的极端形态。
于是我们得到一条奇特的自由观:自由不是「没有规则」,而是「规则有边界,而边界之内可以无限地玩,边界之外可以换一套规则继续玩」。数学家正是这样工作的:在 ZFC 里推不动,就转到 ZF + AD;在一阶逻辑里证不出,就造更强的语言;在确定性算法里做不到,就引入随机与交互(第六章)。每一次「走出规则」,都不是撒谎,而是另立一套规则、然后诚实地遵守它。
把这条思路与前三章连起来:第一章教我们「把局面化成数」,这是一种翻译;第二章教我们「数本身就是游戏」,这是一种视角翻转;本章教我们「游戏的规则本身可以被选择」,这是一种对地基的自觉。三章合起来,正是本册的主线:游戏性是数学最重要的特质,因为它同时给数学以纪律(规则)与活力(自由)。
— 第五章 · 思想卡
延伸思考(三问)。① 若把「必胜策略」的要求削弱为「几乎必然地赢」(允许一个测度为零的例外集),决定性会变成什么?这与概率论里的「几乎处处」有何同构?② 若允许玩家「不给出显式策略,只承诺存在一个」,这场游戏还是同一个游戏吗?(对照 AC 的「存在选择函数但无法显式写出」。)③ 本章说「不可判定」「独立」「未知」是三件事——能各举一个例子,并把它们放进一张「为什么做不到」的分类表里吗?
★★★★ 挑战:决定性与公理的取舍地图。本章出现了大量「在什么公理下能证明什么」的分层结论。本挑战要求把它们整理成一份可核对的地图——不是复述,而是把「定理—公理—强度」三者对齐。
第一部分(AD 的一致性强度)。说明下列等价链:Con(ZF + AD) ⟺ Con(ZFC +「存在无穷多个 Woodin 基数」)。指出:① AD 不能在 ZF 中证明(连一致性都需要更强假设);② AD 与「存在一个大基数」的关系不是巧合,而是一条定理(Steel–Woodin、Martin);③ 常用的加强形式 AD+、ADℝ 各自断言的强度。
第二部分(大基数层级)。把下列基数按一致性强度从小到大排序,并写出每个的定义要点:不可达基数、Mahlo 基数、弱紧基数、可测基数、强基数、Woodin 基数、强紧基数、超紧基数。然后指出决定性结论与大基数的对应:可测基数 ⟹ Σ11 决定性;n 个 Woodin 基数 ⟹ Σ1n+1 决定性;无穷多个 Woodin ⟹ PD 与 Con(AD);更强的(超紧)基数 ⟹ ADℝ 的结论。
第三部分(决定性蕴含的「正则性」清单)。逐条写出并给出一句证明思路:① AD ⟹ 每个实数集 Lebesgue 可测;② AD ⟹ 每个实数集有 Baire 性质;③ AD ⟹ 每个不可数实数集含完备子集(于是「可数或连续统」);④ AD ⟹ ω1 是可测基数;⑤ AD ⟹ 实数集不可良序、AC 失效。对 ① ②,到 p136–p137 找回它们与 Banach–Mazur 游戏的桥。
第四部分(与 AC 的冲突点)。写清为什么 ZF + AC + AD 不一致:从 AC 出发构造 Vitali 集(用 x − y ∈ ℚ 的等价类选代表),证明它不可测;再指出 AD 断言一切集可测——矛盾。另举一例:AC 给出实数良序,从而造出无 Baire 性质的集,与 AD 冲突。最后画一张图:横轴是一致性强度,纵轴是「正则性收益」,把 ZFC、ZFC + 大基数、ZF + AD 三个位置标出,并注明各自的代价。
提交要求。纲要须包含:① 一张公理强度阶梯图(可手绘或 SVG);② 一张「定理—公理—强度」对照表;③ 至少三处引用文献的具体章节(用下面的四本书)。评分标准是「每一条结论都能指认它的公理来源」,而不是结论的数量。
必读文献。① Jech《Set Theory》(第 3 版,第 25–33 章:描述集合论与决定性);② Kechris《Classical Descriptive Set Theory》(GTM 156,第 20–21 章:Banach–Mazur 游戏与决定性);③ Moschovakis《Descriptive Set Theory》(第 6 章:游戏与策略);④ Hodges《Model Theory》(第 3 章:Ehrenfeucht–Fraïssé 博弈)。若只读一本,从 Kechris 的第 20–21 章开始——它把本章 5.6–5.8 的桥讲得最清楚。
★★ 实验:生命游戏与 EF 博弈真跑。本节所有数字都来自本地脚本 p156_lab.py(纯 Python 标准库,无 numpy / scipy),输出存于 qa/p156_out.txt,可自行复算。
实验一:Conway 生命游戏(集合表示,规则 B3/S23)。用「活细胞坐标的集合」表示一个局面,一步演化即按邻居计数更新。验证三件事:滑翔机(glider)每 4 代平移一格(对角线方向),blinker 周期 2,toad 周期 2;并用两套独立实现(字典计数 vs 包围盒扫描)在 300 个随机局面上对拍。
(1) CONWAY GAME OF LIFE (B3/S23)
glider : pop = 5 every gen ; displacement (1,1) after 4 gens, (2,2) after 8 PASS
blinker: gen0 == gen2 and gen0 != gen1 period 2 PASS
toad : gen0 == gen2 and gen0 != gen1 period 2 PASS
cross-check step() vs step_naive() on 300 random grids: mismatches = 0 PASS
still lifes: 2x2 block fixed ? True ; empty stays empty ? True ; 1 cell dies ? True三点解读:① 滑翔机的位移是「周期 4、每周期平移 (1,1)」——这是生命游戏最著名的「运动图案」,代码用「最小角坐标」精确捕捉了它;② blinker 与 toad 都是周期 2 振荡子,输出中 gen0 == gen2 且 gen0 != gen1 正是周期的定义;③ 两套实现对拍零分歧,说明「生命游戏的演化规则」被正确实现——这是后两个实验可信的前提。
实验二:有限序上的 EF 博弈。对两个大小为 m, n 的有限线性序,用带备忘录的回溯搜索穷举 Duplicator 的胜负(枚举 Spoiler 在任一侧的每一手与 Duplicator 的全部回应),得到胜负表,并与理论公式对拍。
(2) EHRENFEUCHT-FRAISSE GAME ON FINITE LINEAR ORDERS
theory: Duplicator wins k rounds iff (m == n) or min(m,n) >= 2k - 1
k=1 threshold 1 : every cell D
k=2 threshold 3 : m=n -> D ; (1,2) -> S ; (2,3) -> S ; (3,4) -> D
k=3 threshold 7 : m=n -> D ; (6,7) -> S ; (7,8) -> D
k=4 threshold 15: on 1..5 only the diagonal is D
brute-force vs theory mismatches = 0 PASS
worked: m=1 n=2 k=2 loses ; m=2 n=3 k=2 loses ; m=3 n=3 k=3 wins ; m=7 n=8 k=3 wins解读:① 蛮力表与「m = n 或 min(m, n) ≥ 2k − 1」这条判据逐格一致(0 处不符);② 阈值 1, 3, 7, 15, … 说明秩 k 的语句「能数到多细」——秩 2 已能识别「是否存在中间元素」,故 [2] 与 [3] 在 2 轮被区分;而 [3] 与 [4] 要到 3 轮;③ 这正是 p140 的 EF 定理在「有限序」这一具体结构上的定量身影。注意:这条阈值判据是实验给出的定量结论,并非教科书中的著名定理——真跑的价值正在于把 EF 定理「称量」出来。
实验三:随机初始密度的种群存活。在无限平面上取 10×10 的种子盒,每格以概率 0.3 随机置活细胞,演化 50 代,统计存活率与种群数量(随机种子 777,200 次试验)。
(3) SURVIVAL STATISTICS (10x10 seed box, density 0.3, 50 generations)
trials = 200 (seed = 777)
surviving to generation 50 : 188 / 200 (94.0%)
mean population at gen 50 : 35.20
sample run (trial 0) pop by gen:
gen0..gen50 = [28,30,26,27,27,18,20,23,23,23,30,22,25,25,29,28,35,37,36,37,34,42,
29,28,24,25,19,22,21,23,15,21,15,14,13,12,11,12,13,14,17,16,22,17,
24,22,27,33,31,25,24]解读:① 密度 0.3 的随机种群大多数能存活到第 50 代(94%),但数量会先升后降、围绕某个「稳态」波动——生命游戏里很多随机图案会凝成稳定的「静物 + 振荡子 + 滑翔机」的混合体;② 少数(6%)会彻底死绝(注意样本曲线中段一度跌到 11);③ 「与理论对拍」体现在已知静物的验证上:2×2 方块是不动点(周期 1)、空盘保持空、单个细胞立即死——这些解析事实与代码输出一致。自己跑一遍:生命游戏是「简单规则涌现复杂行为」最著名的例证,而它的 Turing 完备性(可模拟任意计算)正是 p144 所暗示的「某些性质不可判定」的来源。
三个实验的共同结论。① 规则极简的系统(B3/S23)能产生滑翔机这样的「运动」与长寿命种群——涌现;② 把「逻辑区分能力」变成一场可搜索的游戏后,EF 定理就成了一张可以逐格核对的表格;③ 实验与理论的对拍(静物、阈值、判据)是本书所有实验页的格式要求——「跑过」与「读过」在数学上差别巨大。
本章讲的是把游戏玩到无限、玩到逻辑与公理的深处;中国古代的对策传统,则把这套思想早早地写进了一次真实的赛马里。
田忌赛马(《史记·孙子吴起列传》)。齐国将军田忌常与齐王及诸公子赛马,设重金赌胜。孙膑观察后说:「今以君之下驷与彼上驷,取君上驷与彼中驷,取君中驷与彼下驷。」——用最差的马去碰对方最好的马(认输一局),用最好的马赢对方中等的马,用中等的马赢对方最差的马,结果三局两胜,田忌赢下重金。这是一次教科书级的「以局部之败换全局之胜」。
用博弈论反读它。田忌赛马的关键前提是:双方的赛马次序已知——正因为孙膑知道齐王按「上驷、中驷、下驷」出场,才能设计这次配对。所以它在数学上是一个匹配 / 置换问题:把己方三匹马指派到对方三匹马的位置上,使「胜局数」最大化(这正是「二分图最大匹配」或「指派问题」的雏形,可以从 Hall 定理或排序贪心求得)。但它还不是一场真正的「策略博弈」——因为对手没有同时选择次序。
若对手也在选次序,事情立刻变深。假如齐王也懂此道,双方同时秘密决定出场顺序,则这是一场「对决匹配」的零和博弈:田忌的收益取决于两个置换的相对关系,而任何固定次序都会被对手针对。此时最优解不再是某个确定的对阵,而是一个混合策略(在多种次序上按概率分配)——由 von Neumann 的 minimax 定理保证其存在(第六章)。换句话说,孙膑的「策」是「完全信息 + 对手固定」这一特殊情形的解;一旦信息隐匿、对手也谋略,就必须请出概率与均衡。
中国传统的两组关键词。一是「术」:中算典籍(《九章算术》等)的写法是「术曰……」——一串可照做的动作,与游戏规则同构(p37 已有对照)。孙膑之计也是一条「术」:给出可执行的用人方案。二是「势」:兵家谈「形势」「先手」「奇正」,《棋经十三篇》说「宁输数子,勿失一先」——这正是本章「先手 / 后手、必胜策略」的直觉表达。三是「策」与「局」:「策」是对阵与选择,「局」是一次完整的胜负过程;孙膑的「策」是一次置换优化,而本章的「局」可以长到无限——同一个字,被推到了它的极限。
差别的所在。传统算计的长处是给出算法与直觉(「术」与「势」),短处是较少追问「对所有情形是否成立、为什么必然如此」。现代博弈论的转向正是在这里:它不满足于「这一次怎么赢」,而要问「在什么条件下谁必胜」,并把答案写成一条可证明的定理(如 Gale–Stewart、EF、minimax)。田忌赛马给出了漂亮的「一局」,本章试图给出关于「一切局」的判据——这正是从「玩得高明」到「懂得结构」的跃迁。
★ 速查:第五章概念与公式。
一、记号。Xω 无限序列空间;A ⊆ Xω 获胜集;GA 以 A 为获胜集的对局;σ 策略;Ns 柱集(以有限序列 s 为前缀);AC 选择公理;AD 决定性公理;量词秩 = 量词嵌套最大深度。
二、定义。① 无限对局:I、II 轮流走 ω 步得 x,I 胜 ⟺ x ∈ A;② 必胜策略:无论对手如何走都赢的策略;③ 决定:一方必有必胜策略;④ AD:一切 A ⊆ ωω 的 GA 都决定;⑤ meager(第一纲集):可数个无处稠密集之并;⑥ 部分同构:保持全部关系的一一对应。
三、核心定理。① Gale–Stewart(1953):A 开(或闭)⟹ GA 决定(ZF 内可证);② Banach–Mazur:II 必胜 ⟺ X meager;I 必胜 ⟺ X 局部 comeager,故「X 有 Baire 性质 ⟺ BM(X) 决定」;③ Martin(1975):Borel 集决定(ZFC 内,需幂集);④ AD ⟹ 一切实数集可测 / 有 Baire 性质 / 含完备子集,且实数不可良序;⑤ AD 与 AC 不相容(Con(ZF+AD) ⟺ Con(ZFC + 无穷多 Woodin 基数));⑥ EF 定理:Duplicator 赢 n 轮 ⟺ 同量词秩 ≤ n 的语句;⑦ Post(1946):PCP 不可判定;⑧ 广义数独(Yato–Seta 2003)、扫雷(Kaye 2000)、俄罗斯方块(Demaine 等 2003)均为 NP-完全。
四、关键数值(实验真跑)。滑翔机每 4 代平移 (1, 1);blinker / toad 周期 2;生命游戏两套实现对拍 300 局面零分歧;EF 阈值 = 2k − 1(1, 3, 7, 15, …),蛮力与判据零不符;密度 0.3 的 10×10 种群 50 代存活率 188/200 = 94%。
五、常用事实。① 柱集既开又闭;② 「A 开」⟺ 每个 x ∈ A 有有限前缀 s 使 Ns ⊆ A(「前几手就决定」);③ 双方不可能都有必胜策略;④ 初等等价 ⊊ 同构(ℚ 与 ℝ);⑤ NP-完全 ≠ 不可判定(前者有算法,后者没有)。
六、三种「不能决定」。不可判定(无算法:停机问题、PCP)· 独立(不可证也不可反驳:CH)· 未知(尚未解决:P 与 NP)。判据是本章最重要的分辨力。
七、本章支票。① 能陈述支配无限对局的定理(Gale–Stewart、Martin、AD);② 能把谜题难度写成复杂性类(NP-完全 / 不可判定)。
★★ 第六章预告:当博弈成为数学。
本章留下的最大悬念。我们把「游戏」一路推到了公理的边界:无限对局逼出 AC 与 AD 的取舍,逻辑被写成对局(EF、证明即游戏),计算被写成难度分类(PCP、NP-完全)。那么,当博弈本身成为一门成熟的数学时,它长成了什么样子?第六章要给出一张全景:一门理论、一套算法、一种精神。
理论一侧:从零和到均衡。一九二八年 von Neumann 证明 minimax 定理——任何有限零和博弈都有「值」,且双方的最优混合策略把它夹在中间(这是第四章「扑克与混合策略」的理论基础)。一九五〇年前后 Nash 把「值」推广为「均衡」:任何有限博弈都存在 Nash 均衡(用 Brouwer / Kakutani 不动点定理证明)——注意,这又是「不动点」与「博弈」的相遇。更远处是机制设计:不研究「怎么赢」,而研究「怎么设计规则让参与者自愿做对集体有利的事」(拍卖、匹配市场、公共政策),这是博弈论「反过来设计游戏」的一面,已数次获得诺贝尔经济学奖。
算法一侧:博弈变成计算。① 在线学习与乘法权重:把「在未知环境里下注」读成一场重复博弈,用权重更新逼近最小遗憾,成为机器学习与在线优化的核心算法;② 交互证明与 IP = PSPACE:把「证明」写成 Prover 与 Verifier 的多轮对局(绪论 p3 与第五章 p141 的伏笔在此收束)——凡能被一场交互说服的,都能被多项式空间的证明说服;③ 零知识证明:证明者能让验证者相信「我知道答案」却不透露答案,其精确含义正是一个博弈论 / 信息论条件;④ 自我对弈:二〇一六年 AlphaGo、二〇一七年 AlphaZero 用「自己跟自己下」从零学会围棋与国际象棋,把「博弈」变成了一种不需要老师的学习算法——Hilbert 的「符号游戏」终于有了会自我进化的玩家。
精神一侧:回到自由。第六章最后要回望本册的主线:Klein 的Erlangen 纲领说「几何学 = 在某个变换群下不变的性质」——换一个群,就换一个几何,这是「自由地选规则」的第一次伟大实践;Hilbert 的二十三问与 Langlands 纲领则展示了数学如何不断给自己提出新的「游戏目标」。数学之所以能持续创造,正因为它始终是一场自由的游戏:规则由我们立,而规则的组合无穷。
带着三个问题进入第六章:① 为什么「任何博弈都有均衡」需要不动点定理,而「确定性」却需要大基数?两种「存在性」的差别在哪里?② IP = PSPACE 说交互「不多于」多项式空间——那么更强的交互(多证明者 MIP、量子交互)又能换到什么样的「证明」?③ 若数学是一场自由的游戏,那么「游戏好玩」这件事本身能否被数学地刻画?(这是本册留下的最后一个问题。)
一个预告性的比喻。第五章我们把「规则」推到了它的边界,看到了三件事:策略(决定性与必胜策略)、选择(AC 与 AD 的分道)、不可判定(没有算法的世界)。第六章要做的,是把这些碎片拼成一句话:博弈既是一门关于「谁能赢」的理论,也是一套关于「怎么算」的算法,更是一种关于「如何自由地创造」的精神。当博弈成为数学,数学也就重新认出了它最初的样子——一场自由的游戏。
★ 本章是全册的收束章。前五章里,博弈一直以「游戏」的面貌出现:一堆石子(第一章)、一个被造出来的数(第二章)、一张折纸或一个魔方(第三章)、一场赌局(第四章)、一局可以永远进行下去的对局(第五章)。这一章把镜头拉远——当博弈本身成为一门数学,它同时长成了三样东西:一门理论、一套算法、一种精神。
理论的一侧。一九二八年 von Neumann 证明了他的 minimax 定理:任何有限零和博弈都有一个值,先手方存在一个混合策略保证期望收益不低于它,后手方存在一个混合策略保证不高于它。博弈由此成为可以被计算的对象:不再只有「谁赢」,还有「赢多少」。一九五〇年 Nash 把结论推到一般博弈,用不动点定理证明:每个有限博弈都有混合策略均衡。此后机制设计把这句话反过来读——不问「给定规则人们会怎么玩」,而问「要让人们玩出我期望的结果,规则应当怎么写」。
算法的一侧。Nash 的证明是存在性的:它说均衡存在,却没说怎么找。二〇〇六年 Daskalakis、Goldberg 与 Papadimitriou 证明:找 Nash 均衡是 PPAD-完全的——「存在,但难算」。这条结果把博弈论与计算复杂性焊在了一起。带学习色彩的一侧同样精彩:乘法权重让多个「专家」在反复对局中逼近最优;交互证明与零知识证明则把「证明」重新写成了证明者与验证者之间的一场对局——这正是绪论 p3「证明是一场对局」的现代兑现。
精神的一侧。本章最后要回到全册的主旨:数学之所以能不断超越自己,正因为它是一场自由的游戏——自由地选公理、自由地造对象、自由地换视角、自由地设计规则。理论、算法与精神这三条线索,将在 p183 与 p189 收拢成一句话。
本章路线(见上图)。6.1–6.4 建立理论骨架:零和的值(minimax)→ 值与线性规划的对偶 → 一般博弈的Nash 均衡 → 均衡背后的不动点定理。6.5–6.8 转向「重复与合作」:囚徒困境与无名氏定理、触发策略、演化博弈与 ESS、replicator 方程。6.9–6.12 转向「设计与计算」:机制设计与 Vickrey 拍卖、均衡的计算难度、在线算法与竞争比、乘法权重与学习。6.13–6.14 收在「证明即对局」:交互证明 IP = PSPACE 与零知识证明。全程记住本章的问题:博弈论把「玩」变成了一套可证明、可计算、可设计的数学,而这一切的起点仍是一句话——规则是人定的。
★★ 先看最简单的一类博弈:零和矩阵博弈。两位玩家,一位「行玩家」从 m 个动作中选一个(选行),一位「列玩家」从 n 个动作中选一个(选列);两人同时出手。行玩家得到矩阵中的数 Aij,列玩家得到它的相反数——一方的所得恰是另一方的所失,所以叫「零和」。第一章的 Nim 是零和的极端形态(赢家拿走全部),但那里双方动作完全相同;这里允许动作不同。
纯策略有没有「值」?行玩家面对列玩家的某个选择,最好的应对是选那一行中最大的数;但列玩家也在选,他会把列挑在「行玩家最痛点」上。于是行玩家能保证的是 maxi minj Aij(先挑最坏情形里最好的行),列玩家能保证的是 minj maxi Aij(先堵住最好情形里最坏的值)。一般地
maxi minj Aij ≤ minj maxi Aij
两者相等时称矩阵有鞍点,这个公共值就是博弈的值。但如上图所示,一般矩阵没有鞍点——行玩家的「保险」低于列玩家的「封顶」,纯策略给不出一个值。
混合策略把值找回来。让行玩家以概率分布 x = (x1, …, xm) 随机选行,列玩家以 y 随机选列。期望收益是 xTAy。随机化不是为了碰运气,而是为了让对手无法预测、无法利用——这正是第一章「必胜走法」在这里的推广:既然没有一步定胜负的招,就把不确定性本身变成策略。von Neumann 的定理说,随机化之后上下两个界总能相等:
v = maxx miny xTAy = miny maxx xTAy
最小的例子:猜硬币。两人各出正面或反面,出同面者赢一单位。矩阵是 [[1, −1], [−1, 1]]。任何纯策略都被对手识破而必输;但双方各以 1/2 的概率随机出,期望收益为 0——这就是博弈的值,也是「猜无可猜」的数学含义。
三个后续问题(本章依次回答):① 这个值怎么算?(6.2:它是一对线性规划的解)② 两人不一定零和、玩家可以更多时,还有「值」吗?(6.3:改成「均衡」)③ 均衡一定存在吗?(6.4:靠不动点定理)。
★★★ minimax 定理说值存在,却没告诉我们怎么求。本节给出它的「可计算」形态:零和博弈的值,就是一对线性规划(LP)的最优值。
把 max–min 写成一族线性约束。行玩家要选 x 使「无论列玩家怎么选,期望收益都不低于 v」。这句话逐条写开就是:对每一个列动作 j,Σi xiAij ≥ v;再要求 x 是概率分布:Σi xi = 1 且 xi ≥ 0。要最大化 v,约束却是线性的——这正是线性规划的标准形状。列玩家一边完全对称,只是把 max 换成 min、把不等号反向。
关键的一步:这两个 LP 恰互为对偶。线性规划对偶理论有一个漂亮的配对结构:每个「max 型」问题都陪着一个「min 型」问题,两者的约束矩阵互为转置、目标与约束互换。而 LP 强对偶定理说:只要两者都可行,它们的最优值必相等。把这两件事拼起来,就得到 minimax 定理的一个新证明:
maxx miny xTAy = (LP 原问题最优值) = (LP 对偶最优值) = miny maxx xTAy
为什么这个改写重要?因为它把「博弈」翻译成了「优化」,而优化有成熟的算法(单纯形法、内点法),有现成的软件包,有复杂性理论。数学史上这是一个反复出现的动作:换一种描述,让困难变成可计算。Dantzig 与 von Neumann 还证明了反方向——任何线性规划都可以读成一场零和博弈,于是「博弈论」与「线性规划」在数学上是同一件东西的两张面孔。
对偶变量的含义。对偶解 y 恰好是列玩家的最优混合策略,而对偶问题里的「影子价格」在这里就是「局面各动作的边际价值」。若把矩阵博弈看成第一章「值」的连续版本,那么对偶变量正是「局面价值的边际分解」——Grundy 值离散地记录局面的等价大小,对偶变量连续地记录动作的边际收益,两者是同一种「用数值刻画博弈」的思想。
一条预警。这套 LP 方法只对两方零和有效:目标单一(一方的收益即另一方的损失),所以能写成单个线性目标。一旦玩家不止两个、或者收益不再零和,最优值就未必存在,「解」必须换成一整组互相最佳反应的不动点——这就是下一节 Nash 均衡的登场理由。也正因为一般博弈失去了 LP 结构,计算均衡的难度会陡然上升(6.10 会给出精确的复杂性结论)。
★★★ 零和只是特例。现实中的博弈大多不是零和:合作可能让双方都更好,两个玩家的目标也可能各自独立。一般博弈里,「值」这个单一数字往往不存在——取而代之的是一个策略组合:每个玩家都不愿单独改变,因为对手的策略已经给定,自己怎么变都不更好。这就是 Nash 均衡。
形式化。设 n 位玩家,玩家 i 的策略集是 Si,收益函数是 ui(s1, …, sn)。把纯策略随机化,得到混合策略 σi(Si 上的概率分布)。定义(Nash 均衡):混合策略组合 σ* 使得对每个玩家 i 与每个替代策略 σ′i,
ui(σ*i, σ*−i) ≥ ui(σ′i, σ*−i)
记 σ*−i 为除 i 以外所有人的策略组合。读法:在别人都不动的前提下,「我单独改变」不会更好。注意这是一个「局部」条件——它不保证全局最优,也不保证对所有人都最优;它只保证「没有人有单方面偏离的动机」。这也是它被批评的地方(囚徒困境的均衡是都背叛),也是它被广泛使用的原因(它是最弱的、最容易存在的「稳定点」)。
定理(Nash,1950)。每个有限博弈(玩家有限、每人策略有限)都至少有一个混合策略均衡。注意「混合」二字不可省:纯策略均衡常常不存在(猜硬币就没有),而一旦允许随机化,均衡一定存在。这正是本节标题想要强调的反差——为了存在性,数学愿意付出「解不是一个动作,而是一个概率分布」的代价。
一条实用的计算原则:无差异原理。若在均衡中玩家以正概率使用某两个纯策略 a、b,则这两个策略带来的期望收益必须相等;否则玩家可以把概率整体移向收益更高的那一个,从而获利——这违反均衡。这条原则让许多小博弈的混合均衡可以手算:列出两个「必须无差异」的方程,解出概率。(例题 2 会用协调博弈演示。)
与第一章的联系。第一章的 𝒫 位置是「无论对手怎么走都不输」的局面;Nash 均衡是「无论对手怎么变(前提是他也不变)我都不愿变」的策略组合。两者都是「没有单方面改进余地的稳定点」,只是一个在局面的空间里找,一个在策略组合的空间里找。第一章用逆推(有限归纳)证明稳定点的存在;本章要用更强的工具——不动点定理。
★★★★ Nash 的定理不是靠构造出的,而是靠一条来自拓扑学的定理「捡」来的。本节说明:均衡就是一个不动点。
先把均衡改写成「不动点」。对每个玩家 i,定义他的最佳反应对应
BRi(σ−i) = argmaxσ′i ui(σ′i, σ−i)
即「在别人使用 σ−i 时,哪些策略最好」。把所有玩家的最佳反应打包成 BR = BR1 × ⋯ × BRn。于是:
σ* 是 Nash 均衡 ⟺ σ* ∈ BR(σ*)
右式说的正是「σ* 在自己身上的映射的像里」——即 BR 的一个不动点。于是「均衡存在」被完全翻译成「这个对应有一个不动点」。
两条不动点定理。其一,Brouwer 不动点定理:一个凸紧集映到自身的连续函数必有不动点。直观地说,把一张纸连续地(不撕开、不折叠)映射到它自己所在的区域里,总有一点原地不动——上图里「对角线」与「映射图形」必然相交,就是这条定理在一维的样子。其二,Kakutani 不动点定理(Brouwer 的推广):把「函数」放宽成「对应」(一个点映到一组点),只要这个对应满足三条——定义域是凸紧集、每个像集是非空凸集、对应是上半连续的——就同样必有不动点。
为什么必须用 Kakutani,而不是 Brouwer?因为最佳反应一般不是一个函数:当两种策略同样好时,「最好」的是一整段概率分布。也就是说 BRi 是集值的。Nash 的证明因此分两步:① 混合策略空间 Δ(S1) × ⋯ × Δ(Sn) 是凸紧集(凸多面体,紧因为它有界闭);② 逐个验证 BR 满足 Kakutani 的三条假设——像集非空(连续函数在紧集上取最大)、像集凸(最大化线性函数的解集是凸的)、上半连续(收益函数连续,最优点不会突然跳走)。三条验证完毕,Kakutani 直接交出不动点,也就是均衡。
这个证明的形状值得记住。它没有构造任何策略,甚至没有给出算法;它只是把「均衡存在」归约到一个几何事实。这正是二十世纪数学的一种典型风格:把存在性问题化作一个拓扑的「必然性」,从而绕过困难的构造。(第一章「策略偷取」是同类:只证存在,不给构造。)
与前面章节的呼应。第四章的随机游走、第五章的对角线法,都靠「紧性 + 连续性 → 必有某个东西不被破坏」这类论证;而不动点定理更是贯穿全册的工具——泛函分析里的压缩映射、微分方程解的存在性、经济均衡的存在性,用的是同一族思想。「均衡 = 不动点」不是一句比喻,而是本章的理论管线:博弈论借拓扑学的手,拿到了自己的存在性定理。
★★ 一个「一次性」博弈可能注定走向坏均衡,但把它重复很多次,合作就可能冒出来。这是博弈论最让人兴奋的转折之一。
囚徒困境(Prisoner's Dilemma,PD)。两位玩家各选「合作 C」或「背叛 D」,收益如下(每格是「行玩家的收益 , 列玩家的收益」):(C, C) → (3, 3)、(C, D) → (0, 5)、(D, C) → (5, 0)、(D, D) → (1, 1)。检查:无论对手选什么,背叛都更好——对手选 C 时,D 得 5 > 3;对手选 D 时,D 得 1 > 0。所以「背叛」是每个人的占优策略,唯一均衡是 (D, D),收益 (1, 1)。
麻烦在于 (3, 3) 明明更好。两个人都想「多拿」,结果一起拿到最少。用一个博弈论的说法:均衡不是帕累托最优的。这类冲突(个体理性 vs 集体理性)是经济学、政治学、生物学的共同母题;第一章的 Nim 里也藏着它的影子——取子游戏的双方都在追求「把必败局面甩给对方」,这与 PD 里的「先背叛以自保」同源。
重复改变一切。把这场博弈重复 T 轮,每轮收益累加。先看有限次:若双方都理性且知道对方理性,用逆推(从最后一轮往前)可得最后一轮必背叛;既然最后一轮注定背叛,倒数第二轮也无所谓「惩罚」,于是也背叛……整个链条崩塌,每轮都背叛。这和第一章的「逆推三律」是同一个动作,只是这里推出的是令人失望的结论。
但若博弈无限次(或每轮以概率 δ 继续),逆推就没有起点,合作可以存活。无名氏定理(Folk Theorem)说:只要玩家足够有耐心,任何「可行且个人理性」的收益向量(大致就是「不比各自的最坏保留收益更差」的那些),都可以作为某个子博弈完美均衡的平均收益实现。换句话说:长期关系中,合作不必靠道德,它可以由自利与「未来的报复」支撑。
机制上怎么做?针锋相对(Tit-for-Tat)。策略:第一轮合作,此后照抄对手上一轮的动作。它宽厚(不先背叛)、可反击(对手背叛就背叛)、可原谅(对手回头它就回头)。在 Axelrod 组织的计算机竞赛里,这个只有两行的策略屡屡击败更复杂的对手。它给出一个反直觉的教训:在重复博弈里,「看起来聪明」不等于「赢」;能被对手读懂、愿意维持合作的策略反而更优。(下一节把这个直觉做成可证明的「触发策略」。)
★★★ 上一节的「无名氏定理」说合作可以成为均衡,本节把它做成可证明的、可执行的策略。
触发策略(trigger strategy)。约定:只要对方一直合作,我也一直合作;一旦对方背叛过一次,此后我永远背叛(这叫「冷酷触发」,grim trigger)。合作由此获得了一个「抵押」:任何一次背叛都在未来招致无穷的报复。
算一算背叛划不划算。设重复博弈每轮继续的概率为 δ(等价地,玩家有贴现因子 δ;记 δ 为「未来的权重」)。用 PD 的收益记号:合作各得 R,单方背叛得 T,双方背叛各得 P(且 T > R > P)。
一直合作的现值 = R + δR + δ2R + ⋯ = R / (1 − δ)
此轮背叛后再无合作的现值 = T + δP / (1 − δ)
「合作」比「背叛」好,当且仅当
R / (1 − δ) ≥ T + δP / (1 − δ) ⟺ δ ≥ (T − R) / (T − P)
这个不等式是本节的核心。右边只依赖博弈的收益结构(「背叛一次能多赚多少」除以「双方背叛相对合作的损失」)——一个纯数。左边 δ 是「未来有多重要」。结论:只要玩家足够有耐心(δ 足够大),合作就是稳定的;反之,只顾眼下(δ 小)就必然滑向背叛。这是一个把人性的「短视 / 长远」直接读成不等式的漂亮例子。
为什么必须是「子博弈完美」?一次性检查「合作比背叛好」还不够——我们要保证策略在每一个子博弈上(无论历史如何)都是均衡。冷酷触发策略的好处正在于此:一旦进入惩罚阶段,双方都背叛是子博弈均衡(因为在对方背叛时,自己合作只会更糟);而在合作阶段,偏离会触发惩罚,如上算过不划算。于是策略「处处可信」。「可信」二字是它的全部力量:它不诉诸对手的善意,只诉诸对手的自利。
与第一章、第四章的呼应。第一章的「逆推」在有限重复里摧毁合作,在无限重复里失效——边界(有限 / 无限)又一次改变了结论,正如第一章的公平博弈与第五章的无限对局分属不同的世界。第四章的「贴现」在这里变成均衡的刻度:耐心是一个数,而这个数决定了合作能否存在。
★★★ 如果玩家不「选择」策略,而是一群个体按策略繁衍,博弈论会长成什么样子?答案叫演化博弈论,它的核心概念是「演化稳定策略」。
视角的转换。经典博弈论里,玩家是理性的决策者。演化博弈论里,我们把「策略」看成种群中的一种行为基因:收益高(适应度大)的策略繁殖得快,收益低的被淘汰。没有谁在「计算」,是自然选择在替群体做优化。这一转变把博弈论与生物学接了起来(Maynard Smith 是生物学家,这也是本节的缘起)。
鹰鸽博弈(Hawk–Dove)。两种行为:鹰——遇到对手就全力争抢;鸽——遇到对手就摆姿态,对方狠就退让。设争夺的资源价值 V,打斗可能受伤,代价 C。收益表如上:鹰遇鹰双方受伤各得 (V − C)/2;鹰遇鸽,鹰通吃得 V、鸽空手得 0;鸽遇鸽平分各得 V/2。
两种纯策略都不稳定(当 V < C 时)。若全是鸽,一只鹰入侵可独吞 V,比鸽群内的 V/2 高,鹰基因扩散——鸽被淘汰。若全是鹰,一只鸽入侵:鸽在鹰群中被打得头破血流((V−C)/2 < 0),但反过来鹰之间内耗严重,一只「见硬就退」的鸽能省下打斗代价,也能活下来。于是两种极端都不稳,种群停在混合状态。
演化稳定策略(ESS)。Maynard Smith 与 Price(1973)给出精确定义:策略 p 是 ESS,当且仅当对一切其他策略 q,
u(p, p) ≥ u(q, p) 且当等号成立时 u(p, q) > u(q, q)
第一条说:面对一个几乎全是 p 的种群,少数 q 入侵者拿不到更高的收益(否则它们会扩散)。第二条处理「打平」的情形:若入侵者与 p 面对 p 时一样好,那么它们彼此相遇时必须比 p 相遇时更差——这样入侵者内部就不占便宜,无法站稳脚跟。ESS 比 Nash 均衡更强:它不只是「没人愿单方面改变」,还是「对少量入侵免疫」。
鹰鸽的内部 ESS。解无差异条件可得:以概率 p* = V/C 出鹰、1 − V/C 出鸽是一个混合 ESS(当 V < C)。种群稳定在「多数鸽、少数鹰」的比例上,V/C 越大鹰越多。这个比例不是谁规定 的,是演化自己算出来的——它正是 6.3 里「无差异原理」在生物学中的化身。
★★★★ 演化博弈的动力学核心是一条微分方程。它把「谁适应得好谁就变多」写成数学。
设定。一个种群中,个体使用 n 种策略之一,xi 表示用策略 i 的比例(于是 Σi xi = 1,x 落在单纯形上)。收益矩阵是 A:随机相遇时的期望收益,即「适应度」。策略 i 的适应度是 (Ax)i = Σj Aijxj,群体的平均适应度是 xTAx。
Replicator 方程。
ẋi = xi [ (Ax)i − xTAx ]
逐项读这条方程。右边的 xi 是「按比例繁殖」——用得多的人多,后代自然多;括号里是相对适应度——策略 i 的适应度比群体平均高多少。于是:适应度高于平均的策略,比例上升;低于平均的,比例下降。这条方程因此可以一句话概括为「成功的策略会扩散」,而数学上它精确地保证:x 永远留在单纯形上(各分量之和恒为 1,非负性也保持)。
不动点与均衡的关系。当 ẋ = 0 时(每个被使用的策略都恰有平均适应度)种群不再变化。可以证明:Replicator 方程的「对称不动点」恰好是博弈的对称 Nash 均衡;而演化稳定策略(ESS)比它更强——ESS 是渐近稳定的不动点(即使被小扰动推离,也会自动回到它)。于是 6.7 的「入侵免疫」在这里变成李雅普诺夫意义下的稳定性:ESS ⟹ 稳定不动点。
一个漂亮的小例子:石头剪刀布。收益矩阵是循环的 (0, 1, −1) 结构,唯一对称均衡是三者各占 1/3。Replicator 轨道绕这个中心一圈圈旋转(不收敛到它,也不远离它)——这是「中性稳定」的典型图景,与鹰鸽博弈那种「向内螺旋收敛」形成对照。(p186 的实验会真跑这两种情形。)
与学习理论的双向联系。Replicator 方程不只在生物学里出现。若把 xi 读成「某个人使用策略 i 的概率」,并假设他按「模仿更成功者」的方式更新,得到的正是同一条方程(连续时间极限下)。演化、模仿、学习三者共用一套动力学——这是本章从「博弈」走向「算法」的第一道桥:6.12 的乘法权重,会是它的离散、带后悔界版本。
★★★ 前面几节都在问「给定规则,人们会怎么玩」。机制设计把问题倒过来:给定我想要的结果,规则应当怎样设计?这是博弈论中最有「工程味」的一支,也是本册从「玩」走向「设计」的转折。
一个最漂亮的例子:第二价格拍卖(Vickrey 拍卖)。规则:所有买家同时密封出价,出价最高者赢得物品,但只支付第二高的出价。这个看似古怪的规则(赢家不付自己的价,付别人的价)有一个惊人的性质。
定理(Vickrey,1961)。在第二价格拍卖中,如实出价 b = v(v 是物品对真实价值)是占优策略——不管别人怎么出价,如实出价都不会更差。
证明(完整)。固定其他所有买家的出价,设其中最高者为 m(对是未知的,但分析对每个 m 都要成立)。出价 b,两件事发生:赢当且仅当 b > m;赢了就支付 m,净收益 v − m;输了净收益 0。于是净收益可以写成一个分段函数:
收益(b) = (v − m) · 1{b > m}
分三种情形(对固定的 m):
情形一:v > m。此时「真实出价」b = v 会赢,收益 v − m > 0。任何其他出价能更好吗?若出价 b > m,仍赢,收益同样是 v − m(支付永远是 m,与 b 无关);若出价 b ≤ m,则输,收益 0,反而更差。所以如实出价在这里已经最优。
情形二:v < m。此时如实出价会输,收益 0。若抬高到 b > m,会赢,但收益 v − m < 0——赢得亏损(这在拍卖里叫「赢家的诅咒」);若出价不高于 m,收益仍是 0。所以如实出价同样不吃亏。
情形三:v = m。无论输赢收益都是 0,如实出价无害。
三种情形合起来:对任何 m、任何出价 b,都有 收益(v) ≥ 收益(b)。既然这对每个 m 成立,它就对「别人出价的任意组合」成立——如实出价是占优策略。◻
这个证明的形状值得咀嚼。它只用了两条结构事实:① 支付与自己的出价无关(只依赖 m),② 出价只决定「赢不赢」。两件事合起来,就把「说实话」变成没人有动机违背的动作。这是「机制设计」的核心手法:不去要求诚实,而是设计一个让诚实恰好最划算的环境。
一般理论:显示原理(revelation principle)。许多机制的「等价类」中,总存在一个「说真话」的直接机制(真实显示机制),它诱导出与复杂机制相同的均衡结果。这让我们只需研究一类简单的机制(每个人报告自己的类型,机制据此分配)。机制设计由此成为「反向博弈论」:正向是「规则 → 均衡」,反向是「均衡 → 规则」。(本章 p178 会用例题把这个证明再演练一遍。)
★★★★ 6.4 的证明只告诉我们均衡「存在」。存在是数学的胜利,却可能是算法的噩梦——有些东西存在,但我们无法高效找到它。本节把这个直觉变成一条精确的定理。
先回顾两个已知。① 两人零和博弈的「值」可以用线性规划多项式时间求解(6.2)——这是「好算」的。② 一般博弈的 Nash 均衡呢?用第一节的直觉,会不会也是一个优化问题?不是。一般博弈的目标不止一个,「均衡」是多个互相最佳反应的不动点,无法写成一个单一的优化目标。这使求解难度发生了质变。
一条关键的研究路线(1990s–2000s)。既然均衡一定存在,那么「找均衡」属于一个特殊的复杂性类:TFNP(Total Function NP,全函数 NP)——凡是解一定存在的搜索问题。TFNP 又按「解在数学上为什么存在」分成若干子类。其中一族特别有趣,叫 PPAD(Polynomial Parity Argument, Directed):
PPAD 的样板:在一个有向图中,每个点入度、出度都 ≤ 1,且知道一个「源点」(出度为 1、入度为 0)。那么一定存在另一个奇点(入度为 1、出度为 0 的汇点)——这是「奇偶性论证」。找它,就要沿路径一路走。
为什么均衡属于 PPAD?回想 6.4:均衡是 Brouwer / Kakutani 不动点定理的产物,而不动点定理的经典证明正是「沿一条路径追踪端点」——不动点的存在性和「有向图奇点对」是同一种组合结构。Nash 的证明可以直接翻译成一个 PPAD 问题。于是「找均衡」被规约进了 PPAD。
定理(Daskalakis, Goldberg & Papadimitriou, 2006)。找一般博弈的 Nash 均衡是 PPAD-完全的。「完全」意味着它和 PPAD 中最难的样板问题一样难——如果存在高效算法能解所有 PPAD 问题,就能解均衡;反之,均衡的困难代表了整个 PPAD 类的困难。Chen 与 Deng 随后简化并强化了结果。
怎样解读这条定理?先泼一点冷水:PPAD-完全不等于 NP-完全,也不直接推出「没有多项式算法」(P ≠ PPAD 仍未解决)。但它清楚地划出了一条界线:零和博弈可高效求解(LP),一般博弈没有已知的多项式算法。这条不对称本身就是本章的一个主题:「存在性」与「可计算性」是两回事——第一章的 Chomp(证明了先手必胜却不知道必胜走法)已经预告过同一分裂,只是这里它被提升为一个复杂性类的精确陈述。
一条出路:学习逼近。既然精确求解难,那就「近似、并让它自己发生」。这引出本章算法一侧的主角——在线学习。6.11 的竞争比与 6.12 的乘法权重会说明:如果让玩家反复对局、每轮小幅改进,均衡会像一个吸引子一样被逼近。算法不需要一次性算准,它只需要「跑得足够久」。
★★★ 到目前为止,博弈的双方都「知道全部规则」。但现实里最难的往往是信息不完全:不知道明天会怎样,却必须现在就决定。在线算法研究的正是这件事,它给「不知道未来」的决策一个可度量的质量保证——竞争比。
滑雪租赁问题。去滑雪,每天租金 1 元;也可以一次买断一双雪橇,价格 B 元。问题是:不知道自己会滑几天。若知道会滑 B 天以上,当然买;少于 B 天,当然租。但天数未知,怎么决策?
一个简单而近乎最优的策略:先租 B − 1 天,第 B 天买断。为什么?前 B − 1 天如果一直不下决心买,最多损失 B − 1 元(全租),一旦超过 B 天,买断也不亏(因为继续租会更贵)。分析它的表现:
在线策略代价 ≤ (2B − 1),离线最优代价 ≥ B ⟹ 竞争比 ≤ (2B − 1)/B = 2 − 1/B
竞争比的定义正是这个式子。记在线策略(不预知未来)付出的代价为 ALG,最优离线策略(事后知道全部输入)的代价为 OPT。若对一切输入都有 ALG ≤ c · OPT + k,就说这个在线算法的竞争比不超过 c。c = 1 表示「和全知一样好」(极少见),c 越大表示信息不足的代价越大。这是一个最坏情形下的比率保证,与第四章「期望」的思路形成鲜明对照:那里我们平均地看随机性,这里我们对每个输入都保证。
确定性 vs 随机化。滑雪租赁的最优确定性竞争比恰好是 2 − 1/B(可以证明无法更好)。如果允许随机化,可以构造策略把竞争比降到 e/(e−1) ≈ 1.58(用指数分布随机地决定「什么时候买」)。随机化再一次让「不可知」变得可以承受——这与 6.1 的混合策略如出一辙:不确定性不是敌人,而是可以分配的资源。
秘书问题(secretary problem)。再举一个经典:n 位应聘者以随机顺序逐个出现,见一个就要当场决定录用与否,不能回头。最优策略是「先跳过前 n/e 位作为样本,此后一旦遇到比样本中所有人都好的就出手」,成功概率趋近 1/e ≈ 0.368。这个 e 与滑雪租赁随机化里的 e 同源——都是「先观察、后决定」这一最优权衡的自然常数。
与本章其他部分的关系。在线算法的语言(后悔、竞争比)是 6.12 乘法权重算法的地基:乘法权重给出的是「随时间累积的后悔很小」的保证,而那正是多轮博弈中「学习逼近均衡」的数学机制。从博弈论到在线学习,核心的问题始终是同一条:在信息不全、未来不明的情况下,怎样做出可证明地不差的决策?
★★★★ 6.10 说精确求均衡很难;本节给出一条出路——不要一次性算准,让算法在一轮轮对局中自己逼近。主角是「乘法权重」。
场景:专家建议(prediction with expert advice)。有 n 位「专家」,每轮各给一个预测;只能看到过去的表现,必须综合成一个决定。目标不是某轮猜对,而是长期的总损失尽量接近事后最优的那位专家。这个目标叫「后悔最小化」:
后悔 = 总损失 − 事后最优专家的总损失
乘法权重算法(MWU,也叫 Hedge)。给每位专家一个权重 wi,初始相等。每轮:以与权重成正比的概率选择专家;观测各专家的损失 ℓi ∈ [0, 1];按损失打折更新权重:
wi ← wi · (1 − ε)ℓi
读这条更新规则。「乘法」是关键:一位专家如果这轮损失大(ℓi 大),权重就乘上一个较小的因子,指数式地缩水;损失小的专家权重几乎不变。失败被惩罚得很狠,成功则不受打扰——这和 Replicator 方程(6.8)在形态上一模一样(那里的增长也是乘法性的),只是这里 ε 是可调的学习率。
后悔界。可以证明(用一条简单的势函数论证),取 ε = √((ln n)/T) 时,
后悔 ≤ εT + (ln n)/ε = O(√(T ln n))
这个界意味着什么?平均到每轮,后悔是 O(√((ln n)/T)) —— 随轮数 T 增大而趋于 0。也就是说,跑得越久,平均表现越接近那位事后最优的专家。这不是「运气好」,而是一条定理。
Freund–Schapire:学习逼近均衡。把这个算法用在博弈上:让两位玩家各自把「自己的策略」当专家,各跑一个 MWU。每轮各自按权重随机出招,观测收益,更新权重。定理(1999)说:两人的平均策略随时间收敛到零和博弈的值——具体地,行玩家平均策略的收益与列玩家平均策略的收益之差趋于 0,且逼近博弈的值。于是「找均衡」被替换成「反复对局 + 小幅学习」,均衡从一个需要被算出的点,变成了一个会被逼近的吸引子。
这条线索的另一端,是人工智能。「反复对局 + 按表现更新」正是 6.9 之后、p187 会讲到的自我对弈的雏形。把 MWU 里的「专家」换成「棋手自己的策略」,把「损失」换成「输棋」,让它在数以百万计的对局里更新——这就是 AlphaZero 的精神。本章最后会把这条线收束到「自由」上:算法不被告知正确答案,它靠游戏自己长出能力。
★★★★ 绪论 p3 说过:「证明在结构上是一场对局」。本节把它变成一条现代定理——证明者与验证者之间的交互,能证明的东西恰好是 PSPACE。
先看传统证明的局限。传统数学证明是「一次写成的论文」:所有步骤一次性摆出来,从头读到尾核对。这种证明有一个隐含要求——独力在合理时间内核对完。交互证明放宽了它:允许向证明者提问,来回若干轮,然后再决定信不信。这个小小的放宽,让可证明的东西急剧膨胀。
定义(交互证明系统 IP)。两个角色:证明者 P(能力无限,可以是骗子)与验证者 V(多项式时间、可抛硬币)。它们来回交换消息若干轮,最后 V 输出「接受」或「拒绝」。要求两条:完整性——若命题为真,P 能让 V 以概率 ≥ c 接受(通常 c = 1 或 2/3);可靠性——若命题为假,任何(哪怕无限狡猾的)P 都只能让 V 以概率 ≤ s 接受(通常 s = 1/2)。记所有这样的语言类为 IP。
为什么要随机化?因为「提问」的力量依赖 V 不能预知 P 的答案。若 V 的挑战是确定的,P 就能预先算好一套说辞。而 V 抛硬币、随机挑一个挑战,P 若不知道挑战是什么,就无法同时骗过所有可能的问题——这与 6.1 混合策略的逻辑完全一致:随机化让对手无法针对性准备。
一个漂亮的例子:图不同构。要证明两个图 G1、G2 不同构(记 GI 的补),目前没有已知的多项式时间算法。但交互证明可以让「能力无限的证明者」轻松说服多项式时间的验证者:V 每轮随机选一个图 Gb(b ∈ {1, 2}),对它施加一个随机置换 π 得到 π(Gb),发给 P;P 要回答「这个图原本是哪一个」。若 G1 ≇ G2,则 π(Gb) 必然仍与原图同构、与另一个不同构,P 一眼可判;若两图同构,则 b = 1 与 b = 2 产生的分布完全相同,P 猜对的概率至多 1/2。重复 k 轮,骗子成功率降到 2−k。注意这个协议只用到了「多项式时间的 V」——它没有能力自己判定不同构,却能通过提问确认这一点。
定理(Shamir,1992)。IP = PSPACE。能被一场交互对局说服的命题,恰好就是能用多项式空间判定的命题。这条结果(建立在 Lund、Fortnow、Karloff 与 Nisan 的 IP ⊇ PSPACE 工作之上)惊人之处在于:交互几乎不花代价——V 仍是多项式时间、只抛硬币、只回 0 或 1,却能验证任何 PSPACE 问题;而 PSPACE 被认为远大于 NP。(另一个方向 IP ⊆ PSPACE 相对容易:把 P 的最优回答看成 V 的状态空间上的一次搜索。)
与全册的呼应。第一章用「值」把博弈化成数;本章用「博弈」刻画证明本身。这是同一种动作的两个方向:把 X 翻译成博弈,从而用博弈的工具理解 X,或用 X 的工具理解博弈。而交互证明最著名的副产品,就是下一节的零知识证明——它让「说服」变得可以在不泄露任何理由的情况下发生。p186 之后的 p174 会仔细讲它。
★★★★★ 上一节的交互证明让「说服」变得强大;本节的零知识证明让它变得克制——只让相信结论,不让学到任何理由。这是二十世纪 cryptography 最反直觉的成就之一。
要证明什么?举个日常的比喻:想向对方证明「我知道一个保险柜的密码」,但不想把密码说出。办法是让他隔着门看开柜、关柜,反复几次——每次他都看到「确实能开」,但对密码一无所知。零知识证明把这个直觉做成了可以严格定义的协议。
三条性质。一个零知识证明必须同时满足:① 完备性——若命题为真且证明者诚实,验证者会被说服;② 可靠性——若命题为假,任何证明者都无法以显著概率骗过验证者;③ 零知识——验证者什么也没学到。
第三条怎么才能被严格定义?这是最微妙的一步。直觉的「什么也没学到」无法直接量化,于是 Goldwasser、Micali 与 Rackoff 给出了一个可操作的定义:存在一个「模拟器」,它不接触任何秘密,却也能造出与「真实交互记录」不可区分的记录。如果骗子能凭空造出看到的一切,那当然从交互里没有获得任何信息。「零知识 = 可模拟」——这条定义把一句哲学断言变成了一个可验证的算法陈述。
一个具体协议:图同构(GI)的零知识证明。P 知道两个图 G1、G2 同构(即知道一个置换把它们对应起来),要说服 V 却不想说出这个置换。协议(重复 k 轮):
① P 随机选 b ∈ {1, 2} 与随机置换 π,计算 H = π(Gb),把 H 发给 V(但不说 b)。
② V 随机出题:问 P「H 来自 G1 还是 G2?」
③ P 回答 b。
为什么它有效?若 G1 与 G2 真同构,P 知道置换,无论 V 问什么都能答对(他甚至能临场换出对应的置换),所以完备性成立。若两图不同构,则 H 与 G1、G2 中的一个同构、与另一个不同构,P 不知道 V 会偏向哪边,混淆 G1 与 G2 的难度使他每轮至多 1/2 蒙对,k 轮后骗子成功率 2−k,可靠性成立。零知识呢?V 看到的全部记录是「H 与 b 的配对」。而模拟器不需要知道任何置换就能生成同样的记录:随机选 b、随机选 π、令 H = π(Gb)——这正好是真实记录中一模一样的形式!既然骗子也能造假记录,V 就从交互中学不到任何东西。
Hamilton 回路的零知识。更著名的协议(Blum)证明「我知道一个图的 Hamilton 回路」而不给出这条回路。技巧是让 P 每轮抛硬币选一种「部分公开」:正面就公开整个图并演示回路存在,反面就公开一条经过随机置换的回路但不指明它。V 每轮只能看到两种信息中的一种,单独看哪一种都不泄露回路;k 轮叠加,V 确信 P 知道,却始终不知道回路是什么。这个协议的意义在于:Hamilton 回路是 NP-完全的,于是「一切 NP 命题都有零知识证明」——这是零知识理论的中心结论。
应用与呼应。零知识证明如今支撑着隐私认证(向网站证明知道密码,而不传输密码)、区块链的隐私与扩容、以及各种「可验证计算」。而它与本章其他部分共享同一个精神:把「证明」看成一场游戏,然后设计游戏规则,使想要的性质自动涌现。交互证明与零知识是「证明即游戏」的极致;本章最后三页要把这条线索与整册的「自由」主题连起来。
★ 本章是最后一章,也是全册主旨的收束处。先破除一个最顽固的误读:把「游戏」读成「消遣」。
误读的三种面貌。①「游戏嘛,玩玩而已」——把游戏排除在严肃学术之外,好像只有「有用」的知识才值得研究。②「数学游戏 = 益智小题目」——把游戏窄化为数独、脑筋急转弯、巧算速记这类熟练度训练,于是「玩」与「学」被对立起来。③「博弈论是教人算计」——把博弈论矮化为处世厚黑学,忽略了它是一门有存在性定理、有复杂性分类、有机制设计理论的严格数学。这三种误读有一个共同错误:它们都只看见游戏的表层(乐趣、技巧、输赢),没看见游戏的骨架(规则、结构、可证明性)。
正解是:游戏的四要素,恰好是数学的四要素。一切游戏都可以拆成规则、对局、策略、终局:规则规定合法动作(对应公理与推理规则),对局是动作的序列(对应证明的演化),策略是可被证明的取胜判据(对应定理),终局有明确的胜负(对应结论的判定)。本册从头到尾都在演示这四件事如何一一落地:第一章把 Nim 的规则化成异或判据,第二章把「数」本身定义成 {L | R} 这样一场对局,第三章把几何游戏翻译成群与拓扑,第四章把赌局化成期望与鞅,第五章让无限对局逼出公理,本章则让博弈长出均衡、算法与证明系统。
三条线在本章合流。第一条是 Hilbert 的线:数学是「按规则摆弄无意义记号的游戏」(绪论 p4)——游戏性即规则性;本章的交互证明与零知识正是这条线的现代形态:证明被写成 P 与 V 的一场规则化的对局。第二条是 Wittgenstein 的线:数学是「语言游戏」,符号的意义由用法决定,规则是我们立的、因而也可以被改写——这解释了数学为什么必须自由。第三条是 Conway 的线:数「就是」游戏,{ | } = 0、{0 | 1} = ½——游戏性与数学对象在这里彻底合一。三条线汇入同一句话:游戏性不是数学的外衣,而是它的内核。
为什么这个判断重要?因为它解释了数学的两个看似矛盾的特征。一方面,数学极其严格(有公理、有证明、有反例审查)——这是「规则」的力量。另一方面,数学又极其自由(可以假设第五公设不成立、可以造出超现实数、可以重新定义「几何」)——这是「游戏」的自由:没有外部规则限制造什么,只有自己立的规则约束不能自相矛盾。前一章(第五章)我们看到规则的边界(不可判定性);本章我们看到规则可以被设计的另一面(机制设计、算法设计)。「自由地定规则,然后诚实地遵守它」——这就是全册要给的一句话。(p183 小结(二)与 p189 会把它彻底讲透。)
★★ 例题 1:2×2 零和博弈的值。两个小矩阵,一个没有鞍点(要用混合策略),一个有纯策略鞍点。两类都练一遍。
例 1-1(无鞍点,求混合均衡与值)。行玩家收益矩阵 A = [[3, 1], [2, 5]],求博弈的值与双方的最优混合策略。
解(无差异原理)。设行玩家以概率 p 选第一行、1 − p 选第二行。若两个纯策略都被用到,则它们对列玩家的两个动作必须给出相同的期望收益(否则行玩家会偏向更好的那个):
对列动作 1:3p + 2(1 − p) = 2 + p ; 对列动作 2:1p + 5(1 − p) = 5 − 4p
2 + p = 5 − 4p ⟹ 5p = 3 ⟹ p = 3/5
所以行玩家的最优策略是 (3/5, 2/5),值为 2 + 3/5 = 13/5 = 2.6。同法算列玩家:设他以概率 q 选第一列,则
对行动作 1:3q + 1(1 − q) = 1 + 2q ; 对行动作 2:2q + 5(1 − q) = 5 − 3q
1 + 2q = 5 − 3q ⟹ 5q = 4 ⟹ q = 4/5
列玩家的最优策略是 (4/5, 1/5),值 1 + 2·(4/5) = 13/5 = 2.6——与行玩家算出的值一致,这正是 minimax 定理的「上下界相等」。(实验页 p186 的 MWU 迭代给出平均策略 (0.6729, 0.3271)、值 1.6668,与本题的解吻合。)
例 1-2(有纯策略鞍点)。矩阵 A = [[4, 1], [2, 0]],求值。
解(找鞍点)。先看「行玩家的保险」:第一行的最小值是 1,第二行的最小值是 0,故 maxi minj Aij = 1(选第一行)。再看「列玩家的封顶」:第一列的最大值是 4,第二列的最大值是 1,故 minj maxi Aij = 1(选第二列)。两个值相等,公共值 1 就是博弈的值,纯策略 (第一行, 第二列) 是鞍点——它有 纯策略均衡,无需随机化。此时矩阵元素 A12 = 1 恰是它所在行的最小值、所在列的最大值——「行最小、列最大」就是鞍点的几何刻画。
例 1-3(用 LP 对偶验证)。对例 1-1,写出原问题:max v,s.t. 3p + 2(1−p) ≥ v、p + 5(1−p) ≥ v、0 ≤ p ≤ 1。两个约束取等号(这正是「无差异」的线性规划写法),解出 p = 3/5、v = 13/5。可见「无差异原理」与「LP 在最优顶点取等号」是同一件事的两种说法。
手算 2×2 的通用公式。对 A = [[a, b], [c, d]],记 D = a + d − b − c。若无鞍点(D ≠ 0),则行玩家选第一行的概率 p = (d − c)/D,列玩家选第一列的概率 q = (d − b)/D,值 v = (ad − bc)/D。代入例 1-1:D = 3 + 5 − 1 − 2 = 5,p = (5−2)/5 = 3/5,v = (15−2)/5 = 13/5 ✓。
练习(自己做)。① 求 [[2, 0], [0, 1]] 的值与混合策略(提示:这是「有纯策略」还是「无鞍点」?);② 求 [[1, −1], [−1, 2]] 的值;③ 猜硬币矩阵 [[1, −1], [−1, 1]] 的值是多少?四个数同时加 3 会怎样改变值?
★★★ 例题 2:Nash 均衡的手算。用「纯策略 + 无差异」两步法,把两个经典 2×2 博弈的均衡全部找出来。
例 2-1(协调博弈)。两个玩家各选 A 或 B,收益矩阵(行玩家的数,列为列玩家的数):
(A, A) → (2, 2) · (A, B) → (0, 0) · (B, A) → (0, 0) · (B, B) → (1, 1)
第一步:找纯策略均衡。逐个检查。若对手选 A,我选 A 得 2、选 B 得 0,所以我的最佳反应是 A;若对手选 B,我选 A 得 0、选 B 得 1,最佳反应是 B。于是「(A, A)」是均衡(双方都对对方的最佳反应),「(B, B)」也是均衡。两个纯策略均衡并存——这就是「协调」的含义:双方都希望撞在同一格,只是不知道撞哪一个。
第二步:找混合均衡(无差异)。设对手以概率 q 选 A、1 − q 选 B。我选 A 的期望收益 = 2q + 0·(1 − q) = 2q;选 B 的期望收益 = 0·q + 1·(1 − q) = 1 − q。混合均衡要求我在两者间无差异:
2q = 1 − q ⟹ q = 1/3
于是每个玩家以 1/3 选 A、以 2/3 选 B,构成一个(对称的)混合均衡。这个均衡的期望收益约为 2·(1/3) = 2/3,低于两个纯均衡(2 与 1)——混合均衡常常是「为了不确定性而付出的代价」,它稳定但不好。检查它确实是均衡:给定对手以 (1/3, 2/3) 出牌,我选 A 得 2/3、选 B 也得 2/3,怎么选都一样,所以我不愿偏离 ✓。(三种均衡共存,与 6.3 的「有限博弈必有混合均衡」一致;Nash 只保证至少一个。)
例 2-2(斗鸡博弈 Chicken)。两辆车上各坐一人迎面冲来,每人可选让路(S)或不让(T)。收益(行玩家):(S, S) → (0, 0)、(S, T) → (−1, +1)、(T, S) → (+1, −1)、(T, T) → (−2, −2)。纯策略均衡有两个:(S, T) 与 (T, S)(一人让、一人冲,谁都不想单方面改变)。混合均衡:设对手以概率 q 让路。我让路的收益 = 0·q + (−1)(1 − q) = q − 1;我不让的收益 = 1·q + (−2)(1 − q) = 3q − 2。令二者相等:q − 1 = 3q − 2 ⟹ q = 1/2。双方各以 1/2 让路。有趣的是这个混合均衡的期望收益是 q − 1 = −1/2——比任何一种「一人让」的均衡都差,也与「宁可都让(0)」相去不远:这正是斗鸡博弈的张力所在。
手算三步法(记住它)。① 列纯策略:逐个格子检查「双方是否都在对对方的最佳反应」;② 设混合:给对手一个概率 q,写出自己各纯策略的期望收益;③ 令等差:把用到的策略收益令其相等,解出概率。注意:混合均衡里「被赋予正概率的纯策略收益必须相等」是无差异原理;反过来,若某纯策略在解出的概率下收益严格更低,则它不该被使用,解无效,要重来。
练习(自己做)。① 囚徒困境有几个 Nash 均衡(纯 + 混合)?② 出一个 2×2 博弈,使它有恰好一个混合均衡、没有纯均衡(提示:把猜硬币的收益改一改)。③ 在协调博弈中,把 (B, B) 的收益从 1 改为 0.5,混合均衡的 q 如何变化?
★★★ 例题 3:Vickrey 拍卖的占优策略证明。本题把 6.9 的证明完整地「手做」一遍,并做数值核对。
规则回顾。第二价格拍卖:n 位买家同时密封出价 b1, …, bn;出价最高者赢得物品,但只支付第二高的出价。真实价值是 v。
待证命题。对而言,如实出价 b = v 是占优策略——不管别人如何出价,它都不比任何其他出价差。
证明。把别人的出价固定,设其中最高者为 m(别人怎么排布不重要,只有 m 起作用)。出价 b,则:
赢 ⟺ b > m;赢了支付 m,净收益 = v − m;否则净收益 = 0
写成函数:收益(b) = (v − m) · 1{b > m}。逐情形比较:
(i)v > m。如实出价赢,收益 v − m > 0。任何 b > m 仍赢,收益仍 v − m(支付恒为 m);任何 b ≤ m 则输,收益 0。故如实出价最优(且并列最优)。
(ii)v < m。如实出价输,收益 0。若抬高到 b > m,则赢而收益 v − m < 0——赢反而亏;若 b ≤ m,收益仍 0。故如实出价最优。
(iii)v = m。两种选择收益都为 0。
三种情形合起来:对任意 m 与任意 b,都有 收益(v) ≥ 收益(b)。由于这对每个 m 成立,它也就对别人出价的任意组合成立——如实出价是占优策略。◻
数值核对(v = 1.7,别人最高出价 m = 1.2)。
① 如实出价 b = 1.7:赢,支付 1.2,净收益 1.7 − 1.2 = +0.5。② 出价 b = 1.0(低于真实价值):输,净收益 0——比如实出价少 0.5。③ 出价 b = 3.0(抬高):仍赢,仍支付 1.2,净收益仍是 +0.5——与如实出价一样好(抬高在这里无害,但换一个 m 就会有害,见下)。
数值核对(v = 1.0,别人最高出价 m = 1.2,即真实价值低于别人)。① 如实出价 b = 1.0:输,净收益 0。② 出价 b = 1.5:赢,支付 1.2,净收益 1.0 − 1.2 = −0.2——花钱买了个亏。这正是「赢家的诅咒」在小算例中的样子:抬高出价只在「价值其实够」时才可能无害,一旦 v 偏低,抬高就变成主动亏损。因此「不抬高」是安全的:它自动避开所有吃亏的赢局。
证明的两条结构支点(务必记住)。① 支付与自己的出价无关——付的永远是 m,不是 b;② 出价只决定「赢不赢」,决定不了一个「赢局的价码」。把这两条拼起来,就把「说实话」变成了占优动作。第一价格拍卖就没有这两条性质(赢者支付自己的出价),于是如实出价不再是均衡——人们会低报,均衡出价约为 (n−1)/n · v,需要更细致的贝叶斯分析。这个对照正说明:机制设计不是要求诚实,而是设计出让诚实恰好最划算的规则。
练习。① 若改为「赢者支付第二高出价加 0.1 元」,如实出价还是占优吗?(提示:支付仍与自己出价无关,结论不变。)② 用 v = 2.5、m = 2.0 重做上面的数值核对。③ 第二价格拍卖中,若出价严格低于第二高出价而仍然赢——可能吗?为什么?
★★ 习题 1:博弈论基础(零和、均衡、演化)。
1. 求下列 2×2 零和博弈的值与双方最优混合策略:[[4, 0], [0, 2]]、[[1, 3], [4, 2]]、[[0, 2], [1, 0]]。先查有无鞍点(行最小、列最大),没有再套用 D = a + d − b − c 的公式。
2. 证明:对任何矩阵博弈,恒有 maxi minj Aij ≤ minj maxi Aij(即「保险 ≤ 封顶」)。并说明为什么当两者相等时矩阵有纯策略鞍点。
3. 写出「猜硬币」博弈的收益矩阵,用无差异原理验证它的值是 0、最优混合策略是 (1/2, 1/2)。再问:若把四个收益全部加上同一个常数 c,最优策略是否变化?值如何变化?注意「零和」是否被破坏。
4. 求协调博弈(收益 (A,A)=(2,2)、(B,B)=(1,1)、其余 (0,0))的全部 Nash 均衡(纯 + 混合)。若把 (B,B) 改为 (3,3),均衡集合如何变化?
5. 题目同 2 的斗鸡博弈(Chicken):列出全部 Nash 均衡,并比较它们的期望收益,指出混合均衡为什么「稳定却低效」。
6. 鹰鸽博弈取 V = 3、C = 7,求内部 ESS 中「出鹰」的概率 p*;并验证当 V ≥ C 时纯鹰策略成为 ESS。比较「鹰遇鹰」与「鸽遇鹰」的收益。
7. 写出囚徒困境的 Replicator 方程(三个策略时是三维,两个策略时降到一维)。对两策略情形 A = [[3, 0], [5, 1]],求它的不动点,并判断哪个是稳定的。两策略时只需追踪 x1,方程是 ẋ1 = x1(1 − x1)[(Ax)1 − (Ax)2]。
8. 用「无差异原理」证明:在混合 Nash 均衡中,一个玩家所有被赋予正概率的纯策略必定带来相同的期望收益,而未被使用的纯策略收益不高于它。
自检标准。1、3、4、5 能独立手算(含混合均衡),说明已掌握本章前半;2、8 能给出完整证明,说明理解了「均衡 = 无单方面改进」的本质;6、7 能算,说明已具备把博弈连到演化动力学的能力。
★★★ 习题 2:算法与证明系统(进阶)。
9. 用 LP 对偶写出并求解:矩阵 [[2, 1], [1, 3]] 的零和值(p186 实验给出的 MWU 估计是 1.6668,公式核对到小数第四位)。
10. 给出滑雪租赁竞争比 2 − 1/B 的完整证明:① 构造策略「先租 B − 1 天」;② 说明对任意天数 d,在线代价 ≤ (2B − 1)、离线代价 ≥ B;③ 证明确定性算法无法做到更好(提示:构造两个天数让同一策略必有一头吃亏)。
11. 秘书问题:证明「先跳过前 n/e 位、之后选第一个超过样本者」的成功概率趋于 1/e。对「最佳人选出现在第 k 位」求和的概率做积分近似。
12. 乘法权重算法:证明后悔界 ≤ εT + (ln n)/ε(势函数 Φt = ln Σi wi(t)),并取 ε = √((ln n)/T) 得到 O(√(T ln n))。用不等式 ln(1 − x) ≤ −x 与 e−x ≤ 1 − x + x2/2。
13. 图同构的零知识协议(6.14):① 若 G1 ≅ G2,说明 V 无法区分 H 的来源(即 π(G1) 与 π(G2) 同分布);② 写出这个协议的模拟器,从而论证零知识性。
14. 交互证明的可靠性:把图同构零知识协议重复 k 次,证明骗子证明者的接受概率 ≤ 2−k。各轮相互独立,用乘法。
15. 机制设计:证明「第一价格拍卖」中如实出价不是均衡——给出一个背离(报低价)能提高期望收益的例子。对手出价是随机的,报低价能提高「赢时付得少」的好处。
16. PPAD:用自己的话解释「每个点入度、出度 ≤ 1 的有向图,若有源点则必有汇点」这一奇偶性论证,并说明它为什么与 Nash 均衡的证明路线(不动点的路径追踪)同型。
自检标准。第 10、12 题(竞争比与后悔界)能把「界」从头推一遍,说明已进入在线算法的门槛;第 13、14 题能把零知识的三条性质都落到具体协议上,说明理解了「证明即对局」;第 15 题能构造出背离,说明体会到了「机制设计是反向博弈论」。本章的难度台阶就在这里:从「会算均衡」到「会设计规则」,要跨过的是证明的熟练度,而不是概念的新颖度。
本章的概念网络可以读成三条链(见下图),而三条链最终汇到同一个词:自由。
链一(理论链)。零和矩阵博弈 → minimax 的值 → LP 对偶(值可算)→ 一般博弈 → Nash 均衡 → 不动点定理。这条链回答:「解」是什么,它为什么存在。它的两个关键动作是「随机化」(让值存在)与「归约到不动点」(让存在性免费获得)。
链二(演化链)。囚徒困境 → 重复博弈与无名氏定理 → 触发策略(贴现阈值)→ 演化博弈与 ESS → Replicator 方程。这条链回答:合作与稳定如何从自利中生长出来。它的关键动作是「换时间尺度」——把「谁会赢」换成「谁会扩散 / 谁会存活」。
链三(计算与精神链)。机制设计与 Vickrey 拍卖(反向设计规则)→ PPAD-完全(均衡难算)→ 在线算法与竞争比 → 乘法权重(学习逼近)→ 交互证明与零知识(证明即对局)→ 自由。这条链回答:知道了「解」之后,我们能拿它做什么;以及数学为什么必须继续创造。
三条链的接点。① 「随机化」把链一(混合策略)与链三(零知识协议、在线随机算法)连起来——不确定性既是博弈的资源,也是算法的资源;② 「不动点」把链一与链三连起来——均衡的存在性来自拓扑,而它的计算困难(PPAD)也来自同一结构的组合版本;③ 「重复 / 学习」把链二与链三连起来——Replicator 方程(演化)与乘法权重(学习)在形态上是同一条更新规则的两种读法。
本章的边界(重要)。本章的全部结论都建立在几个假设上:收益已知(完全信息)、理性且自利(玩家会最大化自己的收益)、规则固定(我们分析的是给定的游戏)。一旦破坏其中任意一条,理论就要升级:信息不完全 → 贝叶斯博弈;有限理性 → 行为博弈论;规则本身可以被玩家改变 → 联盟博弈与动态规则设计。把边界记清楚,比记结论更重要——这也是全册每一章最后一页都会强调的事。
★★ 小结(一):均衡与算法。
正面清单。① 零和矩阵博弈:行得 Aij、列得 −Aij,一方的所得即另一方的所失;② 混合策略:以概率向量随机化,期望收益 xTAy;③ minimax 定理(von Neumann 1928):maxx miny xTAy = miny maxx xTAy = v;④ LP 对偶:零和博弈的值 = 一对互为对偶的线性规划的最优值,故可多项式时间求解;⑤ Nash 均衡:每个玩家的策略都是对其他人的最佳反应;⑥ Nash 定理(1950):每个有限博弈都有混合策略均衡;⑦ 无差异原理:被赋予正概率的纯策略收益必须相等;⑧ 最优反应对应与 Kakutani 不动点定理:均衡 = 最佳反应对应的不动点;⑨ 无名氏定理:重复博弈中,足够有耐心时任何可行且个人理性的收益都可被均衡支持;⑩ 触发策略与贴现阈值:δ ≥ (T − R)/(T − P) 时合作是子博弈完美均衡;⑪ ESS:对少量入侵稳健的策略,强于对称 Nash;⑫ Replicator 方程:ẋi = xi[(Ax)i − xTAx];⑬ Vickrey 拍卖:第二价格拍卖中如实出价是占优策略;⑭ PPAD-完全(DGP 2006):求 Nash 均衡存在但难算;⑮ 竞争比与 MWU 后悔界 O(√(T ln n));⑯ 交互证明 IP = PSPACE(Shamir 1992)与零知识证明。
易错清单(每条都来自真实的手算事故)。① 把「零和」当成「一方赢一方输」——零和只要求收益之和恒为常数,允许负值、允许平局收益;② 在无鞍点的矩阵上硬找纯策略均衡——没有就是没有,必须随机化;③ 把混合均衡的概率算成「最优概率」而忘了「被使用者的收益必须相等」——若某策略严格更差却仍给正概率,那不是均衡;④ 把 Nash 均衡当成「全局最优」——它只保证没有单方面改进(囚徒困境的均衡是最差的格);⑤ 把「存在均衡」读成「容易找到」——Nash 定理是存在性,PPAD-完全说明它 generally 难算;⑥ 把 minimax 的值误认为「先手优势」——值是两个最优混合策略相撞的期望,与谁先动无关(同时出招);⑦ 在重复博弈里用有限次逆推去否定合作——无限次(或不确定终止)时逆推失效,合作才可能出现;⑧ 把 ESS 与 Nash 混为一谈——ESS 是「抗入侵」的、更强的概念;⑨ 忘了「如实出价是占优」依赖第二价格规则,误推到第一价格拍卖;⑩ 把零知识证明当成「什么都没说」——它说的是「结论可被确信、理由不可泄露」,严格形式是「可模拟」。
一句话的总结。本章把「博弈」从一门关于输赢的学问,升级为一门关于均衡、算法与设计的数学:均衡回答「什么会稳定」,算法回答「能不能算」,设计回答「怎样让规则产出我想要的结果」。三者合起来,正是现代博弈论(乃至现代算法的很大一块)的全貌。
★★★ 小结(二):数学的自由精神。
回到全册的主旨。六章走下来,我们遍访了取子游戏、超现实数、几何游戏、赌局、无限对局与现代博弈论。它们表面差异巨大,却反复演示着同一件事:数学的创造,本质上是一场自由的游戏。本节把这句话拆成四种「自由」,并把它们落到前面六章的具体内容上。
自由之一:自由地选公理。第五公设不能被前四条推出,于是 Lobachevsky 与 Bolyai 干脆假设它不成立,造出了非欧几何(绪论 p5、第三章)。二十世纪,Gale–Stewart 定理与决定性公理 AD 的对峙(第五章)说明:连「一切对局都可决定」这样的命题,也可以被选择或放弃。我们讨论过的 𝒫/𝒩 二分、Zermelo 的无限棋局、Nash 的均衡存在性,都要求一组特定的公理背景。公理不是天条,而是棋盘的开局约定——可以换一副牌,重新开局。
自由之二:自由地造对象。第一章的「Grundy 值」和 nimber 不是被发现的现成数字,而是为了刻画博弈被造出来的数;第二章的 Conway 更进一步,把「数」本身定义成游戏 {L | R},让 ½、ω、1/ω 一天天生长出来。第三章的魔方群、第四章的鞅、本章的 PPAD 类,都是同类动作:当旧对象不够用,就造新的——判据是「能否被无矛盾地定义」,而不是「能否被直观到」。
自由之三:自由地换视角。Klein 的 Erlangen 纲领说「几何学就是某个变换群下不变性质的研究」——同一条定理换一个群就换一个身份(绪论;第三章)。第一章把 Nim 在「石子 / 二进制向量 / nimber / 超现实数」四个层面来回翻译;本章把同一场博弈读成「值的计算 / LP / 不动点 / 学习过程」。换视角是数学最便宜也最强大的动作:不需要新定理,只需要新的坐标。
自由之四:自由地设计规则。这是本章带来的、前五章没有充分展开的自由。机制设计(6.9)不问「规则给定后会怎样」,而问「要让人们玩出我期望的结果,规则该怎么写」——规则本身成了被设计的对象。Vickrey 拍卖的「如实出价是占优策略」正是这种设计的一个奇迹:与其要求诚实,不如让诚实恰好最划算。零知识证明(6.14)同样如此:我们设计一套交互规则,使「说服」与「保密」这两个看似冲突的目标同时达成。当数学不仅能分析规则、还能创造规则时,它的游戏性达到了顶点。
四种自由为什么都需要「规则」?这似乎是悖论:自由怎么会需要约束?答案是——没有规则的自由不是自由,而是混乱。正因为我们接受「推理必须遵守公理与逻辑」这条规则,我们才能自由地探索它的全部推论;正因为我们接受「游戏必须遵守自己定的规则」,我们才能放心地把创造力投进去。Gödel 告诉我们规则有边界(存在真而不可证的命题),但恰恰是这条边界,逼着数学不断走出旧规则、创造新规则——规则给了数学严谨,规则的边界给了数学自由。
一句话收束。从第一章的一堆石子,到本章的交互证明与自我对弈,数学始终在做同一件事:自由地定下规则,然后诚实地遵守它,直到规则本身开始要求被改写。下一章(综合站)会把六章收成一张年表与一张总图;而本章最后一页(p189)会从 Nim 一路回望到「自由」。
本章真正的关键词不是「均衡」,也不是「算法」,而是「规则」。它有两副面孔:当分析一场给定的博弈时,规则是约束;当设计一场博弈时,规则是发明。数学最了不起的地方,就是它同时扮演这两种角色——先立规矩,再在规矩内自由奔驰;需要时,又回过头来改写规矩。
本章给了这种「改写」三个最锋利的例子。其一,机制设计:与其指望玩家诚实,不如写一套规则让诚实变成他们的自利选择——Vickrey 拍卖把「说实话是占优策略」变成了一个可证的定理,这是把规则当作品来雕琢。其二,零知识证明:让「使人信服」与「不泄露理由」两个看似矛盾的目标并存——我们不是发现了这样的证明,而是设计了一套交互规则,使得它必然发生。其三,自我对弈(下一章的格物札记会细讲):我们不告诉机器「什么是好棋」,只给规则与胜负,让它在数以百万计的对局中自己写出「棋理」——这是把「规则」交给机器去无限次地玩。
把这三件事与数学史对照,会看到一条隐隐的谱系:Euler 把七桥问题从「怎么走」变成「能不能走」(发明了新问题);Klein 把几何从「空间的学问」变成「群的学问」(发明了新视角);Hilbert 把数学从「真理的集合」变成「符号的博弈」(发明了新定义);Conway 把数从「被给予的对象」变成「被造出的游戏」(发明了新对象)。他们的共同点不是证明了更多定理,而是重新制定了游戏规则,从而让一大批新定理成为可能。
一个提醒:规则的自由不是任意。「随便定」与「自由地定」的区别在于——后者要为后果负责。当然可以假设 1 + 1 ≠ 2(比如在 ℤ2 里,第一章的异或就是这样),但必须接受它带来的一切推论;可以假设第五公设不成立,但必须接受由此长出的整个非欧几何。自由的代价是一致性:一旦立了规矩,就要老老实实地玩到底,直到规矩自己暴露出矛盾、逼修订。「自由地定规则,然后诚实地遵守它」——这十四个字,是全册想说的最后一句话。
— 第六章 · 思想卡
延伸思考(三问)。① 如果「规则终究是我们定的」,那么数学的客观性从何而来?(提示:想想为什么多数人独立地选择同样的公理,也想想「可被无矛盾地定义」这条限制有多强。)② 本章的机制设计「设计规则」与第一章的「找必胜策略」,哪一个更难?在什么意义上它们其实是在做同一件事(都是让「对手 / 玩家的自利选择」导向我想要的结果)?③ Gödel 之后,「规则可以被改写」是不是意味着任何形式系统都终将不够用?如果是,数学的「自由」是被迫的,还是主动的?
★★★★ 6.4 用了 Brouwer 与 Kakutani 两条不动点定理,但没有证明它们,也没有完整验证最佳反应对应的三条假设。本挑战要把这条证明路线从头到尾搭起来,每一步都要说明它的假设与构造。
第一段:从 Brouwer 到 Kakutani。Brouwer 定理(我们作为已知接受):设 K ⊂ ℝn 是凸紧集,f : K → K 连续,则存在 x 使 f(x) = x。Kakutani 定理把它推广到集值映射 Φ : K → 2K(Φ(x) 是一组点),要求:① K 凸紧;② 每个 Φ(x) 是非空凸集;③ Φ 上半连续(图像闭)。构造思路:对每个 n,把 K 剖分成边长 1/n 的单纯形网格;在网格点上选 fn(x) ∈ Φ(x),再线性延拓到整个 K,得到一个连续函数 fn。由 Brouwer,fn 有不动点 xn。由紧性,{xn} 有收敛子列 → x*;由上半连续(图像闭),x* ∈ Φ(x*)。这个「网格近似 + 取极限」的论证写细,特别是:为什么 fn 的值域仍在 K 内(凸性保证凸组合仍属于 K)。
第二段:验证最佳反应对应的三条假设。混合策略空间 K = Δ1 × ⋯ × Δn,其中 Δi 是 Si 上的概率单纯形。要逐一验证:① K 凸紧——每个 Δi 是有限维单纯形(凸、有界闭),有限乘积仍凸紧。② BRi(σ−i) 非空且凸——非空:ui 关于 σi 是线性的(期望收益是概率的线性函数),连续函数在紧集上取到最大值,故最佳反应集非空;凸:最大化线性函数的解集是凸多面体,故是凸集。③ BR 上半连续——这正是需要仔细写的一步:证明 BR 的图像闭,即若 σ−i(m) → σ−i、σi(m) → σi 且 σi(m) ∈ BRi(σ−i(m)),则 σi ∈ BRi(σ−i)。关键用的是 ui 关于双方策略的联合连续性(有限博弈里 ui 是双线性函数,当然连续)。这个「取极限保持不等式」的论证补完整。
第三段:不动点 = 均衡。把 BR = BR1 × ⋯ × BRn 看成 K 上的集值映射。由第二段三条假设 + Kakutani,存在 σ* ∈ BR(σ*)。展开定义即:对每个 i,σ*i ∈ argmaxσ′i ui(σ′i, σ*−i)——这正是 Nash 均衡的定义。「不动点方程 ⟺ 均衡条件」的完全等价(两个方向)都写清楚,不要只说一边。
附加挑战(选做)。① 用 Kakutani 证明 Nash 定理的一个等价变体:对角化形式 σ* 是 f(σ) = (…, Pi(σ), …) 的不动点,其中 Pi 是「收益超过均值的纯策略的等权平均」——这类映射在证明中被用作「平滑」最佳反应。② 讨论 Chomp 与 Nash:第一章的策略偷取证明了「先手必胜存在」,本章的 Nash 定理证明了「均衡存在」——两者都是非构造性存在证明,比较它们的共同结构(是否都能化为「不动点 / 奇点」论证)。
★★ 实验:演化博弈与乘法权重真跑。本节所有数字都来自本地脚本 p186_lab.py(纯 Python 标准库),输出存于 qa/p186_out.txt,可自行复算。
实验一:Replicator 动态。用显式欧拉步进离散化 ẋi = xi[(Ax)i − xTAx](步长 dt = 0.004)。在鹰鸽博弈(V = 2、C = 4)与石头剪刀布上各跑一段。
(1) Replicator dynamics: discrete Euler steps Hawk-Dove: V=2.0 C=4.0 (internal ESS p*=V/C=0.5000) start = [0.8000, 0.2000] after = [0.5001, 0.4999] dist to [0.500, 0.500] = 0.000250 RPS: unique symmetric equilibrium = (1/3, 1/3, 1/3) start = [0.5000, 0.3000, 0.2000] after = [0.1924, 0.4892, 0.3184] (t=4.0) dist to uniform = 0.311765 max dist to uniform over t<=8.0 = 0.372705 (bounded oscillation)
解读。鹰鸽博弈的种群从 (0.8, 0.2) 出发,收敛到 (0.5001, 0.4999)——与定理预测的内部 ESS p* = V/C = 0.5 只差万分之三,「演化自己算出无差异概率」被数值验证。石头剪刀布则不同:它不收敛,而是绕着唯一的对称均衡 (1/3, 1/3, 1/3) 转圈(到 t = 4 时偏离 0.31,在 t ≤ 8 内始终不逃逸)。这正是 6.8 说的两种图景:内部 ESS 是「吸引子」,中性均衡只是「轨道中心」。
实验二:乘法权重(MWU)逼近零和博弈的值。两侧各跑一个 Hedge 更新(ℓ 用指数权重),迭代 600 轮,取平均策略。与 2×2 的解析公式对拍。
(2) Multiplicative Weights Update (MWU) on zero-sum games A2 = [[2,1],[1,3]] (value 5/3) avg row strategy = [0.6729, 0.3271] avg col strategy = [0.6720, 0.3280] empirical value = 1.666767 analytic value = 1.666667 |diff| = 0.000101 analytic strategy = row [0.6667, 0.3333] col [0.6667, 0.3333] A3 = RPS 3x3 zero-sum (value 0, eq (1/3,1/3,1/3)) avg row strategy = [0.3333, 0.3333, 0.3333] empirical value = 0.000000 |diff| = 0.000000
解读。矩阵 [[2, 1], [1, 3]] 的解析值是 5/3 ≈ 1.666667,MWU 的平均收益是 1.666767,误差 0.0001——学习算法在 600 轮内把值逼近到小数点后四位。平均策略 (0.6729, 0.3271) 也收敛到解析最优 (0.6667, 0.3333)。RPS 上更干脆:平均策略恰是 (0.3333, 0.3333, 0.3333),值误差 0。这就是 Freund–Schapire 定理的数值影子:不需要一次算准,反复学习就会逼近均衡。
实验三:重复囚徒困境与针锋相对。收益 (T, R, P, S) = (5, 3, 1, 0),每对选手打 200 局;再做一个四人循环赛(每位选手与所有人各打 200 局,累计总分)。
(3) Iterated Prisoner Dilemma: 200 rounds Tit-for-Tat vs Always-Defect : 199 , 204 Tit-for-Tat vs Tit-for-Tat : 600 , 600 Always-Defect vs Always-Defect : 200 , 200 Always-Cooperate vs Always-Defect : 0 , 1000 -- round-robin total score (each pair, 200 rounds) -- Tit-for-Tat total = 1999 Grim total = 1999 Always-Cooperate total = 1800 Always-Defect total = 1608
解读。先看刺眼的一行:针锋相对 vs 永远背叛,针锋相对 199、永远背叛 204——头对头时「永远背叛」竟然小胜。这提醒我们「单个对手」不足以说明问题。看循环赛总分:针锋相对与冷酷触发并列第一(各 1999),永远合作 1800,而永远背叛垫底(1608)。原因一目了然:永远背叛虽然能从「永远合作」身上榨到 1000 分,却在与一切会报复的对手(针锋相对、冷酷触发)的长期相遇中反复吃 1 分,最终被合作型策略甩开。这正是 Axelrod 结论的数值重演:在群体环境里,愿意合作、且能反击与原谅的策略胜出;「永远背叛」是短视的赢家、长期的输家。
实验四:2×2 零和博弈的解析解 vs MWU。用公式 v = (ad − bc)/(a + d − b − c) 算出解析值,与迭代 2000 轮的平均策略对照。
(4) 2x2 zero-sum: closed form vs MWU A4 = [[3,1],[2,5]] closed form value = 2.600000 row1 = 0.600000 col1 = 0.800000 MWU average value = 2.600252 row1 = 0.585810 col1 = 0.796452 |value diff| = 0.000252 |row1 diff| = 0.014190
解读。解析值 2.6(正是例题 1 手算的 13/5),MWU 给出 2.600252,误差 0.00025;平均策略也贴住 (0.6, 0.4)。三组实验共同说明一件事:「精确求解很难」(6.10 的 PPAD)与「近似逼近很容易」(6.12 的学习)并不矛盾——后者只要求「跑得足够久」,而这正是现代算法(乃至自我对弈)的哲学。本册所有实验页都遵循同一格式:可复算的脚本 + 可核对的输出 + 与理论的对拍。自己跑一遍——「跑过」与「读过」在数学上差别巨大。
棋是中国算学传统里最古老的一场博弈,也是本章主线最生动的一次印证。围棋有「定式」——局部最优的一串固定变化,是千百年来棋手反复验证、写进棋谱的经验;有「势」——对全局位置价值的直观估计;有「气」与「劫」——生死与反复的具体判据。注意这三样东西的结构:定式是策略库,势是估价函数,气劫是局部判定规则——它们恰好对应本章的三个概念。
先看「势」与「值」的对照。棋手数千年凭直觉给局面估一个「价值」,判断谁占优。本章把这个直觉做成了数学:minimax 定理(6.1)说,一个博弈的「值」是一个可以用 max–min 定义、并且可以计算出来的数;而 AlphaZero 的「价值网络」则是用神经网络去逼近这个值——把「感觉」落成一个函数,是本章「把博弈变成数学」的最后一步。「势」与「值」说的其实是同一件事:局面有一个客观的价值刻度,高下由它决定。区别只在于——棋手用眼睛估,数学用公式算。
再看机器下棋的三级跳,它依次用了本章的三种工具。① 1997 年 Deep Blue 击败 Kasparov:国际象棋的状态空间虽大但有界,深蓝靠强大的穷举搜索 + 人工评估函数取胜——这是「算法」的胜利,却没有超出「给定规则、硬算」的框架。② 2016 年 AlphaGo 击败 Lee Sedol:围棋的分支因子使得穷举不可能,AlphaGo 用了深度神经网络 + 蒙特卡洛树搜索 + 人类棋谱的监督学习——它既学「棋理」(策略网络),也学「值」(价值网络),对应本章的「学习逼近均衡」(6.12 的 MWU 是它的极简版)。③ 2017 年 AlphaZero:不再使用任何人类棋谱,只给规则与胜负,通过纯粹自我对弈学会了国际象棋、将棋与围棋,且超越了此前所有程序。这是本章最惊人也最贴合主旨的一步。
自我对弈的哲学:把「规则」交给机器去无限次地玩。AlphaZero 没有被告诉「什么是好棋」,也没有被喂入定式。它只有:规则(哪些走法合法)、终局(胜负判定)、以及一身可以从零开始的神经网络。它反复与「昨天的自己」对弈,赢了就强化当时的走法,输了就削弱。这与 6.12 的乘法权重在同一精神谱系上:不问「最优解是什么」,只问「如何让表现随时间改进」。而它的学习曲线证明——「棋理」不是被输入的知识,而是被游戏自己逼出来的结构。
与本书主旨的呼应。第一章我们从「一堆石子」中挖出了异或与 Grundy 值;本章我们从「一场对局」中长出了均衡与学习。AlphaZero 把这两端连了起来:它面对的是一盘远比 Nim 复杂的游戏,用的却是同一句话——给出规则,然后让博弈自己说话。围棋的「定式」是人类用几千年写下的策略库;AlphaZero 用几天、几百万局,自己重新「发现」了它们,甚至发现了人类未曾想到的走法。这不是对棋道的背离,而是本章(乃至全册)想说的最后一句:游戏的规则一旦被诚实地定下,万物都可以在规则内自由生长——数学如此,机器亦如此。
★ 速查:第六章概念与公式。
一、记号。A 收益矩阵(行玩家视角);x, y 混合策略(概率向量);v 零和博弈的值;Δ(Si) 策略单纯形;ui 收益函数;σ−i 除 i 外的策略组合;BRi 最佳反应对应;δ 贴现因子;p* ESS 混合概率;ε 学习率。
二、定义。① 零和矩阵博弈:行得 Aij、列得 −Aij;② 鞍点:maxi minj = minj maxi;③ Nash 均衡:ui(σ*i, σ*−i) ≥ ui(σ′i, σ*−i) 对一切 σ′i 成立;④ 无差异原理:被赋予正概率的纯策略收益相等;⑤ 子博弈完美:在每个子博弈上都是均衡;⑥ ESS:u(p, p) ≥ u(q, p),等号时 u(p, q) > u(q, q);⑦ 竞争比:ALG ≤ c · OPT;⑧ IP:交互证明语言类。
三、核心定理。① minimax(von Neumann 1928):maxx miny xTAy = miny maxx xTAy = v;② LP 对偶:值 = 一对对偶 LP 的最优值(可多项式时间求解);③ Nash(1950):每个有限博弈有混合策略均衡;④ Kakutani:凸紧域上凸值上半连续的集值映射有不动点 ⟹ 均衡 = BR 的不动点;⑤ 无名氏定理:重复博弈中合作可被均衡支持;⑥ 触发策略阈值:δ ≥ (T − R)/(T − P);⑦ ESS 内部解 p* = V/C(鹰鸽,V < C 时);⑧ Replicator:ẋi = xi[(Ax)i − xTAx];⑨ Vickrey:第二价格拍卖中 b = v 是占优策略;⑩ PPAD-完全(DGP 2006):求 Nash 均衡存在但难算;⑪ MWU 后悔界:O(√(T ln n));⑫ IP = PSPACE(Shamir 1992);⑬ 零知识:完备 + 可靠 + 可模拟。
四、常用公式。2×2 零和(无鞍点):v = (ad − bc)/(a + d − b − c),p = (d − c)/D,q = (d − b)/D;滑雪租赁竞争比 2 − 1/B;秘书问题成功率 → 1/e;MWU 权重更新 wi ← wi(1 − ε)ℓi。
五、典型数值(实验真跑)。鹰鸽 Replicator 收敛到 [0.5001, 0.4999](p* = 0.5);RPS 绕 (1/3,1/3,1/3) 有界振荡(t ≤ 8 内偏离 ≤ 0.37);MWU 在 [[2,1],[1,3]] 上值 1.666767(解析 5/3,误差 0.0001);循环赛中针锋相对与冷酷触发并列第一(1999),永远背叛垫底(1608);[[3,1],[2,5]] 解析值 2.6,MWU 2.600252。
六、三条链。理论(minimax → LP → Nash → 不动点)· 演化(PD → 无名氏 → ESS → Replicator)· 计算与精神(机制设计 → PPAD → MWU → 交互证明 → 自由)。
★★ 全册回望:从 Nim 到自由。
把六章串成一条线。让我们从第一页出发,重走一遍。第一章:一堆石子,两人轮流取——Nim。它的判据是「各堆异或是否为 0」,而 Sprague–Grundy 定理把一切有限公平博弈折算成一个数(Grundy 值),于是「两局并行」变成了「两个数相加」,博弈构成一个加法群。第一章教给我们的动作是「化标准形」:把局面化成数,再从数读出策略。
第二章:把视角翻转——数即游戏。Conway 用 {L | R} 造出超现实数,整数、二进分数、实数乃至 ω 与 1/ω 一天天生长出来;第一章的 nimber 在这里找到了归宿(∗ = {0 | 0} 与任何数都「不可比」)。第二章教给我们的动作是「造对象」:当旧对象不够用,就发明新的。
第三章:走进几何的游戏——折纸比尺规更强(能解三次方程),七桥问题诞生了图论,15-拼图的不可解性是置换奇偶性的胜利,魔方群 43 252 003 274 489 856 000 个状态、God's Number = 20。第三章教给我们的动作是「换视角」:同一条定理换一个群(或一张图),就有了不同的力量。
第四章:赌局中的数学——赌博是概率的母亲;期望有裂缝(圣彼得堡悖论),鞅证明任何投注系统都不能改变期望,随机游走给出「一二维必返、三维一去不还」。第四章教给我们的动作是「算期望」:在不确定中找一个稳定的量。
第五章:把游戏玩到无限,就撞上地基——Gale–Stewart 定理说开集上的无限对局都是决定的,而「所有对局都可决定」(AD)与选择公理冲突;Ehrenfeucht–Fraïssé 博弈刻画同构,生命游戏是 Turing 完备的,扫雷与数独是 NP-完全的。第五章教给我们的动作是「问边界」:规则能走多远?哪里必须停下来换公理?
第六章(本章):当博弈成为数学本身——minimax 给出零和的值,Nash 用不动点保证均衡存在,机制设计反向设计规则,PPAD 说明均衡难算,乘法权重用学习逼近它,交互证明与零知识把「证明」写成了对局。第六章教给我们的动作是「设计规则」:不仅分析规则,还要创造规则。
六个动作,一条主干。化标准形 → 造对象 → 换视角 → 算期望 → 问边界 → 设计规则。它们不是六门技术,而是同一个动作的六个变奏:把「玩一个游戏」变成「做一门数学」。而贯穿其中的暗线始终是规则 · 等价 · 策略:先立规则(公理、走法),再找等价(不变量、值、同构),最后读出策略(判据、均衡、设计)。
最后,回到「自由」。Nim 的判据是自由的(无人规定异或);超现实数是自由的(无人规定 ½ = {0 | 1});非欧几何是自由的(无人规定第五公设必须成立);Nash 均衡是自由的(无人规定玩家必须合作);零知识证明是自由的(无人规定说服必须泄露理由)。数学之所以能不断超越自己,正因为它是一场自由的游戏——自由地定规则,然后诚实地遵守它,直到规则本身开始要求被改写。从一堆石子走到交互证明,我们走过的不只是两千年,而是同一个念头的两千次转身:给游戏一个诚实的定义,它就会回报一门数学。
下一站:综合站。那里会把这六章收成一张年表(Euclid、Cardano、Pascal、Euler、Bouton、von Neumann、Nash、Conway、Erdős、Wolfram、Hassabis……)、一张概念总图、一张方法决策树,以及两个可以自己动手复算的综合实验。合上书时,愿记住的不是任何一条具体的定理,而是这个动作:把眼前的东西,变成一个可以说清规则、可以被证明、可以被计算的游戏。
★ 六章的旅行到此结束。综合站做四件事:把全册的结构收成两张图(p191 的总览、p194–p195 的两张地图)、把两千年收成一张年表与一张人物谱(p192–p193)、把方法论压成两个真跑实验(p196–p197)、把检验交给六道跨章大题与二十四问(p198–p200)。
一个提醒:本书的主旨不是「数学很有趣」。本书的主张是:游戏性是数学最重要的特质——规则、对局、策略、终局这四件事,既是数学最早的面貌(希腊人的竞技、中算的「术」),也是它最深的运作方式(Hilbert 的记号游戏、Conway 的数即游戏)。当把「什么是数学」这个问题的答案从「关于数量与形状的科学」换成「一场自由的、有规则的游戏」,很多困惑会自动消失:为什么数学要证明(因为游戏必须判定胜负)、为什么数学允许「无用的」分支(因为游戏的意义在于玩本身)、为什么数学能不断自我超越(因为规则可以被改写,棋盘可以被重画)。
综合站怎么用?① 若只想复习:读 p191 的总览与 p201–p203 的小结与速查;② 若想检验自己:先做 p199 的六道跨章大题(每题 30 分钟),再对 p200 的二十四问逐条自查;③ 若想动手:把 p196–p197 的两个脚本重跑一遍,再改几个参数(例如把 Nim 换成 Wythoff、把 MWU 的迭代次数加倍)看结论如何变化。「跑过」与「读过」在数学上差别巨大。
最后一句口令(带走它)。遇到任何游戏(也包括任何数学问题),问三件事:它的结构是什么?它的策略能不能被证明?它通向哪条定理?——这三问是本书的全部内容,也是九章格数学希望留下的东西:格物致知,然后把它玩下去。
明线(一条故事线)。数学从「玩」开始(绪论),第一章学会把局面变成不变量(Nim 的异或),第二章把局面彻底变成数(超现实数),第三章把几何游戏翻译成图、置换群与拓扑,第四章把随机纳入游戏并证明「必胜系统不存在」,第五章把游戏玩到无限并撞上公理与可计算性,第六章看现代数学如何把博弈当作定义、证明与算法本身。结论:数学的自由精神,正来自「游戏」这个身份。
暗线(一套动作)。全册反复演练同一套动作:① 画图(把游戏写成局面与走法的有向图);② 找不变量(异或、Grundy 值、置换奇偶性、期望、拓扑不变量、势函数);③ 化标准形(局面 → 数 / 群元素 / 等价类);④ 判与构造(先判定谁赢,再想办法指出必胜走法——而 Chomp 提醒我们「存在」与「构造」是两件事)。
接口(四条邻域)。与代数(异或与二元域、游戏群、置换群、序数算术)、概率与分析(期望、鞅、随机游走、Monte Carlo)、逻辑与计算(决定性、模型论博弈、Turing 完备、NP-完全)、现代博弈论与经济学(minimax、Nash、机制设计)四条战线直接相通。第六章把这些接口逐条架到了现代研究的前线。
页码索引(快速跳读)。Nim 与异或 p11–p14;Grundy 值与 SG 定理 p17–p19;交换群 p21;Chomp 与策略偷取 p22;Wythoff 与黄金比 p23;超现实数 p41–p54;折纸 p71–p73;七桥与 Euler 判据 p74–p75;15-拼图 p77–p78;魔方群 p79–p80;铺砌与 Wang 砖块 p81–p82;Hex p83–p84;期望与点数分配 p102–p104;圣彼得堡 p105–p106;鞅 p109–p110;随机游走与 Pólya p111–p112;混合策略与 Kuhn 扑克 p113;Monte Carlo p114;Gale–Stewart p132–p133;AD 与 AC p134–p135;Baire 游戏 p136–p137;EF 博弈 p139–p140;证明即游戏 p141–p142;PCP 与 NP-完全 p143–p144;minimax 与 Nash p161–p164;机制设计 p169;交互证明与零知识 p173–p174;两个综合实验 p196–p197。
一条贯穿全册的对照表。同一个数学动作在六章里的六种面孔:「不变量」——异或(一)、生日(二)、置换奇偶性与染色(三)、期望(四)、Baire 性质(五)、均衡(六);「等价」——nimber(一)、超现实数的规范形(二)、同构的图(三)、期望相同(四)、初等等价(五)、支付等价(六)。把这张对照表记住,全册就成了一张纸。
这张年表要读三遍:第一遍看「谁提出的」,第二遍看「它逼出了哪一门学问」,第三遍看「它与前一条的关系」。
三个转折点。① 赌博 → 概率(1494–1654):Pacioli 提出未完成赌局的分赌本问题,一百多年后在 Pascal 与 Fermat 的通信里被期望解决,概率论从此有了语言;② 取子 → 代数(1901–1939):Bouton 把 Nim 的胜负写成异或,Sprague 与 Grundy 进一步证明「一切公平博弈都等价于一堆 Nim 石子」——博弈论长出了自己的代数;③ 对局 → 公理(1913–1953):Zermelo 用选择公理讨论无限棋局,Gale 与 Stewart 证明开集对局可决定,此后「决定性」成为描述集合论的核心议题。
三个「从消遣到理论」的实例。① Euler 的七桥(1736)本是一封写给小城的消遣信件,它生出了图论;② Hamilton 的 Icosian Game(1857)是一门卖钱的玩具,它生出了哈密顿回路与今天的 NP-完全性;③ Conway 的生命游戏(1970)是《科学美国人》上的娱乐专栏,它生出了元胞自动机与人工生命的整个领域。数学史上最贵重的理论,常常是从一场游戏开始的。
三个当代续章。① AlphaZero(2017):用自我对弈从零学会国际象棋、将棋与围棋,把「博弈 + 学习」写成算法史上最著名的实验之一;② God’s Number = 20(2010):Rokicki 等人用 35 CPU 年证明魔方任意状态 20 步可解——群论与对称性把「宇宙年龄内无法穷举」变成了可能;③ 形式化证明(2023 起):Lean 与 Mathlib 让 Hilbert 的「符号游戏」有了真正的机器裁判。游戏既是数学最古老的面貌,也是它最新鲜的战场。
这张人物谱按主题分组(上排起:赌博与概率 → 图论 → 组合博弈 → 无限与均衡 → 造游戏的人 → 算法一侧)。它们当成「同一条链条上的环节」看,而不是孤立的名字。
三组必须记住的「对话」。① Pascal–Fermat(1654):一场通信解决了分赌本问题,概率论因此诞生——这是「游戏逼出理论」最著名的一次;② Bouton–Sprague–Grundy(1901/1935/1939):从 Nim 的异或判据到「一切公平博弈 = Nim」,四十年完成了一次完整的代数化;③ Nash–Conway(1950/1970):Nash 用不动点定理证明均衡存在,二十年后 Conway 把「数」本身定义成游戏——一个从均衡出发,一个从构造出发,两条路在「博弈 = 数学对象」处汇合。
两类气质。一类是解题家:Cardano、Euler、Bouton、Erdős——他们喜欢具体的棋局与小巧的论证;一类是建筑师:von Neumann、Conway、Shamir、Hassabis——他们把一个游戏变成一整套理论,或者把一整套理论变成一台机器。本书想让人同时尝到两种乐趣。
还有一群「不在谱上的」人。中算传统里写下「术」的无名作者、印度数学中发明「报数淘汰」与十进制谜题的人、把围棋定式打磨千年的棋手——他们的名字没有留下来,但他们玩的正是同一场游戏。数学的游戏性是全人类共有的财产,而不是某个天才的专利。
读人物谱的一个方法。不要记「谁在哪一年出生」,而记「谁把什么变成了什么」:Euler 把一座桥变成了图、Bouton 把 Nim 变成了异或、Conway 把数变成了游戏、Shamir 把证明变成了交互、Hassabis 把棋谱变成了数据。每一条「变成」都是一次数学自由精神的展示。
这张图是「谁依赖谁」。从上到下、从左到右读,可以发现三条主干。
主干一(判定与估值的代数化)。游戏(局面 + 走法)→ 𝒫/𝒩 位置(第一章)→ Bouton 定理(异或)→ Grundy 值 → Sprague–Grundy 定理 → nimber 交换群。这条路把「谁赢」变成了「一次位运算」。
主干二(数的构造)。游戏 → {L | R} → 生日归纳 → 「数的判据」→ 全序域 On → 实数嵌入。这条路把「数」变成了「游戏」,也让第一章的悬念闭环。
主干三(其他数学分支的游戏化)。几何 → 图 / 置换群 / 拓扑不变量(第三章);随机 → 期望 / 鞅 / 随机游走(第四章);逻辑与计算 → 决定性 / EF 博弈 / PCP / NP-完全(第五章);最后汇入现代博弈论(第六章)。
四个「横向接口」值得注意。① Grundy 值 ↔ 置换奇偶性(都是「不可约的离散不变量」);② nimber ↔ 超现实数(前者是后者的非数部分);③ 鞅 ↔ 决定性(都是「无法预测下一期」的数学化);④ EF 博弈 ↔ Hex(都是「用对局刻画某个数学性质」)。数学的联结就在这些横线上——它们是本书「题材之间必须联结」这条要求的兑现。
四条主线。① 判定线(谁赢):逆推 → 闭式判据(Nim 异或、一笔画、Hex 无平局);② 估值线(值多少):不变量与数值(Grundy 值、超现实数、期望、势函数);③ 构造线(怎么造):归纳构造(生日、nimber 的规范形、交互协议的轮次设计);④ 复杂度线(有多难):归约与渐进(NP-完全、PSPACE、PPAD、MCTS 与 MWU 的采样复杂度)。
三条「生产」。① 游戏 → 理论:全册最动听的一条——七桥生图论、拼图生置换群、Nim 生组合博弈论、无限对局生描述集合论;② 理论 → 机器:minimax 生线性规划、MWU 生在线算法、博弈学习生 AlphaZero;③ 机器 → 数学:Lean 与 Mathlib 把证明变成可校验的对象,Hilbert 的「符号游戏」获得了机器裁判。这条回路闭合了:数学玩出机器,机器回来玩数学。
四次「换域」(跨册对照)。本册与相邻领域共享同一个动作:换一个域(换一种结构)来看同一个问题。第一章换到 ℤ2(异或)、第二章换到超现实数的全序域、第四章换到概率的测度空间、第五章换到集合论的模型宇宙。每当原问题太难,就换域——这是本册反复演示的元技巧。
方法决策树(遇到一个新游戏时)。① 是公平的吗(双方走法相同)?否 → 第二章(超现实数);② 能拆成互不干扰的分量吗?能 → 各分量求 Grundy 值后异或(第一章);不能 → 用 𝒫 位置的结构另找判据(Wythoff 用黄金比、Hex 用拓扑);③ 含随机吗?是 → 期望与鞅(第四章);④ 有无限步吗?是 → 决定性与公理(第五章);⑤ 有对手但不完全对抗(收益不零和)吗?是 → Nash 均衡与机制设计(第六章)。这张决策树是全册的实用摘要。
★★★ 综合实验一:从局面到数(Grundy 求解器综合版)。脚本 qa/p196_lab.py(纯标准库),输出存于 qa/p196_out.txt。
实验设计。把六个不同的游戏(Nim、减法游戏 S = {1,3,4}、竹竿、Kayles、Wythoff、Chomp)统一写成「走法函数」,用同一套 mex 递归算 Grundy 值;然后随机抽取 2–3 个不同游戏的局面组成「游戏的和」,比较两条独立的路线:① 对「和游戏」直接做蛮力逆推(谁赢);② 把各分量的 Grundy 值异或起来(是否非零)。这正是对 Sprague–Grundy 定理的一次数值检验。
① 六个游戏的 Grundy 值表
Nim 单堆 G(*n) : [0,1,2,3,4,5,6,7,8,9,10,11,12]
减法游戏 S={1,3,4} : [0,1,0,1,2,3,2,0,1,0,1,2,3]
竹竿 G(n 节) : [0,1,2,3,4,5,6,7,8,9,10,11,12]
Kayles G(n) : [0,1,2,3,1,4,3,2,1,4,2,6,4]
Wythoff G(n,n)/G(n,n+1) : [(0,1),(2,0),(1,5),(6,2),(7,6),(8,10)]
Chomp G(m,n) 3x3 对角 : [1, 2, 4]读数。① Nim 与竹竿逐项相同(0,1,2,…)——它们在数学上是同一个游戏(第一章 p20 的结论);② 减法游戏 {1,3,4} 呈周期 7;③ Kayles 前 13 项 = 0,1,2,3,1,4,3,2,1,4,2,6,4,与第一章实验完全一致(两个独立脚本给出同一数列,是实现的交叉验证);④ Wythoff 与 Chomp 的 Grundy 值不像 Nim 那样线性,说明「值」这个工具比「异或」更普遍。
② Sprague–Grundy 定理:和规则的蛮力对拍
随机组合局面数 = 397(2–3 个分量,跨 6 个游戏随机抽取)
判据不符数 = 0 全一致 ✓
样例:
chomp(3,2,1) + sub(8,) 异或 = 0 → 先手败
bamboo(3,) + chomp(3,2) + wythoff(3,3) 异或 = 4 → 先手胜
kayles(3,) + wythoff(3,3) 异或 = 5 → 先手胜
bamboo(4,) + kayles(1,) + sub(6,) 异或 = 7 → 先手胜这是本章(也是全册)最关键的一张对拍表。397 个随机跨游戏组合,零例外:蛮力逆推的胜负与「Grundy 值异或是否为零」逐条一致。第一个样例:chomp(3,2,1) + sub(8) 的异或为 0,蛮力判定「先手败」——先把一个 Chomp 局面与一个减法游戏绑在一起,再用异或一算就知道输赢,这正是把两个完全不同的游戏「折算成数」之后的威力。
③ 组合局面的必胜走法(异或规则的构造)
局面:Nim(3,5) + Kayles(4) + 减法{1,3,4}(7)
各分量 Grundy 值:[kayles(4)=1, nim(3,5)=6, sub(7)=0] 异或 = 7
回零走法(使异或变 0 的走法):
→ kayles(4) + nim(2,3) + sub(7)
共 1 条;蛮力判定原局面:先手必胜读法。三个分量分别来自三个游戏,它们的值 1、6、0 异或得 7。要把异或压回 0,需要找一处「把自己的值改成 值 ⊕ 7」的路:Kayles 的分量 1 改成 1 ⊕ 7 = 6(在 Kayles 里走一步把值从 1 变成 6 不可行);Nim 的分量 6 改成 6 ⊕ 7 = 1(把 (3,5) 走到 (2,3),值 6 → 1 ✓);减法分量 0 改成 7(不可行)。于是唯一回零走法是把 Nim 那一对从 (3,5) 走到 (2,3)。注意这个过程完全没有「搜索」——它是三次数值与一次异或。这就是「结构化解法」:把 106 量级的局面空间压成三位二进制数。
与第一章实验的关系。第一章的实验只验证了 Nim、Wythoff、Chomp 各自的判据;本实验把六个不同游戏放在同一框架下,并检验了跨游戏的「和规则」——这是 Sprague–Grundy 定理的完整形态。自己跑一遍,再把 POOL 里的局面换成更大的(例如 Kayles 取 (6,)、Wythoff 取 (5,8)),看对拍是否仍然零例外。
★★★ 综合实验二:博弈的蒙特卡洛(自对弈与均衡逼近)。脚本 qa/p197_lab.py(纯标准库),输出存于 qa/p197_out.txt。
实验设计(四段)。① Nim 自对弈:让「随机走法」与「按 Bouton 判据出招」的玩家对打各 2000 局,分别从 𝒫 位置与 𝒩 位置出发,统计胜率;② 随机初始局面:随机生成三堆(各 ≤ 7),比较「异或非零」的比例与最优先手的实际胜率;③ 乘法权重(MWU)自对弈:让两个学习者在 3×3 零和矩阵上互相学习,看平均策略与平均对局值是否收敛到精确均衡;④ MCTS:用 UCB1 的纯随机 playout 在 Nim 上选招,统计命中「回零走法」的比例。
① Nim 自对弈:随机 vs 最优
P 位置(先手应必败):
先手随机 vs 后手最优:先手胜率 = 0/2000 = 0.000
先手最优 vs 后手随机:先手胜率 = 1440/2000 = 0.720
N 位置(先手应必胜):
先手随机 vs 后手最优:先手胜率 = 686/2000 = 0.343
先手最优 vs 后手随机:先手胜率 = 2000/2000 = 1.000读法。① 从 𝒫 位置出发,随机先手对最优后手 0 胜——第一手就注定,判据的威力在此;② 从 𝒩 位置出发,随机先手竟有 34.3% 胜率:因为他偶尔会碰巧走到 𝒫 位置(把必败局面交给对手);③ 反过来,最优先手对随机后手在 𝒩 位置是 100% 取胜,在 𝒫 位置也有 72%——因为随机后手会「送分」(把本已必败的局面走成必胜)。这组数据是「判据 vs 运气」的定量说明。
② 随机初始局面的先手胜率 vs「异或非零」比例 「异或非零」比例 = 17529/20000 = 0.8764 最优先手对随机后手的胜率 = 19848/20000 = 0.9924 差值 = +0.1159(随机后手会送分)
③ 石头剪刀布 精确值 v* = -0.000000;行玩家最优组合 = 0.3333, 0.3333, 0.3333 MWU 平均策略(行)= [0.3357, 0.3256, 0.3387] (旧版数据) ③ 偏置 3x3 矩阵 精确值 v* = 1.200000;行玩家最优组合 = 0.4000, 0.6000, 0.0000 MWU 平均策略(行)= [0.3995, 0.6001, 0.0004] MWU 平均策略(列)= [0.3968, 0.6022, 0.0010] MWU 平均对局值 = 1.208650 (与精确值之差 = +0.0086)
读法。在石头上 MWU 收敛到均匀混合 (1/3, 1/3, 1/3)(值 0);在偏置矩阵上收敛到 (0.4, 0.6, 0)——与精确解逐位吻合,平均对局值 1.2087 与精确值 1.2 差 0.0086。两个只会「用乘法更新权重」的玩家,在没有任何中央调控的情况下,靠对打就逼近了均衡——这正是第六章「学习 = 逼近均衡」的数值证据(乘法权重法)。
④ MCTS(UCB1)在 2 堆 Nim 上选招:命中「回零走法」比例
测试局面:[(1,2),(3,4,5),(2,3),(5,6),(4,4,4)](每个重复 20 次)
playouts = 200:命中率 = 35/100 = 0.350
playouts = 1000:命中率 = 27/100 = 0.270
playouts = 5000:命中率 = 39/100 = 0.390
结构化解法(Bouton 判据):命中率 = 1.000这一段是全实验最值得琢磨的。MCTS 是 AlphaGo 的核心思想之一(随机模拟 + 统计选择),但在 Nim 上,它的命中率始终不超过 40%,而且不随 playout 数单调上升——因为 Nim 的胜负对「差之毫厘」的走法极其敏感,随机 playout 给出的信号几乎是噪声。而 Bouton 的异或判据一次计算就命中 100%。这组对比精确地说明了本书的一个主题:「通用搜索」与「结构化解法」是两条不同的路——前者广,后者深;前者能处理未知领域(如围棋),后者能一击致命(如 Nim)。真正成熟的数学素养,是知道何时用哪一种。
复算建议。① 把 ④ 的 playouts 提到 50000,看命中率是否终于上升;② 给 MCTS 的 playout 换成「偏好少石子」的启发式,重跑看变化;③ 把 ③ 的迭代 T 从 20000 降到 2000,观察误差如何变大(应约为 4 倍);④ 在 ④ 中加入 Wythoff 局面,比较两种游戏上 MCTS 的表现差别。
★★★★ 跨章挑战:五个命题。每题都要求写清「陈述 → 证明路线 → 与哪一章相连」。它们没有标准答案,但有标准错误(混淆概念、跳步、把「存在」当「构造」)。
命题一(一 ↦ 二)。把 Sprague–Grundy 定理与 Conway 的超现实数接起来:说明公平博弈的 Grundy 值对应的正是超现实数体系中的 nimber(∗0 = 0, ∗1 = {0|0}, ∗2 = {0,∗1 | 0,∗1}, …),并说明为什么 ∗n 是「非数的游戏」(每个 ∗n 都有 ∗n ‖ 0,即与 0 不可比)。要求:写出 ∗2 + ∗3 = ∗1 的验证,并解释它与「异或」的关系。
命题二(三 ↦ 一)。用置换奇偶性证明 15-拼图的「一半局面不可达」,并逐条对照第一章的论证结构:① 找不变量(奇偶性 ↔ 异或);② 证明不变量在合法操作下「按已知方式变化」;③ 由不变量的取值得出可达性结论。要求:指出两个论证在「不变量是『守恒』还是『按规则翻转』」上的差别。
命题三(四 ↦ 五)。把「赌博系统不可能」(鞅定理,第四章)与「Post 对应问题不可判定」(第五章)并列,说明两者都属于不可能性定理,并且都依赖一条关于「可预测性」的断言:前者说「没有任何基于过去的策略能改变期望」,后者说「没有任何算法能判定所有骨牌匹配」。要求:给出两条定理的精确陈述,并指出它们的「不可能性」在方法论上如何不同(一条是概率性的,一条是计算性的)。
命题四(三 ↦ 六)。Hex 的「不可能平局」(第三章)与 Nash 均衡的存在性(第六章)有什么关系?提示:Hex 无平局保证「胜负二分」,从而策略偷取可以证明先手必胜;而 Nash 的证明用的是「最佳反应对应的不动点」。要求:说明「无平局」与「不动点」在数学上各自解决什么问题,并解释为什么 Hex 的证明不能直接推广到一般博弈。
命题五(全册)。写一篇 1500 字的短文,论证或反驳:「游戏性是数学最重要的特质」。要求至少引用:Hilbert 的形式主义、Wittgenstein 的语言游戏、Conway 的构造、Gale–Stewart 的无限对局、以及本书中任一具体的定理作为证据;并回应一个可能的反驳(例如「游戏只是类比,数学的本质是真理」)。评分要点:论证的连贯性 > 结论的方向。
评分参考(自评用)。① 概念陈述精确(用了正确的定义与量词);② 证明路线完整(能指出每一步依赖哪条已证的引理);③ 跨章联结具体(不是「两章都讲了游戏」这种空话,而是「A 的结论是 B 的前提」);④ 承认边界(哪些地方只是类比、哪些是严格推理)。四条都做到,说明已经把六章变成了一个整体。
★★★★ 综合习题:六道跨章大题。每题约需 30–60 分钟。建议先独立完成,再对照 p200 的评讲要点。
一. Nim 家族的统一处理。考虑「每次可取 k 个 2 的幂次」的取子游戏(1, 2, 4, 8, …)。(a) 用递推算出 𝒢(0..12) 并猜测公式;(b) 证明公式;(c) 把这个游戏与 Nim 的「和」组合(例如 ∗1 + ∗2),判定谁赢并给出走法。提示:把 n 写成三进制可能有帮助。
二. 超现实数的具体计算。(a) 按定义验证 {1 | } = 2、{−1 | 1} = 0;(b) 计算 ½ + ¼ 并给出完整的定义展开;(c) 说明为什么 {0 | 0} 不是数(用「数的判据」逐条检查)。
三. 七桥的推广与算法。(a) 陈述并证明 Euler 的一笔画定理;(b) 给出一个图,它恰有 4 个奇度顶点——最少需要几笔才能画完?说明理由;(c) 用 Hierholzer 算法写出求欧拉回路的步骤,并在一个具体图上手工执行。
四. 赌局的完整分析(作赌场方)。某赌局:掷一枚均匀硬币两次,出现两个正面赢 3 元,出现一正一反输 1 元,两个反面输 2 元。(a) 计算期望与方差;(b) 若赌场每局收 0.2 元台费,赌客的期望收益是多少?(c) 若赌客用「输了加倍」的策略(本金 63 元、赌注上限 8 元),模拟或计算他的破产概率,并说明鞅定理如何解释结果。
五. Banach–Mazur 游戏的完整论证。(a) 精确陈述这个游戏(玩家在递减的开区间序列里选择);(b) 证明「若集合 A 是 meager(第一纲),则玩家 II 有必胜策略」;(c) 说明这个游戏如何给出「Baire 性质」的一个游戏论刻画,以及它与 Gale–Stewart 决定性定理的关系。
六. 一个完整的机制设计小题目。某拍卖:两位投标人,估值分别是 v1, v2(各自私有)。设计一个「成交时按第二高出价付款」的规则(Vickrey),(a) 证明「如实出价」是占优策略;(b) 计算卖方收入的期望(假设估值独立均匀分布在 [0,1]);(c) 与「按第一高出价付款」比较,说明为什么信息与规则决定了收入。
答题规范(跨章大题尤其重要)。① 先写「设什么、求什么」;② 每一步引用已证的定理或已定义的对象;③ 若涉及数值,给出可复算的算式(可写脚本);④ 最后写一句「这个结论与第几章的哪个结论是同一个动作」。第 ④ 条是本书的独特要求——它检验是否真的把六章看成了一个整体。
★★ 评讲:二十四问(自我检测)。前十六问是「概念核对」(能一句话答出即合格),后八问是「联结与判断」(需要两三句话)。答案要点在每题后的括号里,自己答再看。
概念核对(一至十六)。
① Nim 的胜负判据是什么?(异或为零者必败。)② 逆推三律是哪三条?(终局 𝒫;能到 𝒫 者为 𝒩;后继全 𝒩 者为 𝒫。)③ Grundy 值的定义用了哪个运算?(mex:最小缺席非负整数。)④ Sprague–Grundy 定理的两条判据?(值为 0 ⟺ 𝒫 位置;和的值 = 值的异或。)⑤ Chomp 的策略偷取给出了什么、没给出什么?(给出「先手必胜」的存在性;没给出必胜走法。)⑥ Wythoff 的 𝒫 位置与哪个常数有关?(黄金比 φ;(⌊nφ⌋, ⌊nφ2⌋)。)⑦ 超现实数中 {0 | 1} 是什么?(½。)⑧ 「生日」是用来做什么的?(良基归纳的度量;每一天用前一天造出的数「夹」出新数。)⑨ ∗ = {0|0} 是数吗?(不是;它与 0 不可比,∗ ‖ 0。)⑩ 折纸比尺规强在哪?(能解三次方程,故可三等分角、倍立方。)⑪ Euler 一笔画的判据?(连通且奇度顶点数为 0(回路)或 2(路径)。)⑫ 15-拼图的不可解性用了什么不变量?(置换的奇偶性/逆序数。)⑬ 赌徒为何必败(公平赌局下)?(鞅定理:任何基于历史的策略都不能改变期望;破产概率 = 1。)⑭ Pólya 定理说什么?(1、2 维简单随机游走必返回;3 维及以上不返回。)⑮ Gale–Stewart 定理说什么?(开集的无限对局是可决定的。)⑯ IP = PSPACE 的「游戏」含义?(证明者与验证者交互;凡能被交互说服的都能被多项式空间证明。)
联结与判断(十七至二十四)。
⑰ 为什么「公平」这个假设让第一章的结论如此干净?(因为公平博弈的等价类恰由非负整数刻画,加法就是异或——一旦左右走法不同,就要用超现实数(第二章)。)
⑱ 「局面 = 数」这句话在第一章和第二章里的含义有何不同?(第一章:把局面折算成一个数(Grundy 值),数是工具;第二章:把数定义成局面({L|R}),数是产物。)
⑲ 为什么说「存在必胜策略」与「知道必胜策略」是两件事?(Chomp:策略偷取只证存在;构造需要知道 𝒫 位置的结构,而这至今未知。)
⑳ 拿破仑定理、Hex 无平局、Nash 均衡——三者共同的数学动作是什么?(都是「存在性定理」:用拓扑/不动点/对偶论证保证某物存在,而不构造它。)
㉑ 把赌博与不可判定性并列,它们共同反驳了什么?(共同反驳了「只要够聪明就能找到必胜/判定方法」的直觉:一条说概率上不可能,一条说计算上不可能。)
㉒ 为什么 MCTS 在围棋上成功而在 Nim 上失败?(围棋的局面评估有「局部性」与「平滑性」,随机 playout 能给出有用信号;Nim 的胜负由全局异或决定,随机 playout 近乎噪声——所以需要结构化解法。)
㉓ 本册的口号「游戏性是数学最重要的特质」,与「数学是真理的科学」冲突吗?(不冲突:游戏必须诚实遵守规则,而「诚实遵守规则」正是证明的含义;Hilbert 的形式主义让两者合一。)
㉔ 如果只能带走一个结论,会带走哪一个?为什么?(开放题。参考:任何「找不变量把问题压缩成算术」的成功,都是本册的回声。)
自评标准。①–⑯ 全对:已掌握全册概念。⑰–㉓ 能说出要点:已建立跨章联结。㉔ 有独到回答:已开始用自己的语言重述数学。
★★ 小结:全册的十二个核心命题。
一(第一章)。Bouton 定理:Nim 中异或为零者必败。意义:胜负判据可以是一条位运算。
二(第一章)。Sprague–Grundy 定理:任何有限无平局的公平博弈都等价于一堆 Nim 石子;和的值 = 值的异或。意义:一切公平博弈都被一个数刻画。
三(第一章)。博弈的等价类构成交换群(nimber ≅ ⨁ℤ2)。意义:分类问题被彻底解决。
四(第二章)。数即游戏:{L | R} 在「左小右大」时是一个数;0 = { | }、1 = {0 | }、½ = {0 | 1}。意义:数的合法性来自构造,而非直观。
五(第二章)。生日归纳与实数嵌入:全部实数(乃至超限序数与无穷小)都在某个生日被造出;超现实数构成全序域。意义:算术成为博弈论的一个特例。
六(第三章)。Euler 一笔画判据:连通图有欧拉回路 ⟺ 全偶度;有欧拉路径 ⟺ 恰两奇度。意义:一个消遣问题生出图论。
七(第三章)。置换奇偶性决定 15-拼图的可解性与魔方群的结构;God’s Number = 20。意义:不变量把「穷举不可能」变成「定理」。
八(第三章)。Hex 不可能平局(拓扑)+ 策略偷取 ⟹ 先手必胜。意义:几何的对偶性给出存在性。
九(第四章)。鞅定理:公平赌局中任何赌博系统都不能改变期望;赌徒破产概率为 1。意义:「赢不了」是一条定理。
十(第四章)。Pólya 回归定理:1、2 维随机游走必返、3 维不返;混合策略给出零和博弈的最优玩法。意义:随机性有自己的结构。
十一(第五章)。Gale–Stewart 定理(开集决定性)与 AD/AC 的冲突;EF 博弈刻画同构;PCP 不可判定、数独 NP-完全。意义:无限与计算把游戏带到了数学的地基。
十二(第六章)。minimax 与 Nash 均衡存在性(不动点定理);机制设计;IP = PSPACE 与零知识证明。意义:博弈成为定义、证明与算法的通用语言。
把十二个命题折叠成一句话。数学对象的意义来自它在「规则」下的行为——一旦说清了规则、对局与胜负,问题就变成了结构问题;而结构一旦被找到,困难的问题就会露出简单的脸。这是本书希望留下的思维方式。
★★★ 小结:从学习到研究。
四条可以立刻开始的路(每条都通向活跃的研究领域)。
路一:组合博弈论的现代形态。读 Siegel《Combinatorial Game Theory》与 Albert–Nowakowski–Wolfe 的「公平博弈值的周期与算术」;研究题目:某些「切分型」游戏(如 Dawson's Kayles、Domineering)的 Grundy 数列周期性——已知结果多,未解决的猜想更多(例如泛化的「Guy–Smith 定理」适用范围的边界)。
路二:超现实数与有序域的算术。读 Conway《On Numbers and Games》、Gonshor《An Introduction to the Theory of Surreal Numbers》;研究题目:超现实数的「数论」(如 ω 上的整除性、序数算术与超现实整数的一致性)——这是与现代集合论、模型论交汇的方向。
路三:描述集合论与决定性。读 Kechris《Classical Descriptive Set Theory》、Jech《Set Theory》;研究题目:投影层级的决定性与大基数假设的精确对应(Woodin、Martin–Steel 的工作)——这是当代公理集合论的中心问题之一。
路四:计算博弈论与博弈学习。读 Roughgarden《Twenty Lectures on Algorithmic Game Theory》、Nisan 等《Algorithmic Game Theory》;研究题目:Nash 均衡的 PPAD-完全性(Daskalakis–Goldberg–Papadimitriou)与「无 regret 学习」的收敛速度——这是算法、经济学与机器学习交汇的热点。
做研究的三个具体建议。① 从「小而具体」入手:不要一开始就挑战一般定理,先算一个具体游戏的 Grundy 数列、先证一个小型博弈的均衡——本书的每个定理在历史上都始于一个具体例子。② 先写程序再写证明:本书的实验页示范了这一点——用蛮力逆推验证猜想,再去证明;数值会说明哪些猜想值得证。③ 保留问题清单:把「我想不通的地方」写下来(例如:为什么 Chomp 的 𝒫 位置至今无人刻画?为什么 ∗ 与任何数都不可比却有明确的大小关系,如 ↑ > 0?)。好问题比好答案更宝贵。
一道「可做」的研究小题目(推荐作为起点)。取「每次可取 1 或 2 个,但不能连取两次 1」的一堆取子游戏,用递推程序算它的 Grundy 数列 𝒢(0..40),观察它是否周期化;若周期化,找出周期与预周期,并尝试证明(可用 Guy–Smith 定理或直接归纳)。这道题在半小时内可以得到数值结果,在一两天内可以尝试证明——它是最好的「从学习到研究」的练习题。
最后一句。本书的六个章节、两百余页、八个实验,归结为一句话:数学是一场自由的游戏——自由地定规则,然后诚实地遵守它,并在规则不够用时勇敢地改写它。愿在自己的棋盘上,玩得长久,玩得漂亮。
★ 速查:全册公式总表。
一、组合博弈(第一、二章)。a ⊕ a = 0;a ⊕ b = c ⟹ a = b ⊕ c;Bouton:a1 ⊕ ⋯ ⊕ an = 0 ⟺ 𝒫 位置;Grundy:𝒢(G) = mex{𝒢(G′)};SG 定理:𝒢(G + H) = 𝒢(G) ⊕ 𝒢(H);G ≡ H ⟺ 𝒢(G) = 𝒢(H) ⟺ G+H 是 𝒫 位置;Wythoff:𝒫 位置 = (⌊nφ⌋, ⌊nφ2⌋),φ = (1+√5)/2;Beatty:⌊nα⌋ 与 ⌊nβ⌋ 互补 ⟺ 1/α + 1/β = 1。超现实数:0 = { | }, 1 = {0 | }, −1 = { | 0}, ½ = {0 | 1}, ω = {0,1,2,… | };∗ = {0|0},↑ = {0|∗};∗n ⊕ ∗m = ∗(n ⊕ m)。
二、几何游戏(第三章)。折纸公理 O1–O7(Huzita–Hatori);Euler 判据:连通图有欧拉回路 ⟺ 无奇度顶点;有欧拉路径 ⟺ 恰两个奇度顶点;置换:sign(σ) = (−1)逆序数;15-拼图可解 ⟺ 「奇偶性 + 空格行奇偶性」满足判据;魔方群阶 = 43 252 003 274 489 856 000 = 8!·37·12!·210/2;God’s Number = 20;铺砌的染色论证(黑白染色、权函数);Hex 无平局(拓扑),策略偷取 ⟹ 先手必胜。
三、概率与策略(第四章)。𝔼[X] = Σ xipi;𝔼[aX + bY] = a𝔼[X] + b𝔼[Y];大数律:X̄n → μ;赌博破产概率(公平赌局)= 1;鞅:𝔼[Mn+1 | Mn,…] = Mn;OST(有界停时):𝔼[Mτ] = 𝔼[M0];Pólya:p1 = p2 = 1,p3 = 1 − 1/u3 ≈ 0.34;Kuhn 扑克的均衡混合概率;Monte Carlo 误差 O(1/√n)。
四、逻辑与无限(第五章)。无限对局 GA 与决定性;Gale–Stewart:开集 A ⟹ GA 决定;AD:所有 A 上的无限对局都可决定(与 AC 不相容);Banach–Mazur:II 有必胜策略 ⟺ A 是 meager;EF 博弈:Duplicator 的 n 轮必胜 ⟺ 量词秩 ≤ n 的语句不可区分;PCP 不可判定;数独/扫雷 NP-完全。
五、现代前沿(第六章)。minimax:v = maxx miny xTAy = miny maxx xTAy;Nash:每个有限博弈有混合均衡;Vickrey:如实出价是占优策略,期望收入 = 𝔼[第二高出价];MWU:后悔界 O(√(T ln n)),η = √(8 ln n / T);IP = PSPACE;零知识(完备 · 可靠 · 零知识)。
六、实验真跑数值(本册存证)。p36:Nim 710 局面零例外、Wythoff 496 局面零例外、Kayles g(0..24)、Chomp 除 1×1 外全先手胜;p66:超现实数有限 Day 构造;p96:置换奇偶性与魔方阶;p126:Monte Carlo 与鞅模拟;p156:生命游戏与 EF 博弈;p186:replicator 与 MWU;p196:六游戏 Grundy 表 + 397 组合零例外 + 唯一回零走法;p197:随机后手 𝒫 位置 0/2000、MWU 值误差 0.0086、MCTS 命中率 < 40%。
★★★★ 游戏作为一种数学哲学。二十世纪的数学哲学有四场大辩论,而它们都可以从「游戏」的角度重新讲述(见上图)。
形式主义(Hilbert)的洞见是:数学的严谨性来自「规则的明确」,而不必来自「对象的直观」。这个立场把数学变成了一场可以完全形式化的游戏——代价是它一度看起来失去了「意义」。但:Hilbert 从未说数学无意义,他说的是意义依赖于规则,而不先于规则。
直觉主义(Brouwer)站在这条线的对面:数学是心智的构造活动,「存在」意味着「被构造出来」。这场争论在本书里有它最具体的形态——Chomp 的先手必胜是「存在」但不「构造」的(p22),而 Brouwer 会拒绝把这样的结论当作「真正的数学」。同一场争论在第五章以「决定性与选择公理」的形式再次出现:选择哪个数学宇宙,取决于允许哪些存在性工具。
Wittgenstein 的语言游戏给出第三种视角:数学符号的意义由它在具体活动中的用法决定。于是「2 + 2 = 4」为真不是因为它描述了一个柏拉图对象,而是因为我们同意这样玩。这一视角的吸引力在于它能解释数学的可修正性(历史上数学确实改过规则:从无穷小到极限、从素朴集合论到 ZFC);它的风险是滑向「数学只是约定」的相对主义——而 Hilbert 派的回答是:约定的力量在于它产生的丰富结构,而不在于它的任意。
Conway 的构造主义是本书最欣赏的第四条路:数学对象由「构造规则」授权,「不矛盾即可存在」。他用 {L | R} 造出全部实数乃至超限数,用「游戏」统一了「博弈」与「算术」。这条路的美在于它把一个哲学主张变成了一个可操作的数学方法。
本册的立场(一句话)。我们不必在四派之间选边,但必须承认一件事:游戏性不是数学的隐喻,而是数学的发生方式。数学史上每一次重大进展都伴随着「新规则的自由设定」与「旧规则的严格遵守」的交替——规则给出严谨,自由给出创造,两者同为数学的生命线。这就是本书把「自由精神的回归」放在副标题里的理由。
★★★★ 余韵(二):游戏、机器与学习。
一台会下棋的机器意味着什么?一九九七年 Deep Blue 击败 Kasparov,二〇一六年 AlphaGo 击败李世石,二〇一七年 AlphaZero 从零自学同时掌握国际象棋、将棋与围棋。这些事件常被读作「机器变强了」,但从数学的角度看,它们更有意思的地方是:棋类游戏成了一个可测量的标尺——它把「搜索树有多大」「评估函数有多好」「学习需要多少样本」这些抽象问题变成了可以观测的数字。
AlphaZero 的核心思想其实本书都讲过。① 自我对弈(第六章):用「自己和自己下」生成训练数据,这正是博弈论「均衡 = 互相最优反应」的算法化;② 蒙特卡洛树搜索(p197 的实验):用随机 playout 估计局面价值——本册实验已经展示了它在 Nim 上的局限与在围棋上的威力;③ 策略与价值网络:把「该走哪一步」与「局面值多少」分成两个学习目标,前者就是本书的「策略」,后者就是本书的「值」(Grundy 值、期望值);④ 乘法权重与无 regret 学习(第六章):AlphaZero 的搜索过程在数学上可被理解为在线学习的一种形式。
机器也回到数学里来了。Lean 与 Mathlib 让形式化证明成为可机器校验的对象:一个定理被写成一串符合规则的符号操作(正是 Hilbert 的「符号游戏」),机器裁判判定它是否合法。人类数学家的直觉仍然不可或缺(选择什么定理、用什么策略),但「判胜负」这件事已经交给了机器。数学的游戏性在此获得了最字面的实现:规则清楚、裁判客观、胜负可查。
给学习者的一句话。不要问「学这个有什么用」——本书的每一个游戏都曾被认为毫无用处:Nim(1901)当时只是消遣,七桥(1736)是一封周末信件,生命游戏(1970)是杂志专栏。它们后来分别长成了组合博弈论、图论与元胞自动机。数学的自由精神就在于:允许为一个游戏本身而玩它,并相信好玩的东西终将在某处长出用处。(如果这句听起来像信心而非论证,那正是本书想让带走的态度——因为数学史站在它这一边。)
全书的最后一段。从一根石子的游戏到超现实数,从折纸到魔方群,从赌桌到鞅,从无限对局到决定性与不可判定,从 minimax 到自我对弈——两千年里,数学家们做的事可以用一句话概括:他们把游戏玩到底了。玩到规则不够用时,他们改规则;玩到棋盘不够大时,他们画新棋盘;玩到某个局面无人能判定时,他们造出一门新学问。这就是数学的自由。现在,轮到了。
本册结束语:游戏是数学的原初形态,也是它永恒的动力——规则、对局、策略、终局,四件事构成了数学最内核的运作方式。愿在自己的棋盘上,玩得长久,玩得漂亮。— 九章格数学 · 《数学游戏与谜题》