Conditional Independence Net

This website uses Javascript to render markdown documents in your browser, apply syntax highlighting to code fragments and render $\LaTeX$ formulas. Below is the markdown source code of this page. You can either read that or enable Javascript to have it rendered to HTML.

# NAME

CInet::Symmetry - Symmetry groups

# SYNOPSIS

    # Food for CInet::Relation's ->act method
    say $relation->act($_) for HyperoctahedralGroup($relation)->@*;

    # or for CInet::Seq symmetry reduction
    my $mod = $seq->modulo(SymmetricGroup);

# DESCRIPTION

This module implements common symmetry groups acting on [CInet::Relation](/doc/CInet%3A%3ARelation)
objects. All groups are implemented and interfaced in a similar fashion.

For each group, there is a free-standing sub which is exported by default.
This sub returns a permutation presentation of the group which can be
passed to [CInet::Relation](/doc/CInet%3A%3ARelation)'s `->act` method or to [CInet::Seq](/doc/CInet%3A%3ASeq)'s
`->modulo` adapter. In addition, these subs keep a cache of group
presentations indexed by cubes, so that each is only computed once.

All arguments are passed to the `Cube` sub from [CInet::Cube](/doc/CInet%3A%3ACube) which
interprets it as a cube as described there.

In addition it is possible to not pass any argument at all. In this case,
a closure over the sub is returned that you can use later to obtain a
specific instance of this symmetry. This is useful when you have a
[CInet::Seq](/doc/CInet%3A%3ASeq) of [CInet::Relation](/doc/CInet%3A%3ARelation)s and do not want to repeat the cube
of these relations when using the `->modulo` method, like so:

    my $reps = $seq->modulo(SymmetricGroup);

Refer to the documentation of [CInet::Seq::Modulo](/doc/CInet%3A%3ASeq%3A%3AModulo) and other places that
accept symmetry groups to see if they support this feature.

The following are almost the same:

    my $type = SymmetricGroup;
    my $type = \&SymmetricGroup;
    my $type = sub { SymmetricGroup(@_) };

However, in the first case only, the return value is blessed into the
package `CInet::Symmetry::Type` which helps other code in CInet figure
out what you want done with that coderef.

## Exported subs

### SymmetricGroup :Export(:DEFAULT)

    my $Sn = SymmetricGroup($cube);

Return a presentation of the symmetric group on the `$cube`.

### TwistedGroup :Export(:DEFAULT)

    my $Tn = TwistedGroup($cube);

Return a presentation of the twisted symmetric group on the `$cube`.

### HyperoctahedralGroup :Export(:DEFAULT)

    my $Bn = HyperoctahedralGroup($cube);

Return a presentation of the hyperoctahedral group on the `$cube`.

# AUTHOR

Tobias Boege <tobs@taboege.de>

# COPYRIGHT AND LICENSE

This software is copyright (C) 2020 by Tobias Boege.

This is free software; you can redistribute it and/or
modify it under the terms of the Artistic License 2.0.