### This file contains the functions needed for the F-cyclic shift conjugation criterion ### Felix Grelak 04-2014 ### Following functions are contained: ### ### ConjugationClass(w) ### FCyclicShiftClass(w) ### FCyclicShiftClassWords(w) ### IsAffineMinimalLength(w) ### AreNotAffineByConjugation(M) ### AreNotAffineMinimalLength(M) #################################################################################### ConjugationClass := function (w) ### Computes the conjugation class of an element w in a Coxeter group W ### consisting of {v*w*v^-1}. ### ### @Input: w an element of W ### ### @Output: A list of all v's in the conjugacy class of w ### ### Required global variables: W of type Coxeter group, WElements, a list ### containing for W all elements as elements of length i at position i local v, i,j, omega, cyc_class, cyc_class2; if w in Elements(W) then w := CoxeterWord(W,w); fi; w := ReducedCoxeterWord(W,w); cyc_class :=[]; cyc_class2 :=[]; omega:=EltWord(W,w); for i in [1..Length(WElements)] do for j in [1..Length(WElements[i])] do v := WElements[i][j]*omega*(WElements[i][j]^-1); Add(cyc_class, CoxeterWord(W,v) ); od; od; ### Delete double elements from list for v in cyc_class do if not v in cyc_class2 then Add(cyc_class2,v); fi; od; ### Sort list so that the shortest elements are stored at the beginning Sort(cyc_class2, function(v,w) return Length(v) 0 ) do v_cur := list_of_current[1]; j := 1; cyc_class_v := FCyclicShiftClassWords(v_cur); for vprime in cyc_class_v do ### If some vprime is not in M, then X(vprime) is affine, CC applies: if not vprime in M then j := Length(cyc_class_v)+2; fi; od; if j < Length(cyc_class_v)+2 then for vprime in cyc_class_v do Add(list_of_remaining, vprime); od; fi; list_of_current := Filtered(list_of_current, v -> not(v in cyc_class_v) ); od; return list_of_remaining; end;; ################################################################################### AreNotAffineMinimalLength := function (M) ### Returns a list of all elements that are not affine by the minimal length criterion. local vprime, remaining_list; remaining_list := []; for vprime in M do if not IsAffineMinimalLength(vprime) then Add(remaining_list, vprime); fi; od; return remaining_list; end;;