Skip to content

Commit 436e622

Browse files
committed
more on extension + references within package
1 parent 4282ebd commit 436e622

4 files changed

Lines changed: 27 additions & 14 deletions

File tree

docs/src/man/extension.md

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# MultiTensorKit as an extension to TensorKit
1+
# [MultiTensorKit as an extension to TensorKit](@id extension)
22

33
This section will explain the internal changes to TensorKit which are required to extend the compatibility with fusion categories to multifusion ones.
44
Users who are unfamiliar with TensorKit are kindly guided towards the [TensorKit tutorial](https://jutho.github.io/TensorKit.jl/stable/man/tutorial/).
@@ -30,9 +30,16 @@ These data are cached in a hash table for later use.
3030

3131
A consequence of the multifusion structure is the colorings used in the graphical calculus of fusions.
3232
A natural introduction is the notion of a *left* and *right* unit of some (simple) object in the multifusion category.
33+
These are called with the functions `TensorKitSectors.leftunit` and `TensorKitSectors.rightunit`.
3334
Clearly, for the usual case of just one fusion category, these both coincide with the unique unit object.
35+
For this reason, the `TensorKitSectors.UnitStyle` trait is introduced to differentiate between fusion categories and multifusion categories, returning `SimpleUnit()` and `GenericUnit()`, respectively.
36+
This trait is used to specialise certain functions within TensorKit (see below).
37+
`TensorKitSectors.allunits` is also introduced to return all the simple unit objects of the (multi)fusion category.
38+
This function must be defined for every multifusion category to be compatible with TensorKit.
3439
Via the fusion rules, the left and right units of all `BimoduleSector`s along with their duals are also extracted and cached.
35-
Since the most general fusion rule possible is one with multiplicities involved, the entire `BimoduleSector` is set to have `TensorKitSectors.FusionStyle(::Type{<:BimoduleSector}) = GenericFusion()`.
40+
The fusion behavior that must be imposed for the entire `BimoduleSector` is the most general one that appears in the fusion between any two `BimoduleSector`s.
41+
In particular, if one of the diagonal fusion categories has fusion rules with multiplicities, then the entire `BimoduleSector` must be set to have `TensorKitSectors.FusionStyle(::Type{<:BimoduleSector}) = GenericFusion()`.
42+
This is the case for the $A_4$ `BimoduleSector`, since $\mathsf{Rep(A_4)}$ is one of the diagonal fusion categories and has fusion rules with multiplicities.
3643

3744
Going beyond the ring structure, the F-symbols are also read in from the artifact, and are stored in a hash table for later use.
3845
The F-symbols are then used to perform F-moves on `BimoduleSector`s, which is required to perform recouplings of fusion trees when doing e.g. contractions of tensors with these categories grading the vector spaces.
@@ -48,15 +55,23 @@ This allows for more general tensor network simulations of quantum many-body sys
4855

4956
Certain changes within TensorKit were required to make it compatible with the multifusion categorical structure.
5057
In particular, the presence of a simple unit object for every fusion category on the diagonal of the multifusion category, along with the off-diagonal nature of the simple objects of the bimodule categories, required some internal changes to the way unit objects were treated in TensorKit.
51-
Most notably, the unit object is no longer unique, and thus it is of utmost importance that the correct unit object is considered when performing tensor contractions at the level of the fusion trees.
58+
Most notably, the unit object is no longer unique, and thus it is of utmost importance that the correct one is considered when performing tensor contractions at the level of the fusion trees.
5259
This is achieved precisely through colorings and the use of `leftunit` and `rightunit`.
5360
For this reason, every fusion tree manipulation which previously involved "the" unit object, now involves the `leftunit` and `rightunit` of some neighboring sector in the manipulation to identify the correct color.
54-
An important example of this is explained in the previous section [#TODO: add opposite module categories reference], namely the mapping of a splitting vertex to a fusion vertex through the B-move.
61+
An important example of this is explained in the previous section on [Opposite module categories](@ref opposite_module_categories), namely the mapping of a splitting vertex to a fusion vertex via a B-move.
62+
63+
When manipulating spaces graded by `BimoduleSector`s, one needs to also be careful of which unit spaces can compose with other graded spaces on which side.
64+
This introduces the functions `TensorKit.leftunitspace` and `TensorKit.rightunitspace`, which check whether the coloring of the (in general) composite object grading the space is uniform, then return the one-dimensional space with the unique left/right unit object consistent with that coloring.
65+
Clearly, `leftunitspace` and `rightunitspace` coincide for fusion categories; this defaults to `TensorKit.unitspace`.
66+
For multifusion categories, the latter function returns the space with the semisimple unit object grading it.
67+
`leftunitspace` and `rightunitspace` are used with the functions `TensorKit.insertleftunit` and `TensorKit.insertrightunit`.
68+
There, based on the index where a unit space is wished to be inserted, a `leftunitspace` or `rightunitspace` is added such that the resulting space remains consistent with the fusion rules of the multifusion category.
69+
Similarly, `TensorKit.removeunit` is used to remove unit spaces, and will explicitly check whether the space contains only unit objects of any color with `TensorKit.isunitspace`.
5570

5671
# MultiTensorKit compatibility with MPSKit
5772

5873
This section will briefly explain the changes within MPSKit which are required to make it compatible with MultiTensorKit.
59-
For a more practical explanation, users are kindly guided towards the next section [#TODO: add implementation reference].
74+
For a more practical explanation, users are kindly guided towards the [Example section](@ref implementation).
6075

6176
The main change within MPSKit is very similar to the fusion tree manipulations in TensorKit, namely the use of `leftunit` and `rightunit` to identify the correct unit object.
6277
In the case of MPSKit, trivial spaces are used everywhere, from the boundary of a finite MPS to the virtual spaces of a Hamiltonian written in MPO form.

docs/src/man/fusioncats.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Introduction
1+
# [Introduction](@id intro)
22

33
The manual has been divided into different sections in an attempt to break down the information the user requires to use MultiTensorKit.jl.
44
We start off with a short summary of fusion category theory.
@@ -7,7 +7,7 @@ Be aware that notation may differ from the literature.
77

88
Afterwards, the extension to multifusion categories is explained, and its relation to (bi)module categories over fusion categories is shown.
99

10-
# Fusion category theory
10+
# [Fusion category theory](@id fusion_cat_theory)
1111

1212
The aim of this section is to explain the bare minimum required to proceed to the next section on multifusion category theory and bimodule categories.
1313
More details can be found in the [TensorKit](https://jutho.github.io/TensorKit.jl/stable/man/categories/) documentation or the book Tensor Categories [etingof2016tensor](@cite).

docs/src/man/implementation.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Symmetric tensor networks: $\mathsf{Rep(A_4)}$ as a guiding example
1+
# [Symmetric tensor networks: $\mathsf{Rep(A_4)}$ as a guiding example](@id implementation)
22
This tutorial is dedicated to explaining how MultiTensorKit was implemented to be compatible with with TensorKit and MPSKit for matrix product state simulations.
33
In particular, we will be making a generalised anyonic spin chain.
44
We will demonstrate how to reproduce the entanglement spectra found in [Lootens_2024](@cite).
@@ -36,8 +36,6 @@ Thus, the 7 module categories $\mathcal{M}$ one can choose over $\mathsf{Rep(A_4
3636

3737
When referring to specific fusion and module categories, we will use this non-multifusion notation.
3838

39-
The easiest way to identify which elements of the multifusion category correspond to the subcategories we wish to use is ... #TODO
40-
4139
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.
4240
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.
4341
Hence, the simplest way to find the unit object of a fusion subcategory is

docs/src/man/multifusioncats.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Extending to multifusion category theory
1+
# [Extending to multifusion category theory](@id multifusion_cat_theory)
22

33
This section will explain how to go from a fusion category to a multifusion category, as well as why one would want to consider the latter.
44
Multifusion categories naturally embed the structure of **bimodule categories**.
@@ -65,7 +65,7 @@ An F-move with ${}^{\bowtie}\!F$ is given by:
6565
```@raw html
6666
<img src="../img/Fmove_CMD.svg" alt="" width="70%" class="color-invertible"/>
6767
```
68-
## Opposite module categories
68+
## [Opposite module categories](@id opposite_module_categories)
6969
Consider a fusion category $\mathcal{D}$ and a *right* module category $\mathcal{M}$ over $\mathcal{D}$.
7070
We can define $\mathcal{M}^{\text{op}}$ to be the opposite category of $\mathcal{M}$ [etingof2009](@cite).
7171
Then, $\mathcal{M}^{\text{op}}$ is a *left* module category over $\mathcal{D}$.
@@ -256,7 +256,7 @@ Sectors provided by MultiTensorKit do *not* support braiding.
256256
We do this for two reasons.
257257
On the one hand, there is no natural 1-categorical way of defining braidings between the components of the multifusion category.
258258
It is possible that the diagonal fusion categories themselves are braided, but a "componentwise" braiding is unwise to support.
259-
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. More information on this can be found in the next section [#TODO: add reference to extension page]
259+
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. More information on this can be found in [MultiTensorKit as an extension to TensorKit](@ref extension).
260260

261261
## Examples of multifusion categories
262262
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
@@ -275,4 +275,4 @@ This particular example can be found in [TensorKitSectors](https://github.com/Qu
275275
This construction can be generalised to $\mathcal{C}_1 = \mathcal{C}_2 = \mathsf{Rep(G)}$ with $\mathsf{G}$ a finite abelian group, such that the entire multifusion category is Morita equivalent to $\mathsf{Rep(G)}$ and can be evaluated as the Tambara-Yamagami category $\mathsf{TY}(\mathsf{G})$ (with positive Frobenius-Schur indicator for our purposes), and $\mathsf{Vec}$ will represent the duality object which squares to all invertible objects of the original group.
276276
To be exact, one of the diagonal fusion categories should be $\mathsf{Vec_G}$ for the correct Morita dual relation, but it is known for abelian groups that this is isomorphic to $\mathsf{Rep(G)}$.
277277

278-
The example $\mathcal{C}_1 = \mathsf{Rep(A_4)}$ is worked out more in detail on the [#TODO add reference to implementation page].
278+
The example $\mathcal{C}_1 = \mathsf{Rep(A_4)}$ is worked out more in detail in the [guiding example](@ref implementation).

0 commit comments

Comments
 (0)