Skip to content

Commit 2a19867

Browse files
committed
more docs
1 parent c063b48 commit 2a19867

File tree

2 files changed

+62
-21
lines changed

2 files changed

+62
-21
lines changed

docs/src/man/Implementation.md

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
explain the f-symbol and n-symbol storage system
22

3-
# MultiTensorKit implementation: $\mathsf{Rep_{A_4}}$ as an example
3+
# MultiTensorKit implementation: $\mathsf{Rep(A_4)}$ as an example
44
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.
55

66
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-dimension 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.
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.
1010

1111
````julia
1212
using TensorKit, MultiTensorKit, MPSKit, MPSKitModels
@@ -48,17 +48,16 @@ The dual object of some simple object $a$ of an arbitrary subcategory $\mathcal{
4848
$$ ^{}_a \mathbb{1} \in a \times a^* \quad \text{and} \quad \mathbb{1}_a \in a^* \times a,$$
4949

5050
with multiplicity 1.
51-
## Hamiltonian
51+
## Constructing the Hamiltonian and matrix product state
5252
TensorKit has been made compatible with the multifusion structure by keeping track of the relevant units in the fusion tree manipulations. With this, we can make `GradedSpace`s whose objects are in `A4Object`:
5353

5454
````julia
5555
D1 = A4Object(6, 6, 1) # unit in this case
5656
D2 = A4Object(6, 6, 2) # non-trivial 1d irrep
5757
D3 = A4Object(6, 6, 3) # non-trivial 1d irrep
5858
D4 = A4Object(6, 6, 4) # 3d irrep
59-
6059
````
61-
Since we want to replicate a spin-1 Heisenberg model, it makes sense to use the 3-dimensional irrep to grade the physical space, and thus construct our Hamiltonian. We don't illustrate here how to derive the considered Hamiltonian in a $\mathsf{Rep(A_4)}$ basis, but simply give it.
60+
Since we want to replicate a spin-1 Heisenberg model, it makes sense to use the 3-dimensional irrep to grade the physical space, and thus construct our Hamiltonian. We don't illustrate here how to derive the considered Hamiltonian in a $\mathsf{Rep(A_4)}$ basis, but simply give it. For now, we construct a finite-size spin chain; below we will repeat the calculation for an infinite system.
6261

6362
````julia
6463
P = Vect[A4Object](D4 => 1) # physical space
@@ -84,8 +83,8 @@ block(h3_R, D4) .= [0 1;]
8483
@plansor h3[-1 -2; -3 -4] := h3_L[-1 1; -3] * h3_R[-2; 1 -4]
8584

8685
L = 60
87-
J1 = 1.0 # probing the A4 SPT phase first
88-
J2 = 1.0
86+
J1 = -2.0 # probing the A4 SSB phase first
87+
J2 = -5.0
8988
lattice = FiniteChain(L)
9089
H1 = @mpoham sum(-2 * h1{i,j} for (i, j) in nearest_neighbours(lattice))
9190
H2 = @mpoham sum(h2{i,j} for (i, j) in nearest_neighbours(lattice))
@@ -94,22 +93,44 @@ H3 = @mpoham sum(2im * h3{i,j} for (i, j) in nearest_neighbours(lattice))
9493
H = H1 + J1 * H2 + J3 * H3
9594
````
9695

97-
98-
## Constructing the matrix product state
99-
For now, we will select $\mathsf{Vec}$ as the module category:
96+
For the matrix product state, we will select $\mathsf{Vec}$ as the module category for now:
10097
````julia
10198
M = A4Object(1, 6, 1) # Vec
10299
````
103-
104-
Afterwards, we build the physical and virtual space of the matrix product state:
100+
and construct the finite MPS:
105101
````julia
106102
D = 40 # bond dimension
107103
V = Vect[A4Object](M => D)
108104
Vb = Vect[A4Object](M => 1) # non-degenerate boundary virtual space
109105
init_mps = FiniteMPS(L, P, V; left=Vb, right=Vb)
110106
````
111107
> [!IMPORTANT]
112-
> 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 `BimoduleSector` due to the semisimple unit.
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+
## DMRG2 and the entanglement spectrum
111+
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.
112+
````julia
113+
dmrg2alg = DMRG2(;verbosity=2, tol=1e-8, trscheme=truncbelow(1e-4))
114+
ψ, _ = find_groundstate(init_mps, H, dmrg2alg)
115+
````
116+
The truncation scheme keyword argument is mandatory when calling `DMRG2` in MPSKit. Here, we choose to truncate such that all singular values are larger than $10^{-4}$, while setting the default tolerance for convergence to $10^{-8}$. More information on this can be found in the [MPSKit](https://github.com/QuantumKitHub/MPSKit.jl) documentation.
117+
118+
Now that we've found the ground state, we can compute the entanglement spectrum in the middle of the chain.
119+
````julia
120+
spec = entanglement_spectrum(ψ, round(Int, L/2))
121+
````
122+
This returns a dictionary which maps the objects grading the virtual space to the singular values. In this case, there is one key corresponding to $\mathsf{Vec}$. We can also immediately return a plot of this data by the following:
123+
````julia
124+
using Plots # !
125+
entanglementplot(ψ;site=round(Int, L/2))
126+
````
127+
This plot will show the singular values per object, as well as include the "effective" bond dimension, which is simply the dimension of the virtual space where we cut the system. #TODO: actually include the plot (or run everything as ipynb)
128+
129+
## Search for the correct dual model
130+
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.
132+
133+
113134

114135

115136

docs/src/man/multifusioncats.md

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,11 @@ The simplest non-trivial fusion diagram is a trivalent junction:
120120

121121
The most general case is the top left figure, where all three regions have a different coloring. The top middle region having the same coloring from the top left and top right strands follow from the delta function in the tensor product definition. However, as will be explained more in detail later, this most general trivalent junction with three colorings will never be needed. In short, we will always be considering a single bimodule category $\mathcal{C}_{ij}$ at a time, and the only other non-diagonal subcategory which fuses with this is its opposite $\mathcal{C}_{ji}$. This is displayed in the top middle and right. Similarly, two colorings are required when considering the fusion between a fusion and module strand, shown in the bottom left and middle figure. The simplest trivalent junctions boil down to fusions within fusion categories, which is obviously drawn with just one color. This is shown in the bottom right.
122122

123-
With this coloring system, we can specify which associator must be called to perform a particular F-move. SHOW THE COLORS
123+
With this coloring system, we can specify which associator must be called to perform a particular F-move. Such an F-move would look like
124+
125+
```@raw html
126+
<img src="../img/Fmove_coloring.svg" alt="" width="100%"/>
127+
```
124128

125129
### Why opposite module categories end up being necessary in MultiTensorKit
126130

@@ -147,17 +151,33 @@ In the multifusion setting, this can also be seen graphically. By keeping track
147151
<img src="../img/Bmove_MF.svg" alt="" width="100%"/>
148152
```
149153

150-
where by $\mathbb{1}_a$ we mean the right unit of $a$ (the left unit we would denote $^{}_a \mathbb{1}$).
154+
where by $\mathbb{1}_j$ we mean the unit of $\mathcal{C}_j$.
155+
156+
### More on the topological data: gauge choices and distilling properties of the subcategories
157+
158+
The most generic F-move contains 4 colors. For that reason, MultiTensorKit will require the F-symbol data to provided as some data file (currently .txt) with 4 + 6 + 4 + 2 = 16 columns. The first 4 refer to the colors, the following 6 label the simple objects of the corresponding subcategories, the next 4 label multiplicities, and the final 2 provide the real and imaginary value of the F-symbol itself.
159+
160+
In a similar manner, the N-symbols contain maximally three colors, so these data must provide 3 columns labeling the colors, 3 columns labeling the simple objects and a final column with the dimension of the corresponding vector space.
151161

152-
Besides the B-move (and closely related A-move, which we do not illustrate), we can also see how the quantum dimension and Frobenius-Schur indicator expressions get modified. We already know that an F-move of the form $F^{a \bar{a} a}_{a}$ needs to be evaluated for these topological data. Graphically, we find that
162+
Besides the B-move (and closely related A-move, which we do not illustrate), we can also see how the quantum dimension and Frobenius-Schur indicator expressions get modified. We already know that an F-move of the form $F^{c \bar{c} c}_{c}$ needs to be evaluated for these topological data. Graphically, we find that
153163

154164
```@raw html
155-
<img src="../img/qdim_fs_MF.svg" alt="" width="50%"/>
165+
<img src="../img/qdim_fs_MF.svg" alt="" width="50%" class="center"/>
156166
```
157167

158-
need to show other changed expressions like A-move, dimension, frobenius-schur indicator, what else outside of TensorKitSectors in terms of fusion tree manipulations?
168+
An important property of the F-symbols is that they must satisfy the **triangle identities**. In fusion category theory, this states that isomorphisms between (simple) objects $a$ and the tensor product between $a$ and the unit $\mathbb{1}$ exists, and that
169+
170+
$$(a \otimes \mathbb{1}) \otimes b \cong a \otimes (\mathbb{1} \otimes b)$$
171+
172+
for $b$ in the same fusion category. This can be straightforwardly generalised to multifusion categories. This requires a particular gauging of these trivalent vertices.
173+
174+
Besides the triangle identities, the (multi)fusion category must also fulfill the **pentagon equations**. These encapsulate the two identical manners to evaluating the fusion of four objects in the (multi)fusion category. Every fusion category's F-symbols must satisfy these individually, but also the (bi)module associators between bimodule and fusion categories. One can check that, for every pair of fusion categories, their bimodule category and opposite bimodule category, there are 32 pentagon equations to be satisfied. In the multifusion notation, they can be represented by
175+
176+
```@raw html
177+
<img src="../img/pentagon_colored.svg" alt="" width="100%"/>
178+
```
159179

160-
no figures up till now with arrows, will this even be necessary? maybe if we show B-moves with M->Mop
180+
We briefly mentioned earlier how unitary F-symbols are required within TensorKit, and thus necessarily MultiTensorKit.
161181

162182
### Braiding
163183
A very important aspect of MultiTensorKit is that all `BimoduleSector`s are defined to *not* support braiding: `TensorKitSectors.BraidingStyle(::Type{<:BimoduleSector}) = NoBraiding()`. We do this for two reasons. On the one hand, there is no natural 1-categorical way of defining braidings between the components of the multifusion category. It is possible that the diagonal fusion categories themselves are braided, but a "componentwise" braiding is unwise to support. On the other hand, it is entirely possible to write matrix product state manipulations in a planar manner (which has been done in [MPSKit](https://github.com/QuantumKitHub/MPSKit.jl)), thus avoiding the need of a braiding tensor.

0 commit comments

Comments
 (0)