/usr/lib/open-axiom/input/perm.input is in open-axiom-test 1.4.1+svn~2299+ds-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | --Copyright The Numerical Algorithms Group Limited 1991.
)clear all
-- This file demonstrates some of the new routines for permutations
-- in AXIOM. ( Last change: 05/16/89 by HWG )
-- (J. Grabmeier: adjusted to new concept: 08/07/89)
-- (M. Weller : adjusted to 1..: 03/29/90)
-- (J. Grabmeier : adjusted to new algebra 05/14/90)
-- Permutations can act on every set, finite or infinite.
-- Usually permutations are given as a product of cycles,
-- so the following generates a permutation acting on some
-- elements of GF(29):
x : List List PrimeField 29 :=
[[23,19,7,9,12,11,15],[22,4,14,18,2,5,8],[21,20,10,16,13,6,17]]
px : PERM PrimeField 29 := x
-- If the permutation consists of just one cycle, you can use the
-- function "cycle" instead of "coerce":
w : List PrimeField 29 :=
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]
pw : PERM PrimeField 29 := cycle w
-- For a product of cycles there is also the function "cycles":
k : List List PrimeField 29 :=
[[23,24],[22,16],[21,9],[20,19],[18,12],[17,14],[15,7],[10,6]]
pk : PERM PrimeField 29 := cycles k
-- Since these permutations generate a group, you can
-- perform various operations on px, pw and pk.
-- You may have to be careful, because permutations are viewed
-- as mappings acting on the left, so (pw*pk)(7) = pw(pk(7)).
-- Here are some examples:
pw*pk
px**3
-- You can ask for inverses:
inv px
-- or for the image of some element under a special permutation:
elt(px,17::PrimeField(29))
-- you may try to build commutators:
commutator(pk,pw)
-- which is the same as inv(pk) * inv(pw) * pk * pw
-- You can also ask for the orbit of some element under a permutation:
orbit(px,11::PrimeField(29))
-- or for the elements of the underlying set, which are permuted
-- by a given permutation:
support(pk)
-- Now we take a short look on permutation groups.
-- They are represented as a list of generating permutations:
gp1 : PERMGRP PrimeField 29 := [ px , pk ]
gp2 : PERMGRP PrimeField 29 := [ pw , px ]
gp3 : PERMGRP PrimeField 29 := [ pw , pk ]
-- and we can ask for their orders:
order gp1
order gp2
order gp3
-- In fact these are the Mathieu-groups M_22, M_23 and M_24.
-- now a more sophisticated example
-- The following matrices generate the general linear group GL(3,2):
(m1,m2,m3,m4): Matrix PrimeField 2
m1 := [[1,1,0],[0,1,0],[0,0,1]]
m2 := [[1,0,0],[0,1,1],[0,0,1]]
m3 := [[1,0,0],[1,1,0],[0,0,1]]
m4 := [[1,0,0],[0,1,0],[0,1,1]]
-- and these matrices act on the non-zero vectors of the
-- corresponding vector space
vl : List Vector PrimeField 2
vl := [[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
-- Now we can write down the action of our matrices on this list vl
-- as a list of pairs
ll1 : List List Vector PrimeField 2 :=
[ [ vl.i , m1*(vl.i) ] for i in 1..7 ]
ll2 : List List Vector PrimeField 2 :=
[ [ vl.i , m2*(vl.i) ] for i in 1..7 ]
ll3 : List List Vector PrimeField 2 :=
[ [ vl.i , m3*(vl.i) ] for i in 1..7 ]
ll4 : List List Vector PrimeField 2 :=
[ [ vl.i , m4*(vl.i) ] for i in 1..7 ]
-- and we can coerce these lists to permutations
el1 : PERM Vector PrimeField 2 := coerceListOfPairs ll1
el2 : PERM Vector PrimeField 2 := coerceListOfPairs ll2
el3 : PERM Vector PrimeField 2 := coerceListOfPairs ll3
el4 : PERM Vector PrimeField 2 := coerceListOfPairs ll4
-- Now we can do the same operations as before, e.g.
el3(vl.5)
el2 * el1
support el4
-- Let's built the general linear group now
gl : PERMGRP Vector PrimeField 2 := [ el1 , el2 , el3 , el4 ]
-- and ask for its order
order gl
-- We can also ask for the orbit of the unordered set of vectors
setOfVectors : Set Vector PrimeField 2 := brace [ vl.2 , vl.4 , vl.6 ]
-- under gl
orbit ( gl, setOfVectors )
-- and also for the orbit of the ordered list
listOfVectors : List Vector PrimeField 2 := parts setOfVectors
orbit ( gl, listOfVectors )
-- Now Rubik's cube.
f : PERM INT := cycles [[11,13,15,17],[12,14,16,18],[51,31,21,41],[53,33,23,43],_
[52,32,22,42]]
r : PERM INT := cycles [[21,23,25,27],[22,24,26,28],[13,37,67,43],[15,31,61,45],_
[14,38,68,44]]
-- Some calculation in Rubik's group:
(f**2*r**2)**3
rc := rubiksGroup()
order rc
orbits rc
-- Can we interchange just two pieces with two visible faces on the cube
-- and leave everything else fixed?
member? (cycles([[12,14],[32,22]])$(PERM INT),rc)
|