Skip to content

Commit

Permalink
sync
Browse files Browse the repository at this point in the history
  • Loading branch information
FabianMaeurer committed Dec 3, 2024
1 parent bb9fea2 commit 8df063e
Show file tree
Hide file tree
Showing 10 changed files with 178 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/Examples/Haagerup/HaagerupH3.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ https://arxiv.org/pdf/1906.01322
where p1,p2 = ±1 are parameters for the different possible sets of associators.
"""
function haagerup_H3(K::Field = QQ; p1 = 1, p2 = 1)
function haagerup_H3(K::Ring = QQ; p1 = 1, p2 = 1)
_,x = QQ["x"]
if K == QQ
K,_ = number_field(x^16 - 4*x^14 + 13*x^12 + 4*x^10 + 53*x^8 + 4*x^6 + 13*x^4 - 4*x^2 + 1)
Expand Down
2 changes: 1 addition & 1 deletion src/Examples/TambaraYamagami/TambaraYamagami.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Construct ``TY(A,τ,χ)`` over ℚ̅ where ``τ = √|A|`` and ``χ`` is a gener
function tambara_yamagami(A::GAPGroup)
m = Int(exponent(A))
_, x = QQ[:x]
K = splitting_field([x^m + 1, x^2 - 2])
K = splitting_field([x^m + 1, x^2 - order(A)])
tambara_yamagami(K, A)
end

Expand Down
19 changes: 14 additions & 5 deletions src/TensorCategories.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import Oscar: +, @alias, @attributes, AbstractSet, AcbField, StructureConstantAl
is_rational, is_semisimple, is_simple, is_square, is_subfield, is_subgroup,
is_independent, is_invertible, iso_oscar_gap,
jordan_normal_form, kernel, kronecker_product, lcm, leading_coefficient,
leading_monomial, left_transversal, lex, load, matrix, matrix_algebra, minpoly,
leading_monomial, left_transversal, lex, load, matrix, matrix_algebra, minpoly, quo,
monomials, multiplication_table, multiplicity, nullspace, nvars, one, orbit,
orbits, order, parent, permutation_matrix, preimage, primary_decomposition, product, rank, real_solutions, resultant, root_of_unity, roots, rref, save,
set_attribute!, size, solve, sparse_matrix, splitting_field,
Expand All @@ -34,7 +34,9 @@ import Oscar: +, @alias, @attributes, AbstractSet, AcbField, StructureConstantAl
gens, center, graph_from_adjacency_matrix, connected_components, weakly_connected_components, Directed, Undirected, morphism, algebra,
radical, is_zero, minimal_submodules, representation_matrix, QQBarField,
is_irreducible, polynomial, is_univariate, action, is_equivalent, extension_of_scalars, free_module, perm, fraction_field, simplify, CalciumField, CalciumFieldElem, FracFieldElem, PadicField, PadicFieldElem,
QadicField, QadicFieldElem, FlintLocalField, FlintLocalFieldElem
QadicField, QadicFieldElem, FlintLocalField, FlintLocalFieldElem,
MultTableGroup, is_isomorphic_with_map, subgroup_classes, representative,
pc_group, permutation_group

using Serialization
import Oscar: @register_serialization_type,
Expand Down Expand Up @@ -71,6 +73,7 @@ export ⊕
export
export
export
export
export AbstractHomSpace
export action
export action_matrix
Expand Down Expand Up @@ -170,6 +173,7 @@ export fpdim
export Functor
export FusionCategory
export fusion_coefficient
export gcrossed_product
export generic_algebra
export getindex
export graded_vector_spaces
Expand All @@ -185,6 +189,8 @@ export GroupRepresentation
export GroupRepresentationCategory
export GroupRepresentationCategory
export GroupRepresentationMorphism
export gtensor_action
export GTensorAction
export GVSHomSpace
export GVSMorphism
export GVSObject
Expand Down Expand Up @@ -216,6 +222,7 @@ export inv
export inv_associator
export inverse_induction_adjunction
export inverse_internal_hom_adjunction
export invertibles
export involution
export is_abelian
export is_abelian
Expand Down Expand Up @@ -440,12 +447,12 @@ include("CategoryFramework/NaturalTransformations.jl")


include("TensorCategoryFramework/AbstractTensorMethods.jl")
include("TensorCategoryFramework/FusionCategory.jl")
include("TensorCategoryFramework/SixJCategory/FusionCategory.jl")
#include("structures/MultiFusionCategories/FusionCategoryExperimental.jl")
include("TensorCategoryFramework/6j-Solver.jl")
include("TensorCategoryFramework/Skeletization.jl")
include("TensorCategoryFramework/PentagonAxiom.jl")
include("TensorCategoryFramework/HexagonAxion.jl")
include("TensorCategoryFramework/TensorAxioms/PentagonAxiom.jl")
include("TensorCategoryFramework/TensorAxioms/HexagonAxion.jl")
include("TensorCategoryFramework/RingSubcategories.jl")
include("TensorCategoryFramework/TensorPowerCategory.jl")
include("TensorCategoryFramework/TensorFunctors.jl")
Expand All @@ -455,6 +462,8 @@ include("TensorCategoryFramework/Center/InductionMonad.jl")
include("TensorCategoryFramework/Center/Centralizer.jl")
include("TensorCategoryFramework/Center/CentralizerInduction.jl")
include("TensorCategoryFramework/Center/CenterChecks.jl")
include("TensorCategoryFramework/GTensorAction.jl")
include("TensorCategoryFramework/SixJCategory/GCrossedFusion.jl")


include("TensorCategoryFramework/InternalModules/InternalAlgebras.jl")
Expand Down
67 changes: 67 additions & 0 deletions src/TensorCategoryFramework/GTensorAction.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#=----------------------------------------------------------
Define G-actions on Tensor Categories
----------------------------------------------------------=#


struct GTensorAction
C::Category
G::GAPGroup
images::Vector{<:AbstractFunctor}
end

group(T::GTensorAction) = T.G

function gtensor_action(C::Category, G::GAPGroup, images::Vector{<:Functor})
GTensorAction(C,G,images)
end

function gtensor_action(C::Category, G::GAPGroup, images::Vector{<:Object})
GTensorAction(C,G,[(X -) for X images])
end

function (T::GTensorAction)(g::GroupElem)
i = findfirst(==(g), elements(group(T)))
return T.images[i]
end


#=----------------------------------------------------------
Cannonical G-action
----------------------------------------------------------=#

function gtensor_action(C::Category, G::GAPGroup)

C₁ = invertibles(C)
n = length(C₁)

mult = multiplication_table(C₁)
M = [findfirst(!iszero, mult[i,j,:]) for i 1:n, j 1:n]

H = MultTableGroup(M)

m,r = divrem(order(G), n)

if r != 0
return gcrossed_product(C, trivial_gtensor_action(C,G))
end

subs = representative.(subgroup_classes(G, order = m))

i = findfirst(N -> is_isomorphic(quo(G,N)[1], H), subs)

Q,p = quo(G,subs[i])

proj = compose(p, is_isomorphic_with_map(Q, H)[2])

els = elements(H)

images = [findfirst(==(proj(g)), els) for g elements(G)]
images = [C₁[i] for i images]

action = gtensor_action(C, G, images)
end

#=----------------------------------------------------------
Trivial G-action
----------------------------------------------------------=#

80 changes: 80 additions & 0 deletions src/TensorCategoryFramework/SixJCategory/GCrossedFusion.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#=----------------------------------------------------------
Build the G-Crossed product 𝒞 ⋊ G of a Fusion category
with a G-action on 𝒞.
----------------------------------------------------------=#

function gcrossed_product(C::SixJCategory, T::GTensorAction)
S = simples(C)
G = group(T)
K = base_ring(C)

irreducibles = ["($s,$g)" for g elements(permutation_group(G)), s simples_names(C)][:]

elements_of_G = elements(G)
CxG = six_j_category(K, irreducibles)

m,n = length(S), length(elements_of_G)

mult = zeros(Int,n*m,n*m,n*m)

for i1 1:m, j1 1:n, i2 1:m, j2 1:n
g,h = elements_of_G[[j1,j2]]
X = S[i1] (T(g)(S[i2]))
Y = g * h

Y_ind = findfirst(==(Y),elements_of_G)

for k 1:m
mult[(i1-1)*n + j1, (i2-1)*n + j2, (k-1)*n + Y_ind] = X.components[k]
end
end

ass = Array{MatElem,4}(undef, n*m, n*m, n*m, n*m)

for i1 1:m, j1 1:n, i2 1:m, j2 1:n, i3 1:m, j3 1:n
g1,g2,g3 = elements_of_G[[j1,j2,j3]]

X = S[i1] (T(g1)(S[i2])) (T(g1*g2)(S[i3]))
Y = g1 * g2 * g3

for k 1:m, l 1:n
ass[(i1-1)*n + j1, (i2-1)*n + j2, (i3-1)*n + j3, (k-1)*n + l] = C.ass[i1,i2,i3,k]
end
end

set_tensor_product!(CxG, mult)
set_associator!(CxG, ass)

one_coeffs = zeros(Int,n*m)
one_C = one(C).components

for i 1:m
one_coeffs[(i-1)*n + 1] = one_C[i]
end

set_one!(CxG, one_coeffs)

try
spheric = [C.spherical[i] for j 1:n, i 1:m][:]
set_spherical(CxG, spheric)
catch
end

set_name!(CxG, "Crossed product of $(C.name) and $G")

return CxG
end


function (C::SixJCategory, G)
gcrossed_product(C,G)
end

function gcrossed_product(C::SixJCategory, G::GAPGroup)
# Define a canonical G-action on C. Might be trivial

action = gtensor_action(C,G)

return gcrossed_product(C, action)
end

File renamed without changes.
16 changes: 15 additions & 1 deletion src/TensorCategoryFramework/TensorFunctors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,18 @@ function induction_mor_map(f::Morphism)
S = simples(parent(domain(f)))

return direct_sum([id(s)fid(dual(s)) for s S])
end
end


#=----------------------------------------------------------
Inner Endofunctors
----------------------------------------------------------=#

abstract type MonoidalFunctor <: AbstractFunctor end

mutable struct InnerAutoequivalence <: MonoidalFunctor
domain::Category
object::Object
end


0 comments on commit 8df063e

Please sign in to comment.