Skip to content

Commit c6c1885

Browse files
committed
braiding info + start of actual repa4 example
1 parent 6e9e9eb commit c6c1885

File tree

3 files changed

+85
-21
lines changed

3 files changed

+85
-21
lines changed

docs/src/assets/MTKrefs.bib

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,14 @@ @misc{henriques2020
4040
archivePrefix={arXiv},
4141
primaryClass={math.OA},
4242
url={https://arxiv.org/abs/2004.08271},
43+
}
44+
45+
@misc{Lootens_2024,
46+
title={Entanglement and the density matrix renormalisation group in the generalised Landau paradigm},
47+
author={Laurens Lootens and Clement Delcamp and Frank Verstraete},
48+
year={2024},
49+
eprint={2408.06334},
50+
archivePrefix={arXiv},
51+
primaryClass={quant-ph},
52+
url={https://arxiv.org/abs/2408.06334},
4353
}

docs/src/man/Implementation.md

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

33
# MultiTensorKit implementation: $\mathsf{Rep_{A_4}}$ as an example
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 ... (not sure yet what we're going to show here).
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.
55

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 12 module categories (technically only 8 up to equivalence), `A4Object` is a $r=12$ multifusion category. There are 3 fusion categories up to equivalence:
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:
77
- $\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.
88
- $\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.
99
- $\mathsf{Rep H}$: the representation category of some Hopf algebra which does not have a name. It has 6 simple objects.
@@ -13,11 +13,20 @@ using TensorKit, MultiTensorKit, MPSKit, MPSKitModels
1313
````
1414

1515
## 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. Say we choose $\mathcal{D} = \mathsf{Vec A_4}$ for the physical Hilbert space and $\mathcal{C} = \mathcal{D}^*_{\mathcal{M}} = \mathsf{Rep_{A_4}}$ the symmetry category. This fixes the module category $\mathcal{M} = \mathsf{Vec}$. When referring to specific fusion and module categories, we will use this non-multifusion notation.
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,
18+
- $\mathsf{Vec}$: the category of vector spaces,
19+
- $\mathsf{Rep(\mathbb{Z}_2)}$,
20+
- $\mathsf{Rep(\mathbb{Z}_3)}$,
21+
- $\mathsf{Rep(\mathbb{Z}_2 \times \mathbb{Z}_2)}$,
22+
- $\mathsf{Rep^\psi(\mathbb{Z}_2 \times \mathbb{Z}_2)}$,
23+
- $\mathsf{Rep^\psi(A_4)}$.
24+
25+
When referring to specific fusion and module categories, we will use this non-multifusion notation.
1726

1827
The easiest way to identify which elements of the multifusion category correspond to the subcategories we wish to use is ... (not sure yet how to do this yet)
1928

20-
Once we have identified the fusion and module categories, we now want to select the relevant objects we wish to place in our graded spaces. Unfortunately, due to the nature of how the N-symbol and F-symbol data are generated, the objects of the fusion subcategories are not ordered such that `label=1` corresponds to the unit object. Hence, the simplest way to find the unit object of a fusion subcategory is
29+
Now that we have identified the fusion and module categories, we want to select the relevant objects we wish to place in our graded spaces. Unfortunately, due to the nature of how the N-symbol and F-symbol data are generated, the objects of the fusion subcategories are not ordered such that `label=1` corresponds to the unit object. Hence, the simplest way to find the unit object of a fusion subcategory is
2130

2231
````julia
2332
one(A4Object(i,i,1))
@@ -39,24 +48,71 @@ The dual object of some simple object $a$ of an arbitrary subcategory $\mathcal{
3948
$$ ^{}_a \mathbb{1} \in a \times a^* \quad \text{and} \quad \mathbb{1}_a \in a^* \times a,$$
4049

4150
with multiplicity 1.
42-
## Matrix product state simulations with MPSKit
43-
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`. With our example in mind, we first select the objects:
51+
## Hamiltonian
52+
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`:
4453

4554
````julia
46-
D0 = one(A4Object(2,2,1)) # unit object of VecA4
47-
D1 = A4Object(2,2,2) # some self-dual object of VecA4
55+
D1 = A4Object(6, 6, 1) # unit in this case
56+
D2 = A4Object(6, 6, 2) # non-trivial 1d irrep
57+
D3 = A4Object(6, 6, 3) # non-trivial 1d irrep
58+
D4 = A4Object(6, 6, 4) # 3d irrep
4859

49-
M = A4Object(1,2,1) # Vec
60+
````
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.
5062

51-
C0 = one(A4Object(1,1,1)) # unit object of RepA4
52-
C1 = A4Object(1,1,1) # non-trivial 1d irrep
63+
````julia
64+
P = Vect[A4Object](D4 => 1) # physical space
65+
T = ComplexF64
66+
# usual Heisenberg part
67+
h1_L = TensorMap(zeros, T, P P P)
68+
h1_R = TensorMap(zeros, T, P P P)
69+
block(h1_L, D4) .= [0; 1]
70+
block(h1_R, D4) .= [0 1;]
71+
@plansor h1[-1 -2; -3 -4] := h1_L[-1 1; -3] * h1_R[-2; 1 -4]
72+
73+
# biquadratic term
74+
h2_L = TensorMap(zeros, T, P Vect[A4Object](D1 => 1, D2 => 1, D3 => 1) P)
75+
h2_R = TensorMap(ones, T, P Vect[A4Object](D1 => 1, D2 => 1, D3 => 1) P)
76+
block(h2_L, D4) .= [4 / 3; 1 / 3; 1 / 3]
77+
@plansor h2[-1 -2; -3 -4] := h2_L[-1 1; -3] * h2_R[-2; 1 -4]
78+
79+
# anti-commutation term
80+
h3_L = TensorMap(zeros, T, P P P)
81+
h3_R = TensorMap(zeros, T, P P P)
82+
block(h3_L, D4) .= [1; 0]
83+
block(h3_R, D4) .= [0 1;]
84+
@plansor h3[-1 -2; -3 -4] := h3_L[-1 1; -3] * h3_R[-2; 1 -4]
85+
86+
L = 60
87+
J1 = 1.0 # probing the A4 SPT phase first
88+
J2 = 1.0
89+
lattice = FiniteChain(L)
90+
H1 = @mpoham sum(-2 * h1{i,j} for (i, j) in nearest_neighbours(lattice))
91+
H2 = @mpoham sum(h2{i,j} for (i, j) in nearest_neighbours(lattice))
92+
H3 = @mpoham sum(2im * h3{i,j} for (i, j) in nearest_neighbours(lattice))
93+
94+
H = H1 + J1 * H2 + J3 * H3
5395
````
5496

55-
Afterwards, we build the physical and virtual space of the matrix product state:
97+
98+
## Constructing the matrix product state
99+
For now, we will select $\mathsf{Vec}$ as the module category:
56100
````julia
57-
P = Vect[A4Object](D0 => 1, D1 => 1)
58-
V = Vect[A4Object](M => D) # D is the bond dimension
101+
M = A4Object(1, 6, 1) # Vec
59102
````
103+
104+
Afterwards, we build the physical and virtual space of the matrix product state:
105+
````julia
106+
D = 40 # bond dimension
107+
V = Vect[A4Object](M => D)
108+
Vb = Vect[A4Object](M => 1) # non-degenerate boundary virtual space
109+
init_mps = FiniteMPS(L, P, V; left=Vb, right=Vb)
110+
````
111+
> [!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.
113+
114+
115+
60116
### Infinite case
61117
Now, using MPKSit, we can perform matrix product state calculations. We construct some nearest-neighbour Hamiltonian and find the MPS representation of the ground state.
62118
````julia

docs/src/man/multifusioncats.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ end
9090

9191
`i` and `j` specify which subcategory $\mathcal{C}_{ij}$ we are considering, and `label` selects a particular simple object within that subcategory.
9292

93-
We want to consider multifusion categories because **their structure encapsulates that of (bi-)module categories**. Every diagonal category $\mathcal{C}_{ii} \coloneqq \mathcal{C}_i$ is a fusion category, and every off-diagonal category $\mathcal{C}_{ij}$ is an invertible $(\mathcal{C}_{i}, \mathcal{C}_{j})$-bimodule category. That way, as long as we know how the simple objects of the fusion and module categories fuse with one another, and we can determine all the monoidal and module associators, we can treat the multifusion category as one large fusion category with limited fusion rules. In particular, the tensor product
93+
We want to consider multifusion categories because **their structure encapsulates that of (bi-)module categories**. Every diagonal category $\mathcal{C}_{ii} \coloneqq \mathcal{C}_i$ (also known as a component category) is a fusion category, and every off-diagonal category $\mathcal{C}_{ij}$ is an invertible $(\mathcal{C}_{i}, \mathcal{C}_{j})$-bimodule category. That way, as long as we know how the simple objects of the fusion and module categories fuse with one another, and we can determine all the monoidal and module associators, we can treat the multifusion category as one large fusion category with limited fusion rules. In particular, the tensor product
9494

9595
$$\otimes_\mathcal{C}: \mathcal{C}_{ij} \times \mathcal{C}_{kl} \rightarrow \delta_{jk}\mathcal{C}_{il}$$
9696

@@ -152,19 +152,17 @@ where by $\mathbb{1}_a$ we mean the right unit of $a$ (the left unit we would de
152152
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
153153

154154
```@raw html
155-
<img src="../img/qdim_fs_MF.svg" alt="" width="50%" class="center"/>
155+
<img src="../img/qdim_fs_MF.svg" alt="" width="50%"/>
156156
```
157157

158158
need to show other changed expressions like A-move, dimension, frobenius-schur indicator, what else outside of TensorKitSectors in terms of fusion tree manipulations?
159159

160160
no figures up till now with arrows, will this even be necessary? maybe if we show B-moves with M->Mop
161161

162-
## Examples of multifusion categories
163-
2x2 thing that is isomorphic to ising
164-
generalisation to Tambara-Yamagami
165-
166-
where to say something about rewriting mpskit to be planar such that braidings with module legs are avoided?
162+
### Braiding
163+
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.
167164

165+
## Examples of multifusion categories
168166
Without specifying any of the categories, the simplest non-trivial multifusion category is a $2\times 2$ one, and the categories can be organised in a matrix as
169167

170168
$$\mathcal{C} = \begin{pmatrix} \mathcal{C}_1 & \mathcal{M} \\ \mathcal{M}^{\text{op}} & \mathcal{C}_2\end{pmatrix}.$$

0 commit comments

Comments
 (0)