Section4.4Drackns: Generating Parameter Sets
We are interested in distance-regular antipodal covers of K_n. We construct a cover of index r of a graph X (or an r-fold cover) as follows. Choose a function f from the arcs (ordered pairs of adjacent vertices of X) to the symmetric group \sym r, such that
A cover X^f is antipodal if its diameter is d and two vertices are in the same fiber if and only they are at distance d. The 3-cube is an antipodal cover of K_4 with index two and diameter three. The line graph of the Petersen graph is an antipodal cover of K_5 with index and diameter three.
Here we are concerned with distance-regular antipodal covers of complete graphs K_n. Such covers must have diameter three. There are four obvious parameters (n,r,a_1,c_2), although they are not independent. Counting edges joining neighbors of u to vertices at distance two from u, we get
Our basic problem is to determine the parameter triples (n,r,c_2) for which a cover exists. This is an impossible problem, so we settle for generating parameter sets for which there is a good chance that a cover exists. Here our first design question surfaces: do we want to order our parameters by n and then r (lexicographically), or by nr then r (for example). We arbitrarily select the first approach.
As a first step we aim to generate a list of quadruples (n,r,a_1,c_2). Now we know that
xxxxxxxxxx
def nrc( n):
lim = (n-1)/(r-1)
return [(n,r,c) for r in [2..n-1]
for c in [1..lim] and n*(r-1)*c % 2 == 0]
def get_a( n, r, c):
return n, r, n-1-(r-1)*c, c
So we will generate a sequence of 4-tuples, and filter out the ones that obviously do not work. The most useful condition rests on the formulas for the multiplicities of the eigenvalues. As a distance-regular graph with diameter three, a drackn has exactly four distinct eigenvalues
Two cases arise. First, if \th and \tau are not integers, then
xxxxxxxxxx
def mult_chk( n, r, a, c):
disc = (a-c)^2+4*(n-1)
if is_square(disc):
sqroot = sqrt( disc)
theta = (a-c+sqroot)/2
tau = (a-c-sqroot)/2
mth = n*(r-1)*theta/sqroot
mtau = n*(r-1)-mth
return (theta, tau, mth, mtau)
else:
return False
How do we generate 4-tuples? The simplest approach is to use CartesianProduct, but a more efficient strategy is to use generators.
Now we can generate a selected family of 4-tuples. There are other conditions that must hold, we write a predicate for each of these and then write a function that takes a 4-tuple and applies each term in a list of predicates. Note that, when a parameter set is eliminated we need to know at least one of the predicates that it fails.
There is a very strong case to be made that a better parameterization is available. The idea is to search on triples