"""Proposition 22.5, step 4: from the Siegel-Whittaker coefficient (all positive roots of D_m) to the group of positive degree for D_SW, by removals and exchanges; every hypothesis is checked.""" import sys; import os; sys.path.insert(0,os.path.dirname(os.path.abspath(__file__))) from exchange_checker import State def run(m): n=m//2 def v(*terms): x=[0]*m for s,i in terms: x[i-1]+=s return tuple(x) def is_root(x): nz=[t for t in x if t] return len(nz)==2 and all(abs(t)==1 for t in nz) S=set(); chi=set() for i in range(1,m+1): for j in range(i+1,m+1): S.add(v((1,i),(-1,j))); S.add(v((1,i),(1,j))) for i in range(1,m): chi.add(v((1,i),(-1,i+1))) st=State(S,chi,is_root) for i in range(m-2,1,-1): if i>=n: st.remove(v((1,i+1),(1,i+2)),f'remove at i={i}') for j in range(m,max(i+2,m+2-i)-1,-1): st.exchange(v((1,i),(1,j)),v((-1,i+1),(-1,j)),f'({i},{j})') deg=lambda k:m+2-2*k exp=set() for i in range(1,m+1): for j in range(i+1,m+1): exp.add(v((1,i),(-1,j))) if deg(i)+deg(j)>0: exp.add(v((1,i),(1,j))) if deg(i)+deg(j)<0: exp.add(v((-1,i),(-1,j))) print(f'm={m}: problems={len(st.log)} final = positive degree for D_SW: {st.S==exp}',st.log[:4], 'missing',sorted(exp-st.S)[:3],'extra',sorted(st.S-exp)[:3]) for m in (4,6,8,10,12): run(m)