The Center Construction
Let $\mathcal C$ be a monoidal category. The Drinfeld center of $\mathcal C$ is a category whose objects are tuples $(X,\gamma)$ such that $X \in \mathcal C$ and $\{\gamma_Z \colon X \otimes Z \to Z \otimes X \mid Z \in \mathcal C\}$ is a natural isomorphism such that
commutes for all $Y,Z \in \mathcal C$ and $\gamma_{\mathbb 1} = \mathrm{id}_X$.
Computing the Center
The Drinfeld center can be computed explicitly for many fusion categories using the algorithm described in [6]. Any fusion category implementing the corresponding interface is supported.
Example
I = ising_category()
C = center(I)
simples(C)
# output
5-element Vector{CenterObject}:
Central object: 𝟙
Central object: 𝟙
Central object: 𝟙 ⊕ χ
Central object: 2⋅χ
Central object: 4⋅XWho is familiar with the center of the Ising category will notice that this looks odd. In fact this is because we define the Ising category over the field $\mathbb Q (\sqrt{2})$and not $\mathbb C$. In this case the endomorphism spaces are division algebras of dimension greater than one.
base_ring(I)
# output
Number field with defining polynomial x^2 - 2
over rational fieldr = endomorphism_ring(C[4])
# output
Matrix algebra of dimension 2 over Number field of degree 2 over QQis_simple(r)
# output
trueSupported categories
In general all split fusion categories implementing the fusion category interface are supported. As ground fields we support all numberfield types from Oscar, i.e. all subtypes of NumField, the algebraic numbers QQBarField, the complex numbers CalciumField and the arbitrary precision complex ball numbers AcbField.
!!! warning If using AcbField as a grounf field, keep in mind to check the precision and increase it if the behaviour seems unexpected. Performing algebraic operations with numeric types is generally hard and multiple magnitudes of precision can be lost in single operations introducing error.
Centers of the AnyonWiki
Currently we are working at the task to compute all centers of multiplicity free fusion categories up to rank seven. At the moment all centers to rank 5 are available and some of rank six. Access them via
TensorCategories.anyonwiki_center — Function
anyonwiki_center(i,j,k,l,m,n,o)Return the center of the fusion category with index (i,j,k,l,m,n,o) from the database.
sourceC = anyonwiki_center(3,1,0,2,1,1,1)
print_multiplication_table(C)
# output
8×8 Matrix{String}:
"(𝟙, γ)" "(X2, γ)" … "(X2 ⊕ X3, γ)"
"(X2, γ)" "(𝟙, γ)" "(𝟙 ⊕ X3, γ)"
"(𝟙 ⊕ X2, γ)" "(𝟙 ⊕ X2, γ)" "(𝟙 ⊕ X3, γ) ⊕ (X2 ⊕ X3, γ)"
"(X3, γ1)" "(X3, γ1)" "(𝟙 ⊕ X3, γ) ⊕ (X2 ⊕ X3, γ)"
"(X3, γ2)" "(X3, γ2)" "(𝟙 ⊕ X3, γ) ⊕ (X2 ⊕ X3, γ)"
"(X3, γ3)" "(X3, γ3)" … "(𝟙 ⊕ X3, γ) ⊕ (X2 ⊕ X3, γ)"
"(𝟙 ⊕ X3, γ)" "(X2 ⊕ X3, γ)" "(X2, γ) ⊕ (𝟙 ⊕ X2, γ) ⊕ (X3, γ1) ⊕ (X3, γ2) ⊕ (X3, γ3)"
"(X2 ⊕ X3, γ)" "(𝟙 ⊕ X3, γ)" "(𝟙, γ) ⊕ (𝟙 ⊕ X2, γ) ⊕ (X3, γ1) ⊕ (X3, γ2) ⊕ (X3, γ3)"F- and R-Symbols
We can export the $F$- and $R$-symbols as Dicts via the methods
TensorCategories.F_symbols — Function
TensorCategories.R_symbols — Function
TensorCategories.numeric_F_symbols — Function
numeric_F_symbols(C::SixJCategory; precision = 2048)
numeric_F_symbols(C::SixJCategory, e::AbsSimpleNumFieldEmbedding; precision = 2048)Return a Dictionary of the F-symbols of $C$ evaluated under the embedding $e$.
sourceTensorCategories.numeric_R_symbols — Function
numeric_R_symbols(C::SixJCategory; precision = 2048)
numeric_R_symbols(C::SixJCategory, e::AbsSimpleNumFieldEmbedding; precision = 2048)Return a Dictionary of the R-symbols of $C$ evaluated under the embedding $e$.
sourceAbstractAlgebra.Generic.dim — Method
AbstractAlgebra.compose — Method
AbstractAlgebra.direct_sum — Method
AbstractAlgebra.direct_sum — Method
AbstractAlgebra.is_isomorphic — Method
is_isomorphic(X::CenterObject, Y::CenterObject)Check if X≃Y. Return (true, m) where mis an isomorphism if true, else return (false,nothing).
AbstractAlgebra.kernel — Method
kernel(f::CenterMoprhism)Return a tuple (K,k) where Kis the kernel object and kis the inclusion.
Base.split — Method
split(C::CenterCategory; absolute = true)Extend the scalars of the center category C such that it is split semisimple after karoubian closure. If the flag absolute is set false the extension field is chosen to be a relative numberfield that includes the original field as is. The splitting field is not minimal in general and usually chosen to be a cyclotomic extension of the base field.
Hecke.center — Method
Hecke.cokernel — Method
cokernel(f::CenterMorphism)Return a tuple (C,c) where Cis the cokernel object and cis the projection.
Hecke.dual — Method
Hecke.tensor_product — Method
Hecke.tensor_product — Method
LinearAlgebra.tr — Method
Oscar.morphism — Method
TensorCategories.add_simple! — Method
add_simple!(C::CenterCategory, S::CenterObject)
add_simple!(C::CenterCategory, S::Vector{CenterObject})Add the simple object S to the vector of simple objects.
TensorCategories.associator — Method
associator(X::CenterObject, Y::CenterObject, Z::CenterObject)Return the associator isomorphism (X⊗Y)⊗Z → X⊗(Y⊗Z).
TensorCategories.braiding — Method
TensorCategories.central_projection — Function
central_projection(X::CenterObject, Y::CenterObject, f::Morphism)Compute the image under the projection Hom(F(X),F(Y)) → Hom(X,Y).
TensorCategories.coev — Method
TensorCategories.cyclotomic_splitting_field — Method
cyclotomic_splitting_field(polys::Vector{<:PolyRingElem})Compute a common splitting field that which is a cyclotomic extension of the base field.
sourceTensorCategories.ev — Method
TensorCategories.fpdim — Method
TensorCategories.half_braiding — Method
half_braiding(X::CenterObject, Y::Object)Return the half braiding isomorphism γ_X(Y): X⊗Y → Y⊗X.
TensorCategories.half_braiding — Method
half_braiding(Z::CenterObject)Return a vector with half braiding morphisms Z⊗S → S⊗Z for all simple objects S.
TensorCategories.hom_by_adjunction — Method
hom_by_adjunction(X::CenterObject, Y::CenterObject)Compute the Hom space $Hom(X,Y)$ using the induction adjunction.
sourceTensorCategories.induction_generators — Method
induction_generators(C::CenterCategory)Returns a (not necessarily minimal) set $S$ of simples in $C$ such that every simple of $Z(C)$ is a subquotient of an image of some $s ∈ C$.
sourceTensorCategories.isequal_without_parent — Method
is_equal_without_parent(X::CenterObject, Y::CenterObject)Check equality but skipping the formal check for identical parent.
sourceTensorCategories.object — Method
TensorCategories.pivotal — Method
TensorCategories.simples — Method
TensorCategories.sort_simples_by_dimension! — Method
sort_simples_by_dimension!(C::Category)For a mutable category type sort the simple objects by Frobenius-Perron dimension.
sourceTensorCategories.spherical — Method
TensorCategories.zero_morphism — Method
TensorCategories.is_half_braiding — Function
TensorCategories.adjusted_dual_basis — Method
adjusted_dual_basis(V::AbstractHomSpace, U::AbstractHomSpace, S::Object, W::Object, T::Object)Compute a dual basis for the spaces Hom(S, W⊗T) and Hom(S̄⊗W, T̄)
sourceTensorCategories.dual_basis — Method
dual_basis(V::AbstractHomSpace, W::AbstractHomSpace)Compute the dual basis for Hom(X,Y) and Hom(X̄,Ȳ)
source