Macaulay2 Engine
Loading...
Searching...
No Matches

◆ exterior()

FreeModule * FreeModule::exterior ( int p) const

Definition at line 296 of file freemod.cpp.

298{
300 if (pp == 0)
301 return R->make_FreeModule(1);
302 else
303 result = new_free();
304
305 int rk = rank();
306 if (pp > rk || pp < 0) return result;
307
308 size_t p = static_cast<size_t>(pp);
309
310 Subset a(p, 0);
311 for (size_t i = 0; i < p; i++) a[i] = i;
312
313 auto D = R->degree_monoid();
314 monomial deg = D->make_one();
315 do
316 {
317 D->one(deg);
318
319 for (size_t r = 0; r < p; r++)
320 D->mult(deg, degree(static_cast<int>(a[r])), deg);
321
322 result->append(deg);
323 }
324 while (Subsets::increment(rk, a));
325
326 D->remove(deg);
327
328 if (schreyer != nullptr) result->schreyer = schreyer->exterior(pp);
329 return result;
330}
virtual FreeModule * new_free() const
Definition freemod.cpp:125
SchreyerOrder * schreyer
Definition freemod.hpp:73
const_monomial degree(int i) const
Definition freemod.hpp:104
FreeModule(const Ring *R, int n, bool has_schreyer_order)
Definition freemod.cpp:32
const Ring * R
Definition freemod.hpp:75
int rank() const
Definition freemod.hpp:105
static bool increment(size_t n, Subset &s)
Definition comb.cpp:124
std::vector< size_t > Subset
Definition comb.hpp:58
#define monomial
Definition gb-toric.cpp:11
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)

References degree(), FreeModule(), Subsets::increment(), monomial, new_free(), p, R, rank(), result(), and schreyer.

Referenced by IM2_FreeModule_exterior(), and Matrix::wedge_product().