7.2 掉落的判定(延迟选择与历史一致性)
(Loot Roll - Delayed Choice and Historical Consistency)
“历史不是写死在硬盘里的只读文件,而是根据你现在的查询请求,动态生成的日志(Log)。不是过去决定了现在,而是当你查看掉落列表的那一刻,系统才逆向生成了BOSS的掉落历史。”
在 7.1 节里,我们说测量就是实例化。这立刻引出了一个逻辑问题:如果你现在才决定这只猫是死是活,那它过去一小时是死是活?我们是不是改变了过去?
本节将通过延迟选择实验,论证艾泽拉斯代码中最疯狂的历史观:历史是基于查询生成的。 我们将证明,过去并非客观存在,而是系统为了配合现在的剧情,现场编出来的一段日志。
7.2.1 既定历史的幻觉
直觉告诉我们:
- 过去已经发生,且是唯一的。
- 无论我们看不看,过去都不会变。
但惠勒延迟选择实验打碎了这个幻觉。 设想一个光子从几十亿光年外飞过来。它面临两个选择:走左边,或者走右边。
- 如果在地球上我们决定测它的路径(粒子性),我们就强迫它在几十亿年前走了某一条路。
- 如果在地球上我们决定测它的干涉(波动性),我们就强迫它在几十亿年前同时走了两条路。
关键点:我们在地球上的决定(现在),决定了光子在几十亿年前(过去)的行为。
计算解释: 若系统要存储光子几十亿年的每一秒的轨迹,那太浪费硬盘了。 在我们的模型里,系统从未存储中间过程的轨迹。
- 中间态:光子以**类(Class)**的形式传播,不占坐标内存。
- 终态:当且仅当光子撞击你在地球上的探测器时,系统才执行实例化。
7.2.2 动态日志生成算法
在计算机科学中,这叫懒加载日志(Lazy Logging)。
定义 7.2.1(动态历史)
物理对象的历史轨迹 不是静态数组,而是一个函数。
这就像游戏里的过程生成(Procedural Generation)。 你玩过那种无限地图的游戏吗?当你回头看身后的路时,游戏引擎才根据当前的坐标种子,生成身后的地形。只要生成的路和你脚下的路能接上,你就无法分辨这是“原本就在那”还是“刚刚生成”的。

惠勒用**“巨龙”**来比喻:
- 龙尾(光源):确定的。
- 龙头(探测器):确定的。
- 龙身(中间过程):是一团概率的烟雾。系统根本没算龙身怎么飞的,直到龙头咬住那一刻,系统才随便画了一条线连起来。
7.2.3 量子擦除:数据库的回滚
量子擦除实验展示了系统对历史的编辑权限。

我们可以先测量光子的路径,然后在光子到达屏幕之后,决定是否**“擦除”**这个信息。
- 如果保留信息:没干涉(粒子)。
- 如果擦除信息:干涉恢复了(波)。
这在物理上看似时间倒流,但在计算上,这是标准的数据库事务(Transaction)。
- 预写日志:系统在缓存里记录了“路径标记”。此时,历史处于Pending状态。
- 回滚(Rollback):如果我们执行擦除,相当于发送
ABORT指令。系统删除了缓存标记,光子回退到叠加态,重新渲染干涉条纹。 - 提交(Commit):如果我们读取了信息,相当于发送
COMMIT指令。历史被锁定,永远写入只读存储。
定理 7.2.1(历史易变性定理)
在信息扩散到全服之前,历史只是内存里的脏数据(Dirty Data),随时可以被重写。
7.2.4 为什么不能复活凯撒?
既然历史是生成的,为什么我们不能通过“延迟选择”让凯撒大帝没死? 因为有一致性检查(Consistency Check)。
生成历史必须满足边界条件:逻辑必须自洽。
- 宏观历史(硬):凯撒之死已经被无数的观察者(人、空气、光子)无数次
COMMIT了。它的纠缠网络锁死了全服。要回滚它,需要全服回档,这需要管理员权限。 - 微观历史(软):实验室里的光子,只和你纠缠。系统可以轻易重写它的历史,反正没人知道。
因此,我们拥有改变微观历史的神力,但被宏观历史的惯性所囚禁。
7.2.5 总结:为了剧情而生成的历史
本节证明了:因果关系在计算层面上是双向的。
- 物理层(前向):过去决定未来。
- 计算层(逆向):现在的观测,筛选并实例化了符合条件的过去。
我们并非生活在一条单行道上。我们生活在一个即时演算的舞台上。剧本(历史)是为了配合演员(我们)当前的表演而实时生成的。
过去之所以看起来是确定的,是因为系统为了维持逻辑自洽,极其完美地填补了所有的剧情漏洞。