# "cnm" denotes the centralizer group of the seudo-Coxeter # element "totpr" of the monodromy "pr". cnm:=Centralizer(g,totpr); lcnm:=Elements(cnm); # The input of micnj(el) is a list of elements in the group such # that its reversed product is the seudo-Coxeter element "totpr" # of the monodromy "otro" (see file "gens"). # The output is the list of all conjugate lists having the same # reversed product. micnj:=function(el) return Unique(List(lcnm,x->conjorbita(el,x))); end; # We initialize the variables of the main part of the algorithm. # In "orbita" we keep the growing orbit of the monodromy "pr" orbita:=[pr]; # In "aumentar", we keep the monodromy representatives in the partial # orbit of "pr" whose image by the generating braids has to be computed. aumentar:=[pr]; # The next two variables are boolean. # The variable "control" is true if the monodromy "pr" # is not conjugate to the other monodromy "otro", that is, # if "pr" is not in "segundo". # (see the file "conjugados" for the meaning of "segundo"). # The variable "prueba" is true if "control" is false. control:=not (pr in segundo); prueba:=false; # The algorithm starts only if "control" is true. If not, the orbits coincide. # If "control" becomes false the computation of the orbit stops and # a message appears saying that the orbits are equal. if control then # The "repeat ... until ..." structure finishes if either "control" is false or # no new element has been added to the orbit, i.e., the orbit is complete. # The list "nuevos" contains the new elements of the orbit. # At each step we apply braid generators to the elements of the list "aumentar". repeat nuevos:=[]; Print("elements added ",Length(aumentar),"\n"); for elt in aumentar do # We fix an element of the list "aumentar" and we apply to it # all the generators of the braid subgroup referred to in the file "generadores". # The algorithm is broken is some element of the orbit is a conjugate of "otro". for kj in generadores do # We compute the image "elt1" of an element in "aumentar" by a generator in # "generadores" (see the file "generadores"). elt1:=kj(elt); control:=not (elt1 in segundo); if control then # We consider the conjugated lists of "elt1" with the same reversed product. # If such element is not yet in "orbita", we add it to "orbita" and to "nuevos". orbcnj:=micnj(elt1); control1:=Length(Intersection(orbita,orbcnj))=0; if control1 then Add(orbita,elt1); Add(nuevos,elt1); fi; else prueba:=true; break; fi; od; if prueba then break; fi; od; # In case we have to continue computing the orbit, the variable "aumentar" # is defined as "nuevos". if not control then Print("Both orbits coincide\n"); nuevos:=[]; else Print("new elements ",Length(nuevos),"\n"); Print("orbit elements ",Length(orbita),"\n"); aumentar:=ShallowCopy(nuevos); fi; until Length(nuevos)=0; else Print("Both orbits coincide\n"); fi; # If the computation of the orbit is OK, the two orbits should # be disjoint and hence we are done. if control then Print("The orbits are different\n"); fi;