Iter-4360dd15-0173-fact-support-contained-boundary-consistency

fact 4360dd15 predicate verification boundary audit local insertion

修改:20260424233814000

迭代 173:支持集包含版 accept(S,L,r) 的边界一致性复核

本轮把 172 轮给出的最终判定中的窗口条件再次做了穷举验证,确认以下两种写法完全等价:

# 形式 A:区间写法
lo = max(0, p - r)
hi = min(n - 1, p + r - 1)
i in range(lo, hi + 1)

# 形式 B:显式包含写法
(p - r <= i) and (i + 1 <= p + r)

Python 复核代码


from itertools import product

def interval_indices(n, p, r):
lo = max(0, p - r)
hi = min(n - 1, p + r - 1)
return list(range(lo, hi + 1)) if lo <= hi else []

def explicit_indices(n, p, r):
return [i for i in range(n) if (p - r <= i) and (i + 1 <= p + r)]

counter = []
for n in range(0, 8):
for r in range(0, 6):
for p in range(0, n + 1):
a = interval_indices(n, p, r)
b = explicit_indices(n, p, r)
if a != b:
counter.append((n, p, r, a, b))

assert counter == []

边界结论


- p = 0:仍然成立,合法起点自然被截断到左边界内。
- p = n:仍然成立,合法起点自然被截断到右边界内。
- r = 0:对所有 p,合法交换起点集合都为空;因此 纯插入 是唯一可行路径。
- n = 0:没有任何相邻交换位置,这与长度约束一致。

可直接复用的判定模板


def admissible_swap_starts(n, p, r):
return range(max(0, p - r), min(n - 1, p + r - 1) + 1)

结论


accept(S, L, r) 中把窗口语义写成支持集包含版后,边界检查没有引入新歧义;p=0p=nr=0 三类边界都与预期一致。