mirror of
https://github.com/kalmarek/PropertyT.jl.git
synced 2024-11-19 07:20:28 +01:00
big overhaul of rankOne_projections for WreathProduct Group
This commit is contained in:
parent
094abd74b8
commit
11365bf5b2
@ -146,36 +146,43 @@ function rankOne_projections(G::Generic.PermGroup, T::Type=Rational{Int})
|
|||||||
return min_projs
|
return min_projs
|
||||||
end
|
end
|
||||||
|
|
||||||
function rankOne_projections(BN::WreathProduct, T::Type=Rational{Int})
|
function rankOne_projections(Bn::WreathProduct, T::Type=Rational{Int})
|
||||||
|
|
||||||
N = BN.P.n
|
N = Bn.P.n
|
||||||
# projections as elements of the group rings RSₙ
|
# projections as elements of the group rings RSₙ
|
||||||
SNprojs_nc = [rankOne_projections(PermutationGroup(i)) for i in 1:N]
|
Sn_rankOnePr = [rankOne_projections(PermutationGroup(i)) for i in 1:N]
|
||||||
|
|
||||||
# embedding into group ring of BN
|
# embedding into group ring of BN
|
||||||
RBN = GroupRing(BN)
|
RBn = GroupRing(Bn)
|
||||||
RFFFF_projs = [central_projection(GroupRing(BN.N), DirectProdCharacter(i),T)
|
RN = GroupRing(Bn.N)
|
||||||
for i in 1:BN.P.n]
|
|
||||||
|
|
||||||
e0 = central_projection(GroupRing(BN.N), DirectProdCharacter(0), T)
|
# Bn.N = (Z/2Z)ⁿ characters corresponding to the first k coordinates:
|
||||||
Q0 = RBN(e0, g -> BN(g))
|
|
||||||
Qs = [RBN(q, g -> BN(g)) for q in RFFFF_projs]
|
|
||||||
|
|
||||||
all_projs = [Q0*RBN(p, g->BN(g)) for p in SNprojs_nc[N]]
|
function OrbitSelector(n::Integer, k::Integer,
|
||||||
|
chi::Projections.AbstractCharacter, psi::Projections.AbstractCharacter)
|
||||||
range = collect(1:N)
|
return Projections.DirectProdCharacter(ntuple(i -> (i <= k ? chi : psi), n))
|
||||||
for i in 1:N-1
|
|
||||||
first_emb = g->BN(Nemo.Generic.emb!(BN.P(), g, range[1:i]))
|
|
||||||
last_emb = g->BN(Nemo.Generic.emb!(BN.P(), g, range[i+1:end]))
|
|
||||||
|
|
||||||
Sk_first = [RBN(p, first_emb) for p in SNprojs_nc[i]]
|
|
||||||
Sk_last = [RBN(p, last_emb) for p in SNprojs_nc[N-i]]
|
|
||||||
|
|
||||||
append!(all_projs,
|
|
||||||
[Qs[i]*p1*p2 for (p1,p2) in Base.product(Sk_first,Sk_last)])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
append!(all_projs, [Qs[N]*RBN(p, g->BN(g)) for p in SNprojs_nc[N]])
|
sign, id = collect(characters(Bn.N.group))
|
||||||
|
BnN_orbits = Dict(i => OrbitSelector(N, i, sign, id) for i in 0:N)
|
||||||
|
|
||||||
|
Q = Dict(i => RBn(central_projection(RN, BnN_orbits[i], T), g -> Bn(g)) for i in 0:N)
|
||||||
|
|
||||||
|
all_projs = [Q[0]*RBn(p, g->Bn(g)) for p in Sn_rankOnePr[N]]
|
||||||
|
|
||||||
|
r = collect(1:N)
|
||||||
|
for i in 1:N-1
|
||||||
|
first_emb = g->Bn(Nemo.Generic.emb!(Bn.P(), g, view(r, 1:i)))
|
||||||
|
last_emb = g->Bn(Nemo.Generic.emb!(Bn.P(), g, view(r, (i+1):N)))
|
||||||
|
|
||||||
|
Sk_first = (RBn(p, first_emb) for p in Sn_rankOnePr[i])
|
||||||
|
Sk_last = (RBn(p, last_emb) for p in Sn_rankOnePr[N-i])
|
||||||
|
|
||||||
|
append!(all_projs,
|
||||||
|
[Q[i]*p1*p2 for (p1,p2) in Base.product(Sk_first,Sk_last)])
|
||||||
|
end
|
||||||
|
|
||||||
|
append!(all_projs, [Q[N]*RBn(p, g->Bn(g)) for p in Sn_rankOnePr[N]])
|
||||||
|
|
||||||
return all_projs
|
return all_projs
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user