cubr:=function(l,G,H,gwG) local a,ng,rtng,s,i,j,t,index,B,b,bi,gw,gwH,u,u2,sig,m,k,c; a:=Size(l); ng:=[]; for i in [1..a] do ng[i]:=Normalizer(G,l[i]); od; rtng:=[]; for i in [1..a] do rtng[i]:=RightTransversal(G,ng[i]); od; s:=[]; for i in [1..a] do s[i]:=[]; od; for i in [1..a] do for j in [1..Size(rtng[i])] do s[i][j]:=ConjugateGroup(l[i],rtng[i][j]); od; od; t:=[]; for i in [1..a] do t[i]:=[]; od; for i in [1..a] do for j in [1..Size(rtng[i])] do t[i][j]:=Intersection(s[i][j],H); od; od; index:=[]; for i in [1..a] do index[i]:=Index(ng[i],l[i]); od; B:=[]; for i in [1..a] do B[i]:=0; od; for i in [1..a] do for j in [1..Size(rtng[i])] do B[i]:=B[i]+index[i]*(Size(t[i][j])-1); od; od; b:=0; for i in [1..a] do b:=b+B[i]; od; bi:=0; gw:=0; gwH:=0; for i in [1..a] do bi:=bi+1-1/Size(l[i]); od; gw:=Size(G)*(gwG-1)+1+(Size(G)*bi)/2; gwH:=(gw-1-b/2)/Size(H) +1; u:=[]; for i in [1..a] do u[i]:=[]; od; for i in [1..a] do for j in [1..Size(rtng[i])] do u[i][j]:=index[i]*Size(t[i][j]); od; od; u2:=[]; for i in [1..a] do u2[i]:=Collected(u[i]); od; sig:=[]; for i in [1..a] do sig[i]:=[]; od; for i in [1..a] do for j in [1..Size(u2[i])] do sig[i][j]:=[u2[i][j][1]/index[i],(u2[i][j][1]*u2[i][j][2])/Size(H)]; od; od; m:=[]; for i in [1..a] do m[i]:=[]; od; for i in [1..a] do c:=1; for j in [1..Size(sig[i])] do for k in [1..sig[i][j][2]] do m[i][c+k-1]:=(Size(l[i]))/sig[i][j][1]; od; c:=c+sig[i][j][2]; od; od; Print("\n"); Print("genero de W=",gw,"\n"); Print("La signatura de W/H es: \n"); Print("genero de W/H: ",gwH,"\n"); for i in [1..a] do Print(sig[i]," que estan sobre el punto marcado por ",l[i],"\n"); od; Print("\n"); Print("Para el cubrimiento W/H-->W/G la estructura de ciclos es: \n"); for i in [1..a] do Print(l[i],"-->",m[i],"\n"); od; Print("El indice de H en G es: ",Index(G,H),"\n"); Print("Core(H)= ",Core(G,H),"\n"); end;