/* fmon.c */ #include "def.h" #include "macro.h" static INT nu_v_v(); static INT v_v_nu(); static INT permutiere_v(); static INT permutiere_v1(); static INT sims_kette1(); static INT vertausche(); static INT vertausche1(); static INT permutiere_v2(); static INT vertausche_zeilen(); static INT nu_v_v(v,a,b) OP v,a,b; /* sei v ein VECTOR mit Eintraegen 1,2,...,a (a ist INTEGER Objekt), dann ist b (INTEGER Objekt) die Nummer von v */ { INT i; OP hilf=callocobject(); OP hilf1=callocobject(); OP hilf2=callocobject(); m_i_i(0L,b); M_I_I(1L,hilf); for (i=S_V_LI(v)-1L;i>=0L;--i) { if (i!=S_V_LI(v)-1L) mult_apply(a,hilf); copy(S_V_I(v,i),hilf2); dec(hilf2); mult(hilf2,hilf,hilf1); add_apply(hilf1,b); } inc(b); freeall(hilf);freeall(hilf1); } static INT v_v_nu(b,a,l,v) OP b,a,l,v; /* b INTEGER Objekt ist die Nummer eines VECTORS v der zu bestimmen ist v hat Eintraege (INTEGER Objekte) aus 1,...,a und ist von der Laenge l (INTEGER Objekt). */ { INT i; OP hilf=callocobject(); OP hilf1=callocobject(); OP hilf2=callocobject(); OP hilf3=callocobject(); m_l_v(l,v); hoch(a,l,hilf); copy(b,hilf1); dec(hilf1); for (i=0L;iS_I_I(a)) j=1L; M_I_I(j+k,S_P_I(S_V_I(c,l),i)); } if (gt(a,cons_zwei)) { j=1L;k=0L;++l; for (i=0L;iS_I_I(a)) j=1L; } } m_l_v(b,w); m_i_i(1L,hilf); ++l; for (i=0L;i=0L;--k) vertausche(a,n,i,k,v); } static INT vertausche(a,n,i,k,v) OP a,n,v; INT i,k; /* vertauscht bei den Vektoren in a^n in der k-ten Zeile (k laeuft von 0 bis n-1) den Buchstaben j (\in{1,...,a}) mit allen moeglichen Buchstaben i+1,...,a. */ { INT j,l; OP w=callocobject(); OP ww=callocobject(); copy(v,w); for (j=i+1L;j<=S_I_I(a);++j) { copy(w,ww); for (l=0L;l=0L;--k) { m_i_i(k+1L,hilf); sub(n,hilf,hilf); hoch(a,hilf,hilf1); vertausche_zeilen(a,n,2L,k,v); copy(S_V_L(v),S_V_I(anz,num)); add(hilf1,cons_eins,S_V_I(abbr,num)); for (j=0L;j0L)) --num; m_i_i(num,basis); freeall(v); freeall(hilf); freeall(hilf1); freeall(hilf2); } INT sims_kette_fmon(a,n,b) OP a,n,b; /* b (MATRIX) beinhaltet die strong generators von S_a\wr S_n als Exponentiation operierend auf a^n. */ { INT i,j,k,num; OP v=callocobject(); OP hilf=callocobject(); OP hilf1=callocobject(); OP hilf2=callocobject(); copy(a,hilf); dec(hilf); mult(hilf,n,hilf1); inc(hilf1); hoch(a,n,hilf2); m_lh_m(hilf2,hilf2,b); println(hilf2); sims_kette1(a,n,1L,v); num=0L; for (j=0L;j=0L;--k) { m_i_i(k+1L,hilf); sub(n,hilf,hilf); hoch(a,hilf,hilf1); vertausche_zeilen(a,n,2L,k,v); for (j=0L;j