We want to compute characters of wreath product Z_3^(Z_3)*Z_3 First, we represent the group in computer giving generators as permutations: fricas (1) -> pG := Permutation(Integer)
Type: Type
fricas g1 := cycle([1,
Type: Permutation(Integer)
fricas g2 := cycle([1,
Type: Permutation(Integer)
fricas gens := [1$pG,
Type: List(Permutation(Integer))
Check the order: fricas order(permutationGroup(gens))
Type: PositiveInteger?
Now, we compute list of elements. We will repeatedly multiply pending list of elements by generators. Due to length we do no print results. fricas mul_sets(s1, Type: Void
fricas ls := gens; Type: List(Permutation(Integer))
fricas for i in 1..20 repeat ls := mul_sets(ls, fricas Compiling function mul_sets with type (List(Permutation(Integer)), Type: Void
Check that we obtained all elements: fricas #ls
Type: PositiveInteger?
Now, we want to compute conjugacy classes. fricas classes : List(List(Permutation(Integer))) := []
Type: List(List(Permutation(Integer)))
fricas rl := ls; Type: List(Permutation(Integer))
fricas while not(empty?(rl)) repeat cl := removeDuplicates([g^(-1)*rl(1)*g for g in ls]) classes := cons(cl, Type: Void
fricas -- reverse for more natural order classes := reverse!(classes); Type: List(List(Permutation(Integer)))
fricas -- check for correct number of classes #classes
Type: PositiveInteger?
Now we want to compute multiplication table for classes. fricas -- Auxiliary function to multiply element g1 by class cl1. -- Input: -- g1 - element -- cl1 - class -- lcl - list of all classes product_of_classes(g1, Type: Void
fricas -- Auxiliary function to multiply class cl1 by class cl2 -- Input: -- cl1 and cl2 - classes -- lcl - list of all classes -- ncll - list of cardinalities of classes in lcl product_of_classes2(cl1, Type: Void
fricas -- remember cardinalities of classes for future use nlcl := [#cl for cl in classes]
Type: List(NonNegativeInteger?)
fricas -- empty multiplication table mt := []$List(Matrix(Integer))
Type: List(Matrix(Integer))
fricas -- Fill the multiplication table for i in 1.. for cl1 in classes repeat mti := new(17, fricas Compiling function product_of_classes with type (Permutation(Integer ), fricas Compiling function product_of_classes2 with type (List(Permutation( Integer)), Type: Void
fricas mt := reverse!(mt); Type: List(Matrix(Integer))
Computation of characters will be done over finite field, in particular for p = 1459 we have all needed roots of unity. We will produce matrix of multiplication by random element and compute its eigenvectors. fricas pF := PrimeField(1459)
Type: Type
fricas A := reduce(_+, Type: Matrix(PrimeField?(1459))
fricas -- check if eigenvalues are distinct #eigenvalues(A)
Type: PositiveInteger?
fricas -- list of eigenvectors le1 := [eir.eigvec for eir in eigenvectors(A)]; Type: List(List(Matrix(Fraction(Polynomial(PrimeField?(1459))))))
fricas -- convert to right type le := [column(first(ev)::Matrix(PrimeField(1459)), Type: List(Vector(PrimeField?(1459)))
By normalizing and pass from g to g^(-1) we get characters from eigenvectors fricas -- Compute table of inverses for classes inv := new(17, Type: Vector(Integer)
fricas for i in 1.. for cl1 in classes repeat g1 := first(cl1)^(-1) for j in 1.. for cl2 in classes repeat if member?(g1, Type: Void
fricas -- Auxiliary function to compute scalar product <f, Type: Void
fricas -- Auxiliary function to normalize eigenvectors so that <f, Type: Void
Here we get list of characters fricas )set output tex off fricas )set output algebra on fricas Compiling function skalar_product with type (Vector(PrimeField(1459) ), fricas Compiling function normalize_vectors with type (List(Vector( PrimeField(1459))), Type: List(Vector(PrimeField?(1459)))
fricas lch Type: List(Vector(PrimeField?(1459)))
fricas -- Check that squares of dimensions sum to correct value reduce(_+, Type: PrimeField?(1459)
Comment: Using characters over finite field we could also compute values of characters over complex numbers, but we stop here. |