class PERM < $IS_LT{PERM},$STR,$HASH
****
permutation group S(jn) format: p[0]=0 and p[jn+1]=0. [1..jn]: permutation as a map p[i].


Flattened version is here

Ancestors
$HASH $IS_EQ $STR $IS_LT{_}



Public


Readable Attributes
attr jn:CARD;
attr p:ARRAY{CARD};

Writable Attributes
attr jn:CARD;
attr p:ARRAY{CARD};

Features
Yang_diagram:ARRAY{CARD}
**** Yang diagram(list of length of orbits) format: [ #orbit, length of orbits(sorted), fill 0 upto jn+1]
aget(i:CARD):CARD
aset(i:CARD, x:CARD)
braid:BRAID
**** permutation to braid word of standard form. i.e. i<j, i-th string is cross over with j-th string.
check_yang(yang:ARRAY{CARD}):CARD
**** check if format is correct 0 for bad format. positive for otherwise
compare(o:SAME):INT
**** <=> : rank--lexical order.
conj(o:SAME):SAME
**** o * self * o~
conj_inv(o:SAME):SAME
**** o~ * self * o
copy:SAME
create(perm:ARRAY{CARD},base:CARD):SAME
**** perm: permutation of base .. size+base-1
create(n:CARD):SAME
**** trivial permutation.
create_from_yang(yang:ARRAY{CARD}):SAME
**** standard permutation for the yang diagram.
div(o:SAME):SAME
**** self * o~
hash:CARD
inv:SAME
**** self~. inverse.
inv_conj(o:SAME):SAME
**** o * self~ * o~ = (o*self*o~)~
inv_conj_inv(o:SAME):SAME
**** o~ * self~ * o
inv_times(o:SAME):SAME
**** self~ * o
is_eq(o:SAME):BOOL
is_lt(o:SAME):BOOL
**** c.f. compare
is_one:BOOL
is_regular:BOOL
**** Orbits have same length.
mark_orbit(out mark:ARRAY{CARD}, out length:ARRAY{CARD})
**** mark up orbits. format of mark [0]:= #of orbits, [i]:= p[i] is element of [i]-th orbit, [jn+1]:=0. format of length [0]:= #of orbits, [i]:= length of i-th orbit.
one(n:CARD):SAME
orbits:ARRAY{ARRAY{CARD}}
pow(n:INT):SAME
sgn:INT
**** 1/-1 : parity of premutation p[1..jn]
str(lib : LIBCHARS) : STR
str:STR
str_orbit:STR
swap(i,j:CARD)
**** (i,j) * self
swap(i,j:CARD):SAME
**** (i,j) * self
times(o:SAME):SAME


Private

alloc(n:CARD):SAME
**** allocate
orbit_is_lt(o1,o2:ARRAY{CARD}):BOOL
**** sort function for orbits.

The Sather Home Page