// commentaar in Magma staat achter twee /'s

// bij een gewone nummering van de zijden van een kubus is de
// rotatiegroep van de kubus voortgebracht door de permutaties
// (1,2,3)(4,6,5) (door twee hoekpunten) en (2,3,5,4) (door twee
// zijvlakken
G := sub< Sym(6) | (1,2,3)(4,6,5), (2,3,5,4) >;

// het commando CycleIndexPolynomial geeft het cykel index polynoom,
// echter alleen maar als polynoom in de echt benodigde variabelen
Z := CycleIndexPolynomial(G);
// geeft 1/24*x[1]^6 + 1/8*x[1]^2*x[2]^2 + 1/4*x[1]^2*x[4] + 1/4*x[2]^3 
// + 1/3*x[3]^2 en x[5] en x[6] komen niet voor,
// soms moeten we echter in alle variabelen iets invullen, dus maken we
// het polynoom handmatig aan
R<X1,X2,X3,X4,X5,X6> := PolynomialRing(Rationals(), 6);
Z := 1/24 * (X1^6 + 3*X1^2*X2^2 + 6*X1^2*X4 + 6*X2^3 + 8*X3^2);

// we kunnen een polynoom evalueren, door een sequence van waarden voor
// de variabelen aan te geven, bijvoorbeeld is het aantal banen met 3 kleuren
Evaluate(Z, [3,3,3,3,3,3]);
// en dit geeft het (gewenste) resultaat 57

// als we nu willen weten bij hoeveel van die kleuringen de eerste kleur
// 0, 1, 2 enz. keer voorkomt, moeten we Xi door 2+X^i vervangen
// en naar de coefficienten van X^k kijken
S<X> := PolynomialRing(Rationals(), 1);
Evaluate(Z, [2+X, 2+X^2, 2+X^3, 2+X^4, 2+X^5, 2+X^6]);
// geeft X^6 + 2*X^5 + 6*X^4 + 10*X^3 + 16*X^2 + 12*X + 10
// en we zien dat de aantallen 10, 12, 16, 10, 6, 2, 1 zijn (de som is 57)

// stel dat de kleuren a, b en c zijn en dat b en c op elkaar lijken, zo dat
// we twee kleuringen als equivalent beschouwen als een verwisseling van de
// kleuren b en c ze in elkaar transformeert,
// dan is het aantal banen onder deze werking gegeven door
1/2 * (Evaluate(Z, [3,3,3,3,3,3]) + Evaluate(Z, [1,3,1,3,1,3]));
// en dit geeft 33 banen

// als we nu nog willen weten bij hoeveel van deze banen b en c even vaak
// voorkomen, moeten we polynomen in variabelen voor de kleuren uitwerken
T<a,b,c> := PolynomialRing(Rationals(), 3);
H1 := Evaluate(Z,
[a+b+c, a^2+b^2+c^2, a^3+b^3+c^3, a^4+b^4+c^4, a^5+b^5+c^5, a^6+b^6+c^6]);
H2 := Evaluate(Z, [a, a^2+2*b*c, a^3, a^4+2*b^2*c^2, a^5, a^6+2*b^3*c^3]);
Y := 1/2 * (H1 + H2);
print Y;
// Y = a^6 + 1/2*a^5*b + 1/2*a^5*c + a^4*b^2 + 2*a^4*b*c + a^4*c^2 + a^3*b^3 +
// 3/2*a^3*b^2*c + 3/2*a^3*b*c^2 + a^3*c^3 + a^2*b^4 + 3/2*a^2*b^3*c +
// 5*a^2*b^2*c^2 + 3/2*a^2*b*c^3 + a^2*c^4 + 1/2*a*b^5 + a*b^4*c +
// 3/2*a*b^3*c^2 + 3/2*a*b^2*c^3 + a*b*c^4 + 1/2*a*c^5 + 1/2*b^6 + 1/2*b^5*c +
// b^4*c^2 + 2*b^3*c^3 + b^2*c^4 + 1/2*b*c^5 + 1/2*c^6
// en hieruit kunnen we aflezen dat er 2 banen zijn waarin b en c telkens
// 1 keer voorkomen, 5 banen waarin ze beide twee keer voorkomen en
// 2 banen waarin ze beide 3 keer voorkomen

// we zien ook dat er (zo als verwacht) slechts een baan is waarin kleur a
// 5 keer voorkomt, want de termen 1/2*a^5*b en 1/2*a^5*c moeten we samenvatten
// omdat b en c verwisseld kunnen worden
