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).

wt(a)[source]

Weight of an arrow or a path.

path2vec(p)[source]

Multiplicities of all arrows in a path.

ideal_dim(I)[source]

Dimension vector of an ideal I that consists of atoms (paths).

add_new_arrows(P, n)[source]

Add new arrows to the atoms in the poset P.

  • P – poset of atoms,

  • n – index in P, 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.

crystal_dict(i, N=5)[source]
NCDT(i, N=5)[source]
partition_func(i, N=5)[source]
partition_func1(i, N=5)[source]
ratAtt_from_crystals()[source]

See ratAtt_from_crystals().

intAtt_from_crystals()[source]

See intAtt_from_crystals().

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.

add_arrow(a)[source]
equal(u)[source]
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}