diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index c507d41..27d1d8a 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -427,98 +427,1702 @@ AffineSpace(dim,K):Exports == Implementation where
 )set message auto off
 )clear all
 
---S 1 of 1
-)show AlgebraGivenByStructuralConstants
+\end{chunk}
+\subsection{Some examples of algebras in genetics}
+Literature:
+[WB] A. Woerz-Busekros: Algebras in Genetics, LNB 36,
+Springer-Verlag, Berlin etc. 1980.
+
+Reed, Mary Lynn, "Algebraic Structure of Genetic Inheritance"
+Bulletin of the American Mathematical Society, 1997, pp 107-130
+
+Gonshor, H., "Contributions to Genetic Algebras"
+Proc. Edinburgh Mathmatical Society (Series 2), vol 17, no 4,
+1971, pp 289--298
+
+\subsection{Commutative, non-associative algebras}
+A Gonshor genetic algebra ([WB], p. 41-42) of dimension 4:
+
+The coefficient ring:
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 1 of 98
+R := FRAC POLY INT
 --R 
---R AlgebraGivenByStructuralConstants(R: Field,n: PositiveInteger,ls: List(Symbol),gamma: Vector(Matrix(R)))  is a domain constructor
---R Abbreviation for AlgebraGivenByStructuralConstants is ALGSC 
---R This constructor is exposed in this frame.
---R Issue )edit bookvol10.3.pamphlet to see algebra source code for ALGSC 
---R
---R------------------------------- Operations --------------------------------
---R ?*? : (SquareMatrix(n,R),%) -> %      ?*? : (R,%) -> %
---R ?*? : (%,R) -> %                      ?*? : (%,%) -> %
---R ?*? : (Integer,%) -> %                ?*? : (PositiveInteger,%) -> %
---R ?**? : (%,PositiveInteger) -> %       ?+? : (%,%) -> %
---R ?-? : (%,%) -> %                      -? : % -> %
---R ?=? : (%,%) -> Boolean                0 : () -> %
---R alternative? : () -> Boolean          antiAssociative? : () -> Boolean
---R antiCommutative? : () -> Boolean      antiCommutator : (%,%) -> %
---R apply : (Matrix(R),%) -> %            associative? : () -> Boolean
---R associator : (%,%,%) -> %             basis : () -> Vector(%)
---R coerce : Vector(R) -> %               coerce : % -> OutputForm
---R commutative? : () -> Boolean          commutator : (%,%) -> %
---R convert : Vector(R) -> %              convert : % -> Vector(R)
---R coordinates : % -> Vector(R)          ?.? : (%,Integer) -> R
---R flexible? : () -> Boolean             hash : % -> SingleInteger
---R jacobiIdentity? : () -> Boolean       jordanAdmissible? : () -> Boolean
---R jordanAlgebra? : () -> Boolean        latex : % -> String
---R leftAlternative? : () -> Boolean      leftDiscriminant : () -> R
---R leftDiscriminant : Vector(%) -> R     leftNorm : % -> R
---R leftTrace : % -> R                    leftTraceMatrix : () -> Matrix(R)
---R lieAdmissible? : () -> Boolean        lieAlgebra? : () -> Boolean
---R powerAssociative? : () -> Boolean     rank : () -> PositiveInteger
---R represents : Vector(R) -> %           rightAlternative? : () -> Boolean
---R rightDiscriminant : () -> R           rightNorm : % -> R
---R rightTrace : % -> R                   rightTraceMatrix : () -> Matrix(R)
---R sample : () -> %                      someBasis : () -> Vector(%)
---R zero? : % -> Boolean                  ?~=? : (%,%) -> Boolean
---R ?*? : (NonNegativeInteger,%) -> %
---R associatorDependence : () -> List(Vector(R)) if R has INTDOM
---R conditionsForIdempotents : () -> List(Polynomial(R))
---R conditionsForIdempotents : Vector(%) -> List(Polynomial(R))
---R coordinates : Vector(%) -> Matrix(R)
---R coordinates : (Vector(%),Vector(%)) -> Matrix(R)
---R coordinates : (%,Vector(%)) -> Vector(R)
---R leftCharacteristicPolynomial : % -> SparseUnivariatePolynomial(R)
---R leftMinimalPolynomial : % -> SparseUnivariatePolynomial(R) if R has INTDOM
---R leftPower : (%,PositiveInteger) -> %
---R leftRankPolynomial : () -> SparseUnivariatePolynomial(Polynomial(R)) if R has FIELD
---R leftRecip : % -> Union(%,"failed") if R has INTDOM
---R leftRegularRepresentation : % -> Matrix(R)
---R leftRegularRepresentation : (%,Vector(%)) -> Matrix(R)
---R leftTraceMatrix : Vector(%) -> Matrix(R)
---R leftUnit : () -> Union(%,"failed") if R has INTDOM
---R leftUnits : () -> Union(Record(particular: %,basis: List(%)),"failed") if R has INTDOM
---R noncommutativeJordanAlgebra? : () -> Boolean
---R plenaryPower : (%,PositiveInteger) -> %
---R recip : % -> Union(%,"failed") if R has INTDOM
---R represents : (Vector(R),Vector(%)) -> %
---R rightCharacteristicPolynomial : % -> SparseUnivariatePolynomial(R)
---R rightDiscriminant : Vector(%) -> R
---R rightMinimalPolynomial : % -> SparseUnivariatePolynomial(R) if R has INTDOM
---R rightPower : (%,PositiveInteger) -> %
---R rightRankPolynomial : () -> SparseUnivariatePolynomial(Polynomial(R)) if R has FIELD
---R rightRecip : % -> Union(%,"failed") if R has INTDOM
---R rightRegularRepresentation : % -> Matrix(R)
---R rightRegularRepresentation : (%,Vector(%)) -> Matrix(R)
---R rightTraceMatrix : Vector(%) -> Matrix(R)
---R rightUnit : () -> Union(%,"failed") if R has INTDOM
---R rightUnits : () -> Union(Record(particular: %,basis: List(%)),"failed") if R has INTDOM
---R structuralConstants : () -> Vector(Matrix(R))
---R structuralConstants : Vector(%) -> Vector(Matrix(R))
---R subtractIfCan : (%,%) -> Union(%,"failed")
---R unit : () -> Union(%,"failed") if R has INTDOM
 --R
+--R   (1)  Fraction(Polynomial(Integer))
+--R                                                                 Type: Domain
 --E 1
 
-)spool
-)lisp (bye)
 \end{chunk}
-\begin{chunk}{AlgebraGivenByStructuralConstants.help}
-====================================================================
-AlgebraGivenByStructuralConstants examples
-====================================================================
+The following multiplication constants may be chosen arbitrarily
+(notice that we write ckij for $c_(i,j)^k$):
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 2 of 98
+(c100, c101, _
+c200, c201, c202, c211, _
+c300, c301, c302, c303, c311, c312, c322) : R
+--R 
+--R                                                                   Type: Void
+--E 2
 
-AlgebraGivenByStructuralConstants implements finite rank algebras
-over a commutative ring, given by the structural constants gamma
-with respect to a fixed  basis [a1,..,an], where gamma is an n-vector 
-of n by n matrices [(gammaijk) for k in 1..rank()] defined by
-   ai * aj = gammaij1 * a1 + ... + gammaijn * an
-The symbols for the fixed basis have to be given as a list of symbols.
+--S 3 of 98
+c100 :=  1 ;     c101 := -1 ;
+--R 
+--R
+--R                                          Type: Fraction(Polynomial(Integer))
+--E 3
+
+--S 4 of 98
+c200 :=  0 ;     c201 :=  1 ;     c202 := -1 ;
+                 c211 :=  2 ;
+--R 
+--R
+--R                                          Type: Fraction(Polynomial(Integer))
+--E 4
+
+--S 5 of 98
+c300 :=  1 ;     c301 :=  0 ;     c302 := -1 ;     c303 :=  1 ;
+                 c311 :=  1 ;     c312 :=  0 ;
+                                  c322 :=  2 ;
+--R 
+--R
+--R                                          Type: Fraction(Polynomial(Integer))
+--E 5
+
+\end{chunk}
+The matrices of the multiplication constants:
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 6 of 98
+gonshor : List SquareMatrix(4,R) :=
+  [matrix [ [1, 0, 0, 0], [0, 0, 0, 0],_
+            [0, 0, 0, 0], [0, 0, 0, 0] ],_
+   matrix [ [c100, c101, 0, 0], [c101, 0, 0, 0],_
+            [0, 0, 0, 0], [0, 0, 0, 0] ],_
+   matrix [ [c200, c201, c202, 0], [c201, c211, 0, 0],_
+            [c202, 0, 0, 0], [0, 0, 0, 0] ],_
+   matrix [ [c300, c301, c302, c303], [c301, c311, c312, 0],_
+            [c302, c312, c322, 0], [c303, 0, 0, 0] ] ] ;
+--R 
+--R
+--R                    Type: List(SquareMatrix(4,Fraction(Polynomial(Integer))))
+--E 6
+
+--S 7 of 98
+basisSymbols : List Symbol := [subscript(e,[i]) for i in 0..3]
+--R 
+--R
+--R   (7)  [e ,e ,e ,e ]
+--R          0  1  2  3
+--R                                                           Type: List(Symbol)
+--E 7
+
+--S 8 of 98
+GonshorGenetic := ALGSC(R, 4, basisSymbols, gonshor)
+--R 
+--R
+--R   (8)
+--R  AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e
+--R  1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--R                                                                 Type: Domain
+--E 8
+
+--S 9 of 98
+commutative?()$GonshorGenetic
+--R 
+--R   algebra is commutative
+--R
+--R   (9)  true
+--R                                                                Type: Boolean
+--E 9
+
+--S 10 of 98
+associative?()$GonshorGenetic
+--R 
+--R   algebra is not associative
+--R
+--R   (10)  false
+--R                                                                Type: Boolean
+--E 10
+
+\end{chunk}
+The canonical basis:
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 11 of 98
+e0 : GonshorGenetic := [1, 0, 0, 0] :: Vector R ;
+--R 
+--R
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 11
+
+--S 12 of 98
+e1 : GonshorGenetic := [0, 1, 0, 0] :: Vector R ;
+--R 
+--R
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 12
+
+--S 13 of 98
+e2 : GonshorGenetic := [0, 0, 1, 0] :: Vector R ;
+--R 
+--R
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 13
+
+--S 14 of 98
+e3 : GonshorGenetic := [0, 0, 0, 1] :: Vector R ;
+--R 
+--R
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 14
+
+\end{chunk}
+A generic element of the algebra:
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 15 of 98
+x  : GonshorGenetic := x0*e0 + x1*e1 + x2*e2 + x3*e3
+--R 
+--R
+--R   (15)  x3 e  + x2 e  + x1 e  + x0 e
+--R             3       2       1       0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 15
+
+\end{chunk}
+The matrix of the left multiplication with x :
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 16 of 98
+Lx := leftRegularRepresentation x
+--R 
+--R
+--R         +x0  - x1 + x0  - x2 + x1  x3 - x2 + x0+
+--R         |                                      |
+--R         |0     - x0     2x1 + x0        x1     |
+--R   (16)  |                                      |
+--R         |0       0        - x0       2x2 - x0  |
+--R         |                                      |
+--R         +0       0          0           x0     +
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 16
+
+\end{chunk}
+leftRegularRepresentationt 8 : GonshorGenetic -> R 
+be the weight homomorphism
+defined by 8(e0) := 1 and 8(ei) := 0 for i = 1,2,3 .
+The coefficients of the characteristic polynomial
+of Lx depend only on 8(x) = x0 :
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 17 of 98
+p := characteristicPolynomial(Lx,Y)
+--R 
+--R
+--R           4     2  2    4
+--R   (17)  x0  - 2Y x0  + Y
+--R                                                    Type: Polynomial(Integer)
+--E 17
+
+\end{chunk}
+The left minimal polynomial of x divides Y * p(Y) :
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 18 of 98
+leftMinimalPolynomial x
+--R 
+--R
+--R          5      2 3     4
+--R   (18)  ?  - 2x0 ?  + x0 ?
+--R              Type: SparseUnivariatePolynomial(Fraction(Polynomial(Integer)))
+--E 18
+
+)clear prop A a b c r s
+ 
+--S 19 of 98
+A := GonshorGenetic
+--R 
+--R
+--R   (19)
+--R  AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e
+--R  1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--R                                                                 Type: Domain
+--E 19
+
+--S 20 of 98
+a := x
+--R 
+--R
+--R   (20)  x3 e  + x2 e  + x1 e  + x0 e
+--R             3       2       1       0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 20
+
+--S 21 of 98
+b := (1/4)*e1 + (1/5)*e2 + (3/20)*e3 + (2/5)*e0
+--R 
+--R
+--R          3      1      1      2
+--R   (21)  -- e  + - e  + - e  + - e
+--R         20  3   5  2   4  1   5  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 21
+
+--S 22 of 98
+c := (1/3)*e1 + (1/7)*e2 + (8/21)*e3 + (1/7)*e0
+--R 
+--R
+--R          8      1      1      1
+--R   (22)  -- e  + - e  + - e  + - e
+--R         21  3   7  2   3  1   7  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 22
+
+--S 23 of 98
+r  : R := r
+--R 
+--R
+--R   (23)  r
+--R                                          Type: Fraction(Polynomial(Integer))
+--E 23
+
+--S 24 of 98
+s  : R := s
+--R 
+--R
+--R   (24)  s
+--R                                          Type: Fraction(Polynomial(Integer))
+--E 24
+
+--S 25 of 98
+b*c
+--R 
+--R
+--R         2      1       47       2
+--R   (25)  - e  + - e  - --- e  + -- e
+--R         7  3   4  2   420  1   35  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 25
+
+--S 26 of 98
+(b*c)*b
+--R 
+--R
+--R          893       277       4       4
+--R   (26)  ---- e  - ---- e  + -- e  + --- e
+--R         8400  3   1400  2   75  1   175  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 26
+
+--S 27 of 98
+b*(c*b)
+--R 
+--R
+--R          893       277       4       4
+--R   (27)  ---- e  - ---- e  + -- e  + --- e
+--R         8400  3   1400  2   75  1   175  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 27
+
+\end{chunk}
+A: Algebra
+a,b,c : A
+r,s : R
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+
+)clear prop AP
+--S 28 of 98
+AP := ALGPKG(R,A)
+--R 
+--R
+--R   (28)
+--R  AlgebraPackage(Fraction(Polynomial(Integer)),AlgebraGivenByStructuralConstant
+--R  s(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MA
+--R  TRIX,MATRIX]))
+--R                                                                 Type: Domain
+--E 28
+
+--S 29 of 98
+r*a
+--R 
+--R
+--R   (29)  r x3 e  + r x2 e  + r x1 e  + r x0 e
+--R               3         2         1         0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 29
+
+--S 30 of 98
+a*r
+--R 
+--R
+--R   (30)  r x3 e  + r x2 e  + r x1 e  + r x0 e
+--R               3         2         1         0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 30
+
+--S 31 of 98
+a*b
+--R 
+--R
+--R         8x3 + 5x1 + 7x0      - 8x2 + 18x1 + x0      - 8x1 + 3x0      2x0
+--R   (31)  --------------- e  + ----------------- e  + ----------- e  + --- e
+--R                20        3           20         2        20      1    5   0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 31
+
+--S 32 of 98
+b*c
+--R 
+--R
+--R         2      1       47       2
+--R   (32)  - e  + - e  - --- e  + -- e
+--R         7  3   4  2   420  1   35  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 32
+
+--S 33 of 98
+12 * c
+--R 
+--R
+--R         32      12            12
+--R   (33)  -- e  + -- e  + 4e  + -- e
+--R          7  3    7  2     1    7  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 32
+
+--S 34 of 98
+(-3) * a
+--R 
+--R
+--R   (34)  - 3x3 e  - 3x2 e  - 3x1 e  - 3x0 e
+--R                3        2        1        0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 34
+
+--S 35 of 98
+d  :=  a ** 12
+--R 
+--R
+--R   (35)
+--R             11        10  2         9  2        10         11           8  4
+--R         12x0  x3 + 4x0  x2  + (144x0 x1  + 144x0  x1 - 68x0  )x2 + 248x0 x1
+--R       + 
+--R                9  3       10  2        11         12
+--R         - 784x0 x1  - 86x0  x1  + 204x0  x1 - 24x0
+--R    *
+--R       e
+--R        3
+--R   + 
+--R         11         10  2       11            11       12        12
+--R     (4x0  x2 - 92x0  x1  + 28x0  x1)e  + (4x0  x1 - x0  )e  + x0  e
+--R                                      2                    1        0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 35
+
+--S 36 of 98
+-d
+--R 
+--R
+--R   (36)
+--R               11        10  2           9  2        10         11
+--R         - 12x0  x3 - 4x0  x2  + (- 144x0 x1  - 144x0  x1 + 68x0  )x2
+--R       + 
+--R                8  4        9  3       10  2        11         12
+--R         - 248x0 x1  + 784x0 x1  + 86x0  x1  - 204x0  x1 + 24x0
+--R    *
+--R       e
+--R        3
+--R   + 
+--R           11         10  2       11              11       12        12
+--R     (- 4x0  x2 + 92x0  x1  - 28x0  x1)e  + (- 4x0  x1 + x0  )e  - x0  e
+--R                                        2                      1        0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 36
+
+--S 37 of 98
+a + b
+--R 
+--R
+--R         20x3 + 3      5x2 + 1      4x1 + 1      5x0 + 2
+--R   (37)  -------- e  + ------- e  + ------- e  + ------- e
+--R            20     3      5     2      4     1      5     0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 37
+
+--S 38 of 98
+d-c
+--R 
+--R
+--R   (38)
+--R                11         10  2          9  2         10           11
+--R           252x0  x3 + 84x0  x2  + (3024x0 x1  + 3024x0  x1 - 1428x0  )x2
+--R         + 
+--R                 8  4          9  3         10  2         11          12
+--R           5208x0 x1  - 16464x0 x1  - 1806x0  x1  + 4284x0  x1 - 504x0   - 8
+--R      /
+--R         21
+--R    *
+--R       e
+--R        3
+--R   + 
+--R         11          10  2        11                11        12
+--R     28x0  x2 - 644x0  x1  + 196x0  x1 - 1      12x0  x1 - 3x0   - 1
+--R     ------------------------------------- e  + -------------------- e
+--R                       7                    2             3           1
+--R   + 
+--R        12
+--R     7x0   - 1
+--R     --------- e
+--R         7      0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 38
+
+--S 39 of 98
+(a*(a*a) = leftPower(a,3)) :: Boolean
+--R 
+--R
+--R   (39)  true
+--R                                                                Type: Boolean
+--E 39
+
+--S 40 of 98
+(a ** 11 =  (a**8 * a**2) * a) :: Boolean
+--R 
+--R
+--R   (40)  true
+--R                                                                Type: Boolean
+--E 40
+
+--S 41 of 98
+(a ** 11 =  a**8 * (a**2 * a)) :: Boolean
+--R 
+--R
+--R   (41)  false
+--R                                                                Type: Boolean
+--E 41
+
+--S 42 of 98
+zero := 0$A
+--R 
+--R
+--R   (42)  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 42
+
+--S 43 of 98
+zero : A := 0
+--R 
+--R
+--R   (43)  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 43
+
+--S 44 of 98
+alternative?()$A
+--R 
+--R   algebra is not left alternative
+--R
+--R   (44)  false
+--R                                                                Type: Boolean
+--E 44
+
+--S 45 of 98
+antiCommutative?()$A
+--R 
+--R   algebra is not anti-commutative
+--R
+--R   (45)  false
+--R                                                                Type: Boolean
+--E 45
+
+--S 46 of 98
+associative?()$A
+--R 
+--R   algebra is not associative
+--R
+--R   (46)  false
+--R                                                                Type: Boolean
+--E 46
+
+--S 47 of 98
+commutative?()$A
+--R 
+--R   algebra is commutative
+--R
+--R   (47)  true
+--R                                                                Type: Boolean
+--E 47
+
+--S 48 of 98
+commutator(a,b)
+--R 
+--R
+--R   (48)  0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 48
+
+--S 49 of 98
+antiCommutator(a,b)
+--R 
+--R
+--R         8x3 + 5x1 + 7x0      - 8x2 + 18x1 + x0      - 8x1 + 3x0      4x0
+--R   (49)  --------------- e  + ----------------- e  + ----------- e  + --- e
+--R                10        3           10         2        10      1    5   0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 49
+
+--S 50 of 98
+associator(a,b,c)
+--R 
+--R
+--R         - 21x2 + 6x1 + 7x0      12x2 - 30x1 + 58x0      12x1 - 28x0
+--R   (50)  ------------------ e  + ------------------ e  + ----------- e
+--R                 42          3           105         2       105      1
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 50
+
+--S 51 of 98
+basis()$A
+--R 
+--R
+--R   (51)  [e ,e ,e ,e ]
+--R           0  1  2  3
+--RType: Vector(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 51
+
+--S 52 of 98
+n := rank()$A
+--R 
+--R
+--R   (52)  4
+--R                                                        Type: PositiveInteger
+--E 52
+
+--S 53 of 98
+v : Vector R := [i for i in 1..n]
+--R 
+--R
+--R   (53)  [1,2,3,4]
+--R                                  Type: Vector(Fraction(Polynomial(Integer)))
+--E 53
+
+--S 54 of 98
+g : A := represents  v
+--R 
+--R
+--R   (54)  4e  + 3e  + 2e  + e
+--R           3     2     1    0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 54
+
+--S 55 of 98
+coordinates a
+--R 
+--R
+--R   (55)  [x0,x1,x2,x3]
+--R                                  Type: Vector(Fraction(Polynomial(Integer)))
+--E 55
+
+--S 56 of 98
+coordinates [a,b]
+--R 
+--R
+--R         +x0  x1  x2  x3+
+--R         |              |
+--R   (56)  |2   1   1    3|
+--R         |-   -   -   --|
+--R         +5   4   5   20+
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 56
+
+--S 57 of 98
+a.3
+--R 
+--R
+--R   (57)  x2
+--R                                          Type: Fraction(Polynomial(Integer))
+--E 57
+
+--S 58 of 98
+flexible?()$A
+--R 
+--R   algebra is flexible
+--R
+--R   (58)  true
+--R                                                                Type: Boolean
+--E 58
+
+--S 59 of 98
+leftAlternative?()$A
+--R 
+--R   algebra is not left alternative
+--R
+--R   (59)  false
+--R                                                                Type: Boolean
+--E 59
+
+--S 60 of 98
+rightAlternative?()$A
+--R 
+--R   algebra is not right alternative
+--R
+--R   (60)  false
+--R                                                                Type: Boolean
+--E 60
+
+--S 61 of 98
+sB := someBasis()$A
+--R 
+--R
+--R   (61)  [e ,e ,e ,e ]
+--R           0  1  2  3
+--RType: Vector(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 61
+
+--S 62 of 98
+zero? a
+--R 
+--R
+--R   (62)  false
+--R                                                                Type: Boolean
+--E 62
+
+--S 63 of 98
+associatorDependence()$A
+--R 
+--R
+--R   (63)  [[1,1,1,0,0,0],[0,1,0,1,0,0],[1,0,0,0,1,0],[- 1,- 1,0,0,0,1]]
+--R                            Type: List(Vector(Fraction(Polynomial(Integer))))
+--E 63
+
+\end{chunk}
+ConditionsForIdempotents()\$A
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 64 of 98
+jacobiIdentity?()$A
+--R 
+--R   Jacobi identity does not hold
+--R
+--R   (64)  false
+--R                                                                Type: Boolean
+--E 64
+
+--S 65 of 98
+jordanAlgebra?()$A
+--R 
+--R   algebra is commutative
+--R   this is not a Jordan algebra
+--R
+--R   (65)  false
+--R                                                                Type: Boolean
+--E 65
+
+--S 66 of 98
+jordanAdmissible?()$A
+--R 
+--R   algebra is not Jordan admissible
+--R
+--R   (66)  false
+--R                                                                Type: Boolean
+--E 66
+
+--S 67 of 98
+lieAdmissible?()$A
+--R 
+--R   algebra is Lie admissible
+--R
+--R   (67)  true
+--R                                                                Type: Boolean
+--E 67
+
+\end{chunk}
+ConditionsForIdempotents 
+\begin{chunk}{AlgebraGivenByStructuralConstants.input}
+--S 68 of 98
+b2 := [reduce(+,[sB.i for i in 1..k]) for k in 1..n]
+--R 
+--R
+--R   (68)  [e ,e  + e ,e  + e  + e ,e  + e  + e  + e ]
+--R           0  1    0  2    1    0  3    2    1    0
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 68
+
+--S 69 of 98
+coordinates  (a ,b2 :: Vector A)
+--R 
+--R
+--R   (69)  [- x1 + x0,- x2 + x1,- x3 + x2,x3]
+--R                                  Type: Vector(Fraction(Polynomial(Integer)))
+--E 69
+
+--S 70 of 98
+coordinates  ([a,b] ,bb := (b2 :: Vector A))
+--R 
+--R
+--R         +- x1 + x0  - x2 + x1  - x3 + x2  x3+
+--R         |                                   |
+--R   (70)  |    3          1          1       3|
+--R         |   --         --         --      --|
+--R         +   20         20         20      20+
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 70
+
+--S 71 of 98
+leftMinimalPolynomial a
+--R 
+--R
+--R          5      2 3     4
+--R   (71)  ?  - 2x0 ?  + x0 ?
+--R              Type: SparseUnivariatePolynomial(Fraction(Polynomial(Integer)))
+--E 71
+
+--S 72 of 98
+leftPower (a,10)
+--R 
+--R
+--R   (72)
+--R          9        8  2          7  2      8        9          8  2      10
+--R     (10x0 x3 - 6x0 x2  + (- 32x0 x1  + 8x0 x1 + 2x0 )x2 + 13x0 x1  + 5x0  )e
+--R                                                                             3
+--R   + 
+--R           9         8  2      9        10            9       10        10
+--R     (- 2x0 x2 + 26x0 x1  + 6x0 x1 - 4x0  )e  + (- 2x0 x1 + x0  )e  + x0  e
+--R                                            2                     1        0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 72
+
+--S 73 of 98
+rightPower(a,10)
+--R 
+--R
+--R   (73)
+--R          9        8  2          7  2      8        9          8  2      10
+--R     (10x0 x3 - 6x0 x2  + (- 32x0 x1  + 8x0 x1 + 2x0 )x2 + 13x0 x1  + 5x0  )e
+--R                                                                             3
+--R   + 
+--R           9         8  2      9        10            9       10        10
+--R     (- 2x0 x2 + 26x0 x1  + 6x0 x1 - 4x0  )e  + (- 2x0 x1 + x0  )e  + x0  e
+--R                                            2                     1        0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 73
+
+--S 74 of 98
+leftRegularRepresentation a
+--R 
+--R
+--R         +x0  - x1 + x0  - x2 + x1  x3 - x2 + x0+
+--R         |                                      |
+--R         |0     - x0     2x1 + x0        x1     |
+--R   (74)  |                                      |
+--R         |0       0        - x0       2x2 - x0  |
+--R         |                                      |
+--R         +0       0          0           x0     +
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 74
+
+--S 75 of 98
+leftRegularRepresentation (a,bb)
+--R 
+--R
+--R         +  x1     x2 - 2x1 + x0     - x3 + x1 - x0        x3 - x2 + x0   +
+--R         |                                                                |
+--R         |x1 + x0  x2 - 4x1 - x0       - x3 + 2x1        x3 - x2 + x1 + x0|
+--R   (75)  |                                                                |
+--R         |x1 + x0    x2 - 4x1       - x3 - 2x2 + 2x1       x3 + x2 + x1   |
+--R         |                                                                |
+--R         +x1 + x0    x2 - 4x1     - x3 - 2x2 + 2x1 - x0  x3 + x2 + x1 + x0+
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 75
+
+--S 76 of 98
+leftUnit()$A
+--R 
+--R   this algebra has no left unit
+--R
+--R   (76)  "failed"
+--R                                                    Type: Union("failed",...)
+--E 76
+
+--S 77 of 98
+represents (v,bb)
+--R 
+--R
+--R   (77)  4e  + 7e  + 9e  + 10e
+--R           3     2     1      0
+--RType: AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+--E 77
+
+--S 78 of 98
+rightMinimalPolynomial a
+--R 
+--R
+--R          5      2 3     4
+--R   (78)  ?  - 2x0 ?  + x0 ?
+--R              Type: SparseUnivariatePolynomial(Fraction(Polynomial(Integer)))
+--E 78
+
+--S 79 of 98
+rightRegularRepresentation a
+--R 
+--R
+--R         +x0  - x1 + x0  - x2 + x1  x3 - x2 + x0+
+--R         |                                      |
+--R         |0     - x0     2x1 + x0        x1     |
+--R   (79)  |                                      |
+--R         |0       0        - x0       2x2 - x0  |
+--R         |                                      |
+--R         +0       0          0           x0     +
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 79
+
+--S 80 of 98
+rightRegularRepresentation (a,bb)
+--R 
+--R
+--R         +  x1     x2 - 2x1 + x0     - x3 + x1 - x0        x3 - x2 + x0   +
+--R         |                                                                |
+--R         |x1 + x0  x2 - 4x1 - x0       - x3 + 2x1        x3 - x2 + x1 + x0|
+--R   (80)  |                                                                |
+--R         |x1 + x0    x2 - 4x1       - x3 - 2x2 + 2x1       x3 + x2 + x1   |
+--R         |                                                                |
+--R         +x1 + x0    x2 - 4x1     - x3 - 2x2 + 2x1 - x0  x3 + x2 + x1 + x0+
+--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
+--E 80
+
+--S 81 of 98
+rightUnit()$A
+--R 
+--R   this algebra has no right unit
+--R
+--R   (81)  "failed"
+--R                                                    Type: Union("failed",...)
+--E 81
+
+--S 82 of 98
+structuralConstants()$A
+--R 
+--R
+--R          +1  0  0  0+ + 1   - 1  0  0+ + 0   1  - 1  0+ + 1   0  - 1  1+
+--R          |          | |              | |              | |              |
+--R          |0  0  0  0| |- 1   0   0  0| | 1   2   0   0| | 0   1   0   0|
+--R   (82)  [|          |,|              |,|              |,|              |]
+--R          |0  0  0  0| | 0    0   0  0| |- 1  0   0   0| |- 1  0   2   0|
+--R          |          | |              | |              | |              |
+--R          +0  0  0  0+ + 0    0   0  0+ + 0   0   0   0+ + 1   0   0   0+
+--R                          Type: Vector(Matrix(Fraction(Polynomial(Integer))))
+--E 82
+
+--S 83 of 98
+structuralConstants(bb)
+--R 
+--R
+--R          +0  1  1  1+ + 1   - 1   0    0 + +- 1  0   0   - 1+ +1  1  0  1+
+--R          |          | |                  | |                | |          |
+--R          |1  2  2  2| |- 1  - 5  - 4  - 4| | 0   2   2    1 | |1  2  1  2|
+--R   (83)  [|          |,|                  |,|                |,|          |]
+--R          |1  2  2  2| | 0   - 4  - 3  - 3| | 0   2   0   - 1| |0  1  2  3|
+--R          |          | |                  | |                | |          |
+--R          +1  2  2  2+ + 0   - 4  - 3  - 3+ +- 1  1  - 1  - 2+ +1  2  3  4+
+--R                          Type: Vector(Matrix(Fraction(Polynomial(Integer))))
+--E 83
+
+--S 84 of 98
+unit()$A
+--R 
+--R   this algebra has no unit
+--R
+--R   (84)  "failed"
+--R                                                    Type: Union("failed",...)
+--E 84
+
+--S 85 of 98
+biRank  a
+--R 
+--R
+--R   (85)  4
+--R                                                        Type: PositiveInteger
+--E 85
+
+--S 86 of 98
+leftRank a
+--R 
+--R
+--R   (86)  4
+--R                                                        Type: PositiveInteger
+--E 86
+
+--S 87 of 98
+doubleRank a
+--R 
+--R
+--R   (87)  4
+--R                                                        Type: PositiveInteger
+--E 87
+
+--S 88 of 98
+rightRank a
+--R 
+--R
+--R   (88)  4
+--R                                                        Type: PositiveInteger
+--E 88
+
+--S 89 of 98
+weakBiRank a
+--R 
+--R
+--R   (89)  4
+--R                                                        Type: PositiveInteger
+--E 89
+
+--S 90 of 98
+basisOfCenter()$AP
+--R 
+--R
+--R   (90)  [e ]
+--R           3
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 90
+
+--S 91 of 98
+basisOfLeftNucleus()$AP
+--R 
+--R
+--R   (91)  [e ]
+--R           3
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 91
+
+--S 92 of 98
+basisOfNucleus()$AP
+--R 
+--R
+--R   (92)  [e ]
+--R           3
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 92
+
+--S 93 of 98
+basisOfRightNucleus()$AP
+--R 
+--R
+--R   (93)  [e ]
+--R           3
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 93
+
+--S 94 of 98
+basisOfCentroid()$AP
+--R 
+--R
+--R          +0  0  0  0+ +1  0  0  0+
+--R          |          | |          |
+--R          |0  0  0  0| |0  1  0  0|
+--R   (94)  [|          |,|          |]
+--R          |0  0  0  0| |0  0  1  0|
+--R          |          | |          |
+--R          +1  0  0  0+ +0  0  0  1+
+--R                            Type: List(Matrix(Fraction(Polynomial(Integer))))
+--E 94
+
+--S 95 of 98
+basisOfCommutingElements()$AP
+--R 
+--R
+--R   (95)  [e ,e ,e ,e ]
+--R           3  2  1  0
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 95
+
+--S 96 of 98
+basisOfLeftNucloid()$AP
+--R 
+--R
+--R          +0  0  0  0+ +1  0  0  0+
+--R          |          | |          |
+--R          |0  0  0  0| |0  1  0  0|
+--R   (96)  [|          |,|          |]
+--R          |0  0  0  0| |0  0  1  0|
+--R          |          | |          |
+--R          +1  0  0  0+ +0  0  0  1+
+--R                            Type: List(Matrix(Fraction(Polynomial(Integer))))
+--E 96
+
+--S 97 of 98
+basisOfMiddleNucleus()$AP
+--R 
+--R
+--R   (97)  [e ]
+--R           3
+--RType: List(AlgebraGivenByStructuralConstants(Fraction(Polynomial(Integer)),4,[*01e0,*01e1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX]))
+--E 97
+
+--S 98 of 98
+basisOfRightNucloid()$AP
+--R 
+--R
+--R          +0  0  0  0+ +1  0  0  0+
+--R          |          | |          |
+--R          |0  0  0  0| |0  1  0  0|
+--R   (98)  [|          |,|          |]
+--R          |0  0  0  0| |0  0  1  0|
+--R          |          | |          |
+--R          +1  0  0  0+ +0  0  0  1+
+--R                            Type: List(Matrix(Fraction(Polynomial(Integer))))
+--E 98
+
+)spool
+)lisp (bye)
+\end{chunk}
+\begin{chunk}{AlgebraGivenByStructuralConstants.help}
+====================================================================
+AlgebraGivenByStructuralConstants examples
+====================================================================
+
+AlgebraGivenByStructuralConstants implements finite rank algebras
+over a commutative ring, given by the structural constants gamma
+with respect to a fixed  basis [a1,..,an], where gamma is an n-vector 
+of n by n matrices [(gammaijk) for k in 1..rank()] defined by
+   ai * aj = gammaij1 * a1 + ... + gammaijn * an
+The symbols for the fixed basis have to be given as a list of symbols.
+
+SOME EXAMPLES OF ALGEBRAS IN GENETICS
+
+[WB] A. Woerz-Busekros: Algebras in Genetics, LNB 36,
+Springer-Verlag, Berlin etc. 1980.
+
+Reed, Mary Lynn, "Algebraic Structure of Genetic Inheritance"
+Bulletin of the American Mathematical Society, 1997, pp 107-130
+
+Gonshor, H., "Contributions to Genetic Algebras"
+Proc. Edinburgh Mathmatical Society (Series 2), vol 17, no 4,
+1971, pp 289--298
+
+
+A Gonshor genetic algebra ([WB], p. 41-42) of dimension 4:
+
+The coefficient ring:
+
+   R := FRAC POLY INT
+
+The following multiplication constants may be chosen arbitrarily
+(notice that we write ckij for $c_(i,j)^k$):
+
+   (c100, c101, _
+   c200, c201, c202, c211, _
+   c300, c301, c302, c303, c311, c312, c322) : R
+
+   c100 :=  1 
+   c101 := -1
+
+   c200 :=  0 
+   c201 :=  1 
+   c202 := -1 
+   c211 :=  2 
+
+   c300 :=  1 
+   c301 :=  0 
+   c302 := -1 
+   c303 :=  1 
+   c311 :=  1 
+   c312 :=  0 
+   c322 :=  2 
+
+The matrices of the multiplication constants:
+
+   gonshor : List SquareMatrix(4,R) :=
+     [matrix [ [1, 0, 0, 0], [0, 0, 0, 0],_
+               [0, 0, 0, 0], [0, 0, 0, 0] ],_
+      matrix [ [c100, c101, 0, 0], [c101, 0, 0, 0],_
+               [0, 0, 0, 0], [0, 0, 0, 0] ],_
+      matrix [ [c200, c201, c202, 0], [c201, c211, 0, 0],_
+               [c202, 0, 0, 0], [0, 0, 0, 0] ],_
+      matrix [ [c300, c301, c302, c303], [c301, c311, c312, 0],_
+               [c302, c312, c322, 0], [c303, 0, 0, 0] ] ] ;
+
+   basisSymbols : List Symbol := [subscript(e,[i]) for i in 0..3]
+
+           [e ,e ,e ,e ]
+             0  1  2  3
+
+   GonshorGenetic := ALGSC(R, 4, basisSymbols, gonshor)
+
+        1,*01e2,*01e3],[MATRIX,MATRIX,MATRIX,MATRIX])
+
+
+   commutative?()$GonshorGenetic
+      algebra is commutative
+
+
+   associative?()$GonshorGenetic
+      algebra is not associative
+
+
+The canonical basis:
+
+   e0 : GonshorGenetic := [1, 0, 0, 0] :: Vector R ;
+   e1 : GonshorGenetic := [0, 1, 0, 0] :: Vector R ;
+   e2 : GonshorGenetic := [0, 0, 1, 0] :: Vector R ;
+   e3 : GonshorGenetic := [0, 0, 0, 1] :: Vector R ;
+
+A generic element of the algebra:
+
+   x  : GonshorGenetic := x0*e0 + x1*e1 + x2*e2 + x3*e3
+
+            x3 e  + x2 e  + x1 e  + x0 e
+                3       2       1       0
+
+The matrix of the left multiplication with x :
+
+   Lx := leftRegularRepresentation x
+ 
+         +x0  - x1 + x0  - x2 + x1  x3 - x2 + x0+
+         |                                      |
+         |0     - x0     2x1 + x0        x1     |
+         |                                      |
+         |0       0        - x0       2x2 - x0  |
+         |                                      |
+         +0       0          0           x0     +
+
+
+
+leftRegularRepresentationt 8 : GonshorGenetic -> R be the weight
+homomorphism defined by 8(e0) := 1 and 8(ei) := 0 for i = 1,2,3 .
+The coefficients of the characteristic polynomial
+of Lx depend only on 8(x) = x0 :
+
+   p := characteristicPolynomial(Lx,Y)
+
+              4     2  2    4
+            x0  - 2Y x0  + Y
+
+
+The left minimal polynomial of x divides Y * p(Y) :
+
+   leftMinimalPolynomial x
+
+             5      2 3     4
+            ?  - 2x0 ?  + x0 ?
+
+
+   A := GonshorGenetic
+
+   a := x
+
+        x3 e  + x2 e  + x1 e  + x0 e
+             3       2       1       0
+
+
+   b := (1/4)*e1 + (1/5)*e2 + (3/20)*e3 + (2/5)*e0
+
+             3      1      1      2
+            -- e  + - e  + - e  + - e
+            20  3   5  2   4  1   5  0
+
+   c := (1/3)*e1 + (1/7)*e2 + (8/21)*e3 + (1/7)*e0
+
+             8      1      1      1
+            -- e  + - e  + - e  + - e
+            21  3   7  2   3  1   7  0
+
+   r  : R := r
+   s  : R := s
+
+   b*c
+
+            2      1       47       2
+            - e  + - e  - --- e  + -- e
+            7  3   4  2   420  1   35  0
+
+
+   (b*c)*b
+
+             893       277       4       4
+            ---- e  - ---- e  + -- e  + --- e
+            8400  3   1400  2   75  1   175  0
+
+
+   b*(c*b)
+
+             893       277       4       4
+            ---- e  - ---- e  + -- e  + --- e
+            8400  3   1400  2   75  1   175  0
+
+
+   A: Algebra
+   a,b,c : A
+   r,s : R
+
+   AP := ALGPKG(R,A)
+
+   r*a
+
+         r x3 e  + r x2 e  + r x1 e  + r x0 e
+               3         2         1         0
+
+   a*r
+
+         r x3 e  + r x2 e  + r x1 e  + r x0 e
+               3         2         1         0
+
+   a*b
+
+         8x3 + 5x1 + 7x0      - 8x2 + 18x1 + x0      - 8x1 + 3x0      2x0
+         --------------- e  + ----------------- e  + ----------- e  + --- e
+                20        3           20         2        20      1    5   0
+
+   b*c
+
+         2      1       47       2
+         - e  + - e  - --- e  + -- e
+         7  3   4  2   420  1   35  0
+
+
+   12 * c
+
+         32      12            12
+         -- e  + -- e  + 4e  + -- e
+          7  3    7  2     1    7  0
+
+
+   (-3) * a
+
+        - 3x3 e  - 3x2 e  - 3x1 e  - 3x0 e
+                3        2        1        0
+
+
+   d  :=  a ** 12
+
+             11        10  2         9  2        10         11           8  4
+         12x0  x3 + 4x0  x2  + (144x0 x1  + 144x0  x1 - 68x0  )x2 + 248x0 x1
+       + 
+                 9  3       10  2        11         12
+          - 784x0 x1  - 86x0  x1  + 204x0  x1 - 24x0
+     *
+        e
+         3
+    + 
+          11         10  2       11            11       12        12
+      (4x0  x2 - 92x0  x1  + 28x0  x1)e  + (4x0  x1 - x0  )e  + x0  e
+                                       2                    1        0
+
+   -d
+
+               11        10  2           9  2        10         11
+         - 12x0  x3 - 4x0  x2  + (- 144x0 x1  - 144x0  x1 + 68x0  )x2
+       + 
+                8  4        9  3       10  2        11         12
+         - 248x0 x1  + 784x0 x1  + 86x0  x1  - 204x0  x1 + 24x0
+    *
+       e
+        3
+   + 
+           11         10  2       11              11       12        12
+     (- 4x0  x2 + 92x0  x1  - 28x0  x1)e  + (- 4x0  x1 + x0  )e  - x0  e
+                                        2                      1        0
+
+   a + b
+ 
+         20x3 + 3      5x2 + 1      4x1 + 1      5x0 + 2
+         -------- e  + ------- e  + ------- e  + ------- e
+            20     3      5     2      4     1      5     0
+
+   d-c
+
+                11         10  2          9  2         10           11
+           252x0  x3 + 84x0  x2  + (3024x0 x1  + 3024x0  x1 - 1428x0  )x2
+         + 
+                 8  4          9  3         10  2         11          12
+           5208x0 x1  - 16464x0 x1  - 1806x0  x1  + 4284x0  x1 - 504x0   - 8
+      /
+         21
+    *
+       e
+        3
+   + 
+         11          10  2        11                11        12
+     28x0  x2 - 644x0  x1  + 196x0  x1 - 1      12x0  x1 - 3x0   - 1
+     ------------------------------------- e  + -------------------- e
+                       7                    2             3           1
+   + 
+        12
+     7x0   - 1
+     --------- e
+         7      0
+
+   (a*(a*a) = leftPower(a,3)) :: Boolean
+      true
+
+   (a ** 11 =  (a**8 * a**2) * a) :: Boolean
+      true
+
+   (a ** 11 =  a**8 * (a**2 * a)) :: Boolean
+      false
+
+   zero := 0$A
+       0
+
+   zero : A := 0
+       0
+
+   alternative?()$A
+
+      algebra is not left alternative
+        false
+
+
+   antiCommutative?()$A
+ 
+      algebra is not anti-commutative
+         false
+
+
+   associative?()$A
+
+      algebra is not associative
+        false
+
+   commutative?()$A
+
+      algebra is commutative
+        true
+
+
+   commutator(a,b)
+         0
+
+   antiCommutator(a,b)
+
+         8x3 + 5x1 + 7x0      - 8x2 + 18x1 + x0      - 8x1 + 3x0      4x0
+         --------------- e  + ----------------- e  + ----------- e  + --- e
+                10        3           10         2        10      1    5   0
+
+   associator(a,b,c)
+
+         - 21x2 + 6x1 + 7x0      12x2 - 30x1 + 58x0      12x1 - 28x0
+         ------------------ e  + ------------------ e  + ----------- e
+                 42          3           105         2       105      1
+
+
+   basis()$A
+      [e ,e ,e ,e ]
+        0  1  2  3
+
+
+   n := rank()$A
+      4
+
+   v : Vector R := [i for i in 1..n]
+      [1,2,3,4]
+
+   g : A := represents  v
+
+      4e  + 3e  + 2e  + e
+        3     2     1    0
+
+   coordinates a
+      [x0,x1,x2,x3]
+
+
+   coordinates [a,b]
+
+      +x0  x1  x2  x3+
+      |              |
+      |2   1   1    3|
+      |-   -   -   --|
+      +5   4   5   20+
+
+
+   a.3
+      x2
+
+   flexible?()$A
+      algebra is flexible
+
+   leftAlternative?()$A
+      algebra is not left alternative
+
+   rightAlternative?()$A
+      algebra is not right alternative
+
+   sB := someBasis()$A
+
+      [e ,e ,e ,e ]
+        0  1  2  3
+
+   zero? a
+      false
+
+associatorDependence()$A
+      [[1,1,1,0,0,0],[0,1,0,1,0,0],[1,0,0,0,1,0],[- 1,- 1,0,0,0,1]]
+
+
+ConditionsForIdempotents()$A
+
+   jacobiIdentity?()$A
+      Jacobi identity does not hold
+
+   jordanAlgebra?()$A
+      algebra is commutative
+      this is not a Jordan algebra
+
+   jordanAdmissible?()$A
+      algebra is not Jordan admissible
+
+   lieAdmissible?()$A
+      algebra is Lie admissible
+
+
+ConditionsForIdempotents 
+
+   b2 := [reduce(+,[sB.i for i in 1..k]) for k in 1..n]
+
+      [e ,e  + e ,e  + e  + e ,e  + e  + e  + e ]
+        0  1    0  2    1    0  3    2    1    0
+
+coordinates  (a ,b2 :: Vector A)
+
+      [- x1 + x0,- x2 + x1,- x3 + x2,x3]
+
+coordinates  ([a,b] ,bb := (b2 :: Vector A))
+
+      +- x1 + x0  - x2 + x1  - x3 + x2  x3+
+      |                                   |
+      |    3          1          1       3|
+      |   --         --         --      --|
+      +   20         20         20      20+
+
+   leftMinimalPolynomial a
+
+         5      2 3     4
+        ?  - 2x0 ?  + x0 ?
+
+   leftPower (a,10)
+
+          9        8  2          7  2      8        9          8  2      10
+     (10x0 x3 - 6x0 x2  + (- 32x0 x1  + 8x0 x1 + 2x0 )x2 + 13x0 x1  + 5x0  )e
+                                                                             3
+   + 
+           9         8  2      9        10            9       10        10
+     (- 2x0 x2 + 26x0 x1  + 6x0 x1 - 4x0  )e  + (- 2x0 x1 + x0  )e  + x0  e
+                                            2                     1        0
+
+   rightPower(a,10)
+
+          9        8  2          7  2      8        9          8  2      10
+     (10x0 x3 - 6x0 x2  + (- 32x0 x1  + 8x0 x1 + 2x0 )x2 + 13x0 x1  + 5x0  )e
+                                                                             3
+   + 
+           9         8  2      9        10            9       10        10
+     (- 2x0 x2 + 26x0 x1  + 6x0 x1 - 4x0  )e  + (- 2x0 x1 + x0  )e  + x0  e
+                                            2                     1        0
+
+   leftRegularRepresentation a
+
+      +x0  - x1 + x0  - x2 + x1  x3 - x2 + x0+
+      |                                      |
+      |0     - x0     2x1 + x0        x1     |
+      |                                      |
+      |0       0        - x0       2x2 - x0  |
+      |                                      |
+      +0       0          0           x0     +
+
+   leftRegularRepresentation (a,bb)
+
+      +  x1     x2 - 2x1 + x0     - x3 + x1 - x0        x3 - x2 + x0   +
+      |                                                                |
+      |x1 + x0  x2 - 4x1 - x0       - x3 + 2x1        x3 - x2 + x1 + x0|
+      |                                                                |
+      |x1 + x0    x2 - 4x1       - x3 - 2x2 + 2x1       x3 + x2 + x1   |
+      |                                                                |
+      +x1 + x0    x2 - 4x1     - x3 - 2x2 + 2x1 - x0  x3 + x2 + x1 + x0+
+
+   leftUnit()$A
+      this algebra has no left unit
+
+
+   represents (v,bb)
+
+      4e  + 7e  + 9e  + 10e
+        3     2     1      0
+
+   rightMinimalPolynomial a
+
+        5      2 3     4
+       ?  - 2x0 ?  + x0 ?
+
+   rightRegularRepresentation a
+
+       +x0  - x1 + x0  - x2 + x1  x3 - x2 + x0+
+       |                                      |
+       |0     - x0     2x1 + x0        x1     |
+       |                                      |
+       |0       0        - x0       2x2 - x0  |
+       |                                      |
+       +0       0          0           x0     +
+
+   rightRegularRepresentation (a,bb)
+
+      +  x1     x2 - 2x1 + x0     - x3 + x1 - x0        x3 - x2 + x0   +
+      |                                                                |
+      |x1 + x0  x2 - 4x1 - x0       - x3 + 2x1        x3 - x2 + x1 + x0|
+      |                                                                |
+      |x1 + x0    x2 - 4x1       - x3 - 2x2 + 2x1       x3 + x2 + x1   |
+      |                                                                |
+      +x1 + x0    x2 - 4x1     - x3 - 2x2 + 2x1 - x0  x3 + x2 + x1 + x0+
+
+   rightUnit()$A
+      this algebra has no right unit
+
+   structuralConstants()$A
+
+       +1  0  0  0+ + 1   - 1  0  0+ + 0   1  - 1  0+ + 1   0  - 1  1+
+       |          | |              | |              | |              |
+       |0  0  0  0| |- 1   0   0  0| | 1   2   0   0| | 0   1   0   0|
+      [|          |,|              |,|              |,|              |]
+       |0  0  0  0| | 0    0   0  0| |- 1  0   0   0| |- 1  0   2   0|
+       |          | |              | |              | |              |
+       +0  0  0  0+ + 0    0   0  0+ + 0   0   0   0+ + 1   0   0   0+
+
+   structuralConstants(bb)
+
+       +0  1  1  1+ + 1   - 1   0    0 + +- 1  0   0   - 1+ +1  1  0  1+
+       |          | |                  | |                | |          |
+       |1  2  2  2| |- 1  - 5  - 4  - 4| | 0   2   2    1 | |1  2  1  2|
+      [|          |,|                  |,|                |,|          |]
+       |1  2  2  2| | 0   - 4  - 3  - 3| | 0   2   0   - 1| |0  1  2  3|
+       |          | |                  | |                | |          |
+       +1  2  2  2+ + 0   - 4  - 3  - 3+ +- 1  1  - 1  - 2+ +1  2  3  4+
+
+   unit()$A
+      this algebra has no unit
+
+   biRank  a
+      4
+
+   leftRank a
+      4
+
+   doubleRank a
+      4
+
+   rightRank a
+      4
+
+   weakBiRank a
+      4
+
+   basisOfCenter()$AP
+
+      [e ]
+        3
+
+   basisOfLeftNucleus()$AP
+
+      [e ]
+        3
+
+   basisOfNucleus()$AP
+
+      [e ]
+        3
+
+   basisOfRightNucleus()$AP
+
+      [e ]
+        3
+
+   basisOfCentroid()$AP
+
+       +0  0  0  0+ +1  0  0  0+
+       |          | |          |
+       |0  0  0  0| |0  1  0  0|
+      [|          |,|          |]
+       |0  0  0  0| |0  0  1  0|
+       |          | |          |
+       +1  0  0  0+ +0  0  0  1+
+
+   basisOfCommutingElements()$AP
+
+       [e ,e ,e ,e ]
+         3  2  1  0
+
+   basisOfLeftNucloid()$AP
+
+       +0  0  0  0+ +1  0  0  0+
+       |          | |          |
+       |0  0  0  0| |0  1  0  0|
+      [|          |,|          |]
+       |0  0  0  0| |0  0  1  0|
+       |          | |          |
+       +1  0  0  0+ +0  0  0  1+
+
+   basisOfMiddleNucleus()$AP
+
+      [e ]
+        3
+
+   basisOfRightNucloid()$AP
+
+       +0  0  0  0+ +1  0  0  0+
+       |          | |          |
+       |0  0  0  0| |0  1  0  0|
+      [|          |,|          |]
+       |0  0  0  0| |0  0  1  0|
+       |          | |          |
+       +1  0  0  0+ +0  0  0  1+
+
+See Also:
+o )show AlgebraGivenByStructuralConstants
+
+\end{chunk}
+\begin{chunk}{coerce.help}
+====================================================================
+coerce from AlgebraGivenByStructuralConstants (ALGSC)
+====================================================================
+
+NAME
+====
+
+coerce
+
+DOMAIN
+======
+
+AlgebraGivenByStructuralConstants (ALGSC)
+
+SYNOPSYS
+========
+
+  coerce : Vector R -> %
+
+DESCRIPTION
+===========
+
+  coerce(v) converts a vector to a member of the algebra by forming
+  by forming a linear combination with the basis element. Note: the
+  vector is assumed to have length equal to the dimension of the
+  algebra
+
+ARGUMENTS
+=========
+
+  Vector R where R is Field
+
+RETURN VALUE
+============
+
+  An element of the domain
+
+EXAMPLES
+========
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+SEE ALSO
+========
 
-See Also:
 o )show AlgebraGivenByStructuralConstants
+o )d op coerce
 
 \end{chunk}
 
diff --git a/books/bookvolbib.pamphlet b/books/bookvolbib.pamphlet
index 5ca5716..c417014 100644
--- a/books/bookvolbib.pamphlet
+++ b/books/bookvolbib.pamphlet
@@ -20,6 +20,85 @@ paragraph for those unfamiliar with the terms.
 
 \chapter{The Bibliography}
 
+\section{Algebra Documentation References}
+
+\index{W\"orz-Busekros, A.}
+\begin{chunk}{axiom.bib}
+@article{Worz80,
+  author = {W\"orz-Busekros, A.},
+  title = "Algebra in Genetics",
+  publisher = "Springer-Verlag",
+  journal = "Lecture Notes in Biomathematics",
+  volume = "36",
+  year = "1980",
+  comment = "documentation for AlgebraGivenByStructuralConstants"
+}
+
+\end{chunk}
+
+\index{Reed, Mary Lynn}
+\begin{chunk}{axiom.bib}
+@article{Reed97,
+  author = "Reed, Mary Lynn",
+  title = "Algebraic Structure of Genetic Inheritance",
+  journal = "Bulletin of the American Mathematical Society",
+  year = "1997",
+  volume = "34",
+  number = "2",
+  month = "April",
+  pages = "107--130",
+  paper = "Reed97.pdf",
+  comment = "documentation for AlgebraGivenByStructuralConstants",
+  url="http://www.ams.org/bull/1997-34-02/S0273-0979-97-00712-X/S0273-0979-97-00712-X.pdf",
+  abstract =
+   "In this paper we will explore the nonassociative algebraic structure
+    that naturally ocurs as genetic informatin gets passed down through
+    the generations. While modern understanding of genetic inheritance
+    initiated with the theories of Charles Darwin, it was the Augustinian
+    monk Gregor Mendel who began to uncover the mathematical nature of the
+    subject. In fact, the symbolism Mendel used to describe his first
+    results (e.g. see his 1866 paper {\sl Experiments in
+    Plant-Hybridization} is quite algebraically suggestive. Seventy four
+    years later, I.M.H. Etherington introduced the formal language of
+    abstract algebra to the study of genetics in his series of seminal
+    papers. In this paper we will discuss the concepts of genetics that
+    suggest the underlying algebraic structure of inheritance, and we will
+    give a brief overview of the algebras which arise in genetics and some
+    of their basi properties and relationships. With the popularity of
+    biologically motivated mathematics continuing to rise, we offer this
+    survey article as another example of the breadth of mathematics that
+    has biological significance. The most comprehensive reference for the
+    mathematical research done in this area (through 1980) is
+    W\:orz-Busekros."
+}
+
+\end{chunk}
+
+\index{Gonshor, H.}
+\begin{chunk}{axiom.bib}
+@article{Gons71,
+  author = "Gonshor, H.",
+  title = "Contributions to Genetic Algebras",
+  journal = "Proc. Edinburgh Mathmatical Society (Series 2)",
+  volume = "17",
+  number = "4",
+  month = "December",
+  year = "1971",
+  issn = "1464-3839",
+  pages = "289--298",
+  doi = "10.1017/S0013091500009548",
+  url = "http://journals.cambridge.org/article_S0013091500009548",
+  comment = "documentation for AlgebraGivenByStructuralConstants",
+  abstract =
+    "Etherington introduced certain algebraic methods into the study of
+    population genetics. It was noted that algebras arising in genetic
+    systems tend to have certain abstract properties and that these can be
+    used to give elegant proofs of some classical stability theorems in
+    population genetics."
+}
+
+\end{chunk}
+
 \section{Linear Algebra} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \index{Kaltofen, Erich}
diff --git a/changelog b/changelog
index 1a98472..297e140 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20141116 tpd src/axiom-website/patches.html 20141116.02.tpd.patch
+20141116 tpd books/bookvol10.3 help for AlgebraGivenByStructuralConstants
 20141116 tpd src/axiom-website/patches.html 20141116.01.tpd.patch
 20141116 tpd books/bookvol10.3 prototype man-page style help for functions
 20141113 tpd src/axiom-website/patches.html 20141113.01.tpd.patch
diff --git a/patch b/patch
index ac660fb..d30d487 100644
--- a/patch
+++ b/patch
@@ -1,4 +1,6 @@
-books/bookvol10.3 prototype man-page style help for functions
+books/bookvol10.3 help file for AlgebraGivenByStructuralConstants (ALGSC)
+
+AlgebraGivenByStructuralConstants (ALGSC) help file
+coerce from ALGSC help file
 
-Axiom needs function-level help files. Prototype these for DHMATRIX.
 
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 31a3613..f301dbe 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -4702,6 +4702,8 @@ books/bookvol5 make obj fns into macros for performance<br/>
 books/bookvol5 inline object structures using macros<br/>
 <a href="patches/20141116.01.tpd.patch">20141116.01.tpd.patch</a>
 books/bookvol10.3 prototype man-page style help for functions<br/>
+<a href="patches/20141116.02.tpd.patch">20141116.02.tpd.patch</a>
+books/bookvol10.3 help file for AlgebraGivenByStructuralConstants<br/>
  </body>
 </html>
 
