mirror of
https://github.com/kalmarek/Groups.jl.git
synced 2024-12-26 02:20:30 +01:00
move from G() to Base.one(G)
This commit is contained in:
parent
32e968a79b
commit
dd4ed1497c
@ -192,7 +192,7 @@ SAut(G::Group) = AutGroup(G, special=true)
|
|||||||
|
|
||||||
Automorphism{N}(s::AutSymbol) where N = Automorphism{N}(AutSymbol[s])
|
Automorphism{N}(s::AutSymbol) where N = Automorphism{N}(AutSymbol[s])
|
||||||
|
|
||||||
function (G::AutGroup{N})() where N
|
function Base.one(G::AutGroup{N}) where N
|
||||||
id = Automorphism{N}(id_autsymbol())
|
id = Automorphism{N}(id_autsymbol())
|
||||||
id.parent = G
|
id.parent = G
|
||||||
return id
|
return id
|
||||||
|
@ -96,8 +96,8 @@ end
|
|||||||
|
|
||||||
(G::DirectPowerGroup{N})(a::Vararg{GrEl, N}) where {N, GrEl} = DirectPowerGroupElem(G.group.(a))
|
(G::DirectPowerGroup{N})(a::Vararg{GrEl, N}) where {N, GrEl} = DirectPowerGroupElem(G.group.(a))
|
||||||
|
|
||||||
function (G::DirectPowerGroup{N})() where N
|
function Base.one(G::DirectPowerGroup{N}) where N
|
||||||
return DirectPowerGroupElem(ntuple(i->G.group(),N))
|
return DirectPowerGroupElem(ntuple(i->one(G.group),N))
|
||||||
end
|
end
|
||||||
|
|
||||||
(G::DirectPowerGroup)(g::DirectPowerGroupElem) = G(g.elts)
|
(G::DirectPowerGroup)(g::DirectPowerGroupElem) = G(g.elts)
|
||||||
|
@ -58,7 +58,7 @@ FPGroup(H::FreeGroup) = FPGroup([FPSymbol(s) for s in H.gens])
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
function (G::FPGroup)()
|
function Base.one(G::FPGroup)
|
||||||
id = FPGroupElem(FPSymbol[])
|
id = FPGroupElem(FPSymbol[])
|
||||||
id.parent = G
|
id.parent = G
|
||||||
return id
|
return id
|
||||||
@ -66,7 +66,7 @@ end
|
|||||||
|
|
||||||
function (G::FPGroup)(w::GWord)
|
function (G::FPGroup)(w::GWord)
|
||||||
if length(w) == 0
|
if length(w) == 0
|
||||||
return G()
|
return one(G)
|
||||||
end
|
end
|
||||||
|
|
||||||
if eltype(w.symbols) == FreeSymbol
|
if eltype(w.symbols) == FreeSymbol
|
||||||
@ -175,7 +175,7 @@ function /(G::FPGroup, newrels::Vector{FPGroupElem})
|
|||||||
"Can not form quotient group: $r is not an element of $G"))
|
"Can not form quotient group: $r is not an element of $G"))
|
||||||
end
|
end
|
||||||
H = deepcopy(G)
|
H = deepcopy(G)
|
||||||
newrels = Dict(H(r) => H() for r in newrels)
|
newrels = Dict(H(r) => one(H) for r in newrels)
|
||||||
add_rels!(H, newrels)
|
add_rels!(H, newrels)
|
||||||
return H
|
return H
|
||||||
end
|
end
|
||||||
@ -186,6 +186,6 @@ function /(G::FreeGroup, rels::Vector{FreeGroupElem})
|
|||||||
"Can not form quotient group: $r is not an element of $G"))
|
"Can not form quotient group: $r is not an element of $G"))
|
||||||
end
|
end
|
||||||
H = FPGroup(G)
|
H = FPGroup(G)
|
||||||
H.rels = Dict(H(rel) => H() for rel in unique(rels))
|
H.rels = Dict(H(rel) => one(H) for rel in unique(rels))
|
||||||
return H
|
return H
|
||||||
end
|
end
|
||||||
|
@ -52,7 +52,7 @@ FreeGroup(a::Vector) = FreeGroup(FreeSymbol.(a))
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
function (G::FreeGroup)()
|
function Base.one(G::FreeGroup)
|
||||||
id = FreeGroupElem(FreeSymbol[])
|
id = FreeGroupElem(FreeSymbol[])
|
||||||
id.parent = G
|
id.parent = G
|
||||||
return id
|
return id
|
||||||
|
@ -15,6 +15,8 @@ export elements
|
|||||||
using LinearAlgebra
|
using LinearAlgebra
|
||||||
using Markdown
|
using Markdown
|
||||||
|
|
||||||
|
Base.one(G::Generic.PermGroup) = G(collect(1:G.n), false)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# ParentType / ObjectType definition
|
# ParentType / ObjectType definition
|
||||||
@ -280,7 +282,7 @@ function power_by_squaring(W::GWord, p::Integer)
|
|||||||
if p < 0
|
if p < 0
|
||||||
return power_by_squaring(inv(W), -p)
|
return power_by_squaring(inv(W), -p)
|
||||||
elseif p == 0
|
elseif p == 0
|
||||||
return parent(W)()
|
return one(parent(W))
|
||||||
elseif p == 1
|
elseif p == 1
|
||||||
return W
|
return W
|
||||||
elseif p == 2
|
elseif p == 2
|
||||||
@ -425,7 +427,7 @@ end
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
function generate_balls(S::AbstractVector{T}, Id::T=parent(first(S))();
|
function generate_balls(S::AbstractVector{T}, Id::T=one(parent(first(S)));
|
||||||
radius=2, op=*) where T<:GroupElem
|
radius=2, op=*) where T<:GroupElem
|
||||||
sizes = Int[]
|
sizes = Int[]
|
||||||
B = [Id]
|
B = [Id]
|
||||||
|
@ -75,20 +75,20 @@ end
|
|||||||
"""
|
"""
|
||||||
(G::WreathProduct)(n::DirectPowerGroupElem, p::Generic.Perm) = WreathProductElem(n,p)
|
(G::WreathProduct)(n::DirectPowerGroupElem, p::Generic.Perm) = WreathProductElem(n,p)
|
||||||
|
|
||||||
(G::WreathProduct)() = WreathProductElem(G.N(), G.P(), false)
|
Base.one(G::WreathProduct) = WreathProductElem(one(G.N), one(G.P), false)
|
||||||
|
|
||||||
@doc doc"""
|
@doc doc"""
|
||||||
(G::WreathProduct)(p::Generic.Perm)
|
(G::WreathProduct)(p::Generic.Perm)
|
||||||
> Returns the image of permutation `p` in `G` via embedding `p -> (id,p)`.
|
> Returns the image of permutation `p` in `G` via embedding `p -> (id,p)`.
|
||||||
"""
|
"""
|
||||||
(G::WreathProduct)(p::Generic.Perm) = G(G.N(), p)
|
(G::WreathProduct)(p::Generic.Perm) = G(one(G.N), p)
|
||||||
|
|
||||||
@doc doc"""
|
@doc doc"""
|
||||||
(G::WreathProduct)(n::DirectPowerGroupElem)
|
(G::WreathProduct)(n::DirectPowerGroupElem)
|
||||||
> Returns the image of `n` in `G` via embedding `n -> (n,())`. This is the
|
> Returns the image of `n` in `G` via embedding `n -> (n,())`. This is the
|
||||||
> embedding that makes the sequence `1 -> N -> G -> P -> 1` exact.
|
> embedding that makes the sequence `1 -> N -> G -> P -> 1` exact.
|
||||||
"""
|
"""
|
||||||
(G::WreathProduct)(n::DirectPowerGroupElem) = G(n, G.P())
|
(G::WreathProduct)(n::DirectPowerGroupElem) = G(n, one(G.P))
|
||||||
|
|
||||||
(G::WreathProduct)(n,p) = G(G.N(n), G.P(p))
|
(G::WreathProduct)(n,p) = G(G.N(n), G.P(p))
|
||||||
|
|
||||||
|
@ -140,12 +140,12 @@
|
|||||||
|
|
||||||
f² = Groups.r_multiply(A(f), [f], reduced=false)
|
f² = Groups.r_multiply(A(f), [f], reduced=false)
|
||||||
@test Groups.simplifyperms!(f²) == false
|
@test Groups.simplifyperms!(f²) == false
|
||||||
@test f²^2 == A()
|
@test f²^2 == one(A)
|
||||||
|
|
||||||
a = A(Groups.rmul_autsymbol(1,2))*Groups.flip_autsymbol(2)
|
a = A(Groups.rmul_autsymbol(1,2))*Groups.flip_autsymbol(2)
|
||||||
b = Groups.flip_autsymbol(2)*A(inv(Groups.rmul_autsymbol(1,2)))
|
b = Groups.flip_autsymbol(2)*A(inv(Groups.rmul_autsymbol(1,2)))
|
||||||
@test a*b == b*a
|
@test a*b == b*a
|
||||||
@test a^3 * b^3 == A()
|
@test a^3 * b^3 == one(A)
|
||||||
g,h = Groups.gens(A)[[1,8]] # (g, h) = (ϱ₁₂, ϱ₃₂)
|
g,h = Groups.gens(A)[[1,8]] # (g, h) = (ϱ₁₂, ϱ₃₂)
|
||||||
|
|
||||||
@test Groups.domain(A) == NTuple{4, FreeGroupElem}(gens(A.objectGroup))
|
@test Groups.domain(A) == NTuple{4, FreeGroupElem}(gens(A.objectGroup))
|
||||||
@ -201,7 +201,7 @@
|
|||||||
|
|
||||||
G = AutGroup(FreeGroup(N), special=true)
|
G = AutGroup(FreeGroup(N), special=true)
|
||||||
S = gens(G)
|
S = gens(G)
|
||||||
S_inv = [G(), S..., [inv(s) for s in S]...]
|
S_inv = [one(G), S..., [inv(s) for s in S]...]
|
||||||
S_inv = unique(S_inv)
|
S_inv = unique(S_inv)
|
||||||
B_2 = [i*j for (i,j) in Base.product(S_inv, S_inv)]
|
B_2 = [i*j for (i,j) in Base.product(S_inv, S_inv)]
|
||||||
@test length(B_2) == 2401
|
@test length(B_2) == 2401
|
||||||
@ -214,8 +214,8 @@
|
|||||||
S = unique([gens(G); inv.(gens(G))])
|
S = unique([gens(G); inv.(gens(G))])
|
||||||
R = 3
|
R = 3
|
||||||
|
|
||||||
@test Groups.linear_repr(G()) isa Matrix{Int}
|
@test Groups.linear_repr(one(G)) isa Matrix{Int}
|
||||||
@test Groups.linear_repr(G()) == Matrix{Int}(I, N, N)
|
@test Groups.linear_repr(one(G)) == Matrix{Int}(I, N, N)
|
||||||
|
|
||||||
M = Matrix{Int}(I, N, N)
|
M = Matrix{Int}(I, N, N)
|
||||||
M[1,2] = 1
|
M[1,2] = 1
|
||||||
|
@ -13,12 +13,12 @@
|
|||||||
@test (G×G)×G == (G×G)×G
|
@test (G×G)×G == (G×G)×G
|
||||||
|
|
||||||
GG = DirectPowerGroup(G,2)
|
GG = DirectPowerGroup(G,2)
|
||||||
@test (G×G)() isa GroupElem
|
@test one(G×G) isa GroupElem
|
||||||
@test (G×G)((G(), G())) isa GroupElem
|
@test (G×G)((one(G), one(G))) isa GroupElem
|
||||||
@test (G×G)([G(), G()]) isa GroupElem
|
@test (G×G)([one(G), one(G)]) isa GroupElem
|
||||||
|
|
||||||
@test Groups.DirectPowerGroupElem((G(), G())) == (G×G)()
|
@test Groups.DirectPowerGroupElem((one(G), one(G))) == one(G×G)
|
||||||
@test GG(G(), G()) == (G×G)()
|
@test GG(one(G), one(G)) == one(G×G)
|
||||||
|
|
||||||
g = perm"(1,2,3)"
|
g = perm"(1,2,3)"
|
||||||
|
|
||||||
@ -37,8 +37,8 @@
|
|||||||
|
|
||||||
@test h[1] == g
|
@test h[1] == g
|
||||||
@test h[2] == g^2
|
@test h[2] == g^2
|
||||||
h = GG(g, G())
|
h = GG(g, one(G))
|
||||||
@test h == GG(g, G())
|
@test h == GG(g, one(G))
|
||||||
end
|
end
|
||||||
|
|
||||||
@testset "Basic arithmetic" begin
|
@testset "Basic arithmetic" begin
|
||||||
@ -51,17 +51,17 @@
|
|||||||
k = GG(g^3, g^2)
|
k = GG(g^3, g^2)
|
||||||
|
|
||||||
@test h^2 == GG(g^2,g)
|
@test h^2 == GG(g^2,g)
|
||||||
@test h^6 == GG()
|
@test h^6 == one(GG)
|
||||||
|
|
||||||
@test h*h == h^2
|
@test h*h == h^2
|
||||||
@test h*k == GG(g,g)
|
@test h*k == GG(g,g)
|
||||||
|
|
||||||
@test h*inv(h) == (G×G)()
|
@test h*inv(h) == one(G×G)
|
||||||
|
|
||||||
w = GG(g,i)*GG(i,g)
|
w = GG(g,i)*GG(i,g)
|
||||||
@test w == GG(perm"(1,2)(3)", perm"(2,3)")
|
@test w == GG(perm"(1,2)(3)", perm"(2,3)")
|
||||||
@test w == inv(w)
|
@test w == inv(w)
|
||||||
@test w^2 == w*w == GG()
|
@test w^2 == w*w == one(GG)
|
||||||
end
|
end
|
||||||
|
|
||||||
@testset "elem/parent_types" begin
|
@testset "elem/parent_types" begin
|
||||||
@ -83,7 +83,7 @@
|
|||||||
elts = vec(collect(GG))
|
elts = vec(collect(GG))
|
||||||
|
|
||||||
@test length(elts) == 216
|
@test length(elts) == 216
|
||||||
@test all([g*inv(g) == GG() for g in elts])
|
@test all([g*inv(g) == one(GG) for g in elts])
|
||||||
@test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts)
|
@test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
@testset "Groups.FreeSymbols" begin
|
@testset "Groups.FreeSymbols" begin
|
||||||
s = Groups.FreeSymbol(:s)
|
s = Groups.FreeSymbol(:s)
|
||||||
t = Groups.FreeSymbol(:t)
|
t = Groups.FreeSymbol(:t)
|
||||||
@ -45,7 +44,7 @@ end
|
|||||||
G = FreeGroup(["s", "t"])
|
G = FreeGroup(["s", "t"])
|
||||||
|
|
||||||
@testset "elements constructors" begin
|
@testset "elements constructors" begin
|
||||||
@test isa(G(), FreeGroupElem)
|
@test isa(one(G), FreeGroupElem)
|
||||||
@test eltype(G.gens) == Groups.FreeSymbol
|
@test eltype(G.gens) == Groups.FreeSymbol
|
||||||
@test length(G.gens) == 2
|
@test length(G.gens) == 2
|
||||||
@test eltype(gens(G)) == FreeGroupElem
|
@test eltype(gens(G)) == FreeGroupElem
|
||||||
@ -76,17 +75,17 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
@testset "reductions" begin
|
@testset "reductions" begin
|
||||||
@test length(G().symbols) == 0
|
@test length(one(G).symbols) == 0
|
||||||
@test length((G()*G()).symbols) == 0
|
@test length((one(G)*one(G)).symbols) == 0
|
||||||
@test G() == G()*G()
|
@test one(G) == one(G)*one(G)
|
||||||
w = deepcopy(s)
|
w = deepcopy(s)
|
||||||
push!(w.symbols, (s^-1).symbols[1])
|
push!(w.symbols, (s^-1).symbols[1])
|
||||||
@test Groups.reduce!(w) == parent(w)()
|
@test Groups.reduce!(w) == one(parent(w))
|
||||||
o = (t*s)^3
|
o = (t*s)^3
|
||||||
@test o == t*s*t*s*t*s
|
@test o == t*s*t*s*t*s
|
||||||
p = (t*s)^-3
|
p = (t*s)^-3
|
||||||
@test p == s^-1*t^-1*s^-1*t^-1*s^-1*t^-1
|
@test p == s^-1*t^-1*s^-1*t^-1*s^-1*t^-1
|
||||||
@test o*p == parent(o*p)()
|
@test o*p == one(parent(o*p))
|
||||||
w = FreeGroupElem([o.symbols..., p.symbols...])
|
w = FreeGroupElem([o.symbols..., p.symbols...])
|
||||||
w.parent = G
|
w.parent = G
|
||||||
@test Groups.reduce!(w).symbols ==Vector{Groups.FreeSymbol}([])
|
@test Groups.reduce!(w).symbols ==Vector{Groups.FreeSymbol}([])
|
||||||
@ -123,7 +122,7 @@ end
|
|||||||
@test findfirst(c*t, c) == 0
|
@test findfirst(c*t, c) == 0
|
||||||
w = s*t*s^-1
|
w = s*t*s^-1
|
||||||
subst = Dict{FreeGroupElem, FreeGroupElem}(w => s^1, s*t^-1 => t^4)
|
subst = Dict{FreeGroupElem, FreeGroupElem}(w => s^1, s*t^-1 => t^4)
|
||||||
@test Groups.replace(c, 1, s*t, G()) == s^-1*t^-1
|
@test Groups.replace(c, 1, s*t, one(G)) == s^-1*t^-1
|
||||||
@test Groups.replace(c, 1, w, subst[w]) == s*t^-1
|
@test Groups.replace(c, 1, w, subst[w]) == s*t^-1
|
||||||
@test Groups.replace(s*c*t^-1, 1, w, subst[w]) == s^2*t^-2
|
@test Groups.replace(s*c*t^-1, 1, w, subst[w]) == s^2*t^-2
|
||||||
@test Groups.replace(t*c*t, 2, w, subst[w]) == t*s
|
@test Groups.replace(t*c*t, 2, w, subst[w]) == t*s
|
||||||
|
@ -24,8 +24,8 @@
|
|||||||
@test B3(aa, b) == Groups.WreathProductElem(aa, b)
|
@test B3(aa, b) == Groups.WreathProductElem(aa, b)
|
||||||
w = B3(aa, b)
|
w = B3(aa, b)
|
||||||
@test B3(w) == w
|
@test B3(w) == w
|
||||||
@test B3(b) == Groups.WreathProductElem(B3.N(), b)
|
@test B3(b) == Groups.WreathProductElem(one(B3.N), b)
|
||||||
@test B3(aa) == Groups.WreathProductElem(aa, S_3())
|
@test B3(aa) == Groups.WreathProductElem(aa, one(S_3))
|
||||||
|
|
||||||
@test B3((a^0 ,a, a^2), b) isa WreathProductElem
|
@test B3((a^0 ,a, a^2), b) isa WreathProductElem
|
||||||
|
|
||||||
@ -37,10 +37,10 @@
|
|||||||
|
|
||||||
@test elem_type(B3) == Groups.WreathProductElem{3, Generic.Perm{Int}, Generic.Perm{Int}}
|
@test elem_type(B3) == Groups.WreathProductElem{3, Generic.Perm{Int}, Generic.Perm{Int}}
|
||||||
|
|
||||||
@test parent_type(typeof(B3())) == Groups.WreathProduct{3, parent_type(typeof(B3.N.group())), Generic.PermGroup{Int}}
|
@test parent_type(typeof(one(B3))) == Groups.WreathProduct{3, parent_type(typeof(one(B3.N.group))), Generic.PermGroup{Int}}
|
||||||
|
|
||||||
@test parent(B3()) == Groups.WreathProduct(S_2,S_3)
|
@test parent(one(B3)) == Groups.WreathProduct(S_2,S_3)
|
||||||
@test parent(B3()) == B3
|
@test parent(one(B3)) == B3
|
||||||
end
|
end
|
||||||
|
|
||||||
@testset "Basic operations on WreathProductElem" begin
|
@testset "Basic operations on WreathProductElem" begin
|
||||||
@ -91,7 +91,7 @@
|
|||||||
@test order(Wr) == 2^4*factorial(4)
|
@test order(Wr) == 2^4*factorial(4)
|
||||||
|
|
||||||
@test length(elts) == order(Wr)
|
@test length(elts) == order(Wr)
|
||||||
@test all([g*inv(g) == Wr() for g in elts])
|
@test all((g*inv(g) == one(Wr) for g in elts))
|
||||||
@test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts)
|
@test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user