#read "/home/ph/maple/RC.txt":
#with(RandomTools):
#read "/home/ph/maple/Solv.txt":
writeto(terminal):
interface(echo=1):
RUNONE:=proc(R,B)
## SET UP CONSTANTS HERE
nd:=rowdim(R);
J:=IdentityMatrix(nd):
u=vector(nd,1):
NN:=binomial(nd,2):
J2:=evalm(IdentityMatrix(NN)):
uu:=vector(NN,1):
UJ:=matrix(nd,nd,1):
liecliff(nd):
###
outfile:="/home/ph/maple/FileIn"||nd||".html";
writeto(outfile);print();
writeto(terminal):
interface(echo=1):
mr:=map(convert,matrans(R),decimal,hex);
mb:=map(convert,matrans(B),decimal,hex);
pd:=false:loop:=false:per:=false:
prod1:=`*`(seq((mr[k]-mb[k]),k=1..nd)):
prod2:=`*`(seq((mr[k]-k),k=1..nd)):
prod3:=`*`(seq((k-mb[k]),k=1..nd)):
prod:=prod1*prod2*prod3;
loop:=evalb(prod<>0):
if (not loop) then print("loopcheck",loop): fi;
A:=evalm((R+B)/2):Delta:=evalm((R-B)/2):
AA:=sympow(A,2):
Del2:=sympow(Delta,2):
nsj:=nullspace(evalm(J2-AA)):
per:=evalb(nops(nsj)=0):
print("is irred, aperiodic?",per):
pi:=nullspace(J-transpose(A)):
prod:=`*`(seq(pi[1][k],k=1..nd)):
pd:=evalb(prod<>0);
### end IRRAP CHECK
`R`=matrans(R);`B`=matrans(B);
cx:=add(pi[1][k],k=1..nd):
pi:=evalm(pi[1]/cx);
Omega:=stackmatrix(seq(pi,q=1..nd)):
dx:=rank(Delta): print();
if(rank(A)=dx) then
print("<--> CC <-->") else print("NOT CC", "RANKDIFF",rank(A)-rank(Delta))
fi;
print();
NSA:=nullspace(A);
nullA:=nops(NSA):
"DIM NULLSPACE OF A",nullA;
#+========+++++++++=+===== MAIN SET HERE======+++++++++=+======
unassign('w'):
`rank of Delta`=dx,`for n equals`=nd;
`rank of A`=rank(A);
NA:=NullSpace(Matrix(A)):
NTA:=NullSpace(Matrix(transpose(A))):
nu:=nd-rank(Delta):
print("R",matrans(R),"B",matrans(B)); print():
spi:=evalm(pi):
twoS:=iszero(u-multiply(u,A)):
unassign('x'):
# TEMPLATE HERE
appendto(outfile);
interface(echo=2):
print();print();
print(`
`);
print(``);
print(``);
print(`New Graph
`);print(``);
print(matrans(R),matrans(B));
print(`
`);
print(`
`);
print(`
`);
print(`
`);
writeto(terminal):
count:=0:
synccount:=0;
rnccount:=0;
nsynccount:=0;
print(`===========================================================`);
print();
unassign('t','s'):
colrs:={}:
NSA:=nullspace(A):
"NullSpace for A",NSA;
XAX:=symult(A,J):
cc:={}:
rg:={}:
appendto(outfile);
print(``);
pi:=clearDenoms(pi):
W:=add(pi[k],k=1..nd):
print(`π = `); print(pi);
print(`POSSIBLE RANKS`);
for i in numtheory[divisors](W) do
if( evalf(i)<= evalf(sqrt(W))) then
print(i);
print(`x`);
print(W/i);
print(`
`)
fi;
od;
dt:=det(J2-AA):
print(`BASE DETERMINANT`);
print(numer(dt));
print(` / `);
print(denom(dt),evalf(dt),``);
unassign('x');
nsd:=nullspace(Delta):
print(` NullSpace of Δ `);
print(seq(readVec(nsd[k]),k=1..nullity(Delta)));
nsk:=nullspace(Delta):
NSK:=stackmatrix(seq(nsk[k],k=1..nullity(Delta)));
unassign('lambda'):
print(``);
print(`Range of Δ:`);
print(clearDenoms(linsolve(NSK,vector(max(1,nullity(Delta)),0),'rr',lambda)));
print(`
`);
print(``);
for k from 0 to nd do
for i in choose(nd,k) do
ee:=vector(nd,1):
if (1 in i) then next fi;
for j to nd do
if(j in i) then ee[j]:=-1 fi
od;
phi:=diag(seq(ee[q],q=1..nd));
psi:=sympow(phi,2);
dl:=multiply(phi,Delta);
D2:=multiply(psi,Del2);
A2:=evalm(AA+D2):
dt:=det(J2-A2);
count:=count+1;
if((count mod 20)=0) then
print(count,`
`)
else
print(`
`);
fi;
KK:=stackmatrix(seq(multiply(pi,dl^i),i=1..dx)):
print(ee,`Delta Rank `);
print(rank(KK));
print(`vs`);
print(dx);
if(rank(KK)=dx) then synccount:=synccount+1;
print(` ---> SYNC'D`);
print(numer(dt));
print(` / `);
print(denom(dt),evalf(dt),`
`);
elif(det(J2-A2)>0) then rnccount:=rnccount+1;
print(` ---> SYNC'D NOT RANK'D`);
print(numer(dt));
print(` / `);
print(denom(dt),evalf(dt),`
`);
print(``);
print(` Nullspace of {Ω&Deltai}: `);
print(`
`);
print(clearDenoms(linsolve(transpose(KK),vector(n,0),'rr',x)));
print(`
`);
print(clearDenoms(linsolve(KK,vector(dx,0),'rr',y)));
nsk:=nullspace(KK):
NSK:=stackmatrix(seq(nsk[k],k=1..nops(nsk)));
unassign('mu'):
print(``);
print(`Range of {ΩΔi}:`);
print(clearDenoms(linsolve(NSK,vector(nops(nsk),0),'rr',mu)));
fi;
print(`
`);
sw:=false:
### RGSW CASE
if(det(J2-A2)=0) then nsynccount:=nsynccount+1;
print(`
NOT SYNC'D
`);
RX:=evalm(A+dl):BX:=evalm(A-dl):
print(``);
print(`Nullspace of {Ω&Deltai}: `);
print(`
`);
print(clearDenoms(linsolve(transpose(KK),vector(n,0),'rr',x)));
print(`
`);
print(clearDenoms(linsolve(KK,vector(dx,0),'rr',y)));
nsk:=nullspace(KK):
NSK:=stackmatrix(seq(nsk[k],k=1..nops(nsk)));
unassign('mu'):
print(``);
print(`Range of {ΩΔi}:`);
print(clearDenoms(linsolve(NSK,vector(nops(nsk),0),'rr',mu)));
print(``);
dim:=nops(nullspace(J2-A2));
if(dim>1) then AB:=abel(A2):u2:=evalm(AB&*uu) ;pi2:=evalm(uu&*AB):
else
u2:=evalm(1/x[1]*linsolve(J2-A2,vector(NN,0),'rr',x));
pi2:=evalm(1/x[1]*linsolve(J2-transpose(A2),vector(NN,0),'rr',x));
fi;
ux:=evalm(u2);
m:=max(seq(u2[k],k=1..NN)):
NX:=matvec(evalm(u2/m));
rh:=multiply(spi,NX):
rk:=1/(1-rh[1]):
pp:=multiply(UJ-NX,u):
print(`
`);
if(rk>1) then
Rk:=sympow(RX,rk):
Bk:=sympow(BX,rk):
Ak:=evalm(1/2*(Rk+Bk));
nk:=binomial(n,rk):jk:=evalm(IdentityMatrix(nk)):
u||rk:=evalm(1/x[1]*linsolve(jk-Ak,vector(nk,0),'rr',x));
pi||rk:=evalm(1/x[1]*linsolve(jk-transpose(Ak),vector(nk,0),'rr',x));
fi;
M:=matvec(pi2):
print(`rank of M is`);print(rank(M));
print(`, rank of N is`);print(rank(NX));
print(``);
print(`Check is ΩΔN zero? `);
print(iszero(multiply(Omega,dl,NX)),`πΔ=`);
print(evalm(pi&*dl));
print(``);
unassign('lambda','mu'):
print(`ker M`,clearDenoms(linsolve(M,vector(n,0),'rr',lambda)));print(``);
print(`ker N`,clearDenoms(linsolve(NX,vector(n,0),'rr',mu)));print(``);
NSM:=matrix(1,n,0);
if(nullity(M)>0) then
nsm:=nullspace(M):
NSM:=stackmatrix(seq(nsm[k],k=1..nullity(M)));
fi;
unassign('x','y'):
print(`Range M`,clearDenoms(linsolve(NSM,vector(max(1,nullity(M)),0),'rr',x)));
print(``);
rv:=readVec(pi||rk);
nr:=nops(rv):
CK:=map(convert,choose(n,rk),set):
print(``);
print(`Ranges`);
print(``);
betasum:=add(pi||rk[k],k=1..nk);
for i to nr do
prob:=pi||rk[rv[i]]/betasum;
print(`β`(CK[rv[i]])=numer(prob));print(` / `);print(denom(prob));
print(`
`);
od;
B1:=CK[rv[1]];
unassign('x','y'):
lst:=[NX];
names:=[` N `];
for i to 1 do
VRN:=goRange(lst[i]);
print(` Range of`);
print(names[i]);
print(`
`);
print(VRN);
print(``);
print(`Partitions`);
print(`
`);
od;
GPN:=[goParts(NX)];
PN:=`union`(seq({GPN[k]},k=1..nops(GPN)));
alpha:=[];
PBASIS:=[]:
matr:=[];
matb:=[];
if(nops(PN)<20) then
gpts:=getParts(GPN,nd,rk,CK[rv[1]],RX,BX,NX);
PBASIS:=gpts[1];
alpha:=gpts[2];
if(nops(PBASIS)>1) then
matr:=gpts[3];
matb:=gpts[4];
fi;
else
print(`Too many possibilities to consider`);
fi;#nops(PN)
if(nops(PBASIS)>1) then
print(``);
print(`Action of R on partitions`,matr);
print(`
`);
print(`Action of B on partitions`,matb);
print(``);
fi;
for i to nops(PBASIS) do
print(`α`([op(readcycles(PBASIS[i]))])=numer(alpha[i]));
print(` / `);
print(denom(alpha[i]));
print(`
`);
od;
print(`
`);
print(``);
for ia to NN do
if ( (ux[ia]<>1) and (ux[ia]<>0)) then
print(`Sandwich |
`);
sw:=true; break;
fi
od;
if(not sw) then print(`Right Group |
`) fi;
COLR:=readVec(evalm(u-ee)):
if(sw) then
colrs:=colrs union {[COLR,rk]};
else
if(UTC(RX,BX)=3) then utc:=`Solvable` else utc:=`Not Solvable` fi;
if(rkColoring | `);
print(COLR);
print(` | `);
print(`Rank | `||rk||` |
`);
print(`R,B | `);
print(matrans(RX),matrans(BX));
print(` |
`);
print(`π2 | `);
print(evalm(clearDenoms(pi2)));
print(` |
`);
print(`u2 | `);
print(evalm(clearDenoms(u2)));
print(` (dim `||dim||`) |
`);
print(`wpp | `);
print(evalm(clearDenoms(pp)));
print(` |
`);
if(rk>2) then
print(`π`||rk||` | `);
print(evalm(clearDenoms(pi||rk)));
print(` |
`);
print(`u`||rk||` | `);
print(evalm(clearDenoms(u||rk)));
print(` |
`);
fi;
print(`
`);
print(`
`);
if(iszero(symult(dl,J)-XAX)) then cc:=cc union {[COLR,sw,rk]} fi; fi
od;
od;
print();
print(`
`);
print(``);
print(`SUMMARY |
`);
if(rank(A)<>rank(Delta))
then
print(`Graph Type |
| NOT CC |
`);
else
print(`Graph Type |
| CC |
`)
fi;
unassign('nu'):
print(`ν(A) |
| `);
print(nd-rank(A));
print(` |
`);
print(`ν(Δ) |
| `);
print(nd-rank(Delta));
print(` |
`);
print(`π |
| `);
print(evalm(clearDenoms(pi)));
print(` |
`);
print(`Dbly Stoch |
| `||twoS||` |
`);
print(`
`);
print(`SANDWICH |
| Total`);
print(nops(colrs));
print(` |
`);
print(`No . | Coloring | Rank |
`);
for i to nops(colrs) do
print(``||i||` | `);
print(colrs[i][1]);
print(` | `);
print(colrs[i][2]);
print(` |
`);
od;
print(`
`);
print(`RT GROUPS |
| Total`);
print(nops(rg));
print(` |
`);
print(`No . | Coloring | Rank | Solv |
`);
for i to nops(rg) do
print(``||i||` | `);
print(rg[i][1]);
print(` | `);
print(rg[i][2]);
print(` | `);
print(rg[i][3]);
print(` |
`)
od;
print(`
`);
if(nops(cc)>0) then
print(`CC Colorings | `);
print(`
| Total `);
print(nops(cc));
print(` |
`);
print(`No . | Coloring | Sandwich,Rank |
`);
for i to nops(cc) do
print(``||i||` | `);
print(cc[i][1]);
print(` | `);
print(cc[i][2],cc[i][3]);
print(` |
`)
od;
print(`
`);
fi;
print(``);
countcheck:=synccount+rnccount+nsynccount;
ctcheck:=2^(n-1);
print(``);
print(`RANK'D | SYNC'D NOT RANK'D | NOT SYNC'D | `);
print(`Total Runs | 2n-1 | `);
print(`
---|
`);
print(synccount);
print(` | `);
print(rnccount);
print(` | `);
print(nsynccount);
print(` | `);
print(countcheck);
print(` | `);
print(ctcheck);
print(` |
`);
print(`
`);
print(``);
print(`
`);
print(``);print(``);
writeto(terminal):
interface(echo=1):
system("perl /home/ph/maple/maplecleaner "||outfile);
end: