The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Name

Math::Groups - Find automorphisms of groups and isomorphisms between groups.

Synopsis

  use Math::Groups;
  use Data::Dump qw(dump);
  use Math::Cartesian::Product;

  # Print a cyclic group of order 4

  print dump(Group{($_[0]*$_[1]) % 5} 1..4)."\n";

  #   elements => {
  #                 1 => { 1 => 1, 2 => 2, 3 => 3, 4 => 4 },
  #                 2 => { 1 => 2, 2 => 4, 3 => 1, 4 => 3 },
  #                 3 => { 1 => 3, 2 => 1, 3 => 4, 4 => 2 },
  #                 4 => { 1 => 4, 2 => 3, 3 => 2, 4 => 1 },
  #               },
  #   identity => 1,
  #   inverses => { 1 => 1, 2 => 3, 3 => 2, 4 => 4 },
  #   orders   => { 1 => 0, 2 => 4, 3 => 4, 4 => 2 },


  # Find the automorphisms of the cyclic group of order 4

  autoMorphisms {print dump({@_})."\n"}
    Group{($_[0]+$_[1]) % 4} 0..3;

  #   { 1 => 1, 2 => 2, 3 => 3 }
  #   { 1 => 3, 2 => 2, 3 => 1 }

  # Find the automorphisms of dihedral group of order 4

  my $corners = [cartesian {1} ([1,-1]) x 2];
  my $cornerNumbers;
  map {my ($a, $b) = @{$$corners[$_]};
                   $cornerNumbers->{$a}{$b} = $_
                  } 0..$#$corners;

  autoMorphisms {print dump({@_})."\n"}
    Group
     {my ($a, $b, $c, $d) = map {@$_} @$corners[@_];
            $cornerNumbers->{$a*$c}{$b*$d}
     } 0..$#$corners;

  #   { 1 => 1, 2 => 2, 3 => 3 }
  #   { 1 => 1, 2 => 3, 3 => 2 }
  #   { 1 => 2, 2 => 1, 3 => 3 }
  #   { 1 => 3, 2 => 1, 3 => 2 }
  #   { 1 => 2, 2 => 3, 3 => 1 }
  #   { 1 => 3, 2 => 2, 3 => 1 }

Description

Find automorphisms of groups and isomorphisms between groups.

A group automorphism is a bijection on the set of elements of a group which preserves the group product.

A group isomorphism is a bijection between the sets of elements of two groups which preserves the group product.

identity(group)

Returns the identity element.

inverse(group, element)

Returns the inverse of an element.

orders(group)

Returns a hash which supplies the order of each element. The identity is assigned an order of zero.

order(group, element)

Returns the order of an element with the group.

elements(group)

Returns a hash whose keys are the elements if the group. The value at each key of this hash is another hash which gives the product in this group.

Group sub elements...

Creates a group with the specified elements as multiplied by sub. The first parameter is a subroutine that forms the product of each pair of elements drawn from the following list of elements.

abelian(group)

Returns 1 if the group is Abelian, else 0.

cyclic(group)

If the group is cyclic, returns an element that generates the group, else undef.

subGroup(groups, elements...)

Returns 1 if the elements specified plus the identity element form a sub group of the group else 0.

homoMorphic(group1, group2, mapping...)

Returns 1 if mapping forms a homomorphism from group 1 to group 2, else 0.

The mapping is a subset of the Cartesian product of the elements of group 1 and the elements of group 2 flattened into a list. The pair:

 (identity of group 1, identity of group 2)

is added for you so there is no need to specify it unless you wish to.

isoMorphic(group1, group2, mapping...)

Returns 1 if the mapping is an isomorphism from group 1 to group 2, else 0.

The mapping is a subset of the Cartesian product of the elements of group 1 and the elements of group 2 flattened into a list. The pair:

 (identity of group 1, identity of group 2)

is added for you so there is no need to specify it unless you wish to.

isoMorphisms sub group1, group 2

Finds all the isomorphisms between two groups and calls sub to process each of them as they are discovered.

The parameter list to sub is a pair for each element of group 1 indicating the corresponding element of group 2 under the isomorphism.

autoMorphic(group, mapping)

Returns 1 if the mapping is an automorphism from the group to itself, else 0.

The mapping is a subset of the Cartesian product of the elements of the group squared flattened into a list. The pair:

 (identity of group, identity of group)

is added for you so there is no need to specify it unless you wish to.

autoMorphisms sub group

Finds all the automorphisms of the groups and calls sub to process each of them as they are discovered.

The parameter list to sub is a pair for each element of the group indicating the corresponding element under the automorphism.

Export

The Group(), isoMorphisms(), autoMorphisms() functions are exported.

Installation

Standard Module::Build process for building and installing modules:

  perl Build.PL
  ./Build
  ./Build test
  ./Build install

Or, if you're on a platform (like DOS or Windows) that doesn't require the "./" notation, you can do this:

  perl Build.PL
  Build
  Build test
  Build install

Author

Philip R Brenan at gmail dot com

http://www.appaapps.com

See Also

Math::Cartesian::Product
Math::Permute::List

Copyright

This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.