You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TensorKit requires the F-symbols to be unitary. This way, we can interpret the F-symbol $F^{ijk}_l$ as a unitary matrix, and the F-move as a unitary basis transformation. Unitarity is also useful from a diagrammatic point of view because the category is then equipped with a pivotal and spherical structure. This essentially means that morphisms can be drawn and moved around freely on a 2-sphere, such that vector spaces can be moved freely from domain (codomain) to codomain (domain).
Copy file name to clipboardExpand all lines: docs/src/man/implementation.md
+26-17Lines changed: 26 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,24 +3,26 @@ explain the f-symbol and n-symbol storage system
3
3
# MultiTensorKit implementation: $\mathsf{Rep(A_4)}$ as an example
4
4
This tutorial is dedicated to explaining how MultiTensorKit was implemented to be compatible with with TensorKit and MPSKit for matrix product state simulations. In particular, we will be making a generalised anyonic spin chain. We will demonstrate how to reproduce the entanglement spectra found in [Lootens_2024](@cite). The model considered there is a spin-1 Heisenberg model with additional terms to break the usual $\mathsf{U_1}$ symmetry to $\mathsf{Rep(A_4)}$, while having a non-trivial phase diagram and relatively easy Hamiltonian to write down.
5
5
6
-
This will be done with the `A4Object = BimoduleSector{A4}``Sector`, which is the multifusion category which contains the structure of the module categories over $\mathsf{Rep_{A_4}}$. Since there are 7 module categories, `A4Object` is a $r=7$ multifusion category. There are 3 fusion categories up to equivalence:
7
-
-$\mathsf{Vec_{A_4}}$, the category of $\mathsf{A_4}$-graded vector spaces. The group $\mathsf{A}_4$ is order $4!/2 = 12$. It has thus 12 objects.
8
-
-$\mathsf{Rep(A_4)}$: the irreducible representations of the group $\mathsf{A}_4$, of which there are 4. One is the trivial representation, two are one-dimensional non-trivial and the last is three-dimensional.
9
-
-$\mathsf{Rep(H)}$: the representation category of some Hopf algebra which does not have a name. It has 6 simple objects.
6
+
This will be done with the `A4Object = BimoduleSector{A4}``Sector`, which is the multifusion category which contains the structure of the module categories over $\mathsf{Rep(A_4)}$. Since there are 7 module categories, `A4Object` is a $r=7$ multifusion category. There are 3 fusion categories up to equivalence:
7
+
-``\mathsf{Vec_{A_4}}``: the category of $\mathsf{A_4}$-graded vector spaces. The group $\mathsf{A}_4$ is order $4!/2 = 12$. It has thus 12 objects.
8
+
-``\mathsf{Rep(A_4)}``: the irreducible representations of the group $\mathsf{A}_4$, of which there are 4. One is the trivial representation, two are one-dimensional non-trivial and the last is three-dimensional.
9
+
-``\mathsf{Rep(H)}``: the representation category of some Hopf algebra which does not have a name. It has 6 simple objects.
10
10
11
+
For this example, we will require the following packages:
11
12
````julia
12
13
using TensorKit, MultiTensorKit, MPSKit, MPSKitModels
13
14
````
14
15
15
16
## Identifying the simple objects
16
-
We first need to select which fusion category we wish to use to grade the physical Hilbert space, and which fusion category to represent e.g. the symmetry category. In our case, we are interested in selecting $\mathcal{D} = \mathsf{Rep(A_4)}$ for the physical Hilbert space. We know the module categories over $\mathsf{Rep(G)}$ to be $\mathsf{Rep^\psi(H)}$ for a subgroup $\mathsf{H} and 2-cocycle $\psi$. Thus, the 7 module categories $\mathcal{M}$ one can choose over $\mathsf{Rep(A_4)}$ are
17
-
- $\mathsf{Rep(A_4)}$ itself as the regular module category,
We first need to select which fusion category we wish to use to grade the physical Hilbert space, and which fusion category to represent e.g. the symmetry category. In our case, we are interested in selecting $\mathcal{D} = \mathsf{Rep(A_4)}$ for the physical Hilbert space. We know the module categories over $\mathsf{Rep(G)}$ to be $\mathsf{Rep^\psi(H)}$ for a subgroup $\mathsf{H}$ and 2-cocycle $\psi$. Thus, the 7 module categories $\mathcal{M}$ one can choose over $\mathsf{Rep(A_4)}$ are
18
+
19
+
-``\mathsf{Rep(A_4)}`` itself as the regular module category,
When referring to specific fusion and module categories, we will use this non-multifusion notation.
26
28
@@ -34,7 +36,7 @@ one(A4Object(i,i,1))
34
36
35
37
Left and right units of subcategories are uniquely specified by their fusion rules. For example, the left unit of a subcategory $\mathcal{C}_{ij}$ is the simple object in $\mathcal{C}_i$ for which
36
38
37
-
$$^{}_a \mathbb{1} \times a = a \quad \forall a \in \mathcal{C}_i.$$
39
+
$$^{}_a \mathbb{1} \times a = a \quad \forall a \in \mathcal{C}_i.$$
38
40
39
41
A similar condition uniquely defines the right unit of a subcategory. For fusion subcategories, a necessary condition is that the left and right units coincide.
40
42
@@ -45,7 +47,7 @@ Identifying the other simple objects of a (not necessarily fusion) category requ
45
47
46
48
The dual object of some simple object $a$ of an arbitrary subcategory $\mathcal{C}_{ij}$ is defined as the unique object $a^* \in \mathcal{C}_{ji}$ satisfying
## Constructing the Hamiltonian and matrix product state
@@ -104,8 +106,9 @@ V = Vect[A4Object](M => D)
104
106
Vb = Vect[A4Object](M =>1) # non-degenerate boundary virtual space
105
107
init_mps =FiniteMPS(L, P, V; left=Vb, right=Vb)
106
108
````
107
-
> [!IMPORTANT]
108
-
> We must pass on a left and right virtual space to the keyword arguments `left` and `right` of the `FiniteMPS` constructor, since these would by default try to place a trivial space of the `Sector`, which does not exist for any `BimoduleSector` due to the semisimple unit.
109
+
110
+
!!! warning "Important"
111
+
We must pass on a left and right virtual space to the keyword arguments `left` and `right` of the `FiniteMPS` constructor, since these would by default try to place a trivial space of the `Sector`, which does not exist for any `BimoduleSector` due to the semisimple unit.
109
112
110
113
## DMRG2 and the entanglement spectrum
111
114
We can now look to find the ground state of the Hamiltonian with two-site DMRG. We use this instead of the "usual" one-site DMRG because the two-site one will smartly fill up the blocks of the local tensor during the sweep, allowing one to initialise as a product state in one block and more likely avoid local minima, a common occurence in symmetric tensor network simulations.
@@ -128,7 +131,13 @@ This plot will show the singular values per object, as well as include the "effe
128
131
129
132
## Search for the correct dual model
130
133
131
-
Consider a quantum lattice model with its symmetries determing the phase diagram. For every phase in the phase diagram, the dual model for which the ground state maximally breaks all symmetries spontaneously is the one where the entanglement is minimised and the tensor network is represented most efficiently [Lootens_2024](@cite). Let us confirm this result, starting with the $\mathsf{Rep(A_4)}$ spontaneous symmetry breaking phase.
134
+
Consider a quantum lattice model with its symmetries determing the phase diagram. For every phase in the phase diagram, the dual model for which the ground state maximally breaks all symmetries spontaneously is the one where the entanglement is minimised and the tensor network is represented most efficiently [Lootens_2024](@cite). Let us confirm this result, starting with the $\mathsf{Rep(A_4)}$ spontaneous symmetry breaking phase. The code will look exactly the same as above, except the virtual space of the MPS will change to be graded by the other module categories:
135
+
136
+
````julia
137
+
module_numlabels(i) = MultiTensorKit._numlabels(A4Object, i, 6)
138
+
V = Vect[A4Object](A4Object(i, 6, label) => D for label in1:module_numlabels(i))
139
+
Vb = Vect[A4Object](c =>1for c infirst(sectors(V))) # not all charges on boundary, play around with what is there
0 commit comments