Exemple #1
0
poly* Plethysm(entry* lambda,_index l,_index n,poly* p)
{ if (n==0) return poly_one(Lierank(grp));  else if (n==1) return p;

  { _index i,j;
    poly* sum= poly_null(Lierank(grp)),**adams=alloc_array(poly*,n+1);
    poly* chi_lambda=MN_char(lambda,l);
    for (i=1; i<=n; ++i) { adams[i]=Adams(i,p); setshared(adams[i]); }
    
    for (i=0;i<chi_lambda->nrows;i++)
    { entry* mu=chi_lambda->elm[i]; poly* prod=adams[mu[0]],*t;
      for (j=1; j<n && mu[j]>0; ++j)
        { t=prod; prod=Tensor(t,adams[mu[j]]); freepol(t); }
      sum= Addmul_pol_pol_bin(sum,prod,mult(chi_lambda->coef[i],Classord(mu,n)));
    }
    freemem(chi_lambda);
    setshared(p); /* protect |p|; it coincides with |adams[1]| */
    for (i=1; i<=n; ++i)
      { clrshared(adams[i]); freepol(adams[i]); }  freearr(adams);
  clrshared(p);

    
    { bigint* fac_n=fac(n);  setshared(fac_n); /* used repeatedly */
      for (i=0; i<sum->nrows; ++i)
      { bigint** cc= &sum->coef[i]
             ,* c= (clrshared(*cc),isshared(*cc)) ? copybigint(*cc,NULL) : *cc;
        *cc=divq(c,fac_n); setshared(*cc);
        if (c->size!=0) error("Internal error (plethysm).\n");  else freemem(c);
      }
      clrshared(fac_n); freemem(fac_n);
    }
    return sum;
  }
}
Exemple #2
0
local poly* decompose_character(poly* ch)
{   wt_init(ch->ncols); /* for building result */
    while (ch->coef[0]->size!=0) /* i.e., |while (ch!=0)| */
    {   bigint* c=ch->coef[0];
        if (c->size<0)

        {   cmpfn=sav_cmpfn;
            defaultgrp=sav_dfgrp;
            error ("Non-virtual decomposition failed.\n");
        }

        {   wt_ins(ch->elm[0],c,false); /* contribute weight to result */
            c=copybigint(c,NULL);
            c->size= -c->size;
            ch=Addmul_pol_pol_bin(ch,Domchar_irr(ch->elm[0],NULL),c);
        }
    }
    {   poly* result=wt_collect();

        {
            cmpfn=sav_cmpfn;
            defaultgrp=sav_dfgrp;
            clrsorted(result);
        }
        return result;
    }
}
Exemple #3
0
Fichier : lr.c Projet : d4g33z/lie
poly* LR_tensor(poly* p,poly* q)
{ _index i,j,n=p->ncols; poly* res=poly_null(n);
  for (i=0; i<p->nrows; ++i)
    for (j=0; j<q->nrows; ++j)
      res=Addmul_pol_pol_bin(res,LR_tensor_irr(p->elm[i],q->elm[j],n)
			    ,mult(p->coef[i],q->coef[j]));
  return res;
}
Exemple #4
0
poly* Vdecomp(poly* p)
{   lie_Index i,r=Lierank(grp);
    poly* result=poly_null(r);
    cur_expon=mkintarray(r); /* large enough */
    for (i=0; i<p->nrows; ++i)
        result=Addmul_pol_pol_bin(result,vdecomp_irr(p->elm[i]),p->coef[i]);
    freearr(cur_expon);
    return result;
}