"""Section 23: on U_corr (inside the maximal unipotent of SO_{2m+1}, m=2n) the function Lambda_c = sum g_{i,i+2} - a sum g_{2j,2j+1} + g_{m-1,-m} + (c/2) a is additive (n=2, symbolic c), and on U_alt the linear form sum g_{i,i+2} + g_{m-1,-m} + (c/2) g_{m-1,m} is additive.""" import sympy as sp n=2; m=2*n; N=2*m+1 E_=lambda i:i-1; F_=lambda i:m+i-1; U=2*m def Em(a,b): M=sp.zeros(N,N); M[a,b]=1; return M def rv(i,j,kind): if kind=='-': return Em(E_(i),E_(j))-Em(F_(j),F_(i)) if kind=='+': return Em(E_(i),F_(j))-Em(E_(j),F_(i)) return 2*Em(E_(i),U)-Em(U,F_(i)) def expm(X): out=sp.eye(N); P=sp.eye(N); k=1 while True: P=P*X/k; k+=1 if P==sp.zeros(N,N): break out+=P return out c=sp.Symbol('c') def generic(tag,kind): a=sp.Symbol('a'+tag); g=sp.eye(N); cnt=0 if kind=='corr': for j in range(1,n+1): g=g*expm(a*rv(2*j-1,2*j,'-')) for i in range(1,m+1): for j in range(i+1,m+1): tied=(j==i+1 and i%2==1) if kind=='corr' and tied: pass else: if not (kind=='alt' and j==i+1 and i%2==0): cnt+=1; g=g*expm(sp.Symbol(f't{tag}{cnt}')*rv(i,j,'-')) cnt+=1; g=g*expm(sp.Symbol(f't{tag}{cnt}')*rv(i,j,'+')) if i!=m: cnt+=1; g=g*expm(sp.Symbol(f't{tag}{cnt}')*rv(i,None,'s')) return g.applyfunc(sp.expand) def Lam(g): a=g[E_(1),E_(2)] return sum(g[E_(i),E_(i+2)] for i in range(1,m-1))-a*sum(g[E_(2*j),E_(2*j+1)] for j in range(1,n))+g[E_(m-1),F_(m)]+c/2*a def Lalt(g): return sum(g[E_(i),E_(i+2)] for i in range(1,m-1))+g[E_(m-1),F_(m)]+c/2*g[E_(m-1),E_(m)] g1=generic('x','corr'); g2=generic('y','corr'); p=(g1*g2).applyfunc(sp.expand) tied=all(sp.expand(p[E_(2*j-1),E_(2*j)]-p[E_(1),E_(2)])==0 for j in range(1,n+1)) and p[E_(m),U]==0 print('U_corr closed under products:',tied,' Lambda_c additive:',sp.expand(Lam(p)-Lam(g1)-Lam(g2))==0) h1=generic('x','alt'); h2=generic('y','alt'); p=(h1*h2).applyfunc(sp.expand) ok=all(p[E_(2*j),E_(2*j+1)]==0 for j in range(1,n)) and p[E_(m),U]==0 print('U_alt closed under products:',ok,' its character additive:',sp.expand(Lalt(p)-Lalt(h1)-Lalt(h2))==0)