Macaulay2 Engine
Loading...
Searching...
No Matches
GF.hpp
Go to the documentation of this file.
1// Copyright 1995 Michael E. Stillman.
2#ifndef _GF_hh_
3#define _GF_hh_
4
5#include "relem.hpp"
6
41
61class GF : public Ring
62{
63 // int P; // this is defined in class Ring
64 const PolynomialRing *_originalR; // This should be the ring ((Z/p)[t])/f(t).
65
66 const RingElement *_primitive_element; // An element of K
67 int _x_exponent; // (primitive_element)^(x_exponent) = x,
68 // the given generator of K.
69 int Q_; // this is GF(Q) = GF(P^Qexp)
70 int Qexp_; // P^Qexp = Q
71 int Q1_; // Q1 = Q-1
72 int _ZERO; // = 0 is our representation of 0.
73 int _ONE; // = Q-1 is our representation of 1.
74 int _MINUS_ONE; // = (Q-1)/2 if Q odd, = ONE if Q even.
75
76 int *_one_table; // Indexed from 0..Q1
78
79 // GF(const RingElement *prim);
80 protected:
81 GF();
82 virtual ~GF();
83 bool initialize_GF(const RingElement *prim);
84
85 public:
86 const PolynomialRing *originalR() const { return _originalR; }
87 static GF *create(const RingElement *prim);
88
89 int extension_degree() const { return Qexp_; }
90 GF *cast_to_GF() { return this; }
91 const GF *cast_to_GF() const { return this; }
92 virtual bool isGaloisField() const { return true; }
93 const RingElement *getMinimalPolynomial() const;
94 // returns the polynomial f(t) mentioned in the def of _originalR above.
95 // this is the minimal polynomial of the given generator of this ring
96 // (which is not necessarily the primitive element)
97 virtual const RingElement *getGenerator() const;
98 virtual const RingElement *getRepresentation(const ring_elem &a) const;
99
100 ring_elem get_rep(ring_elem f) const;
101 // takes an element of this ring, and returns an element of _originalR->XXX()
102
103 int discrete_log(ring_elem a) const;
104
105 // The following are all the routines required by 'ring'
106 unsigned int computeHashValue(const ring_elem a) const { return a.get_int(); }
107 virtual void text_out(buffer &o) const;
108
109 virtual ring_elem from_long(long n) const;
110 virtual ring_elem from_int(mpz_srcptr n) const;
111 virtual ring_elem var(int v) const;
112 virtual bool from_rational(mpq_srcptr q, ring_elem &result) const;
113 virtual bool promote(const Ring *R,
114 const ring_elem f,
115 ring_elem &result) const;
116 virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const;
117
118 virtual bool is_unit(const ring_elem f) const;
119 virtual bool is_zero(const ring_elem f) const;
120 virtual bool is_equal(const ring_elem f, const ring_elem g) const;
121 virtual int compare_elems(const ring_elem f, const ring_elem g) const;
122
123 virtual ring_elem copy(const ring_elem f) const;
124 virtual void remove(ring_elem &f) const;
125
126private:
127 int internal_negate(int f) const;
128 int internal_add(int f, int g) const;
129 int internal_subtract(int f, int g) const;
130
131public:
132 virtual ring_elem negate(const ring_elem f) const;
133 virtual ring_elem add(const ring_elem f, const ring_elem g) const;
134 virtual ring_elem subtract(const ring_elem f, const ring_elem g) const;
135 virtual ring_elem mult(const ring_elem f, const ring_elem g) const;
136 virtual ring_elem power(const ring_elem f, mpz_srcptr n) const;
137 virtual ring_elem power(const ring_elem f, int n) const;
138 virtual ring_elem invert(const ring_elem f) const;
139 virtual ring_elem divide(const ring_elem f, const ring_elem g) const;
140
141 virtual void syzygy(const ring_elem a,
142 const ring_elem b,
143 ring_elem &x,
144 ring_elem &y) const;
145
146 virtual ring_elem random() const;
147
148 virtual void elem_text_out(buffer &o,
149 const ring_elem f,
150 bool p_one = true,
151 bool p_plus = false,
152 bool p_parens = false) const;
153
154 virtual ring_elem eval(const RingMap *map,
155 const ring_elem f,
156 int first_var) const;
157};
158
159#endif
160
161// Local Variables:
162// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
163// indent-tabs-mode: nil
164// End:
ring_elem get_rep(ring_elem f) const
Definition GF.cpp:156
virtual ring_elem invert(const ring_elem f) const
Definition GF.cpp:417
virtual bool from_rational(mpq_srcptr q, ring_elem &result) const
Definition GF.cpp:230
unsigned int computeHashValue(const ring_elem a) const
Definition GF.hpp:106
virtual ~GF()
Definition GF.cpp:126
virtual bool is_equal(const ring_elem f, const ring_elem g) const
Definition GF.cpp:300
const GF * cast_to_GF() const
Definition GF.hpp:91
int internal_add(int f, int g) const
Definition GF.cpp:326
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
Definition GF.cpp:203
int _x_exponent
Definition GF.hpp:67
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
Definition GF.cpp:433
int * _one_table
Definition GF.hpp:76
virtual void text_out(buffer &o) const
Definition GF.cpp:135
int extension_degree() const
Definition GF.hpp:89
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
Definition GF.cpp:367
const RingElement * _primitive_element
Definition GF.hpp:66
bool initialize_GF(const RingElement *prim)
Definition GF.cpp:39
virtual int compare_elems(const ring_elem f, const ring_elem g) const
Definition GF.cpp:305
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
Definition GF.cpp:187
int internal_subtract(int f, int g) const
Definition GF.cpp:349
virtual const RingElement * getGenerator() const
Definition GF.cpp:143
int internal_negate(int f) const
Definition GF.cpp:320
int _MINUS_ONE
Definition GF.hpp:74
virtual bool isGaloisField() const
Definition GF.hpp:92
int * _from_int_table
Definition GF.hpp:77
virtual ring_elem copy(const ring_elem f) const
Definition GF.cpp:313
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
Definition GF.cpp:251
int Q_
Definition GF.hpp:69
virtual ring_elem from_int(mpz_srcptr n) const
Definition GF.cpp:217
int Qexp_
Definition GF.hpp:70
virtual void remove(ring_elem &f) const
Definition GF.cpp:315
virtual ring_elem var(int v) const
Definition GF.cpp:246
virtual bool is_zero(const ring_elem f) const
Definition GF.cpp:299
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
Definition GF.cpp:279
virtual ring_elem random() const
Definition GF.cpp:181
int Q1_
Definition GF.hpp:71
virtual ring_elem add(const ring_elem f, const ring_elem g) const
Definition GF.cpp:362
const PolynomialRing * originalR() const
Definition GF.hpp:86
GF * cast_to_GF()
Definition GF.hpp:90
const PolynomialRing * _originalR
Definition GF.hpp:64
virtual ring_elem from_long(long n) const
Definition GF.cpp:208
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
Definition GF.cpp:397
static GF * create(const RingElement *prim)
Definition GF.cpp:127
GF()
Definition GF.cpp:125
virtual const RingElement * getRepresentation(const ring_elem &a) const
Definition GF.cpp:149
int discrete_log(ring_elem a) const
Definition GF.cpp:162
virtual ring_elem negate(const ring_elem f) const
Definition GF.cpp:357
int _ONE
Definition GF.hpp:73
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
Definition GF.cpp:372
virtual bool is_unit(const ring_elem f) const
Definition GF.cpp:298
int _ZERO
Definition GF.hpp:72
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
Definition GF.cpp:425
const RingElement * getMinimalPolynomial() const
Definition GF.cpp:136
Engine-side finite field GF(p^n) built on top of (Z/p)[t] / f(t) for a primitive element of the resul...
Definition GF.hpp:62
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
Ring()
Definition ring.hpp:136
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
Definition relem.hpp:67
xxx xxx xxx
Definition ring.hpp:102
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Definition ringmap.hpp:60
VALGRIND_MAKE_MEM_DEFINED & result(result)
volatile int x
RingElement — tagged (Ring*, ring_elem) pair, the engine's universal element type.
int get_int() const
Definition ringelem.hpp:124