Products, scalar extension, and related constructions

This page lists constructions that transform an existing category or select a category from it. Each operation requires corresponding methods on the input model; the existence of the generic function does not imply support for every category type.

Products, arrows, and opposites

Julia constructionMathematical result
ArrowCategory(C)The category whose objects are arrows of $\mathcal C$ and whose morphisms are commutative squares
opposite_category(C)The opposite category $\mathcal C^{\mathrm{op}}$; use opposite_object and opposite_morphism for its elements
product_category(C,D)The categorical product, with pairs of objects and morphisms
C ⊠ DThe Deligne tensor product of multifusion SixJCategory models over coefficient fields admitting a common coercion

The categorical product and Deligne tensor product are different. For finite split semisimple categories, simple objects of the Deligne product are pairs of simple objects, while simple objects of the additive categorical product are supported in one factor.

The opposite category reverses every arrow. Reversing a braiding is a different operation: reverse_braiding(C) leaves the category and tensor product in place and replaces

\[\label{eq:reverse-braiding} c_{X,Y}\quad\text{by}\quad c^{\mathrm{rev}}_{X,Y}=c_{Y,X}^{-1}.\]

The current reverse_braiding method supports SixJCategory models and transports their existing monoidal data rather than constructing an opposite category.

Coefficients, splitting, and completions

Julia constructionMathematical result
extension_of_scalars(C,L; embedding=...)A model-specific realization of scalar extension along a specified field homomorphism $k\to L$
split(Z::CenterCategory; absolute=true)Search for a splitting extension of a supported Drinfeld center
split(X; max_degree=64, check=false), split(objects; max_degree=64, check=false)Over a finite field, split the indecomposable summands of a specified finite family over one finite extension
karoubian_envelope(Z)Add images of idempotents in supported center and relative-center models
semisimplify(C)Quotient negligible morphisms in supported pivotal models

Mathematically, one first forms the coefficient extension $\mathcal C\otimes_k L$, with the same objects as $\mathcal C$ and

\[\label{eq:scalar-extension-hom} \operatorname{Hom}_{\mathcal C\otimes_k L}(X,Y) =\operatorname{Hom}_{\mathcal C}(X,Y)\otimes_k L.\]

New idempotents need not have images in this category, so it need not remain abelian. For a semisimple category, scalar extension means the Karoubi completion

\[\label{eq:scalar-extension-karoubi-envelope} \mathcal C\boxtimes_k L=\operatorname{Kar}(\mathcal C\otimes_k L).\]

For a weak fusion category this agrees with the Deligne product $\mathcal C\boxtimes_k\operatorname{Vec}_L$; see (Mäurer and Thiel, 2024; §5.1) and (Mäurer, 2026; §1.4.5).

The function extension_of_scalars realizes this construction according to the category model. For split skeletal input no simple endomorphism algebra acquires new idempotents, so the implementation transports the coefficient arrays directly. For a supported CenterCategory, it extends the known simple central objects and decomposes those whose endomorphism algebras split over the new field. Scalar extension can therefore change the simple objects and their endomorphism algebras. Specify an embedding whenever the source field has more than one embedding into the target.

Scalar extension along a field homomorphism preserves characteristic. When the same formulas are instead reduced to positive characteristic, semisimplicity and every denominator in the structure maps must be checked again. The coefficient-field chapter explains these distinctions, and the Ising-center example exhibits splitting after scalar extension.

For a chosen object or finite list over a finite field, split changes only that family; it does not enumerate the simple objects of the ambient category or the tensor closure of the chosen family. Its result records the extension field, embedding, extended objects, and their decompositions. The default relative-degree bound is max_degree=64. In a nonsemisimple category the construction makes the resulting indecomposable summands absolutely indecomposable; this does not by itself make them simple. The degree construction establishes this result, while check=true recomputes the residue endomorphism algebras afterward.

Idempotent completion and semisimplification solve different problems. The first adds images of idempotents; the second takes a quotient by negligible morphisms. Neither operation by itself chooses a splitting field. The current semisimplify(C) call constructs a wrapper. Its Hom spaces and morphism equality use the radical of the categorical trace pairing, so they require finite Hom bases and scalar-valued traces. Decomposition and simple enumeration additionally require the corresponding operations from the input model. The constructor itself does not verify these hypotheses or independently prove that the resulting wrapper is semisimple.

Generated subcategories and skeletal coordinates

Julia constructionMathematical result
tensor_power(X,k), X ⊗ kThe chosen recursively bracketed tensor power $X^{\otimes k}$
fusion_subcategory(X)The fusion subcategory generated by a SixJObject
simple_fusion_subcategories(C)The distinct simple fusion subcategories found from simple generators of a skeletal fusion category
tensor_power_category(X...)The additive closure of summands found in tensor words in the generators
six_j_category(C)A skeleton with chosen matrix coordinates for a supported split semisimple category whose is_ring(C) predicate is true
center(C)The Drinfeld center, whose objects carry half-braidings

For $k\geq0$, tensor_power(X,k) returns the unit when $k=0$ and otherwise forms the power with the category's tensor product; a negative exponent is not defined. This constructs an object and does not construct a subcategory.

tensor_power_category(X...) begins with the tensor unit and enlarges its stored indecomposable list as tensor words are explored. It does not automatically close under duals, extensions, or subquotients. The more specialized fusion_subcategory(X) uses the finite skeletal fusion rules of its input. simple_fusion_subcategories(C) considers each simple generator, keeps those generated fusion rings that have no proper fusion subring, and removes repetitions. Its current implementation consequently requires skeletal SixJCategory input. It does not return every subcategory generated by a single simple object.

Skeletonization changes the presentation of a supported split semisimple category; it does not adjoin new half-braidings. The skeletal-model chapter describes the resulting coordinates, while the Drinfeld-center chapter describes the different construction performed by center(C).

The API reference lists the principal public names for these constructions. Use Julia help mode or methods(name) for exact signatures.

Continue with Algebra objects and internal modules.