Check whether any semi-positive quasi-Cartan companions serve vertices of quivers.
A quiver Q can be represented as a skew-symmetric matrix. A quasi-Cartan companion of such a quiver matrix B(Q) = (bij) is a symmetric matrix A(Q) = (aij) such that diagonal entries are all 2 and off diagonal entries of A have the same absolute values as the matching values in B, i.e. |aij| = |bij|.
Any quiver has a number of quasi-Cartan companions, differing by the signs of the off diagonal values.
A quasi-Cartan matrix A gives a quadratic form on some vector space, and the quiver-mutations can be generalised in some sense to mutations on vectors in this space. Mutation in the k-th direction acts on (v1, ... , vn) to give
v'i = vi - (vi, vk)vk if i -> k in Q
vi otherwise.
This gives another set of vectors, which have a gram matrix G = ( (v'i, v'j) ) using the quadratic form defined by A.
The quasi-Cartan matrix A serves the vertex k if G is a quasi-Cartan companion of the mutated matrix μkB = B', i.e. |gij| = |b'ij|.
This program finds which, if any of the semi-positive definite (i.e. all eigenvalues are non-negative) quasi-Cartan matrices of a given quiver serve its vertices.
qvrefl -cels [-m matrix] [-i in_file] [-a cartan]
-m Specify matrix to find quasi-Cartan companions of
-i Specify input file of matrices to read
-c Check the whole mutation class of the matrix
-e Check that all compatible cartans are equivalent
-l List the first quasi-Cartan serving each vertex
-s Check if there is a quasi-Cartan serving all vertices
-a Specify a cartan matrix to check whether it serves every vertex
The program will compute which semi-positive quasi-Cartan companion serves each vertex of the provided quiver matrix. The output is then the first matrix it encounters for each vertex, or a statement that no such semi-positive matrix was found.
Example:
>>>qvrefl -m "{ { 0 1 0 0 } { -1 0 1 1 } { 0 -1 0 1 } { 0 -1 -1 0 } }"
0 served by
2 1 0 0
1 2 1 1
0 1 2 1
0 1 1 2
1 served by
2 1 0 0
1 2 1 1
0 1 2 1
0 1 1 2
2 is not served by any semi-positive quasi-Cartan
3 served by
2 1 0 0
1 2 1 1
0 1 2 1
0 1 1 2
cmut
provides an interactive way of mutating quivers and their cartan
companions.
Run the program via the terminal. The input matrix should be specified as
expected by the qv
library.
cmut [matrix]
Then the program waits for an input:
q: quit
s: show the current quiver and cartan
1-9: mutate specified vertex
Small proof of concept program to show the cartan companions of a whole mutation class. The initial quiver is provided at compile time, not runtime.
Run make
to build all binaries. To build and run the unit tests use make test
.
A library containing the various math units can be built with make lib
or
make static
for a dynamic or static library respectively.
The main program depends on the following libraries:
In addition, the tests use the googletest framework.
qvrefl
is available under the Apache v2.0 license.
Copyright 2016 John Lawson
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.