aidevnn / FastGoat

What C# can do for studying Finite Groups, quotient groups, semi-direct products, homomorphisms, automorphisms group, characters table, minimalistic rings and fields manipulations, polynomials factoring, fields extensions and many more...
MIT No Attribution
13 stars 1 forks source link

Choosing an operation by automorphism for Semidirect product #17

Closed aidevnn closed 2 years ago

aidevnn commented 2 years ago

https://github.com/aidevnn/FastGoat/blob/2352124b3261e67ef147440a843fdcf46f018e48/Tests/SemiDirectProdUnitTest.cs#L38

Running this example in console

var g1 = Group.SemiDirectProd(Product.Generate(new Cn(3), new Cn(3)), new Cn(2));
DisplayGroup.HeadSdp(g1);
Console.WriteLine(g1.ElementsOrders.Values.Ascending().Glue(", "));

will output

|(C3 x C3) x: C2| = 18
Type        NonAbelianGroup
BaseGroup    C3 x C3 x Z2
NormalGroup  |C3 x C3| = 9
ActionGroup  |C2| = 2

Actions
g=0 y(g) = ((0, 0)->(0, 0), (0, 1)->(0, 1), (0, 2)->(0, 2), (1, 0)->(1, 0), (1, 1)->(1, 1), (1, 2)->(1, 2), (2, 0)->(2, 0), (2, 1)->(2, 1), (2, 2)->(2, 2))
g=1 y(g) = ((0, 0)->(0, 0), (0, 1)->(1, 0), (0, 2)->(2, 0), (1, 0)->(0, 1), (1, 1)->(1, 1), (1, 2)->(2, 1), (2, 0)->(0, 2), (2, 1)->(1, 2), (2, 2)->(2, 2))

1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6

But when we try to find this group in GAP system, the result is different

gap> StructureDescription(SmallGroup(18,4));
"(C3 x C3) : C2"
gap> SortedList(List(SmallGroup(18,4),Order));
[ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 ]

The difference comes from the choose of the operation by automorphism which is actually arbitrary.

In GAP

gap> StructureDescription(SmallGroup(18,3));
"C3 x S3"
gap> SortedList(List(SmallGroup(18,3),Order));
[ 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6 ]

Rewriting the previous C# code

var n = Product.Generate(new Cn(3), new Cn(3));
var g = new Cn(2);
var thetas = Group.AllOpsByAutomorphisms(g, n);
foreach (var theta in thetas)
{
    var g1 = new SemiDirectProduct<Ep2<ZnInt, ZnInt>, ZnInt>("G", n, theta, g);
    DisplayGroup.HeadSdp(g1);
    Console.WriteLine(g1.ElementsOrders.Values.Ascending().Glue(", "));
}

Will produce

...
...
...
|G| = 18
Type        NonAbelianGroup
BaseGroup    C3 x C3 x Z2
NormalGroup  |C3 x C3| = 9
ActionGroup  |C2| = 2

Actions
g=0 y(g) = ((0, 0)->(0, 0), (0, 1)->(0, 1), (0, 2)->(0, 2), (1, 0)->(1, 0), (1, 1)->(1, 1), (1, 2)->(1, 2), (2, 0)->(2, 0), (2, 1)->(2, 1), (2, 2)->(2, 2))
g=1 y(g) = ((0, 0)->(0, 0), (0, 1)->(0, 2), (0, 2)->(0, 1), (1, 0)->(2, 0), (1, 1)->(2, 2), (1, 2)->(2, 1), (2, 0)->(1, 0), (2, 1)->(1, 2), (2, 2)->(1, 1))

1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
...
...
...

There is problem when building automorphism and also a bad comprehension of the subject.

aidevnn commented 2 years ago

With the previous example

Even for an arbitrary operation by automorphism, the criteria $(g,n)\mapsto g.n.g^{-1}$ is always verified.

The quotient group $(N \rtimes G) / N$ is always verified.

And the split extension $1 \rightarrow N \xrightarrow{\quad i\quad } N \rtimes G \xrightarrow{\quad p\quad } G \rightarrow 1$, the equality $Ker(p)=Im(i)$ is always verified.

This question is hard.

https://github.com/aidevnn/FastGoat/blob/4b6ff62d463a491561a39c4cc53a353159b3e39e/FastGoat/Program.cs#L20-L61

aidevnn commented 2 years ago

I dont understand this problem at this time

aidevnn commented 2 years ago

For semidirect product $N \rtimes_{\gamma} C2$, always choosing the homomophism defined by $\gamma(\overline{0}) = id{Aut(N)}$ and $\gamma(\overline{1}) = x \mapsto x^{-1}$ which can be defined like this by code

var n = Product.Generate(new Cn(3), new Cn(3));
var g = new Cn(2);

var autN = Group.AutomorphismGroup(n);
var inv = autN[(n[1, 0], n[2, 0]), (n[0, 1], n[0, 2])]; // invert automorphism defined with generators
var gamma = Group.HomomorphismMap(g, autN, new() { [g[1]] = inv }); // g[0] = idN always
var sdp = Group.SemiDirectProd(n, gamma, g);

DisplayGroup.HeadSdp(sdp);
Console.WriteLine(sdp.ElementsOrdersList().Glue(", "));

and it will outputs

|(C3 x C3) x: C2| = 18
Type        NonAbelianGroup
BaseGroup    C3 x C3 x Z2
NormalGroup  |C3 x C3| = 9
ActionGroup  |C2| = 2

Actions
g=0 y(g) = ((0, 0)->(0, 0), (0, 1)->(0, 1), (0, 2)->(0, 2), (1, 0)->(1, 0), (1, 1)->(1, 1), (1, 2)->(1, 2), (2, 0)->(2, 0), (2, 1)->(2, 1), (2, 2)->(2, 2))
g=1 y(g) = ((0, 0)->(0, 0), (0, 1)->(0, 2), (0, 2)->(0, 1), (1, 0)->(2, 0), (1, 1)->(2, 2), (1, 2)->(2, 1), (2, 0)->(1, 0), (2, 1)->(1, 2), (2, 2)->(1, 1))

1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3

But the problem is still remaining.