Skip to content

Commit

Permalink
More fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
lgoettgens committed Aug 31, 2023
1 parent 9779c73 commit c6b82be
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 27 deletions.
12 changes: 8 additions & 4 deletions src/ModuleSimpleStructure.jl
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ function isomorphic_module_with_simple_structure(V::LieAlgebraModule; check::Boo
push!(Ds, C)
end
end
filter!(D -> dim(D) > 0, Ds)
Ds_filtered = filter(D -> dim(D) > 0, Ds)
Ds = length(Ds_filtered) > 0 ? Ds_filtered : [Ds[1]]
if length(Ds) == 1
W = Ds[1]
B_to_W = Cs_with_hom[1][2]
i = findfirst(C_with_hom -> C_with_hom[1] == W, Cs_with_hom)
B_to_W = Cs_with_hom[i][2]
h = hom(V, W, matrix(B_to_W); check)
return W, h
else
Expand All @@ -72,10 +74,12 @@ function isomorphic_module_with_simple_structure(V::LieAlgebraModule; check::Boo
push!(Ds, C)
end
end
filter!(D -> dim(D) != 1 || any(!iszero, D.transformation_matrices), Ds)
Ds_filtered = filter(D -> dim(D) != 1 || any(!iszero, D.transformation_matrices), Ds)
Ds = length(Ds_filtered) > 0 ? Ds_filtered : [Ds[1]]
if length(Ds) == 1
W = Ds[1]
B_to_W = Cs_with_hom[1][2]
i = findfirst(C_with_hom -> C_with_hom[1] == W, Cs_with_hom)
B_to_W = Cs_with_hom[i][2]
h = hom(V, W, matrix(B_to_W); check)
return W, h
end
Expand Down
45 changes: 22 additions & 23 deletions test/ModuleSimpleStructure-test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -137,31 +137,26 @@
end

@testset "Tensor product: nested" begin
V = tensor_product(tensor_product(stdV, symmetric_power(stdV, 3)), dual(stdV))
V = tensor_product(tensor_product(stdV, exterior_power(stdV, 2)), dual(stdV))
W, h = isomorphic_module_with_simple_structure(V)
@test is_isomorphism(h)
@test W == tensor_product(stdV, symmetric_power(stdV, 3), dual(stdV))
@test W == tensor_product(stdV, exterior_power(stdV, 2), dual(stdV))
@test sprint(show, basis(V)) ==
"LieAlgebraModuleElem{QQFieldElem}[(v_1 ⊗ (v_1 ∧ v_2v_3)) ⊗ (v_1*), (v_1 ⊗ (v_1 ∧ v_2 ∧ v_3)) ⊗ (v_2*), (v_1 ⊗ (v_1v_2 ∧ v_3)) ⊗ (v_3*), (v_2 ⊗ (v_1 ∧ v_2 ∧ v_3)) ⊗ (v_1*), (v_2 ⊗ (v_1 ∧ v_2 ∧ v_3)) ⊗ (v_2*), (v_2 ⊗ (v_1 ∧ v_2 ∧ v_3)) ⊗ (v_3*), (v_3 ⊗ (v_1 ∧ v_2v_3)) ⊗ (v_1*), (v_3 ⊗ (v_1 ∧ v_2 ∧ v_3)) ⊗ (v_2*), (v_3 ⊗ (v_1v_2 ∧ v_3)) ⊗ (v_3*)]"
"LieAlgebraModuleElem{QQFieldElem}[(v_1 ⊗ (v_1 ∧ v_2)) ⊗ (v_1*), (v_1 ⊗ (v_1 ∧ v_2)) ⊗ (v_2*), (v_1 ⊗ (v_1 ∧ v_2)) ⊗ (v_3*), (v_1 ⊗ (v_1 ∧ v_3)) ⊗ (v_1*), (v_1 ⊗ (v_1 ∧ v_3)) ⊗ (v_2*), (v_1 ⊗ (v_1 ∧ v_3)) ⊗ (v_3*), (v_1 ⊗ (v_2 ∧ v_3)) ⊗ (v_1*), (v_1 ⊗ (v_2 ∧ v_3)) ⊗ (v_2*), (v_1 ⊗ (v_2 ∧ v_3)) ⊗ (v_3*), (v_2 ⊗ (v_1 ∧ v_2)) ⊗ (v_1*), (v_2 ⊗ (v_1 ∧ v_2)) ⊗ (v_2*), (v_2 ⊗ (v_1 ∧ v_2)) ⊗ (v_3*), (v_2 ⊗ (v_1 ∧ v_3)) ⊗ (v_1*), (v_2 ⊗ (v_1 ∧ v_3)) ⊗ (v_2*), (v_2 ⊗ (v_1 ∧ v_3)) ⊗ (v_3*), (v_2 ⊗ (v_2 ∧ v_3)) ⊗ (v_1*), (v_2 ⊗ (v_2 ∧ v_3)) ⊗ (v_2*), (v_2 ⊗ (v_2 ∧ v_3)) ⊗ (v_3*), (v_3 ⊗ (v_1 ∧ v_2)) ⊗ (v_1*), (v_3 ⊗ (v_1 ∧ v_2)) ⊗ (v_2*), (v_3 ⊗ (v_1 ∧ v_2)) ⊗ (v_3*), (v_3 ⊗ (v_1 ∧ v_3)) ⊗ (v_1*), (v_3 ⊗ (v_1 ∧ v_3)) ⊗ (v_2*), (v_3 ⊗ (v_1 ∧ v_3)) ⊗ (v_3*), (v_3 ⊗ (v_2 ∧ v_3)) ⊗ (v_1*), (v_3 ⊗ (v_2 ∧ v_3)) ⊗ (v_2*), (v_3 ⊗ (v_2 ∧ v_3)) ⊗ (v_3*)]"
@test sprint(show, h.(basis(V))) ==
"LieAlgebraModuleElem{QQFieldElem}[v_1 ⊗ (v_1 ∧ v_2v_3) ⊗ (v_1*), v_1 ⊗ (v_1 ∧ v_2 ∧ v_3) ⊗ (v_2*), v_1 ⊗ (v_1v_2 ∧ v_3) ⊗ (v_3*), v_2 ⊗ (v_1 ∧ v_2 ∧ v_3) ⊗ (v_1*), v_2 ⊗ (v_1 ∧ v_2 ∧ v_3) ⊗ (v_2*), v_2 ⊗ (v_1 ∧ v_2 ∧ v_3) ⊗ (v_3*), v_3 ⊗ (v_1 ∧ v_2v_3) ⊗ (v_1*), v_3 ⊗ (v_1 ∧ v_2 ∧ v_3) ⊗ (v_2*), v_3 ⊗ (v_1v_2 ∧ v_3) ⊗ (v_3*)]"
"LieAlgebraModuleElem{QQFieldElem}[v_1 ⊗ (v_1 ∧ v_2) ⊗ (v_1*), v_1 ⊗ (v_1 ∧ v_2) ⊗ (v_2*), v_1 ⊗ (v_1 ∧ v_2) ⊗ (v_3*), v_1 ⊗ (v_1 ∧ v_3) ⊗ (v_1*), v_1 ⊗ (v_1 ∧ v_3) ⊗ (v_2*), v_1 ⊗ (v_1 ∧ v_3) ⊗ (v_3*), v_1 ⊗ (v_2 ∧ v_3) ⊗ (v_1*), v_1 ⊗ (v_2 ∧ v_3) ⊗ (v_2*), v_1 ⊗ (v_2 ∧ v_3) ⊗ (v_3*), v_2 ⊗ (v_1 ∧ v_2) ⊗ (v_1*), v_2 ⊗ (v_1 ∧ v_2) ⊗ (v_2*), v_2 ⊗ (v_1 ∧ v_2) ⊗ (v_3*), v_2 ⊗ (v_1 ∧ v_3) ⊗ (v_1*), v_2 ⊗ (v_1 ∧ v_3) ⊗ (v_2*), v_2 ⊗ (v_1 ∧ v_3) ⊗ (v_3*), v_2 ⊗ (v_2 ∧ v_3) ⊗ (v_1*), v_2 ⊗ (v_2 ∧ v_3) ⊗ (v_2*), v_2 ⊗ (v_2 ∧ v_3) ⊗ (v_3*), v_3 ⊗ (v_1 ∧ v_2) ⊗ (v_1*), v_3 ⊗ (v_1 ∧ v_2) ⊗ (v_2*), v_3 ⊗ (v_1 ∧ v_2) ⊗ (v_3*), v_3 ⊗ (v_1 ∧ v_3) ⊗ (v_1*), v_3 ⊗ (v_1 ∧ v_3) ⊗ (v_2*), v_3 ⊗ (v_1 ∧ v_3) ⊗ (v_3*), v_3 ⊗ (v_2 ∧ v_3) ⊗ (v_1*), v_3 ⊗ (v_2 ∧ v_3) ⊗ (v_2*), v_3 ⊗ (v_2 ∧ v_3) ⊗ (v_3*)]"
end

@testset "Tensor product, direct sum" begin
V = tensor_product(direct_sum(stdV, symmetric_power(stdV, 3)), direct_sum(dual(stdV), stdV))
V = tensor_product(direct_sum(stdV, symmetric_power(stdV, 2)), direct_sum(dual(stdV), stdV))
W, h = isomorphic_module_with_simple_structure(V)
@test is_isomorphism(h)
@test W == direct_sum(
tensor_product(stdV, dual(stdV)),
tensor_product(stdV, stdV),
tensor_product(symmetric_power(stdV, 3), dual(stdV)),
tensor_product(symmetric_power(stdV, 3), stdV),
tensor_product(symmetric_power(stdV, 2), dual(stdV)),
tensor_product(symmetric_power(stdV, 2), stdV),
)
@test sprint(show, basis(V)) ==
"LieAlgebraModuleElem{QQFieldElem}[(v_1^(1)) ⊗ ((v_1*)^(1)), (v_1^(1)) ⊗ ((v_2*)^(1)), (v_1^(1)) ⊗ ((v_3*)^(1)), (v_1^(1)) ⊗ (v_1^(2)), (v_1^(1)) ⊗ (v_2^(2)), (v_1^(1)) ⊗ (v_3^(2)), (v_2^(1)) ⊗ ((v_1*)^(1)), (v_2^(1)) ⊗ ((v_2*)^(1)), (v_2^(1)) ⊗ ((v_3*)^(1)), (v_2^(1)) ⊗ (v_1^(2)), (v_2^(1)) ⊗ (v_2^(2)), (v_2^(1)) ⊗ (v_3^(2)), (v_3^(1)) ⊗ ((v_1*)^(1)), (v_3^(1)) ⊗ ((v_2*)^(1)), (v_3^(1)) ⊗ ((v_3*)^(1)), (v_3^(1)) ⊗ (v_1^(2)), (v_3^(1)) ⊗ (v_2^(2)), (v_3^(1)) ⊗ (v_3^(2)), ((v_1 ∧ v_2 ∧ v_3)^(2)) ⊗ ((v_1*)^(1)), ((v_1 ∧ v_2 ∧ v_3)^(2)) ⊗ ((v_2*)^(1)), ((v_1 ∧ v_2 ∧ v_3)^(2)) ⊗ ((v_3*)^(1)), ((v_1 ∧ v_2 ∧ v_3)^(2)) ⊗ (v_1^(2)), ((v_1 ∧ v_2 ∧ v_3)^(2)) ⊗ (v_2^(2)), ((v_1 ∧ v_2 ∧ v_3)^(2)) ⊗ (v_3^(2))]"
@test sprint(show, h.(basis(V))) ==
"LieAlgebraModuleElem{QQFieldElem}[(v_1 ⊗ (v_1*))^(1), (v_1 ⊗ (v_2*))^(1), (v_1 ⊗ (v_3*))^(1), (v_1 ⊗ v_1)^(2), (v_1 ⊗ v_2)^(2), (v_1 ⊗ v_3)^(2), (v_2 ⊗ (v_1*))^(1), (v_2 ⊗ (v_2*))^(1), (v_2 ⊗ (v_3*))^(1), (v_2 ⊗ v_1)^(2), (v_2 ⊗ v_2)^(2), (v_2 ⊗ v_3)^(2), (v_3 ⊗ (v_1*))^(1), (v_3 ⊗ (v_2*))^(1), (v_3 ⊗ (v_3*))^(1), (v_3 ⊗ v_1)^(2), (v_3 ⊗ v_2)^(2), (v_3 ⊗ v_3)^(2), ((v_1 ∧ v_2 ∧ v_3) ⊗ (v_1*))^(3), ((v_1 ∧ v_2 ∧ v_3) ⊗ (v_2*))^(3), ((v_1 ∧ v_2 ∧ v_3) ⊗ (v_3*))^(3), ((v_1 ∧ v_2 ∧ v_3) ⊗ v_1)^(4), ((v_1 ∧ v_2 ∧ v_3) ⊗ v_2)^(4), ((v_1 ∧ v_2 ∧ v_3) ⊗ v_3)^(4)]"


V1 = exterior_power(stdV, 2)
V2 = dual(stdV)
Expand Down Expand Up @@ -250,7 +245,7 @@

@testset "Tensor power, direct sum" begin
V1 = stdV
V2 = exterior_power(dual(stdV), 3)
V2 = exterior_power(dual(stdV), 2)
V3 = exterior_power(stdV, 2)
V = tensor_power(direct_sum(V1, V2, V3), 3)
W, h = isomorphic_module_with_simple_structure(V; check=false) # otherwise needs 3 minutes
Expand Down Expand Up @@ -312,16 +307,20 @@
)

# TODO: handle zero-dim modules (e.g. 4th exterior power of 3-dim module)
# V_4 = exterior_power(V3, 4)
# W_4, h = isomorphic_module_with_simple_structure(V_4)
# @test is_isomorphism(h)
# @test W_4 == direct_sum(
# exterior_power(V1, 4),
# tensor_product(exterior_power(V1, 3), V2),
# tensor_product(exterior_power(V1, 2), exterior_power(V2, 2)),
# tensor_product(V1, exterior_power(V2, 3)),
# exterior_power(V2, 4),
# )
V_4 = exterior_power(V3, 4)
W_4a, ha = isomorphic_module_with_simple_structure(V_4)
@test is_isomorphism(ha)
W_4b, hb = isomorphic_module_with_simple_structure(
direct_sum(
exterior_power(V1, 4),
tensor_product(exterior_power(V1, 3), V2),
tensor_product(exterior_power(V1, 2), exterior_power(V2, 2)),
tensor_product(V1, exterior_power(V2, 3)),
exterior_power(V2, 4),
),
)
@test is_isomorphism(hb)
@test W_4a == W_4b
end

@testset "Complex cases 2" begin
Expand Down

0 comments on commit c6b82be

Please sign in to comment.