Skip to content

从学习路线进入任务。下载标准库核验器,运行

text
python foundation-termination-certificates-check.py
python -O foundation-termination-certificates-check.py

两个命令只向stdout输出同一份JSON,检查不依赖assert。要交的不是“这次运行结束了”,而是能说明全部允许执行为何结束的下降证书;有限运行和错误实例用于检验实现。

一、任务增加了,仍然必须终止 ​

工作池初始两份任务分别为(ID0,大小3)、(ID1,大小1)。规则固定:处理n>0时,删除该出现,创建n+1份大小n−1的新任务;处理0时只删除。ID仅用于区分出现,不参与大小比较。

先不运行程序,用多重集终止序逐项说明任意选择都满足下降。若选n>0,删除bag X={n},新增bag Y含n+1份n−1,每个新增值都严格小于同一份n;n=0时Y为空。处理单步还须有限结束,不能插入一个不改任务池的永久等待。

执行最大任务优先、相同大小选较早ID。第一步应选ID0,生成ID2至ID5四份2,留下ID1的一份1。取消公共出现后的证书为

text
Z = [1]
X = [3]
Y = [2,2,2,2]
最大差异 = 3,旧计数更多

任务数由2增至5,总大小由4增至9。解释为什么两项增加都不违反这份证书,以及为什么从四个新增出现到唯一删除出现不可能要求单射。

JSON的task_pool.largest和task_pool.smallest给出完整出现ID、每步新增子任务及剩余池。两条轨迹都应44步,但峰值分别为26和7。独立算T(0)=1、T(n)=1+(n+1)T(n−1),得T(3)+T(1)=41+3=44;这才核实步数,没有把良基性误当成精确成本公式。

迁移:改用规则1→{1,0},其他规则不动。比较旧{1}和新{1,0},取消公共1后X为空,第一份证书即失败。不断选择新保留下来的1可产生无限运行。再恢复原规则、只换调度,不应改变44步,却可能改变峰值。这两种修改分别触及终止条件与调度空间。

二、把轮换的下降参数接回自己 ​

程序f(x,y)在x=0时返回y,否则调用f(y,x−1),参数为数学自然数。先核guard与两个真实大小事实:新y严格小于旧x,新x等于旧y。矩阵行是调用前(x,y),列是调用后(x′,y′),数字标签0=无保证、1=W、2=S。

输入矩阵为

text
G = [0,2,
     1,0]

按大小变化合成算G²、G³、G⁴,结果为

text
G² = [2,0,      G³ = [0,2,      G⁴ = G²
      0,2]           2,0]

完整非空路径闭包只有三张图。只有G²幂等,两个对角线都为2,因此通过。JSON的swap.certificate提供原始图、两个父引用、幂等列表和空bad列表;应重新计算每个父引用,而不是只看passed。

复算具体执行:(2,5)→(5,1)→(1,4)→(4,0)→(0,3),返回3。固定单个x或y都可能上升;跨两步的图却能把下降线程接回原位置。说明为什么G本身没有严格对角线并不导致失败。

三、每张原图都下降,组合仍可失败 ​

现在另看两个可选择调用:x>0时取A:(x,y)→(x−1,y+1),y>0时取B:(x,y)→(x+1,y−1)。可靠摘要为

text
A = [2,0,      B = [0,0,
     0,0]           0,2]

两图各有严格自环,但A;B无边。空矩阵与自身合成仍为空,且没有严格对角线,是失败幂等图。交付其原调用词[0,1],并核(1,1)取A到(0,2),再取B回(1,1),构成真实的无限重复证书。

迁移:单纯把安全循环x>0→x−1的S摘要降为W。现在分析同样失败,却不能据此说原循环发散;它仍有自然数x排名。说明一个失败结果何时附带可执行无限见证,何时只是摘要信息不足。

再试零参数接口。仅f()→g()且g返回时,闭包没有自返图,应通过;加入g()→f()才产生坏0×0幂等图。不要把“零个参数”“没有调用边”和“零次调用恒等关系”混成一个对象。

四、验收闭包完整性,而不仅是已有推导 ​

从第二题三张闭包图中只保留输入G,仍可以说“这张图来源合法”。但这个集合没有对合成封闭,漏掉G²。verify_certificate必须拒绝它。若把已核正确的passed改成false,或让父引用指向未来尚未建立的图,也不能成为有效证书。

进一步构造三个参数的弱图H:各参数都有W自环,另有x→y、y→z的W边,但没有x→z。H不是幂等;H²新增x→z后幂等,仍没有任何S。若错误地因为H较弱便删掉H²,又只检查留下的幂等图,就会漏掉坏证据。主脚本checks.weak_chain_closure保留两图并正确失败。所有参数都取0时可永远重复这条调用,具体边界也能直接验证。

本单元工作队列保留全部不同的有类型图。父引用构成DAG,输出调用词时才展开;图共享所节省的是存储,不表示展开后的长词不花时间。

五、提交内容和保证范围 ​

提交两条44步任务轨迹与峰值、一份取消公共出现的证书、交换图完整闭包、坏空图及原调用词、至少三项结构迁移的判断。所有出现重数、参数位置和过程接口都要保留。

主脚本另检查十一类参数/证书拒绝、空删除证书、tuple/list混合输入及n=0…4的任务递推。工作池预算耗尽会明确报资源上限;不能把它当成程序非终止,也不能返回一个默认终值伪装成功。

两种算法的终止对象不同:多重集序证明每个有限工作池步骤严格下降;SCT证明所有抽象无限调用词必须产生无限下降线程。SCT的结论还依赖源调用图可靠和单次状态转换结束。这里没有解决任意程序停机问题、并发调度公平性或随机程序几乎必然终止。