This worksheet illustrates some techniques for trying to determine whether a particular graph can achieve a particular multiplicity list. Since the graph turns out not to achieve $q=3$, full generality must be maintained throughout. That means that this worksheet is necessarily missing the technique of substituting in particular guesses using up degrees of freedom with arbitrary (small but nonzero) rational numbers, in hopes that what remains will still have sufficient flexibility for any three eigenvalues.
Techniques that are illustrated:
|
|
3 3 |
22 signings out of 64 viable for q = 3. 22 signings out of 64 viable for q = 3. |
That is on the high side for these graphs, which tends to make things difficult: There are a lot of possible sign choices that have to be ruled out. That was why I picked this example, without looking at the graph, somewhat at random from the middle of the pack with a high number of signings.
|
20 20 |
In some cases it is possible, for graphs with high symmetry, to find realizations for arbitrary eigenvalues by picking edge and vertex values that preserve some or all of the symmetries of the graph. To exclude eigenvalues, however, you can't make any such assumptions.
First technique: Symmetry breaking. Start by choosing a spanning tree of variables to be squared.
[('F', 'A'), ('A', 'G'), ('G', 'B'), ('G', 'C'), ('C', 'H'), ('C', 'I'), ('I', 'D'), ('I', 'E'), ('E', 'J')] [('F', 'A'), ('A', 'G'), ('G', 'B'), ('G', 'C'), ('C', 'H'), ('C', 'I'), ('I', 'D'), ('I', 'E'), ('E', 'J')] |
|
[0 0 0 0 1 1 1 0 0 0] [0 0 0 0 0 1 1 1 0 0] [0 0 0 0 0 0 1 1 1 0] [0 0 0 0 0 0 0 1 1 1] [1 0 0 0 0 0 0 0 1 1] [1 1 0 0 0 0 0 0 0 1] [1 1 1 0 0 0 0 0 0 0] [0 1 1 1 0 0 0 0 0 0] [0 0 1 1 1 0 0 0 0 0] [0 0 0 1 1 1 0 0 0 0] [0 0 0 0 1 1 1 0 0 0] [0 0 0 0 0 1 1 1 0 0] [0 0 0 0 0 0 1 1 1 0] [0 0 0 0 0 0 0 1 1 1] [1 0 0 0 0 0 0 0 1 1] [1 1 0 0 0 0 0 0 0 1] [1 1 1 0 0 0 0 0 0 0] [0 1 1 1 0 0 0 0 0 0] [0 0 1 1 1 0 0 0 0 0] [0 0 0 1 1 1 0 0 0 0] |
[10 6 4 3 9 10 9 3 4 6] [ 6 10 6 4 3 9 10 9 3 4] [ 4 6 10 6 4 3 9 10 9 3] [ 3 4 6 10 6 4 3 9 10 9] [ 9 3 4 6 10 6 4 3 9 10] [10 9 3 4 6 10 6 4 3 9] [ 9 10 9 3 4 6 10 6 4 3] [ 3 9 10 9 3 4 6 10 6 4] [ 4 3 9 10 9 3 4 6 10 6] [ 6 4 3 9 10 9 3 4 6 10] [10 6 4 3 9 10 9 3 4 6] [ 6 10 6 4 3 9 10 9 3 4] [ 4 6 10 6 4 3 9 10 9 3] [ 3 4 6 10 6 4 3 9 10 9] [ 9 3 4 6 10 6 4 3 9 10] [10 9 3 4 6 10 6 4 3 9] [ 9 10 9 3 4 6 10 6 4 3] [ 3 9 10 9 3 4 6 10 6 4] [ 4 3 9 10 9 3 4 6 10 6] [ 6 4 3 9 10 9 3 4 6 10] |
The number of paths of length $3$ tells us how many terms will be in the equations that are extracted from the minimal polynomial. It makes us happy to see $2$ all over the place. Anything else and substitutions start to multiply the number of terms. Three term equations, like we have here, aren't so bad at first, but they quickly become unmanageable after many substitutions.
['d_A', 'd_B', 'd_C', 'd_D', 'd_E', 'd_F', 'd_G', 'd_H', 'd_I', 'd_J'] ['d_A', 'd_B', 'd_C', 'd_D', 'd_E', 'd_F', 'd_G', 'd_H', 'd_I', 'd_J'] |
['a_AE', 'a_BF', 'a_BH', 'a_DH', 'a_DJ', 'a_FJ'] ['p_AF', 'p_AG', 'p_BG', 'p_CG', 'p_CH', 'p_CI', 'p_DI', 'p_EI', 'p_EJ'] ['a_AE', 'a_BF', 'a_BH', 'a_DH', 'a_DJ', 'a_FJ'] ['p_AF', 'p_AG', 'p_BG', 'p_CG', 'p_CH', 'p_CI', 'p_DI', 'p_EI', 'p_EJ'] |
['t_1', 't_2', 't_3'] ['f_1', 'f_2', 'f_3'] ['t_1', 't_2', 't_3'] ['f_1', 'f_2', 'f_3'] |
We create a polynomial ring in all these variables, plus a slack variable $s$ which is useful for enforcing non-zero conditions: Adding the equation `s*a*b*c - 1` to an ideal says that $s = 1/(abc)$ and therefore that all these variables must be nonzero.
We use the default term ordering, which is degree reverse lexicographic.
Defining s, t_1, t_2, t_3, d_A, d_B, d_C, d_D, d_E, d_F, d_G, d_H, d_I, d_J, a_AE, a_BF, a_BH, a_DH, a_DJ, a_FJ, p_AF, p_AG, p_BG, p_CG, p_CH, p_CI, p_DI, p_EI, p_EJ, f_1, f_2, f_3 Defining s, t_1, t_2, t_3, d_A, d_B, d_C, d_D, d_E, d_F, d_G, d_H, d_I, d_J, a_AE, a_BF, a_BH, a_DH, a_DJ, a_FJ, p_AF, p_AG, p_BG, p_CG, p_CH, p_CI, p_DI, p_EI, p_EJ, f_1, f_2, f_3 |
The matrix entries will actually be rational functions, but as much as possible only with denominators that are monomials in variables that are guaranteed to be nonzero. This obviates having to keep track of cases where one of the denominators would be zero.
Fraction Field of Multivariate Polynomial Ring in s, t_1, t_2, t_3, d_A, d_B, d_C, d_D, d_E, d_F, d_G, d_H, d_I, d_J, a_AE, a_BF, a_BH, a_DH, a_DJ, a_FJ, p_AF, p_AG, p_BG, p_CG, p_CH, p_CI, p_DI, p_EI, p_EJ, f_1, f_2, f_3 over Rational Field Fraction Field of Multivariate Polynomial Ring in s, t_1, t_2, t_3, d_A, d_B, d_C, d_D, d_E, d_F, d_G, d_H, d_I, d_J, a_AE, a_BF, a_BH, a_DH, a_DJ, a_FJ, p_AF, p_AG, p_BG, p_CG, p_CH, p_CI, p_DI, p_EI, p_EJ, f_1, f_2, f_3 over Rational Field |
Not actually used in this worksheet, since we don't calculate any elemination ideals. But when you do, you often want to know the dimension of the result, which Sage reports including all the degrees of freedom that are no longer mentioned because you explicitly wanted to get rid of them. This dimension counter compensates for that.
|
The following routine populates a matrix with the symmetry-broken variables. The commented out bit, `# * rowmult`, would give you diagonal entries that are multplied by a `p` variable like everything else in the row, which may or may not be preferable. For now, I'm leaving bare diagonal variables in the matrix.
|
|
Assumption: every `p` variable is strictly positive.
At this point, I tried the minimal polynomial technique for a good while, with no success, including trying to eat up degrees of freedom by setting variable entries arbitrarily, in hopes of finding a family of $q=3$ representatives. Eventually I gave up and decided to use the Schur complement technique first.
In separate work, I calculated the zero forcing number for this graph, which is $4$ (it is not hard to see; color the vertices of a square in the graph blue). This is good news, because it is impossible to get $10$ eigenvalues in total from only three distinct eigenvalues each of multiplicity strictly less than $4$, so we can assume without loss of generality that $0$ is an eigenvalue of multiplicity $4$.
The positive semidefinite zero forcing number is $4$, which isn't so useful in this case. If it were $3$, we would know that the only viable ordered multiplicity list is $(3, 4, 3)$, and if it were $2$ there would be no viable multiplicity list and we would be done.
Assumption: $M$ has rank $6$.
Zero forcing gives $n - \mathrm{t\#}(G)$ where the triangle number $\mathrm{t\#}(G)$ is the largest size of a square submatrix that is permutation equivalent to an upper triangular matrix all of whose diagonal entries are nonzero. To find the triangle, strike out all the rows of the matrix corresponding to vertices that are never forced (because they start blue), and strike out all the columns of the matrix that never perform a force (because they are the ends of forcing chains, which start out blue in the reverse forcing). Then permute the rows and columns until the triangle appears.
|
Having a triangular submatrix whose rank is the same as the assumed rank of the whole matrix sets us up to be able to use the Schur complement technique, because the Schur complement of this submatrix must have every entry equal to zero, and because the determinant of this matrix, which turns into denominators in the Schur complement, is a monomial in nonzero variables.
|
(-1) * (a_AE^2*a_FJ*p_AF*p_CG*p_EI + d_C*a_AE*a_FJ*p_AF*p_EI - d_A*d_E*a_FJ*p_CG - a_AE*p_AF*p_CG*p_EI) (-1) * (a_AE^2*a_DJ*a_FJ*p_AF*p_DI*p_EI*p_EJ + a_AE*a_DJ^2*p_AF*p_DI*p_EI*p_EJ - d_A*d_E*a_DJ*a_FJ*p_DI*p_EJ - a_AE*a_DJ*p_AF*p_DI*p_EI*p_EJ - d_D*d_J*a_AE*p_AF*p_EI - d_A*d_D*a_FJ*p_EI*p_EJ) (-1) * (a_AE*a_DJ*a_FJ*p_AF*p_EJ - d_J*a_AE*a_DH*p_AF - d_A*a_DH*a_FJ*p_EJ) (-1) * (d_I*a_AE^2*a_DJ*a_FJ*p_AF*p_EI*p_EJ + a_AE*a_DJ*a_FJ*p_AF*p_CI*p_EI*p_EJ - d_A*d_E*d_I*a_DJ*a_FJ*p_EJ - d_I*a_AE*a_DJ*p_AF*p_EI*p_EJ + d_A*a_DJ*a_FJ*p_CI*p_EI*p_EJ - d_J*a_AE*p_AF*p_CI*p_EI - d_A*a_FJ*p_CI*p_EI*p_EJ) -d_C*a_BH*a_FJ*p_BG + a_BF*a_BH*p_BG*p_CG - d_B*a_FJ*p_CG (-1) * (a_BF*a_BH*a_DJ^2*p_BG*p_DI*p_EJ + d_B*a_DH*a_DJ*a_FJ*p_DI*p_EJ - a_BF*a_BH*a_DJ*p_BG*p_DI*p_EJ - d_D*d_J*a_BF*a_BH*p_BG) a_BH^2*a_DJ*a_FJ*p_BG*p_CH*p_EJ + d_J*a_BF*a_BH*a_DH*p_BG*p_CH - a_BH*a_DJ*a_FJ*p_BG*p_CH*p_EJ - d_B*d_H*a_DJ*a_FJ*p_EJ (-1) * p_BG * (-d_I*a_BF*a_DJ*p_EJ + a_DJ*a_FJ*p_CI*p_EJ - d_J*a_BF*p_CI) (-1) * (-d_F*a_AE*a_BH*p_EI + a_AE*a_BF*a_FJ*p_EI - d_E*a_BH*a_FJ) (-1) * (d_F*a_AE*a_BH*a_DJ^2*p_DI*p_EI*p_EJ + a_AE*a_BF*a_DH*a_DJ*a_FJ*p_DI*p_EI*p_EJ + d_D*a_AE*a_BH*a_FJ^2*p_EI*p_EJ - d_F*a_AE*a_BH*a_DJ*p_DI*p_EI*p_EJ - d_D*d_F*d_J*a_AE*a_BH*p_EI - d_E*a_BH*a_DJ*a_FJ*p_DI*p_EJ - d_D*a_BH*a_FJ*p_EI*p_EJ) (-1) * (a_AE*a_BH*a_DH*a_FJ^2*p_CH*p_EJ - d_F*d_J*a_AE*a_BH*a_DH*p_CH + d_H*a_AE*a_BF*a_DJ*a_FJ*p_EJ - a_BH*a_DH*a_FJ*p_CH*p_EJ) (-1) * (-d_F*d_I*a_AE*a_DJ*p_EI*p_EJ + a_AE*a_FJ^2*p_CI*p_EI*p_EJ - d_F*d_J*a_AE*p_CI*p_EI - d_E*d_I*a_DJ*a_FJ*p_EJ + a_DJ*a_FJ*p_CI*p_EI*p_EJ - a_FJ*p_CI*p_EI*p_EJ) -d_C*d_G*a_AE*a_BH*p_EI + a_AE*a_BH*p_AG*p_CG*p_EI + d_E*a_BH*p_AG*p_CG - a_AE*p_AG*p_CG*p_EI (-1) * p_AG * (a_AE*a_DH*a_DJ*p_DI*p_EI - d_E*a_BH*a_DJ*p_DI - d_D*a_BH*p_EI) -d_G*a_AE*a_BH*a_DJ*p_CH - d_H*a_AE*a_DJ*p_AG + a_BH*a_DH*p_AG*p_CH (-1) * (d_G*a_AE*a_DJ*p_CI*p_EI - d_E*d_I*a_DJ*p_AG + a_DJ*p_AG*p_CI*p_EI - p_AG*p_CI*p_EI) (-1) * (a_AE^2*a_FJ*p_AF*p_CG*p_EI + d_C*a_AE*a_FJ*p_AF*p_EI - d_A*d_E*a_FJ*p_CG - a_AE*p_AF*p_CG*p_EI) (-1) * (a_AE^2*a_DJ*a_FJ*p_AF*p_DI*p_EI*p_EJ + a_AE*a_DJ^2*p_AF*p_DI*p_EI*p_EJ - d_A*d_E*a_DJ*a_FJ*p_DI*p_EJ - a_AE*a_DJ*p_AF*p_DI*p_EI*p_EJ - d_D*d_J*a_AE*p_AF*p_EI - d_A*d_D*a_FJ*p_EI*p_EJ) (-1) * (a_AE*a_DJ*a_FJ*p_AF*p_EJ - d_J*a_AE*a_DH*p_AF - d_A*a_DH*a_FJ*p_EJ) (-1) * (d_I*a_AE^2*a_DJ*a_FJ*p_AF*p_EI*p_EJ + a_AE*a_DJ*a_FJ*p_AF*p_CI*p_EI*p_EJ - d_A*d_E*d_I*a_DJ*a_FJ*p_EJ - d_I*a_AE*a_DJ*p_AF*p_EI*p_EJ + d_A*a_DJ*a_FJ*p_CI*p_EI*p_EJ - d_J*a_AE*p_AF*p_CI*p_EI - d_A*a_FJ*p_CI*p_EI*p_EJ) -d_C*a_BH*a_FJ*p_BG + a_BF*a_BH*p_BG*p_CG - d_B*a_FJ*p_CG (-1) * (a_BF*a_BH*a_DJ^2*p_BG*p_DI*p_EJ + d_B*a_DH*a_DJ*a_FJ*p_DI*p_EJ - a_BF*a_BH*a_DJ*p_BG*p_DI*p_EJ - d_D*d_J*a_BF*a_BH*p_BG) a_BH^2*a_DJ*a_FJ*p_BG*p_CH*p_EJ + d_J*a_BF*a_BH*a_DH*p_BG*p_CH - a_BH*a_DJ*a_FJ*p_BG*p_CH*p_EJ - d_B*d_H*a_DJ*a_FJ*p_EJ (-1) * p_BG * (-d_I*a_BF*a_DJ*p_EJ + a_DJ*a_FJ*p_CI*p_EJ - d_J*a_BF*p_CI) (-1) * (-d_F*a_AE*a_BH*p_EI + a_AE*a_BF*a_FJ*p_EI - d_E*a_BH*a_FJ) (-1) * (d_F*a_AE*a_BH*a_DJ^2*p_DI*p_EI*p_EJ + a_AE*a_BF*a_DH*a_DJ*a_FJ*p_DI*p_EI*p_EJ + d_D*a_AE*a_BH*a_FJ^2*p_EI*p_EJ - d_F*a_AE*a_BH*a_DJ*p_DI*p_EI*p_EJ - d_D*d_F*d_J*a_AE*a_BH*p_EI - d_E*a_BH*a_DJ*a_FJ*p_DI*p_EJ - d_D*a_BH*a_FJ*p_EI*p_EJ) (-1) * (a_AE*a_BH*a_DH*a_FJ^2*p_CH*p_EJ - d_F*d_J*a_AE*a_BH*a_DH*p_CH + d_H*a_AE*a_BF*a_DJ*a_FJ*p_EJ - a_BH*a_DH*a_FJ*p_CH*p_EJ) (-1) * (-d_F*d_I*a_AE*a_DJ*p_EI*p_EJ + a_AE*a_FJ^2*p_CI*p_EI*p_EJ - d_F*d_J*a_AE*p_CI*p_EI - d_E*d_I*a_DJ*a_FJ*p_EJ + a_DJ*a_FJ*p_CI*p_EI*p_EJ - a_FJ*p_CI*p_EI*p_EJ) -d_C*d_G*a_AE*a_BH*p_EI + a_AE*a_BH*p_AG*p_CG*p_EI + d_E*a_BH*p_AG*p_CG - a_AE*p_AG*p_CG*p_EI (-1) * p_AG * (a_AE*a_DH*a_DJ*p_DI*p_EI - d_E*a_BH*a_DJ*p_DI - d_D*a_BH*p_EI) -d_G*a_AE*a_BH*a_DJ*p_CH - d_H*a_AE*a_DJ*p_AG + a_BH*a_DH*p_AG*p_CH (-1) * (d_G*a_AE*a_DJ*p_CI*p_EI - d_E*d_I*a_DJ*p_AG + a_DJ*p_AG*p_CI*p_EI - p_AG*p_CI*p_EI) |
From these equations we are able to solve for eight of the ten diagonal entries $\dots$
which turns out to be completely unneccesary.
Forget the assumption of rank $6$.
It turns out that this graph can be quickly dealt with, using the minimal polynomial technique, just by picking the right $3$-term equations, which come from distance $3$ pairs connected by $3$ different paths, and which therefore don't involve the diagonal entries or the eigenvalues $t_i$ at all.
|
[t_3^3 - t_3^2*f_1 + t_3*f_2 - f_3, t_2^2 + t_2*t_3 + t_3^2 - t_2*f_1 - t_3*f_1 + f_2, t_1 + t_2 + t_3 - f_1] [t_3^3 - t_3^2*f_1 + t_3*f_2 - f_3, t_2^2 + t_2*t_3 + t_3^2 - t_2*f_1 - t_3*f_1 + f_2, t_1 + t_2 + t_3 - f_1] |
|
|
|
p_CG * (a_BF*a_BH*p_BG*p_CH + a_BF*p_AG*p_BG + p_AF*p_AG) p_CG * (a_BF*a_BH*p_BG*p_CH + a_BF*p_AG*p_BG + p_AF*p_AG) |
|
0 0 |
p_EI * (a_DH*a_DJ*p_DI*p_EJ + a_DH*p_CI*p_DI + p_CG*p_CI) p_EI * (a_DH*a_DJ*p_DI*p_EJ + a_DH*p_CI*p_DI + p_CG*p_CI) |
|
0 0 |
p_AG * (a_BF*a_FJ*p_BG + a_AE*p_AF*p_EI + a_FJ*p_AF) p_AG * (a_BF*a_FJ*p_BG + a_AE*p_AF*p_EI + a_FJ*p_AF) |
|
0 0 |
p_CI * p_AG * (a_AE*a_DH*p_DI*p_EI - a_FJ*p_CG) p_CI * p_AG * (a_AE*a_DH*p_DI*p_EI - a_FJ*p_CG) |
|
0 0 |
(-1) * p_CI * p_AF * (a_AE^2*p_EI^2 + a_AE*a_FJ*p_EI + a_FJ^2) (-1) * p_CI * p_AF * (a_AE^2*p_EI^2 + a_AE*a_FJ*p_EI + a_FJ^2) |
We have discovered an expression that must be zero, but cannot equal zero over the real numbers using nonzero variables.
|
a_AE^2*p_EI^2 + a_AE*a_FJ*p_EI + a_FJ^2 a_AE^2*p_EI^2 + a_AE*a_FJ*p_EI + a_FJ^2 |
This factor that must equal zero is a sum of squares of values that are unequal, and thus cannot both be zero.
True True |
|