Every time you call F, you get a new free product independent of previous calls. So when you ask if G(3)[2] in G(3), there are two different copies of F(3) in play, and similar for G(3)[2] in F(3). However, if you do:
F3 := F(3); G3 := GeneratorsOfGroup(F3); G3[2] in G3; # true G3[2] in F3; # true Erik. On 2 August 2017 at 15:50, Nikos Apostolakis <nikos...@gmail.com> wrote: > Dear Forum, > > I want to construct the free product of n copies of ZZ/2 and work with its > elements. I get some strange behavior that I can't quite understand: > > F := n -> FreeProduct(List([1..n], i -> CyclicGroup(2))); #==> function( n > ) ... end > G := n -> GeneratorsOfGroup(F(n)); #==> function( n ) ... end > G(3)[2] in G(3); #==> false > G(3)[2] in F(3); #==> false > > However: > > GeneratorsOfGroup(F(3)); #==> [ f1, f2, f3 ] > last[1]^2*last[2] = last[2]; #==> true > > which is what I would expect if GeneratorsOfGroup(F(3)) gives elements of > the free product. > > I wonder if somebody could explain this behavior? Also how can I actually > get what I want? > > Thanks a lot for any help, > Nikos > _______________________________________________ > Forum mailing list > Forum@mail.gap-system.org > http://mail.gap-system.org/mailman/listinfo/forum > _______________________________________________ Forum mailing list Forum@mail.gap-system.org http://mail.gap-system.org/mailman/listinfo/forum