|
Macaulay2 Engine
|
M2::ARingTower — iterated finite-field extension tower for very large GF(p^k). More...
#include <vector>#include <string>#include "ExponentVector.hpp"#include "aring-zzp-ffpack.hpp"#include "style.hpp"#include "aring.hpp"#include "ringelem.hpp"Go to the source code of this file.
Classes | |
| struct | M2::ARingPolynomialStruct |
| Heap-allocated node of an ARingTower polynomial: a dense degree-indexed coefficient array that recurses through tower levels. More... | |
| class | M2::ARingTower |
| aring-style coefficient ring for tower polynomial rings (Z/p)[x_0][x_1]...[x_{n-1}] modulo a chain of extensions. More... | |
| class | M2::ARingTower::Element |
| A wrapper class for ElementType. More... | |
| class | M2::ARingTower::ElementArray |
| Fixed-size, owned array of ElementTypes for the linear-algebra templates that want a flat buffer of tower-polynomial slots. More... | |
Namespaces | |
| namespace | M2 |
Typedefs | |
| typedef struct ARingPolynomialStruct * | M2::ARingPolynomial |
M2::ARingTower — iterated finite-field extension tower for very large GF(p^k).
Builds a finite field as a chain L_0 = Z/p, L_i = L_{i-1}[t_i] / f_i(t_i). A field element at level k is a polynomial in t_k of degree less than deg(f_k) whose coefficients themselves live in L_{k-1}, so values are represented recursively as ARingPolynomial — a pointer to ARingPolynomialStruct { int deg; int len; union { ElementType* coeffs; ARingPolynomial* polys; }; } that bottoms out at the ARingZZpFFPACK aring from aring-zzp-ffpack.hpp (the base ring is fixed; the in-source TODO flags making this a template over the bottom ring). Multiplication at each level is polynomial multiplication followed by reduction modulo the level's minimal polynomial. Unlike the other arings, ARingTower inherits from RingInterface directly rather than from SimpleARing<ARingTower> because element values are heap-managed pointers that need a backing-ring reference at destruction time — the nested Element class holds an ARingTower& for exactly that reason.
The tower path is the right choice when the user wants an explicit tower presentation. The M2-side entry points are rawARingTower1 (build from a base Z/p and variable names) and rawARingTower2 (extend an existing tower with more variables) in interface/aring.cpp; standard monolithic GF(p^k) rings are reached via separate factories that pick aring-gf-flint.hpp or aring-gf-flint-big.hpp instead.
Definition in file aring-tower.hpp.