Exemple #1
0
 FreeModule *value() {
     if (symm1_result == 0)
     {
         symm1_result = F->get_ring()->make_FreeModule();
         if (n >= 0)
         {
             symm1_deg = D->make_one();
             symm1(0, n);
             D->remove(symm1_deg);
         }
     }
     return symm1_result;
 }
Exemple #2
0
 SchreyerOrder *value() {
   if (symm1_result == 0)
     {
       symm1_result = SchreyerOrder::create(M);
       if (n >= 0)
         {
           symm1_base = M->make_one();
           symm1(0, n);
           M->remove(symm1_base);
         }
     }
   return symm1_result;
 }
Exemple #3
0
    void symm1(int lastn,      // can use lastn..rank()-1 in product
               int pow) const   // remaining power to take
    {
        if (pow == 0)
            symm1_result->append(symm1_deg);
        else
        {
            for (int i=lastn; i<F->rank(); i++)
            {
                // increase symm1_deg, with e_i
                D->mult(symm1_deg, F->degree(i), symm1_deg);

                symm1(i, pow-1);

                // decrease symm1_deg back
                D->divide(symm1_deg, F->degree(i), symm1_deg);
            }
        }
    }
Exemple #4
0
  void symm1(int lastn,      // can use lastn..rank()-1 in product
             int pow)       // remaining power to take
  {
    if (pow == 0)
      symm1_result->append(symm1_next++, symm1_base);
    else
      {
        for (int i=lastn; i<S->rank(); i++)
          {
            // increase symm1_base with e_i
            M->mult(symm1_base, S->base_monom(i), symm1_base);

            symm1(i, pow-1);

            // decrease symm1_base back
            M->divide(symm1_base, S->base_monom(i), symm1_base);
          }
      }
  }