Changes http://wiki.axiom-developer.org/FiniteFieldPolynomialExtension/diff
--
polynomial extension of a polynomial extension
get a small prime, choose 2 or 3
\begin{axiom}
p:=3
P:=PrimeField p
-- get two small extension degrees
d1:=2
d2:=3
-- get irreducible polynomial of degree d1 over P
f1:=createIrreduciblePoly(d1)$FFPOLY(P)
F1:=FFP(P,f1)
-- get irreducible polynomial of degree d2 over F1
f2:=createIrreduciblePoly(d2)$FFPOLY(F1)
-- construct field
F:=FFP(F1,f2)
\end{axiom}
this field is the same as constructed by F:=FFX(F1,d2)
demonstration of common finite field functions
the finite field domain is in variable F
take some random elements
\begin{axiom}
size()$F
a:=index(size()$F quo 3)$F
b:=index(size()$F quo 7)$F
\end{axiom}
simple arithmetic
\begin{axiom}
a+b
a-b
a*b
a/b
a**1234
a**(-1)
g := generator()$F
(definingPolynomial()$F::SUP(F)).g
-- functions concerning the multiplicative cyclic group
order(a)
g:=primitiveElement()$F
discreteLog(a)
-- the next one should equal 0
g**% - a
-- the next may fail
discreteLog(b,a)
-- special finite field functions
extensionDegree()$F
degree(a)
normalElement()$F
definingPolynomial()$F
minimalPolynomial(a)
Frobenius(a)
linearAssociatedOrder(a)
linearAssociatedLog(a)
\end{axiom}
\begin{axiom}
for d in divisors extensionDegree()$F repeat
print(norm(a,d::PI)::OUTFORM)
print(trace(a,d::PI)::OUTFORM)
\end{axiom}
polynomial extension of a normal extension
get normal polynomial of degree d1 over P
\begin{axiom}
f1:=createNormalPoly(d1)$FFPOLY(P)
F1:=FFNBP(P,f1)
-- get irreducible polynomial of degree d2 over F1
f2:=createIrreduciblePoly(d2)$FFPOLY(F1)
-- construct field
F:=FFP(F1,f2)
-- this field is the same as constructed by F:=FFX(F1,d2)
-- demonstration of common finite field functions
-- the finite field domain is in variable F
-- take some random elements
size()$F
a:=index(size()$F quo 3)$F
b:=index(size()$F quo 7)$F
-- simple arithmetic
a+b
a-b
a*b
a/b
a**1234
a**(-1)
g := generator()$F
(definingPolynomial()$F::SUP(F)).g
-- functions concerning the multiplicative cyclic group
order(a)
g:=primitiveElement()$F
discreteLog(a)
-- the next one should equal 0
g**% - a
-- the next may fail
discreteLog(b,a)
-- special finite field functions
extensionDegree()$F
degree(a)
normalElement()$F
definingPolynomial()$F
minimalPolynomial(a)
Frobenius(a)
linearAssociatedOrder(a)
linearAssociatedLog(a)
\end{axiom}
\begin{axiom}
for d in divisors extensionDegree()$F repeat
print(norm(a,d::PI)::OUTFORM)
print(trace(a,d::PI)::OUTFORM)
polynomial extension of a cyclic extension
get primitive polynomial of degree d1 over P
\begin{axiom}
f1:=createPrimitivePoly(d1)$FFPOLY(P)
F1:=FFCGP(P,f1)
-- get irreducible polynomial of degree d2 over F1
f2:=createIrreduciblePoly(d2)$FFPOLY(F1)
-- construct field
F:=FFP(F1,f2)
-- this field is the same as constructed by F:=FFX(F1,d2)
-- demonstration of common finite field functions
-- the finite field domain is in variable F
-- take some random elements
size()$F
a:=index(size()$F quo 3)$F
b:=index(size()$F quo 7)$F
-- simple arithmetic
a+b
a-b
a*b
a/b
a**1234
a**(-1)
g := generator()$F
(definingPolynomial()$F::SUP(F)).g
-- functions concerning the multiplicative cyclic group
order(a)
g:=primitiveElement()$F
discreteLog(a)
-- the next one should equal 0
g**% - a
-- the next may fail
discreteLog(b,a)
-- special finite field functions
extensionDegree()$F
degree(a)
normalElement()$F
definingPolynomial()$F
minimalPolynomial(a)
Frobenius(a)
linearAssociatedOrder(a)
linearAssociatedLog(a)
\end{axiom}
\begin{axiom}
for d in divisors extensionDegree()$F repeat
print(norm(a,d::PI)::OUTFORM)
print(trace(a,d::PI)::OUTFORM)
\end{axiom}
normal extension of a polynomial extension
get a small prime
get a irreducible polynomial of degree d1 over P
\begin{axiom}
f1:=createIrreduciblePoly(d1)$FFPOLY(P)
F1:=FFP(P,f1)
-- get a normal polynomial of degree d2 over F1
f2:=createNormalPoly(d2)$FFPOLY(F1)
-- construct field
F:=FFNBP(F1,f2)
-- this field is the same as constructed by F:=FFX(F1,d2)
-- demonstration of common finite field functions
-- the finite field domain is in variable F
-- take some random elements
size()$F
a:=index(size()$F quo 3)$F
b:=index(size()$F quo 7)$F
-- simple arithmetic
a+b
a-b
a*b
a/b
a**1234
a**(-1)
g := generator()$F
(definingPolynomial()$F::SUP(F)).g
-- functions concerning the multiplicative cyclic group
order(a)
g:=primitiveElement()$F
discreteLog(a)
-- the next one should equal 0
g**% - a
-- the next may fail
discreteLog(b,a)
-- special finite field functions
extensionDegree()$F
degree(a)
normalElement()$F
definingPolynomial()$F
minimalPolynomial(a)
Frobenius(a)
linearAssociatedOrder(a)
linearAssociatedLog(a)
\end{axiom}
\begin{axiom}
for d in divisors extensionDegree()$F repeat
print(norm(a,d::PI)::OUTFORM)
print(trace(a,d::PI)::OUTFORM)
\end{axiom}
normal extension of a normal extension
get a normal polynomial of degree d1 over P
\begin{axiom}
f1:=createNormalPoly(d1)$FFPOLY(P)
F1:=FFNBP(P,f1)
-- get a normal polynomial of degree d2 over F1
f2:=createNormalPoly(d2)$FFPOLY(F1)
-- construct field
F:=FFNBP(F1,f2)
-- this field is the same as constructed by F:=FFX(F1,d2)
-- demonstration of common finite field functions
-- the finite field domain is in variable F
-- take some random elements
size()$F
a:=index(size()$F quo 3)$F
b:=index(size()$F quo 7)$F
-- simple arithmetic
a+b
a-b
a*b
a/b
a**1234
a**(-1)
g := generator()$F
(definingPolynomial()$F::SUP(F)).g
-- functions concerning the multiplicative cyclic group
order(a)
g:=primitiveElement()$F
discreteLog(a)
-- the next one should equal 0
g**% - a
-- the next may fail
discreteLog(b,a)
-- special finite field functions
extensionDegree()$F
degree(a)
normalElement()$F
definingPolynomial()$F
minimalPolynomial(a)
Frobenius(a)
linearAssociatedOrder(a)
linearAssociatedLog(a)
\end{axiom}
\begin{axiom}
for d in divisors extensionDegree()$F repeat
print(norm(a,d::PI)::OUTFORM)
print(trace(a,d::PI)::OUTFORM)
\end{axiom}
normal extension of a cyclic extension
get primitive polynomial of degree d1 over P
\begin{axiom}
f1:=createPrimitivePoly(d1)$FFPOLY(P)
F1:=FFCGP(P,f1)
-- get a normal polynomial of degree d2 over F1
f2:=createNormalPoly(d2)$FFPOLY(F1)
-- construct field
F:=FFNBP(F1,f2)
-- this field is the same as constructed by F:=FFX(F1,d2)
-- demonstration of common finite field functions
-- the finite field domain is in variable F
-- take some random elements
size()$F
a:=index(size()$F quo 3)$F
b:=index(size()$F quo 7)$F
-- simple arithmetic
a+b
a-b
a*b
a/b
a**1234
a**(-1)
g := generator()$F
(definingPolynomial()$F::SUP(F)).g
-- functions concerning the multiplicative cyclic group
order(a)
g:=primitiveElement()$F
discreteLog(a)
-- the next one should equal 0
g**% - a
-- the next may fail
discreteLog(b,a)
-- special finite field functions
extensionDegree()$F
degree(a)
normalElement()$F
definingPolynomial()$F
minimalPolynomial(a)
Frobenius(a)
linearAssociatedOrder(a)
linearAssociatedLog(a)
\end{axiom}
\begin{axiom}
for d in divisors extensionDegree()$F repeat
print(norm(a,d::PI)::OUTFORM)
print(trace(a,d::PI)::OUTFORM)
\end{axiom}
[FiniteField Homomorphisms]
--
forwarded from http://wiki.axiom-developer.org/[EMAIL PROTECTED]