Macaulay2 Engine
Loading...
Searching...
No Matches
aring-tower.hpp File Reference

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 ARingPolynomialStructM2::ARingPolynomial

Detailed Description

M2::ARingTower — iterated finite-field extension tower for very large GF(p^k).

Note
AI-generated documentation. Verify against the source before relying on it.

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.

See also
aring-zzp-ffpack.hpp
aring-gf-flint.hpp
aring-gf-flint-big.hpp
ExponentVector.hpp

Definition in file aring-tower.hpp.