aboutsummaryrefslogtreecommitdiff
path: root/src/input/ffdemo.input.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/input/ffdemo.input.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/input/ffdemo.input.pamphlet')
-rw-r--r--src/input/ffdemo.input.pamphlet579
1 files changed, 579 insertions, 0 deletions
diff --git a/src/input/ffdemo.input.pamphlet b/src/input/ffdemo.input.pamphlet
new file mode 100644
index 00000000..7ea16b8b
--- /dev/null
+++ b/src/input/ffdemo.input.pamphlet
@@ -0,0 +1,579 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input ffdemo.input}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{License}
+<<license>>=
+--Copyright The Numerical Algorithms Group Limited 1994.
+@
+<<*>>=
+<<license>>
+-- finite field demonstrations
+-- prime field
+-- get a prime
+p:=4817
+-- construct field
+F:=PrimeField p
+-- 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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+-- end of common finite field demonstration
+-- finite field with polynomail basis
+-- get a small prime
+p:=7
+P:=PrimeField p
+-- get a small extension degree
+d:=6
+-- get a irreducible polynomial
+f:=createIrreduciblePoly(d)$FFPOLY(P)
+-- construct field
+F:=FFP(P,f)
+-- this field is the same as constructed by F:=FFX(P,d) or F:=FF(p,d
+-- 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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- finite field with normal basis
+-- get a normal Polynomial
+f:=createNormalPoly(d)$FFPOLY(P)
+-- build field
+F:=FFNBP(P,f)
+-- this field is the same as constructed by F:=FFNBX(P,d) or F:=FFNB(p,d
+-- 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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- finite field represented as cyclic group
+-- because a Zech logarithm table of half the field size is kept in
+-- memory during the computations, the size of the field should not be
+-- to big.
+-- get a small prime
+p:=5
+P:=PrimeField p
+-- get a small extension degree
+d:=4
+-- get a primitive polynomial
+f:=createPrimitivePoly(d)$FFPOLY(P)
+-- construct field
+F:=FFCGP(P,f)
+-- this field is the same as constructed by F:=FFCGX(P,d) or F:=FFCG(p,d
+-- 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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- polynomial extension of a polynomial extension
+-- get a small prime, choose 2 or 3
+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)
+-- 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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+-- end of common finite field demonstration
+
+
+
+
+-- polynomial extension of a normal extension
+-- get normal polynomial of degree d1 over P
+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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+-- end of common finite field demonstration
+
+
+
+
+-- polynomial extension of a cyclic extension
+-- get primitive polynomial of degree d1 over P
+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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- normal extension of a polynomial extension
+-- get a small prime
+-- get a irreducible polynomial of degree d1 over P
+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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- normal extension of a normal extension
+-- get a normal polynomial of degree d1 over P
+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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- normal extension of a cyclic extension
+-- get primitive polynomial of degree d1 over P
+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)
+for d in divisors extensionDegree()$F repeat
+ print(norm(a,d::PI)::OUTFORM)
+ print(trace(a,d::PI)::OUTFORM)
+
+
+-- end of common finite field demonstration
+-- finite field homomorphisms demonstration
+P3:= PF 3
+-- create a irreducible, a normal and a primitive polynomial
+fi:=createIrreduciblePoly(6)$FFPOLY(P3)
+fn:=createNormalPoly(6)$FFPOLY(P3)
+fp:=createPrimitivePoly(3)$FFPOLY(P3)
+-- coercions between field with the same defining polynomials
+F:=FFP(P3,fn)
+N:=FFNBP(P3,fn)
+a:=index(size()$F quo 3)$F
+b:=index(size()$F quo 7)$F
+an:=coerce(a)$FFHOM(F,P3,N)
+bn:=coerce(b)$FFHOM(F,P3,N)
+cn := an*bn
+coerce(cn)$FFHOM(F,P3,N)
+-- should be the same as
+c:=a*b
+-- coercion between fields with different extension polynomials
+F:=FFP(P3,fi)
+N:=FFNBP(P3,fn)
+a:=index(size()$F quo 3)$F
+b:=index(size()$F quo 7)$F
+an:=coerce(a)$FFHOM(F,P3,N)
+bn:=coerce(b)$FFHOM(F,P3,N)
+cn := an*bn
+coerce(cn)$FFHOM(F,P3,N)
+-- should be the same as
+c:=a*b
+-- coercion between fields of different extension degree
+C:=FFCGP(P3,fp)
+N:=FFNBP(P3,fn)
+a:=index(size()$C quo 3)$C
+b:=index(size()$C quo 7)$C
+an:=coerce(a)$FFHOM(C,P3,N)
+bn:=coerce(b)$FFHOM(C,P3,N)
+cn := an+bn
+coerce(cn)$FFHOM(C,P3,N)
+-- should be the same as
+c:=a+b
+-- comparison of computation times for arithmetic operations
+f:=createPrimitiveNormalPoly(5)$FFPOLY(P3)
+FP:=FFP(P3,f)
+Fc:=FFCGP(P3,f) -- FC is a domain abbreviation
+FN:=FFNBP(P3,f)
+ap:=index(size()$FP quo 3)$FP
+ac:=coerce(ap)$FFHOM(Fc,P3,FP)
+an:=coerce(ap)$FFHOM(FN,P3,FP)
+bp:=index(size()$FP quo 7)$FP
+bc:=coerce(bp)$FFHOM(Fc,P3,FP)
+bn:=coerce(bp)$FFHOM(FN,P3,FP)
+-- the next are to initialize the fields
+ac+bc
+an*bn
+-- now we can compare
+)set message time on
+-- addition
+ap+bp
+an+bn
+ac+bc
+-- multiplication
+ap*bp
+an*bn
+ac*bc
+-- discrete logarithms
+discreteLog(ap)
+discreteLog(an)
+discreteLog(ac)
+-- exponentiation
+ap**1234567
+an**1234567
+ac**1234567
+-- computations between elements of field of different representation
+ap+bc
+an+bc
+an+bp
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}