inform("Permutation Functions.(Table 12.11)", 2);

// Symmetric, Alternating.
inform("Symmetric, Alternating.", 3);

w( not IsSymmetric(t12), "symm: t12.");
w(     IsAlternating(t12), "altn: t12.");
w( not IsAlternating(a10), "altn: a10.");
w(     IsSymmetric(a10), "symm: a10.");
w( not IsAltsym(t7),"altsym: t7." );
w( not IsAltsym(a4),"altsym: a4." );
w( IsAltsym(ra4),   "altsym: ra4.");

// Base, Base Images.
inform("Base, Base Images.", 3);

w( cBase(im21), "base: im21.");
w( cBase(p16),  "base: p16.");
w( cBase(g12), "base: g12.");
w( dEltBim(s16,s16c), "bim: s16.");
w( dEltBim(t7, t7!(1,2,7)(5,6)), "bim: t7.");
w( eEltBim(l303,l303.2), "bim: l303.");
w( eEltBim(int12,int12.1), "bim: t12.");

// Strong Generators.
inform("Strong Generators.", 3);

w(cStGen(s12), "st gen: s12." );
w(cStGen(c41), "st gen: c41.");
w(cStGen(a4), "st gen: a4."  );
w(cNSGen(s12), "nsgen: s12.");
w(cNSGen(c41), "nsgen: c41.");
w(cNSGen(a4), "nsgen: a4.");

// Fixed Points.
inform("Fixed Points.", 3);

w(bFix(p11n5b), "fix: p11n5.");
w(bFix(a10!(1,2,3,4)(7,8)*a10!(1,3,5)(8,10)(2,6)), "fix: a10.");
w(cFix(p11n5,p11n5b), "fix: p11n5b.");
w(cFix(a10,a10y), "fix: a10y.");

// Cycle Structure.
inform("Cycle Structure.", 3);

w(bCycStr(im24b), "cyc str: im24.");
w(bCycStr(t12!(1,2,3)(4,5,6,7)(9,10,11,12,8)), "cyc str: t12.");
w(cCycStr(a10x,a10y), "cyc str: a10.");
w(cCycStr(s12a,s12b), "cyc str: s12.");

// Even.
inform("Evenness.", 3);

w(eEven(ir12b), "even: ir12.");
w(eEven(a10.2^a10.1), "even: a10.");
w(eEven(t7!(1,2)*t7!(3,4,5,6)), "even: t7.");

// Orbits.
inform("Orbits.", 3);

w(bPtOrb(t12,3), "orb: pt: t12.");
w(bPtOrb(im14,1),"orb: pt: im14.");
w(cPtOrb(int12,3), "orb: pt: int12.");
w(cPtOrb(t7,7), "orb: pt: t7.");
// w(bSeOrb(sub<p16 | p16a>, Fix(p16a)), "orb: set/seq: p16.");
// w(bSeOrb(a4, [1,2,3,4]), "orb: set/seq: a4.");
w(bOrbs(sub<t12 | (1,2,3,4,5),(1,2)>), "orbs: t12.");
w(bOrbs(int12), "orbs: int12.");

// Transitivity.
inform("Transitivity.", 3);

w(cTnstv(int12), "tnstv: int12.");
w(cTnstv(ir12), "tnstv: ir12.");
w(cTnstv(l303), "tnstv: l303.");
w(cTnstv(p8n5), "tnstv: p8n5.");
w(cTnstv(c41), "tnstv: c41.");

inform("Degree of ~.", 4);

w(not(Transitivity(p8n4) eq 3 and IsTransitive(p8n4,3)), "tnstv: deg: p8n4.");
w(not(Transitivity(p8n5) eq 3 and IsTransitive(p8n5,2)), "tnstv: deg: p8n5.");
w(Transitivity(p12n4) ne 5 or IsTransitive(p12n4,6), "tnstv: deg: p12n4.");
w(Transitivity(a10) ne 8 or Transitivity(sub<Generic(a10) | (1,2),(3,4)>) ne 0,
          "tnstv: deg: a10.");

inform("Sharp Transitivity.", 4);

w( IsSharplyTransitive(a4,1), "tnstv: sharp: a4.");
w( IsSharplyTransitive(p8n5, Transitivity(p8n5)), "tnstv: sharp: p8n5.");
w( IsSharplyTransitive(p8n4,4) or not IsSharplyTransitive(p8n4,3),
          "tnstv: sharp: p8n4.");
w( not IsSharplyTransitive(p11n6, Transitivity(p11n6)), "tnstv: sharp: p11n6.");
w( not IsSharplyTransitive(p12n4,5), "tnstv: sharp: p12n4.");

// Stabiliser.
inform("Stabiliser.", 3);

w(bPtStab(p12n4,1), "stab: pt: p12n4.");
w(bPtStab(a10,5), "stab: pt: a10.");
w(bSeStab(im21, {17,18,19,20,21}), "stab: set/seq: im21.");
w(bSeStab(p11n6, Setseq(Fix(p11n6d))), "stab: set/seq: p11n6.");

// Semiregular, Regular.
inform("Semiregular,Regular.", 3);

w(eSemireg(sub<t12 | (1,2,3)(4,5,6)(7,8)(9,10)(11,12)>, {1,2,3,7,8}),
    "semireg: t12.");
w(eSemireg(sub<t12 | (1,2,3)(4,5,6)(7,8)(11,12),(9,10)>, {1,2,3,7,8}),
    "semireg: t12.");
w(eSemireg(t7,{1,3,7}), "semireg: t7." );
w(eSemireg(r12, Orbit(r12,1)), "semireg: r12.");
w( cRegular(r12), "reg: r12." );
w( cRegular(ra4), "reg: ra4." );
w( cRegular(ir12),"reg: ir12.");
w( cRegular(as12),"reg: as12.");

// Frobenius.
inform("Frobenius.", 3);

w(eFrob(p11n4) or not IsFrobenius(p11n4), "frob: p11n4.");
w(eFrob(p11n5) or IsFrobenius(p11n5), "frob: p11n5.");
w(eFrob(c41) or IsFrobenius(c41), "frob: c41.");

// Primitive.
inform("Primitive.", 3);

w( cPrimitive(im21), "pmtv: im21.");
w( cPrimitive(im24), "pmtv: im24.");
w( cPrimitive(p11n6), "pmtv: p11n6.");
w( cPrimitive(p8n4), "pmtv: p8n4.");

// Block Systems.
inform("Block Systems.", 3);

w(cBlSys(im21), "bl sys: im21.");
w(cBlSys(im24), "bl sys: im24.");
w(cBlSys(p11n4), "bl sys: p11n4.");
w(cBlSys(p8n4), "bl sys: p8n4.");

// Blocks Homomorphism.
inform("Blocks Homomorphism.", 3);
f := BlocksAction(im21,MinimalPartitions(im21)[1]);
w(cHom(im21, f), "bl hm: im: im21.");
w(cKer(im21, f), "bl sys: ker: im21.");
f := BlocksAction(im24,MinimalPartitions(im24)[1]);
w(cHom(im24, f), "bl hm: im: im24.");
w(cKer(im24, f), "bl sys: ker: im24.");

w(eBlHom(im21), "bl hm: im21.");
w(eBlHom(im24), "bl hm: im24.");

// Constituent Homomorphism.
inform("Constituent Homomorphism.", 3);
f := OrbitAction(im14,1);
w(cHom(im14, f), "con hm: im: im14.");
w( cKer(im14, f), "con hm: ker: im14.");
f := OrbitAction(sub<t7 | (3,4,5,6,7),(1,2,3)>,1);
w(cHom(sub<t7 | (3,4,5,6,7),(1,2,3)>, f), "con hm: im: t7.");
w( cKer(sub<t7 | (3,4,5,6,7),(1,2,3)>, f), "con hm: ker: t7.");
f := OrbitAction(int12,1);
w(cHom(int12, f), "con hm: im: int12.");
w(cKer(int12, f), "con hm: ker: int12.");
w(cConHom(im14,1), "con hm: im14.");
w(cConHom(sub<t7 | (3,4,5,6,7),(1,2,3)>,1), "con hm: t7.");
w(cConHom(int12,1), "con hm: int12.");

