MeatAxe
2.4

zpc [Options] [b] Perm1 Perm2 Seed S1 S2 Q1 Q2 zpc [Options] [b] g NPerm[.NGen] Perm Seed Ssub Quot
If invoked without any options, this program reads two permutations from Perm1 and Perm2 and a point from Seed. The orbit containing that point is made, and the action on the orbit is written to S1 and S2. If any points remain, the action on these is written to Q1 and Q2.
With the "b" option, Seed is taken as a list of points defining one block of a block system for the permutation group, and the program computes the action of both the generators on the block system. Nothing is written to Q1 and Q2 in this case, even if the group generated by the two permutations does not act transitively on the block system.
A number of permutations different from 2 can be specified by using the "g" option. NPerm is the number of permutations to chop, and NGen specifies how many of these are sufficient to generate the whole permutation group. For example, with "g 5.2" zpc would chop 5 permutations, assuming that the first two generate the whole group. NGen may be omitted, the default being NPerm. Thus, instead of "g 5.5" you may simply type "g 5". When the "g" option is used, there must be exactly 4 Arguments, 3 of which (Perm, Sub and Quot) are interpreted as "base names". For example,
zpc g 3 z seed s q
would read three permutations from "z1", "z2" and "z3", and a point from "seed". The actions on the orbit would be written to "s1", "s2" and "s3", and the actions on the remaining points to "q1", "q2" and "q3". The number of permutations, specified with "g", must not be greater than 10.
The program checks the input files to see if they contain reasonable data. Failure of any of these checks produces an error message and the program stops. If all goes well, the first point of the permutation in Seed is taken to be the first point in the orbit. The orbit is then calculated by applying the generators to all new points. The points of the orbit are renumbered, and, for each of the permutations, the action on the orbit is written out. If this orbit is all the points, the message
TRANSITIVE ON {n} POINTS
appears, and the program stops. If any points remain, these are also renumbered, and the action on the remaining points is written out, too (unless "b" was used). In this case
INTRANSITIVE  'SUB' n 'QUOT' m
is written to stdout, the 'SUB' being the orbit of the given point.
With the "b" option, the orbit is calculated in the same way, but a whole block, i.e., a set of points, is read from Seed and taken as the starting "point". The points are then renumbered in such a way that the orbit containing the seed is {1,2,...,N, where N is a multiple of the block size, and the blocks are contiguous. After this rearrangement, point number n belongs to block âŒŠ(n1)/bâŒ‹, where b is the block size. The action of the permutations on the blocks can then be calculated by simply dividing the point numbers by the block size. Of course, the block size must be a divisor of the permutation's degree. Otherwise the program stops with
ZPC ERROR  BLOCK SIZE DOES NOT DIVIDE DEGREE
It might turn out during the computation, that two points in one block are mapped to images in different blocks. This means that Seed was not a block of any block system for the given representation and the program will stop with the error message
ZPC ERROR  NOT A BLOCK SYSTEM
If all goes well, the user is informed with one of the messages
TRANSITIVE ON n BLOCKS INTRANSITIVE  'SUB' n 'QUOT' m
and the result is written to S1 and S2. Q1 and Q2 are never written when "b" is specified, even if the action on blocks is intransitive.
The use if this program is twofold. Firstly it can be used to obtain transitive constituents from intransitive permutation representations. Secondly, if the starting point is in some sense canonical, the resulting renumbered representation will be according to a ‘standard’ numbering of the points. It should be noticed that this comment only applies to the representation on the 'SUB' â€” that written to S1 and S2. If this standardbaselike property of the output is not required, there is no particular reason to choose Seed, and point 1, or indeed one of the permutations can be used.