axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] 20090607.03.tpd.patch (tpiezas.input CATS algebraic id


From: daly
Subject: [Axiom-developer] 20090607.03.tpd.patch (tpiezas.input CATS algebraic identities)
Date: Sun, 7 Jun 2009 11:01:52 -0500

T. Piezas has published a book of algebraic identities.
This is the first in a set of CATS tests to exercise Axiom with
those identities.

========================================================================
diff --git a/changelog b/changelog
index 5c96725..0826802 100644
--- a/changelog
+++ b/changelog
@@ -1,7 +1,10 @@
-20090606 tpd src/axiom-website/patches.html 20090607.02.tpd.patch
-20090606 tpd books/bookvol10.4 MAPPKG2 +-> conversion
-20090606 tpd src/axiom-website/patches.html 20090607.01.tpd.patch
-20090606 tpd books/bookvol10.4 MAPPGK1 +-> conversion
+20090607 tpd src/axiom-website/patches.html 20090607.03.tpd.patch
+20090607 tpd src/input/Makefile add tpiezas.input algebraic identities
+20090607 tpd src/input/tpiezas.input CATS tests of algebraic identities
+20090607 tpd src/axiom-website/patches.html 20090607.02.tpd.patch
+20090607 tpd books/bookvol10.4 MAPPKG2 +-> conversion
+20090607 tpd src/axiom-website/patches.html 20090607.01.tpd.patch
+20090607 tpd books/bookvol10.4 MAPPGK1 +-> conversion
 20090606 tpd src/axiom-website/patches.html 20090606.07.tpd.patch
 20090606 tpd books/bookvol10.4 MKUCFUNC +-> conversion
 20090606 tpd src/axiom-website/patches.html 20090606.06.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 9c71f66..8ec5f5d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1481,5 +1481,7 @@ bookvol10.4 MKUCFUNC +-> conversion<br/>
 bookvol10.4 MAPPGK1 +-> conversion<br/>
 <a href="patches/20090607.02.tpd.patch">20090607.02.tpd.patch</a>
 bookvol10.4 MAPPGK2 +-> conversion<br/>
+<a href="patches/20090607.03.tpd.patch">20090607.03.tpd.patch</a>
+tpieazas.input CATS tests of algebraic identites<br/>
  </body>
 </html>
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index 536385f..f92241d 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -384,6 +384,7 @@ REGRES= algaggr.regress algbrbf.regress  algfacob.regress 
alist.regress  \
     symbol.regress    t111293.regress  table.regress    tancot.regress \
     tanhcoth.regress  tanatan.regress  tbagg.regress    test.regress \
     textfile.regress  torus.regress \
+    tpiezas.regress \
     triglim.regress   tsetcatvermeer.regress            tutchap1.regress \
     typetower.regress void.regress      uniseg.regress \
     unittest1.regress unittest2.regress unittest3.regress unittest4.regress
@@ -692,6 +693,7 @@ FILES= ${OUT}/algaggr.input  ${OUT}/algbrbf.input    
${OUT}/algfacob.input \
        ${OUT}/table.input    ${OUT}/tancot.input     ${OUT}/tanhcoth.input \
        ${OUT}/tanatan.input  ${OUT}/tbagg.input      ${OUT}/test.input \
        ${OUT}/tetra.input    ${OUT}/textfile.input   ${OUT}/tknot.input \
+       ${OUT}/tpiezas.input \
        ${OUT}/tree.input \
        ${OUT}/triglim.input  ${OUT}/tschirn.input ${OUT}/tsetcatbutcher.input \
        ${OUT}/tsetcatchemical.input ${OUT}/tsetcatvermeer.input \
@@ -1049,7 +1051,9 @@ DOCFILES= \
   ${DOC}/tbagg.input.dvi       \
   ${DOC}/test.input.dvi        ${DOC}/tetra.input.dvi      \
   ${DOC}/textfile.input.dvi    ${DOC}/tknot.input.dvi      \
-  ${DOC}/torus.input.dvi       ${DOC}/tree.input.dvi       \
+  ${DOC}/torus.input.dvi \
+  ${DOC}/tpiezas.input.dvi \
+  ${DOC}/tree.input.dvi       \
   ${DOC}/triglim.input.dvi     ${DOC}/tschirn.input.dvi    \
   ${DOC}/tsetcatbutcher.input.dvi    \
   ${DOC}/tsetcatchemical.input.dvi   \
diff --git a/src/input/tpiezas.input.pamphlet b/src/input/tpiezas.input.pamphlet
new file mode 100644
index 0000000..f60ad7e
--- /dev/null
+++ b/src/input/tpiezas.input.pamphlet
@@ -0,0 +1,829 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input tpiezas.input}
+\author{Timothy Daly}
+\maketitle
+\begin{abstract}
+This is from ``A Collection of Algebraic Identities'' by T. Piezas III\cite{1}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{Part 1. Assorted Identities}
+\begin{chunk}{*}
+)set break resume
+)spool tpiezas.output
+)set message test on
+)set message auto off
+)clear all
+\end{chunk}
+
+\subsection{E. Maillet}
+\[(a+b)^3+(a+c)^3+(a+d)^3+(a-b)^3+(a-c)^3+(a-d)^3 = 6a(a^2+b^2+c^2+d^2)\]
+\begin{chunk}{*} 
+--S 1 of 63
+t1a:=(a+b)^3 + (a+c)^3 + (a+d)^3 + (a-b)^3 + (a-c)^3 + (a-d)^3
+--R 
+--R
+--R            2       2       2     3
+--R   (1)  6a d  + 6a c  + 6a b  + 6a
+--R                                                     Type: Polynomial 
Integer
+--E 1
+
+--S 2 of 63
+t1b:=6*a*(a^2+b^2+c^2+d^2)
+--R 
+--R
+--R            2       2       2     3
+--R   (2)  6a d  + 6a c  + 6a b  + 6a
+--R                                                     Type: Polynomial 
Integer
+--E 2
+
+--S 3 of 63
+t1a-t1b
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Polynomial 
Integer
+--E 3
+\end{chunk}
+
+\subsection{E. Lucas-Liouville}
+\[\begin{array}{ll}
+(a+b)^k+(a+c)^k+(a+d)^k+(b+c)^k+(b+d)^k+(c+d)^k+\\
+(a-b)^k+(a-c)^k+(a-d)^k+(b-c)^k+(b-d)^k+(c-d)^k
+\end{array}\]
+\[=6(a^2+b^2+c^2+d^2)^{k/2}\quad {\rm\ for\ }k=2,4\]
+\begin{chunk}{*} 
+--S 4 of 63
+t2a(k)==(a+b)^k + (a+c)^k + (a+d)^k + (b+c)^k + (b+d)^k + (c+d)^k +_
+        (a-b)^k + (a-c)^k + (a-d)^k + (b-c)^k + (b-d)^k + (c-d)^k 
+--R 
+--R                                                                   Type: 
Void
+--E 4
+
+--S 5 of 63
+t2b(k)==6*(a^2+b^2+c^2+d^2)^(k/2)
+--R 
+--R                                                                   Type: 
Void
+--E 5
+
+--S 6 of 63
+t2a(k)
+--R 
+--R   Compiling function t2a with type Variable k -> Expression Integer 
+--R
+--R   (6)
+--R            k          k          k          k          k          k
+--R     (d + c)  + (d + b)  + (d + a)  + (c + b)  + (c + a)  + (b + a)
+--R   + 
+--R            k            k            k            k            k           
 k
+--R   (- b + a)  + (- c + b)  + (- c + a)  + (- d + c)  + (- d + b)  + (- d + 
a)
+--R                                                     Type: Expression 
Integer
+--E 6
+
+--S 7 of 63
+t2b(k)
+--R 
+--R   Compiling function t2b with type Variable k -> Expression Integer 
+--R
+--R                            k
+--R                            -
+--R           2    2    2    2 2
+--R   (7)  6(d  + c  + b  + a )
+--R                                                     Type: Expression 
Integer
+--E 7
+
+--S 8 of 63
+t2a(2)
+--R 
+--R   Compiling function t2a with type PositiveInteger -> Polynomial 
+--R      Integer 
+--R
+--R          2     2     2     2
+--R   (8)  6d  + 6c  + 6b  + 6a
+--R                                                     Type: Polynomial 
Integer
+--E 8
+
+--S 9 of 63
+t2b(2)
+--R 
+--R   Compiling function t2b with type PositiveInteger -> Expression 
+--R      Integer 
+--R
+--R          2     2     2     2
+--R   (9)  6d  + 6c  + 6b  + 6a
+--R                                                     Type: Expression 
Integer
+--E 9
+
+--S 10 of 63
+t2a(2)-t2b(2)
+--R 
+--R
+--R   (10)  0
+--R                                                     Type: Expression 
Integer
+--E 10
+
+--S 11 of 63
+t2a(4)
+--R 
+--R
+--R   (11)
+--R     4       2      2      2  2     4       2      2  2     4      2 2     4
+--R   6d  + (12c  + 12b  + 12a )d  + 6c  + (12b  + 12a )c  + 6b  + 12a b  + 6a
+--R                                                     Type: Polynomial 
Integer
+--E 11
+
+--S 12 of 63
+t2b(4)
+--R 
+--R
+--R   (12)
+--R     4       2      2      2  2     4       2      2  2     4      2 2     4
+--R   6d  + (12c  + 12b  + 12a )d  + 6c  + (12b  + 12a )c  + 6b  + 12a b  + 6a
+--R                                                     Type: Expression 
Integer
+--E 12
+
+--S 13 of 63
+t2a(4)-t2b(4)
+--R 
+--R
+--R   (13)  0
+--R                                                     Type: Expression 
Integer
+--E 13
+\end{chunk}
+
+\subsection{Boutin's Identity}
+\[S\pm(x_1\pm x_2\pm \ldots \pm x_k)^k = k!\: 2^{k-1} x_1 x_2 \ldots x_k\]
+where the exterior sign is the product of the interior signs so
+the term is negative if there is an odd number of negative interior signs,
+otherwise positive
+\begin{chunk}{*} 
+
+--S 14 of 63
+t3a1 := (a+b)^2 - (a-b)^2
+--R 
+--R
+--R   (14)  4a b
+--R                                                     Type: Polynomial 
Integer
+--E 14
+
+--S 15 of 63
+t3b1 := 4*a*b
+--R 
+--R
+--R   (15)  4a b
+--R                                                     Type: Polynomial 
Integer
+--E 15
+
+--S 16 of 63
+t3a1-t3b1
+--R 
+--R
+--R   (16)  0
+--R                                                     Type: Polynomial 
Integer
+--E 16
+
+--S 17 of 63
+t3a2 := (a+b+c)^3 - (a-b+c)^3 - (a+b-c)^3 + (a-b-c)^3
+--R 
+--R
+--R   (17)  24a b c
+--R                                                     Type: Polynomial 
Integer
+--E 17
+
+--S 18 of 63
+t3b2 := 24*a*b*c
+--R 
+--R
+--R   (18)  24a b c
+--R                                                     Type: Polynomial 
Integer
+--E 18
+
+--S 19 of 63
+t3a2-t3b2
+--R 
+--R
+--R   (19)  0
+--R                                                     Type: Polynomial 
Integer
+--E 19
+
+--S 20 of 63
+t3a3 := (a+b+c+d)^4 - (a-b+c+d)^4 - (a+b-c+d)^4 - (a+b+c-d)^4 
+      + (a-b-c+d)^4 + (a-b+c-d)^4 + (a+b-c-d)^4 - (a-b-c-d)^4
+--R 
+--R
+--R   (20)  192a b c d
+--R                                                     Type: Polynomial 
Integer
+--E 20
+
+--S 21 of 63
+t3b3 := 192*a*b*c*d
+--R 
+--R
+--R   (21)  192a b c d
+--R                                                     Type: Polynomial 
Integer
+--E 21
+
+--S 22 of 63
+t3a3-t3b3
+--R 
+--R
+--R   (22)  0
+--R                                                     Type: Polynomial 
Integer
+--E 22
+
+\end{chunk}
+We can create the general case using some functions.
+
+The ``bitlist'' function creates a list of the sign changes needed
+to form each term. If a term is 4 variables long we need all possible
+combinations of 3 signs. In order to generate this we create a list
+of all possible bit combinations of the numbers from 0 to $2^{n-1}-1$,
+which for the case of 4 would be from 0 to 7:
+\begin{verbatim}
+   [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
+\end{verbatim}
+We do this using an outer loop to generate the correct number of lists
+and an inner loop to create each list.
+\begin{chunk}{*}
+--S 23 of 63
+bitlist(size:Integer):List List INT ==
+  result:List List INT:=[]
+  size <= 1 => result
+  bound:PI:=size-1
+  bitlength:INT:=2^bound
+  for i in (bitlength-1)::PI..0 by -1 repeat
+    t1:=[1::INT for k in 1..bound]
+    for j in 0..(#t1-1) repeat 
+      if not bit?(i,j) then t1(bound-j):=0
+    result:=cons(t1,result)
+  result
+--R 
+--R   Function declaration bitlist : Integer -> List List Integer has been
+--R      added to workspace.
+--R                                                                   Type: 
Void
+--E 23
+
+\end{chunk}
+These are the test cases.
+\begin{chunk}{*}
+--S 24 of 63
+bitlist(1)
+--R 
+--R   Compiling function bitlist with type Integer -> List List Integer 
+--R
+--R   (24)  []
+--R                                                      Type: List List 
Integer
+--E 24
+
+--S 25 of 63
+bitlist(2)
+--R 
+--I   Compiling function G7153 with type Integer -> Boolean 
+--I   Compiling function G7332 with type NonNegativeInteger -> Boolean 
+--R
+--R   (25)  [[0],[1]]
+--R                                                      Type: List List 
Integer
+--E 25
+
+--S 26 of 63
+bitlist(3)
+--R 
+--R
+--R   (26)  [[0,0],[0,1],[1,0],[1,1]]
+--R                                                      Type: List List 
Integer
+--E 26
+
+--S 27 of 63
+bitlist(4)
+--R 
+--R
+--R   (27)  [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
+--R                                                      Type: List List 
Integer
+--E 27
+
+\end{chunk}
+
+Now we need a function to generate a list of subscripted symbols
+\begin{chunk}{*}
+--S 28 of 63
+symgen(var:Symbol,size:PI):List Symbol == [var.[i] for i in size..1 by -1]
+--R 
+--R   Function declaration symgen : (Symbol,PositiveInteger) -> List 
+--R      Symbol has been added to workspace.
+--R                                                                   Type: 
Void
+--E 28
+
+--S 29 of 63
+symgen('a,4)
+--R 
+--R   Compiling function symgen with type (Symbol,PositiveInteger) -> List
+--R      Symbol 
+--R
+--R   (29)  [a ,a ,a ,a ]
+--R           4  3  2  1
+--R                                                            Type: List 
Symbol
+--E 29
+
+\end{chunk}
+
+This is a function to generate the terms for Boutin's Identity.
+Each term is of the form:
+\[sign * (x_n\pm x_{n-1}\\pm \ldots \pm x_1)^n\]
+where the sign is negative if the number of minus signs in the term is odd
+\begin{chunk}{*}
+--S 30 of 63
+term(size:PI,signs:List INT):Polynomial Integer ==
+  syms:=symgen('x,size)
+  t1:POLY(INT):=first syms
+  sign:INT:=if odd? size then 1 else -1
+  for i in 1..#signs repeat
+    if (signs.i = 0)
+      then t1:=t1-syms.(i+1)
+       else ( t1:=t1+syms.(i+1) ; sign:=sign*-1 )
+  sign*(t1^size)
+--R 
+--R   Function declaration term : (PositiveInteger,List Integer) -> 
+--R      Polynomial Integer has been added to workspace.
+--R                                                                   Type: 
Void
+--E 30
+\end{chunk}
+Now we test it by hand for the case $n=4$
+\begin{chunk}{*}
+
+--S 31 of 63
+factor term(4,[0,0,0])
+--R 
+--R   Compiling function term with type (PositiveInteger,List Integer) -> 
+--R      Polynomial Integer 
+--R
+--R                              4
+--R   (31)  - (x  - x  - x  - x )
+--R             4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 31
+
+--S 32 of 63
+factor term(4,[0,0,1])
+--R 
+--R
+--R                            4
+--R   (32)  (x  - x  - x  + x )
+--R           4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 32
+
+--S 33 of 63
+factor term(4,[0,1,0])
+--R 
+--R
+--R                            4
+--R   (33)  (x  - x  + x  - x )
+--R           4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 33
+
+--S 34 of 63
+factor term(4,[0,1,1])
+--R 
+--R
+--R                              4
+--R   (34)  - (x  - x  + x  + x )
+--R             4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 34
+
+--S 35 of 63
+factor term(4,[1,0,0])
+--R 
+--R
+--R                            4
+--R   (35)  (x  + x  - x  - x )
+--R           4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 35
+
+--S 36 of 63
+factor term(4,[1,0,1])
+--R 
+--R
+--R                              4
+--R   (36)  - (x  + x  - x  + x )
+--R             4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 36
+
+--S 37 of 63
+factor term(4,[1,1,0])
+--R 
+--R
+--R                              4
+--R   (37)  - (x  + x  + x  - x )
+--R             4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 37
+
+--S 38 of 63
+factor term(4,[1,1,1])
+--R 
+--R
+--R                            4
+--R   (38)  (x  + x  + x  + x )
+--R           4    3    2    1
+--R                                            Type: Factored Polynomial 
Integer
+--E 38
+
+\end{chunk}
+And we test combining the terms using the bitlist function call.
+\begin{chunk}{*}
+--S 39 of 63
+map(x+->factor(term(1,x)),bitlist(1))
+--R 
+--R
+--R   (39)  []
+--R                                       Type: List Factored Polynomial 
Integer
+--E 39
+
+--S 40 of 63
+map(x+->factor(term(2,x)),bitlist(2))
+--R 
+--R
+--R                     2          2
+--R   (40)  [- (x  - x ) ,(x  + x ) ]
+--R              2    1     2    1
+--R                                       Type: List Factored Polynomial 
Integer
+--E 40
+
+--S 41 of 63
+map(x+->factor(term(3,x)),bitlist(3))
+--R 
+--R
+--R                        3                 3                 3               
3
+--R   (41)  [(x  - x  - x ) ,- (x  - x  + x ) ,- (x  + x  - x ) ,(x  + x  + x 
) ]
+--R            3    2    1       3    2    1       3    2    1     3    2    1
+--R                                       Type: List Factored Polynomial 
Integer
+--E 41
+
+--S 42 of 63
+map(x+->factor(term(4,x)),bitlist(4))
+--R 
+--R
+--R   (42)
+--R                         4                     4                     4
+--R   [- (x  - x  - x  - x ) , (x  - x  - x  + x ) , (x  - x  + x  - x ) ,
+--R        4    3    2    1      4    3    2    1      4    3    2    1
+--R                         4                     4                       4
+--R    - (x  - x  + x  + x ) , (x  + x  - x  - x ) , - (x  + x  - x  + x ) ,
+--R        4    3    2    1      4    3    2    1        4    3    2    1
+--R                         4                     4
+--R    - (x  + x  + x  - x ) , (x  + x  + x  + x ) ]
+--R        4    3    2    1      4    3    2    1
+--R                                       Type: List Factored Polynomial 
Integer
+--E 42
+
+\end{chunk}
+Next we have two functions, one to create a generic left hand side
+of Boutin's Identity:
+\begin{chunk}{*}
+--S 43 of 63
+lhs(size:PI):POLY(INT) ==
+  size = 1 => 0::POLY(INT)
+  reduce(+,map(x+->term(size,x),bitlist(size)))
+--R 
+--R   Function declaration lhs : PositiveInteger -> Polynomial Integer has
+--R      been added to workspace.
+--R                                                                   Type: 
Void
+--E 43
+
+\end{chunk}
+and one to create a generic right hand side of Boutin's Identity:
+\begin{chunk}{*}
+--S 44 of 63
+rhs(size:PI):POLY(INT) == 
+ size = 1 => 0
+ bound:PI:=(size-1)
+ factorial(size)*2^bound*reduce(*,symgen('x,size))@POLY(INT)
+--R 
+--R   Function declaration rhs : PositiveInteger -> Polynomial Integer has
+--R      been added to workspace.
+--R                                                                   Type: 
Void
+--E 44
+
+\end{chunk}
+Now we look at the case where $n=2$, showing the factors, the left
+hand side, the right hand side, and the fact that they are equal
+by subtraction
+\begin{chunk}{*}
+--S 45 of 63
+map(x+->factor term(2,x),bitlist(2))
+--R 
+--R
+--R                     2          2
+--R   (45)  [- (x  - x ) ,(x  + x ) ]
+--R              2    1     2    1
+--R                                       Type: List Factored Polynomial 
Integer
+--E 45
+
+--S 46 of 63
+lhs(2)
+--R 
+--R   Compiling function lhs with type PositiveInteger -> Polynomial 
+--R      Integer 
+--R
+--R   (46)  4x x
+--R           1 2
+--R                                                     Type: Polynomial 
Integer
+--E 46
+
+--S 47 of 63
+rhs(2)
+--R 
+--R   Compiling function rhs with type PositiveInteger -> Polynomial 
+--R      Integer 
+--R
+--R   (47)  4x x
+--R           1 2
+--R                                                     Type: Polynomial 
Integer
+--E 47
+
+--S 48 of 63
+lhs(2)-rhs(2)
+--R 
+--R
+--R   (48)  0
+--R                                                     Type: Polynomial 
Integer
+--E 48
+
+\end{chunk}
+Now we look at the case where $n=3$, showing the factors, the left
+hand side, the right hand side, and the fact that they are equal
+by subtraction
+\begin{chunk}{*}
+--S 49 of 63
+map(x+->factor term(3,x),bitlist(3))
+--R 
+--R
+--R                        3                 3                 3               
3
+--R   (49)  [(x  - x  - x ) ,- (x  - x  + x ) ,- (x  + x  - x ) ,(x  + x  + x 
) ]
+--R            3    2    1       3    2    1       3    2    1     3    2    1
+--R                                       Type: List Factored Polynomial 
Integer
+--E 49
+
+--S 50 of 63
+lhs(3)
+--R 
+--R
+--R   (50)  24x x x
+--R            1 2 3
+--R                                                     Type: Polynomial 
Integer
+--E 50
+
+--S 51 of 63
+rhs(3)
+--R 
+--R
+--R   (51)  24x x x
+--R            1 2 3
+--R                                                     Type: Polynomial 
Integer
+--E 51
+
+--S 52 of 63
+lhs(3)-rhs(3)
+--R 
+--R
+--R   (52)  0
+--R                                                     Type: Polynomial 
Integer
+--E 52
+
+\end{chunk}
+Now we look at the case where $n=4$, showing the factors, the left
+hand side, the right hand side, and the fact that they are equal
+by subtraction
+\begin{chunk}{*}
+--S 53 of 63
+map(x+->factor term(4,x),bitlist(4))
+--R 
+--R
+--R   (53)
+--R                         4                     4                     4
+--R   [- (x  - x  - x  - x ) , (x  - x  - x  + x ) , (x  - x  + x  - x ) ,
+--R        4    3    2    1      4    3    2    1      4    3    2    1
+--R                         4                     4                       4
+--R    - (x  - x  + x  + x ) , (x  + x  - x  - x ) , - (x  + x  - x  + x ) ,
+--R        4    3    2    1      4    3    2    1        4    3    2    1
+--R                         4                     4
+--R    - (x  + x  + x  - x ) , (x  + x  + x  + x ) ]
+--R        4    3    2    1      4    3    2    1
+--R                                       Type: List Factored Polynomial 
Integer
+--E 53
+
+--S 54 of 63
+lhs(4)
+--R 
+--R
+--R   (54)  192x x x x
+--R             1 2 3 4
+--R                                                     Type: Polynomial 
Integer
+--E 54
+
+--S 55 of 63
+rhs(4)
+--R 
+--R
+--R   (55)  192x x x x
+--R             1 2 3 4
+--R                                                     Type: Polynomial 
Integer
+--E 55
+
+--S 56 of 63
+lhs(4)-rhs(4)
+--R 
+--R
+--R   (56)  0
+--R                                                     Type: Polynomial 
Integer
+--E 56
+
+\end{chunk}
+\subsection{Lagrange's Identity}
+\[\left(\sum a_k^2\right) \left(\sum b_k^2\right) =
+\left(\sum a_k b_k\right)^2 + \sum \left(a_k b_j - a_j b_k\right)^2\]
+
+We need two symbol generation functions. First, we need to generate
+the units for the term
+\[\left(\sum a_k b_k\right)^2\]
+so that \verb|symgen2('a,'b,4)| results in
+\begin{verbatim}
+ [a b ,a b ,a b ,a b ]
+   4 4  3 3  2 2  1 1
+\end{verbatim}
+\begin{chunk}{*}
+--S 57 of 63
+symgen2(var1:Symbol,var2:Symbol,size:PI):List POLY INT ==
+  [(var1.[i]*var2.[i]) for i in size..1 by -1]
+--R 
+--R   Function declaration symgen2 : (Symbol,Symbol,PositiveInteger) -> 
+--R      List Polynomial Integer has been added to workspace.
+--R                                                                   Type: 
Void
+--E 57
+
+--S 58 of 63
+symgen2('a,'b,4)
+--R 
+--R   Compiling function symgen2 with type (Symbol,Symbol,PositiveInteger)
+--R       -> List Polynomial Integer 
+--R
+--R   (58)  [a b ,a b ,a b ,a b ]
+--R           4 4  3 3  2 2  1 1
+--R                                                Type: List Polynomial 
Integer
+--E 58
+
+\end{chunk}
+Next we need to generate the units for the term
+\[\sum \left(a_k b_j - a_j b_k\right)^2\]
+so that \verb|symgen3('a,'b,4)| results in
+\begin{verbatim}
+   [0, a b  - a b , a b  - a b , a b  - a b , 0, a b  - a b , a b  - a b , 0,
+        3 4    4 3   2 4    4 2   1 4    4 1      2 3    3 2   1 3    3 1
+    a b  - a b , 0]
+     1 2    2 1
+\end{verbatim}
+\begin{chunk}{*}
+--S 59 of 63
+symgen3(var1:Symbol,var2:Symbol,size:PI):LIST POLY INT == 
+  result:LIST(POLY(INT)):=[]
+  for j in 1..size repeat
+    for k in 1..j repeat
+      p:POLY(INT):=var1.[k]*var2.[j]-var1.[j]*var2.[k]
+      result:=cons(p,result)
+  result
+--R 
+--R   Function declaration symgen3 : (Symbol,Symbol,PositiveInteger) -> 
+--R      List Polynomial Integer has been added to workspace.
+--R                                                                   Type: 
Void
+--E 59
+
+--S 60 of 63
+symgen3('a,'b,4)
+--R 
+--R   Compiling function symgen3 with type (Symbol,Symbol,PositiveInteger)
+--R       -> List Polynomial Integer 
+--R
+--R   (60)
+--R   [0, a b  - a b , a b  - a b , a b  - a b , 0, a b  - a b , a b  - a b , 
0,
+--R        3 4    4 3   2 4    4 2   1 4    4 1      2 3    3 2   1 3    3 1
+--R    a b  - a b , 0]
+--R     1 2    2 1
+--R                                                Type: List Polynomial 
Integer
+--E 60
+
+\end{chunk}
+Now we are ready to generate and test the Lagrange Identities.
+This function will take a given size and print all of the intermediate
+working results. It eventually creates the left hand side (lhs) and
+the right hand side (rhs) and subtracts them to show that they are equal.
+\begin{chunk}{*}
+--S 61 of 63
+lagrange(size:PI):POLY(INT) ==
+  t1:=factor reduce(+,map(x+->x^2,symgen('a,size)))
+  print ["t1=",t1]
+  t2:=factor reduce(+,map(x+->x^2,symgen('b,size)))
+  print ["t2=",t2]
+  t3:=factor reduce(+,symgen2('a,'b,size))^2
+  print ["t3=",t3]
+  t4:=factor reduce(+,map(x+->x^2,symgen3('a,'b,size)))
+  print ["t4=",t4]
+  lhs:=t1*t2
+  print ["lhs=",lhs]
+  rhs:=t3+t4
+  print ["rhs=",rhs]
+  lhs-rhs
+--R 
+--R   Function declaration lagrange : PositiveInteger -> Polynomial 
+--R      Integer has been added to workspace.
+--R                                                                   Type: 
Void
+--E 61
+
+\end{chunk}
+Now we test it for the case $n=2$
+\begin{chunk}{*}
+--S 62 of 63
+lagrange(2)
+--R 
+--R   Function definition for lhs is being overwritten.
+--R   Function definition for rhs is being overwritten.
+--R   Compiling function lagrange with type PositiveInteger -> Polynomial 
+--R      Integer 
+--R            2     2
+--R   ["t1=",a   + a  ]
+--R           2     1
+--R            2     2
+--R   ["t2=",b   + b  ]
+--R           2     1
+--R                       2
+--R   ["t3=",(a b  + a b ) ]
+--R            2 2    1 1
+--R                       2
+--R   ["t4=",(a b  - a b ) ]
+--R            1 2    2 1
+--R              2     2    2     2
+--R   ["lhs=",(a   + a  )(b   + b  )]
+--R             2     1    2     1
+--R              2     2   2      2     2   2
+--R   ["rhs=",(a   + a  )b   + (a   + a  )b  ]
+--R             2     1   2      2     1   1
+--R
+--R   (62)  0
+--R                                                     Type: Polynomial 
Integer
+--E 62
+
+\end{chunk}
+Now we test it for the case $n=3$
+\begin{chunk}{*}
+--S 63 of 63
+lagrange(3)
+--R 
+--R            2     2     2
+--R   ["t1=",a   + a   + a  ]
+--R           3     2     1
+--R            2     2     2
+--R   ["t2=",b   + b   + b  ]
+--R           3     2     1
+--R                              2
+--R   ["t3=",(a b  + a b  + a b ) ]
+--R            3 3    2 2    1 1
+--R   ["t4=",
+--R
+--R          2     2   2                                2     2   2
+--R       (a   + a  )b   + (- 2a a b  - 2a a b )b  + (a   + a  )b   - 2a a b b
+--R         2     1   3         2 3 2     1 3 1  3     3     1   2      1 2 1 2
+--R     + 
+--R          2     2   2
+--R       (a   + a  )b
+--R         3     2   1
+--R     ]
+--R              2     2     2    2     2     2
+--R   ["lhs=",(a   + a   + a  )(b   + b   + b  )]
+--R             3     2     1    3     2     1
+--R              2     2     2   2      2     2     2   2      2     2     2   
2
+--R   ["rhs=",(a   + a   + a  )b   + (a   + a   + a  )b   + (a   + a   + a  )b 
 ]
+--R             3     2     1   3      3     2     1   2      3     2     1   1
+--R
+--R   (63)  0
+--R                                                     Type: Polynomial 
Integer
+--E 63
+
+)spool 
+)lisp (bye)
+ 
+\end{chunk}
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} T. Piezas, ``A Collection of Algebraic Identities''\\
+{\bf http://sites.google.com/site/tpiezas/001}
+\end{thebibliography}
+\end{document}
+
+
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]