Skip to content

算法Algorithm

Safra 的 Büchi 确定化

Safra determinization · Safra tree construction

以命名有序树记录非确定Büchi的接受进展,用持续存在且无限变绿的节点构造确定Rabin自动机。

形式陈述 ​

Safra构造把n状态的非确定Büchi自动机 A=(Q,Σ,δ,q0,F) 转成等价的确定Rabin自动机。新状态不是单个可达子集,而是一棵带节点名字、子集标签与绿色标记的有序树。

本页固定名字池{1,…,2n+1}。每棵稳定树满足:标签非空;孩子标签的并严格包含于父标签;同胞标签互不相交;孩子按创建先后从左到右排列。名字在树内唯一,存在期间不变。初态只有名字1的根,标签{q₀},全部白色。

读一个字母a时,严格按下列顺序更新:

  1. 清掉旧绿色。对每个原有节点v,把标签L(v)改成 δ(L(v),a)=⋃q∈L(v)δ(q,a)。
  2. 对每个原有节点,若新标签与F相交,添加一个最年轻孩子,标签为L(v)∩F。新孩子不在本轮递归产生孩子。按固定的原树先序遍历,依次选“本轮开始时未使用、且本轮尚未分配”的最小名字。
  3. 从根向下处理同胞重复:同一状态若出现在多个兄弟标签,只留在最老兄弟;从较年轻兄弟及其全部后代删除它。
  4. 删除标签为空的节点及其子树。若根为空,转入固定的空树拒绝陷阱。
  5. 自底向上检查:若某节点的标签等于其全部孩子标签的并,则把该节点染绿,并删除它的全部后代。最终只保留仍存在节点的绿色。

稳定树至多n个节点,所以步骤2至多增加n个临时节点;2n+1个名字足够。禁止在同一步内复用旧名字,确保某个节点被删后,在本次结果中这个名字确实缺席,而不是立即冒充新节点。

对每个名字i,令Eᵢ为“不含名字i”的树状态,Gᵢ为“名字i存在且为绿”的树状态。输出Rabin条件为

⋁i(Fin(Ei)∧Inf(Gi)).

也就是存在一个名字,最终一直存在,并且无限次变绿。空树缺少全部名字且永不变绿,因此拒绝。

直觉

步骤1在每个节点标签上复用子集构造的后继取并更新;在有限字上,这个集合摘要已经足够,因为读完就能判断终点。Büchi还要证明同一条无限运行反复经过F;每一步“有某个分支刚到F”可能来自互不相接的一批短命分支。

Safra父标签维护候选运行,孩子把已取得一段接受进展的候选分组保存。若孩子们已经覆盖父标签中的全部候选,父节点变绿并清空下层记录,重新开始下一轮进展。绿色是一次完成记录,不是永久接受标志。

同胞去重优先保留较老分组,使候选不能在越来越年轻的组之间无穷逃避。树的深度和节点数有限,再配合稳定名字,才能从反复的局部进展抽出一条真正的无限接受运行。

a后得到根1:{p,f}和孩子2:{f};继续读a时孩子2无限变绿,读b则该孩子消失并由新名字接替。
例子与边界

相同子集序列,却有不同接受结果 ​

取Q={p,f},初态p,F={f},转移为

状态 a后继 b后继
p
f 空

在 aω 和 bω 上,普通子集序列都是{p}、{p,f}、{p,f}、…。前者可进入f后永留f,因而接受;后者每个进入f的分支都会在下一个b死去,唯一能无限继续的p分支从不接受。因此只给子集{p,f}标“包含F”会把两者误判相同。

逐字计算命名与绿色 ​

本例n=2,名字池1到5。用“1:{p,f} / 2:{f}”表示根及其唯一孩子,星号表示本次绿色。

已读输入 稳定树 本轮发生的关键变化
空 1: 无孩子
a 1:{p,f} / 2: 根产生第一个接受孩子
aa 1:{p,f} / 2*: 根新孩子3被老孩子2去重;2的新孩子4覆盖2,2变绿并删4
aaa 1:{p,f} / 2*: 名字2保留,再完成一轮进展
b(独立重置) 1:{p,f} / 2: 与首个a得到同样稳定树
bb 1:{p,f} / 3: 旧2后继为空,被删;新3不能同轮借用2的名字
bbb 1:{p,f} / 2: 旧3被删,名字2隔了一步后才复用

在 aω 上,名字2最终永久存在且无限变绿,Rabin第2对成功。在 bω 上,根1一直存在却从不变绿;孩子2、3反复缺席,也不产生绿色,所以没有成功的接受对。

名字池不是给运行分支永久编号。有限池会复用名字,但Rabin的Fin(Eᵢ)要求在某个后缀以后这个名字再也不缺席,因而排除“无限多个不同短命节点恰好都叫i”的伪证据。

两向正确性靠哪些证据 ​

先设某名字v最终一直存在,并在无限多个时刻变绿。两次相邻绿色之间,v的孩子从接触F的候选开始积累,最终覆盖v的整个当前标签。因此后一绿色时刻标签中的每个候选,都可从前一绿色标签沿输入段走来,途中经过F。

不能随意为每段选一条路径后就假定它们首尾相接。应把这些有限候选路径按共同端点连接成分层、有限分支的选择树。每个足够长层次都有可接续见证,每个有限输入区间只产生有限多个候选片段,各深度的可接续选择形成有限分支的前缀树。它有任意深的节点,由该接口中的 König 引理存在无限链;这条链在每个绿色区间都经过F,所以给原机一条Büchi接受运行。

反过来,跟踪一条原机接受运行q₀q₁…。在每棵Safra树中,选择标签仍包含当前q的最深节点。同胞去重只会把它转交给更老的同胞,新的同胞永远添加在右侧。若它无限返回某个持续存在的节点,每次经过F后又从后代回到该节点,便要求该节点不断进行绿色重置。

若当前层次没有这样的无限返回,经过有限次向老同胞迁移后,跟踪点最终落入更深的一条持续分组。这个分析可逐层重复,但稳定树深度至多n,不能无限下沉。因此总有一个最终不再消失的节点无限变绿。Rabin条件恰好把这两个要求同时记录。

推论与应用

为什么稳定树至多n个节点?父标签严格大于孩子标签之并,所以每个节点可选一个只属于自己、没有落入任何孩子的状态。不同同胞分支互不相交,祖先选的状态也不在后代中,这给树节点到Q的单射。

树形、O(n)个名字的分配、同胞次序与标签可以用 2O(nlog⁡n) 种组合编码:每个原状态只需指定它出现链上的最深节点,祖先标签随之确定。输出有O(n)个Rabin对。不能把每个标签都当成完全独立子集,忽略树的不相交与包含约束后再误报这个标准状态界。

给定一棵树及一个字母,用n位集合直接执行后继、同胞去重与重置,可取O(n³)的保守单步时间、O(n²)位标签存储界。完整确定自动机的显式构造还要乘上可达树状态数及字母表大小,不能把“单步是多项式”当成整体确定化多项式。

确定Rabin自动机随后可转换到奇偶接受,为控制器综合提供确定监控器。本页不加入Piterman紧凑重命名的奇偶优化,也不把本算法与同名的Safra分布式终止检测混为一项协议。

参考资料
关系图谱13 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具

被这些条目使用