Brane tilings and crystal counting¶
Brane tilings and molten crystal counting
This code is based on arXiv:0809.0117. See also arXiv:2012.14358
Given a brane tiling (a bipartite graph embedded in a torus) we associate with it a quiver with potential (Q,W). For any vertex \(i\in Q_0\), we consider the set \(\Delta_i\) of paths starting at i up to an equivalence relation induced by the potential W. This set has a poset structure and can be interpreted as a crystal embedded in \(\mathbb R^3\). For example, a brane tiling for \(\mathbb C^3\) corresponds to a quiver with one vertex 0, three loops x,y,z and potential W=x[y,z]. The corresponding Jacobian algebra is \(\mathbb C[x,y,z]\) which has a basis parametrized by \(\Delta_0=\mathbb N^3\), our crystal.
We define molten crystals as complements of finite ideals \(I\subset \Delta_i\), meaning a subset I such that \(u\le v\) and \(v\in I\) implies \(u\in I\). For any path \(u\in\Delta_i\), let \(t(u)\in Q_0\) be the target vertex of u. Define the dimension vector of I to be \(\dim I=\sum_{u\in I}e_{t(u)}\in\mathbb N^{Q_0}\). We compute the partition function \(Z_{\Delta_i}(x)=\sum_{I\subset\Delta_i}x^{\dim I}\) which is closely related to numerical DT invariants of (Q,W).
EXAMPLES:
sage: from msinvar import *
sage: CQ=CyclicQuiver(1)
sage: PQ=CQ.translation_PQ(); PQ
Ginzburg PQ: Quiver with 1 vertices, 3 arrows and potential with 2 terms
sage: Q=BTQuiver(PQ)
sage: Z=Q.partition_func(0, 8); Z
1 + x + 3*x^2 + 6*x^3 + 13*x^4 + 24*x^5 + 48*x^6 + 86*x^7 + 160*x^8
sage: Z.Log()
x + 2*x^2 + 3*x^3 + 4*x^4 + 5*x^5 + 6*x^6 + 7*x^7 + 8*x^8
sage: BTD[1]
['Conifold=Y10',
'Phi[1,2,1]*Phi[2,1,1]*Phi[1,2,2]*Phi[2,1,2]Phi[1,2,1]*Phi[2,1,2]*Phi[1,2,2]*Phi[2,1,1]']
sage: Q=BTQuiver(potential=BTD[1][1]); Q
Quiver with 2 vertices, 4 arrows and potential with 2 terms
sage: Z=Q.NCDT(1, 5); Z
1 + x0  2*x0*x1  4*x0^2*x1 + x0*x1^2  2*x0^3*x1 + 8*x0^2*x1^2 + 14*x0^3*x1^2  4*x0^2*x1^3
sage: Z.Log()
x0  x0^2  2*x0*x1  2*x0^2*x1 + x0*x1^2 + 6*x0^2*x1^2 + 3*x0^3*x1^2  2*x0^2*x1^3
sage: CQ=CyclicQuiver(3)
sage: PQ=CQ.translation_PQ(1); PQ
Translation PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms
sage: Q=BTQuiver(PQ,prec=[1,1,1])
sage: Q.intAtt_from_crystals().dict() # numerical integer attractor inv.
{(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): 3}

class
msinvar.brane_tilings.
BTQuiver
(*args, **kw)[source]¶ Bases:
msinvar.quivers.Quiver
Quiver with potential associated with a brane tiling.
Contains the method
wt()
such that two paths are equivalent (equal in the Jacobian algebra if and only if their weights are equal).
add_new_arrows
(P, n)[source]¶ Add new arrows to the atoms in the poset
P
.P
– poset of atoms,n
– index inP
, where atoms that require new arrows start.

create_path_poset
(i, N=10)[source]¶ Creat the poset of atoms (paths) that start at the vertex
i
and have length <=N
.


class
msinvar.brane_tilings.
Atom
(Q, t, wt=None)[source]¶ Bases:
object
Atom – equivalence class of a path in the Jacobian algebra.
Q
– a BTQuiver,t
– a target,wt
– a weight.

msinvar.brane_tilings.
crystal_dict
(Q, i, N=5)[source]¶ Dictionary counting ideals (molten crystals) in the crystal of atoms that start at the vertex
i
and have length <=N
.We keep track of the dimension vectors of ideals.

msinvar.brane_tilings.
NCDT
(Q, i, N=5)[source]¶ Numerical NCDT invariants counting (with a sign) ideals (molten crystals) in the crystal of atoms that start at the vertex
i
and have length <=N
.We keep track of the dimension vectors of ideals.

msinvar.brane_tilings.
partition_func
(Q, i, N=5)[source]¶ Partition function of ideals (molten crystals) in the crystal of atoms that start at the vertex
i
and have length <=N
.We keep track of the dimension vectors of ideals.

msinvar.brane_tilings.
partition_func1
(Q, i, N=5)[source]¶ Partition function of ideals (molten crystals) in the crystal of atoms that start at the vertex
i
and have length <=N
.We keep track only of the sizes of ideals.

msinvar.brane_tilings.
BT_example
(n=None)[source]¶ Brane tilings from the database by Boris Pioline.
n
– number of the brane tiling. If None, we return the whole list.

msinvar.brane_tilings.
ratAtt_from_crystals
(Q)[source]¶ Numerical rational attractor invariants obtained by recursion from the NCDT invariants (computed by counting crystals) and the flow tree formula.
This algorithm works for any brane tiling.
EXAMPLE:
sage: from msinvar import * sage: Q=BT_example(6); Q P2=C^3/(1,1,1): Quiver with 3 vertices, 9 arrows and potential with 6 terms sage: Q.prec([1,1,1]) sage: Q.ratAtt_from_crystals().dict() {(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): 3}

msinvar.brane_tilings.
intAtt_from_crystals
(Q)[source]¶ Numerical integer attractor invariants obtained by recursion from the NCDT invariants (computed by counting crystals) and the flow tree formula.
This algorithm works for any brane tiling.
EXAMPLE:
sage: from msinvar import * sage: Q=BT_example(6); Q P2=C^3/(1,1,1): Quiver with 3 vertices, 9 arrows and potential with 6 terms sage: Q.prec([1,1,1]) sage: Q.intAtt_from_crystals().dict() {(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): 3}