|  |  | last edited 14 years ago by Bill Page | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ||
| Editor: Bill Page Time: 2011/02/15 23:29:55 GMT-8 | ||
| Note: clean up notation | ||
changed: -An n-dimensional algebra is represented by a (1,2)-tensor An n-dimensional algebra is represented by a (2,1)-tensor changed: -Given two vectors $U=\{ u_i \}$ and $V=\{ v_j \}$ -\begin{axiom} -U:T := unravel([script(u,[[i]]) for i in 1..n]) -V:T := unravel([script(v,[[i]]) for i in 1..n]) -\end{axiom} -the tensor 'Y' operates on their tensor product to -yield a vector $W=\{ w_k = {y_k}^{ji} u_i v_j \}$ -\begin{axiom} -W:=contract(contract(Y,3,product(U,V),1),2,3) -\end{axiom} -Diagram:: - - U V - 2i 3j Given two vectors $P=\{ p_i \}$ and $Q=\{ q_j \}$ \begin{axiom} P:T := unravel([script(p,[[i]]) for i in 1..n]) Q:T := unravel([script(q,[[i]]) for i in 1..n]) \end{axiom} the tensor $Y$ operates on their tensor product to yield a vector $R=\{ r_k = {y_k}^{ji} p_i q_j \}$ \begin{axiom} R:=contract(contract(Y,3,product(P,Q),1),2,3) \end{axiom} Pictorially:: Q P 2j 3i changed: - W - -or in a more convenient notation: -\begin{axiom} -W:=(Y*U)*V -\end{axiom} -The algebra 'Y' is commutative if the following tensor R In Axiom we may use the more convenient tensor inner product denoted by '*' that combines tensor product with a contraction on the last index of the first tensor and the first index of the second tensor. \begin{axiom} R:=(Y*P)*Q \end{axiom} An algebra $Y$ is commutative if the tensor $\Pi = \{ {\pi_k}^{ji} = {y_k}^{ji}-{y^k}^{ij} \}$ changed: -KK:=Y-reindex(Y,[1,3,2]) XY:=Y-reindex(Y,[1,3,2]) changed: -KB:=groebner(ravel(KK)) -\end{axiom} -The algebra 'Y' is anti-commutative if the following tensor groebner(ravel(XY)) \end{axiom} The algebra 'Y' is anti-commutative if the tensor $\Xi = \{ {\xi_k}^{ji} = {y_k}^{ji}+{y^k}^{ij} \}$ changed: -AK:=Y+reindex(Y,[1,3,2]) XX:=Y+reindex(Y,[1,3,2]) changed: -KA:=groebner(ravel(AK)) groebner(ravel(XX)) changed: -$A=\{ {a_s}^{kji} = {y_s}^{kr} {y_r}^{ji} - {y_r}^{kj} {y_s}^{ri} \}$ $\Psi = \{ {\psi_s}^{kji} = {y_s}^{kr} {y_r}^{ji} - {y_s}^{ri} {y_r}^{kj} \}$ changed: -AA := reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2])-Y*Y; ravel(AA) -\end{axiom} - -The Jacobi identity requires the following tensor to be zero:: YY := reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2])-Y*Y; ravel(YY) \end{axiom} The Jacobi identity requires the following (3,1)-tensor $\Phi = \{ {\phi_s}^{kji} = {y_s}^{kr} {y_r}^{ji} - {y_s}^{ri} {y_r}^{kj} - {y_s}^{ri} {y_r}^{jk} \}$ to be zero:: changed: -BA := AA - reindex(contract(Y,1,Y,2),[3,1,4,2]); ravel(BA) -\end{axiom} -A scalar product is denoted by $U = \{ u^{ij} \}$ YYX := YY - reindex(contract(Y,1,Y,2),[3,1,4,2]); ravel(XYY) \end{axiom} A scalar product is denoted by the (2,0)-tensor $U = \{ u^{ij} \}$ changed: - We say that the scalar product is "associative" if the following - tensor equation holds:: We say that the scalar product is "associative" if the tensor equation holds:: changed: -\begin{axiom} -UA := reindex(reindex(U,[2,1])*reindex(Y,[1,3,2]),[3,2,1])-U*Y In other words, if the following tensor is zero $ \Omega = \{ \omega^{kji} = {Y_r}^{kj} U^{ri} - U^{kr} {Y_r}^{ji} \} $ \begin{axiom} YU := reindex(reindex(U,[2,1])*reindex(Y,[1,3,2]),[3,2,1])-U*Y changed: -K := jacobian(ravel(UA),concat(map(variables,ravel(Y)))::List Symbol); -YY := transpose matrix [concat(map(variables,ravel(Y)))::List Symbol]; -K::OutputForm * YY::OutputForm = 0 -\end{axiom} -The matrix 'K' transforms the coefficients of the tensor 'Y' -into coefficients of the tensor 'UA'. We are looking for -coefficients of the tensor 'U' such that 'K' transforms 'Y' -into 'UA=0' for any 'Y'. K := jacobian(ravel(YU),concat(map(variables,ravel(Y)))::List Symbol); yy := transpose matrix [concat(map(variables,ravel(Y)))::List Symbol]; K::OutputForm * yy::OutputForm = 0 \end{axiom} The matrix 'K' transforms the coefficients of the tensor $Y$ into coefficients of the tensor $\Omega$. We are looking for coefficients of the tensor $U$ such that 'K' transforms the tensor $Y$ into $\Omega=0$ for any $Y$. changed: -UAS:T := unravel(map(x+->subst(x,U[2,1]=U[1,2]),ravel UA)) ---solve(ravel(UAS),removeDuplicates concat map(variables,ravel(US))) -KS := jacobian(ravel(UAS),concat(map(variables,ravel(Y)))::List Symbol); YUS:T := unravel(map(x+->subst(x,U[2,1]=U[1,2]),ravel YU)) KS := jacobian(ravel(YUS),concat(map(variables,ravel(Y)))::List Symbol); changed: -UASS:T := unravel(map(x+->subst(x,SS),ravel UAS)) -\end{axiom} - -\begin{axiom} -J := jacobian(ravel(UA),concat(map(variables,ravel(U)))::List Symbol); -UU := transpose matrix [concat(map(variables,ravel(U)))::List Symbol]; -J::OutputForm * UU::OutputForm = 0 -\end{axiom} -The matrix 'J' transforms the coefficients of the tensor 'U' -into coefficients of the tensor 'UA'. We are looking for -coefficients of the tensor 'Y' such that 'J' transforms 'U' -into 'UA=0' for any 'U'. UASS:T := unravel(map(x+->subst(x,SS),ravel YUS)) \end{axiom} \begin{axiom} J := jacobian(ravel(YU),concat(map(variables,ravel(U)))::List Symbol); uu := transpose matrix [concat(map(variables,ravel(U)))::List Symbol]; J::OutputForm * uu::OutputForm = 0 \end{axiom} The matrix 'J' transforms the coefficients of the tensor $U$ into coefficients of the tensor $\Omega$. We are looking for coefficients of the tensor $Y$ such that 'J' transforms the tensor $U$ into $\Omega=0$ for any $U$. changed: -in?(JP,ideal ravel AA) -in?(JP,ideal ravel KK) -in?(JP,ideal ravel AK) -in?(JP,ideal ravel BA) -\end{axiom} in?(JP,ideal ravel YY) -- associative in?(JP,ideal ravel XY) -- commutative in?(JP,ideal ravel XX) -- anti-commutative in?(JP,ideal ravel YYX) -- Jacobi identity \end{axiom}
An n-dimensional algebra is represented by a (2,1)-tensor
 viewed as an operator with two inputs
viewed as an operator with two inputs i,j and one
output k. For example in 2 dimensions
n:=2
|  | (1) | 
T:=CartesianTensor(1,n, FRAC POLY INT) 
|  | (2) | 
Y:T := unravel(concat concat [[[script(y,[[k], [j, i]]) for i in 1..n] for j in 1..n] for k in 1..n] ) 
|  | (3) | 
Given two vectors  and
 and  
P:T := unravel([script(p,[[i]]) for i in 1..n]) 
| ![\label{eq4}\left[{p_{1}}, \:{p_{2}}\right] 
\label{eq4}\left[{p_{1}}, \:{p_{2}}\right]](images/7584081443386372947-16.0px.png) | (4) | 
Q:T := unravel([script(q,[[i]]) for i in 1..n]) 
| ![\label{eq5}\left[{q_{1}}, \:{q_{2}}\right] 
\label{eq5}\left[{q_{1}}, \:{q_{2}}\right]](images/648848256045812580-16.0px.png) | (5) | 
the tensor  operates on their tensor product to
yield a vector
 operates on their tensor product to
yield a vector  
R:=contract(contract(Y,3, product(P, Q), 1), 2, 3) 
| ![\label{eq6}\begin{array}{@{}l}
\displaystyle
\left[{{{\left({{y_{1}^{2, \: 2}}\ {p_{2}}}+{{y_{1}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{1}^{1, \: 2}}\ {p_{2}}}+{{y_{1}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}, \: \right.
\
\
\displaystyle
\left.{{{\left({{y_{2}^{2, \: 2}}\ {p_{2}}}+{{y_{2}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{2}^{1, \: 2}}\ {p_{2}}}+{{y_{2}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}\right] 
 
\label{eq6}\begin{array}{@{}l}
\displaystyle
\left[{{{\left({{y_{1}^{2, \: 2}}\ {p_{2}}}+{{y_{1}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{1}^{1, \: 2}}\ {p_{2}}}+{{y_{1}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}, \: \right.
\
\
\displaystyle
\left.{{{\left({{y_{2}^{2, \: 2}}\ {p_{2}}}+{{y_{2}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{2}^{1, \: 2}}\ {p_{2}}}+{{y_{2}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}\right]](images/275896176371062534-16.0px.png) | (6) | 
Pictorially:
  Q   P
  2j  3i
   \ /
    |
    1k
    R
In Axiom we may use the more convenient tensor inner
product denoted by * that combines tensor product with
a contraction on the last index of the first tensor and
the first index of the second tensor.
R:=(Y*P)*Q
| ![\label{eq7}\begin{array}{@{}l}
\displaystyle
\left[{{{\left({{y_{1}^{2, \: 2}}\ {p_{2}}}+{{y_{1}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{1}^{1, \: 2}}\ {p_{2}}}+{{y_{1}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}, \: \right.
\
\
\displaystyle
\left.{{{\left({{y_{2}^{2, \: 2}}\ {p_{2}}}+{{y_{2}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{2}^{1, \: 2}}\ {p_{2}}}+{{y_{2}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}\right] 
 
\label{eq7}\begin{array}{@{}l}
\displaystyle
\left[{{{\left({{y_{1}^{2, \: 2}}\ {p_{2}}}+{{y_{1}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{1}^{1, \: 2}}\ {p_{2}}}+{{y_{1}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}, \: \right.
\
\
\displaystyle
\left.{{{\left({{y_{2}^{2, \: 2}}\ {p_{2}}}+{{y_{2}^{2, \: 1}}\ {p_{1}}}\right)}\ {q_{2}}}+{{\left({{y_{2}^{1, \: 2}}\ {p_{2}}}+{{y_{2}^{1, \: 1}}\ {p_{1}}}\right)}\ {q_{1}}}}\right]](images/2742154402620436565-16.0px.png) | (7) | 
An algebra  is commutative if the tensor
 is commutative if the tensor
 (the commutator) is zero:
(the commutator) is zero:
   Y  -  X
         Y
XY:=Y-reindex(Y,[1, 3, 2]) 
|  | (8) | 
A basis for the ideal defined by the coefficients of the commutator is given by:
groebner(ravel(XY))
| ![\label{eq9}\left[{{y_{2}^{2, \: 1}}-{y_{2}^{1, \: 2}}}, \:{{y_{1}^{2, \: 1}}-{y_{1}^{1, \: 2}}}\right] 
\label{eq9}\left[{{y_{2}^{2, \: 1}}-{y_{2}^{1, \: 2}}}, \:{{y_{1}^{2, \: 1}}-{y_{1}^{1, \: 2}}}\right]](images/4703718489314954471-16.0px.png) | (9) | 
The algebra Y is anti-commutative if the tensor
 (the anti-commutator) is zero:
(the anti-commutator) is zero:
   Y  +  X
         Y
XX:=Y+reindex(Y,[1, 3, 2]) 
|  | (10) | 
A basis for the ideal defined by the coefficients of the anti-commutator is given by:
groebner(ravel(XX))
| ![\label{eq11}\left[{y_{2}^{2, \: 2}}, \:{{y_{2}^{2, \: 1}}+{y_{2}^{1, \: 2}}}, \:{y_{2}^{1, \: 1}}, \:{y_{1}^{2, \: 2}}, \:{{y_{1}^{2, \: 1}}+{y_{1}^{1, \: 2}}}, \:{y_{1}^{1, \: 1}}\right] 
\label{eq11}\left[{y_{2}^{2, \: 2}}, \:{{y_{2}^{2, \: 1}}+{y_{2}^{1, \: 2}}}, \:{y_{2}^{1, \: 1}}, \:{y_{1}^{2, \: 2}}, \:{{y_{1}^{2, \: 1}}+{y_{1}^{1, \: 2}}}, \:{y_{1}^{1, \: 1}}\right]](images/8890505784505078085-16.0px.png) | (11) | 
An algebra is associative if:
  Y    =    Y
   Y       Y
  Note: right figure is mirror image of left!
  2  3 6   2 5  6      2  3  4
   \/ /     \ \/        \ | /
    \/   =   \/    =     \|/
     \       /            |
      4     1             1
In other words an algebra is associative if and only
if the following (3,1)-tensor
 is zero.
is zero.
YY := reindex(reindex(Y,[1, 3, 2])*reindex(Y, [1, 3, 2]), [1, 4, 3, 2])-Y*Y; ravel(YY) 
| ![\label{eq12}\begin{array}{@{}l}
\displaystyle
\left[{{\left({y_{1}^{2, \: 1}}-{y_{1}^{1, \: 2}}\right)}\ {y_{2}^{1, \: 1}}}, \:{-{{y_{1}^{1, \: 2}}\ {y_{2}^{1, \: 2}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{1}^{1, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 1}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{1, \: 1}}\ {y_{1}^{2, \: 1}}}+{{y_{1}^{1, \: 1}}\ {y_{1}^{1, \: 2}}}}, \right.
\
\
\displaystyle
\left.\:{-{{y_{1}^{1, \: 2}}\ {y_{2}^{2, \: 2}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{1, \: 1}}\ {y_{1}^{2, \: 2}}}+{{y_{1}^{1, \: 2}}^2}}, \: \right.
\
\
\displaystyle
\left.{{{y_{1}^{2, \: 1}}\ {y_{2}^{2, \: 1}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \:{{{y_{1}^{2, \: 2}}\ {y_{2}^{2, \: 1}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 2}}}}, \: \right.
\
\
\displaystyle
\left.{{{y_{1}^{2, \: 1}}\ {y_{2}^{2, \: 2}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{1, \: 1}}\ {y_{1}^{2, \: 2}}}-{{y_{1}^{2, \: 1}}^2}}, \: \right.
\
\
\displaystyle
\left.{{\left(-{y_{1}^{2, \: 1}}+{y_{1}^{1, \: 2}}\right)}\ {y_{1}^{2, \: 2}}}, \:{{{y_{2}^{1, \: 1}}\ {y_{2}^{2, \: 1}}}-{{y_{2}^{1, \: 1}}\ {y_{2}^{1, \: 2}}}}, \: \right.
\
\
\displaystyle
\left.{{{y_{2}^{1, \: 1}}\ {y_{2}^{2, \: 2}}}-{{y_{2}^{1, \: 2}}^2}+{{y_{1}^{1, \: 1}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{1, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{{\left(-{y_{1}^{2, \: 1}}+{y_{1}^{1, \: 2}}\right)}\ {y_{2}^{1, \: 1}}}, \:{{{y_{1}^{1, \: 2}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{2}^{1, \: 1}}\ {y_{2}^{2, \: 2}}}+{{y_{2}^{2, \: 1}}^2}-{{y_{1}^{1, \: 1}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 1}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{{{\left({y_{2}^{2, \: 1}}-{y_{2}^{1, \: 2}}\right)}\ {y_{2}^{2, \: 2}}}-{{y_{1}^{1, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 1}}\ {y_{2}^{1, \: 2}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{1}^{2, \: 1}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{1}^{2, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 2}}}}\right] 
 
\label{eq12}\begin{array}{@{}l}
\displaystyle
\left[{{\left({y_{1}^{2, \: 1}}-{y_{1}^{1, \: 2}}\right)}\ {y_{2}^{1, \: 1}}}, \:{-{{y_{1}^{1, \: 2}}\ {y_{2}^{1, \: 2}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{1}^{1, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 1}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{1, \: 1}}\ {y_{1}^{2, \: 1}}}+{{y_{1}^{1, \: 1}}\ {y_{1}^{1, \: 2}}}}, \right.
\
\
\displaystyle
\left.\:{-{{y_{1}^{1, \: 2}}\ {y_{2}^{2, \: 2}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{1, \: 1}}\ {y_{1}^{2, \: 2}}}+{{y_{1}^{1, \: 2}}^2}}, \: \right.
\
\
\displaystyle
\left.{{{y_{1}^{2, \: 1}}\ {y_{2}^{2, \: 1}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \:{{{y_{1}^{2, \: 2}}\ {y_{2}^{2, \: 1}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 2}}}}, \: \right.
\
\
\displaystyle
\left.{{{y_{1}^{2, \: 1}}\ {y_{2}^{2, \: 2}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{1, \: 1}}\ {y_{1}^{2, \: 2}}}-{{y_{1}^{2, \: 1}}^2}}, \: \right.
\
\
\displaystyle
\left.{{\left(-{y_{1}^{2, \: 1}}+{y_{1}^{1, \: 2}}\right)}\ {y_{1}^{2, \: 2}}}, \:{{{y_{2}^{1, \: 1}}\ {y_{2}^{2, \: 1}}}-{{y_{2}^{1, \: 1}}\ {y_{2}^{1, \: 2}}}}, \: \right.
\
\
\displaystyle
\left.{{{y_{2}^{1, \: 1}}\ {y_{2}^{2, \: 2}}}-{{y_{2}^{1, \: 2}}^2}+{{y_{1}^{1, \: 1}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{1, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{{\left(-{y_{1}^{2, \: 1}}+{y_{1}^{1, \: 2}}\right)}\ {y_{2}^{1, \: 1}}}, \:{{{y_{1}^{1, \: 2}}\ {y_{2}^{1, \: 2}}}-{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{2}^{1, \: 1}}\ {y_{2}^{2, \: 2}}}+{{y_{2}^{2, \: 1}}^2}-{{y_{1}^{1, \: 1}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 1}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{{{\left({y_{2}^{2, \: 1}}-{y_{2}^{1, \: 2}}\right)}\ {y_{2}^{2, \: 2}}}-{{y_{1}^{1, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 1}}\ {y_{2}^{1, \: 2}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{1}^{2, \: 1}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 1}}}}, \: \right.
\
\
\displaystyle
\left.{-{{y_{1}^{2, \: 2}}\ {y_{2}^{2, \: 1}}}+{{y_{1}^{2, \: 2}}\ {y_{2}^{1, \: 2}}}}\right]](images/7890066487968676320-16.0px.png) | (12) | 
The Jacobi identity requires the following (3,1)-tensor
 to be zero:
to be zero:
  Y    -    Y  -   X
   Y       Y       Y
                  Y
  2    3 6   2 5    6   2 6  3   
   \  / /     \ \  /     \ \/   
    \/ /       \ \/       \/\   
     \/    -    \/    -    \/   
      \         /           \   
       4       1             4  
YYX := YY - reindex(contract(Y,1, Y, 2), [3, 1, 4, 2]); ravel(XYY) 
There are 1 exposed and 0 unexposed library operations named ravel having 1 argument(s) but none was determined to be applicable. Use HyperDoc Browse,or issue )display op ravel to learn more about the available operations. Perhaps package-calling the operation or using coercions on the arguments will allow you to apply the operation. 
Cannot find a definition or applicable library operation named ravel with argument type(s) Variable(XYY)
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need. 
A scalar product is denoted by the (2,0)-tensor
 
U:T := unravel(concat [[script(u,[[], [j, i]]) for i in 1..n] for j in 1..n] ) 
|  | (13) | 
We say that the scalar product is "associative" if the tensor equation holds:
    Y   =   Y
     U     U
  In other words, if the following tensor is zero
  
YU := reindex(reindex(U,[2, 1])*reindex(Y, [1, 3, 2]), [3, 2, 1])-U*Y 
|  | (14) | 
An algebra with a non-degenerate associative scalar product is called ''pre-Frobenius''.
We may consider the problem where multiplication Y is given,
and look for all associative scalar products U = U(Y) or we
may consider an scalar product U as given, and look for all
algebras Y=Y(U) such that the scalar product is associative. 
This problem can be solved using linear algebra.
)expose MCALCFN
MultiVariableCalculusFunctions is now explicitly exposed in frame initial K := jacobian(ravel(YU),concat(map(variables, ravel(Y)))::List Symbol); 
yy := transpose matrix [concat(map(variables,ravel(Y)))::List Symbol]; 
K::OutputForm * yy::OutputForm = 0
|  | (15) | 
The matrix K transforms the coefficients of the tensor  into coefficients of the tensor
into coefficients of the tensor  . We are looking for
coefficients of the tensor
. We are looking for
coefficients of the tensor  such that
 such that K transforms the
tensor  into
 into  for any
 for any  .
.
A necessary condition for the equation to have a non-trivial
solution is that the matrix K be degenerate.
The scalar product of all 2-dimensional pre-Frobenius algebras is symmetric.
Proof: Consider the determinant of the matrix K above.
Kd:DMP(concat map(variables,ravel(U)), FRAC INT) := factor determinant(K) 
|  | (16) | 
The scalar product must also be non-degenerate
Ud:DMP(concat map(variables,ravel(U)), FRAC INT) := determinant [[U[i, j] for j in 1..n] for i in 1..n] 
|  | (17) | 
therefore U must be symmetric.
nthFactor(Kd,1) 
|  | (18) | 
US:T := unravel(map(x+->subst(x,U[2, 1]=U[1, 2]), ravel U)) 
|  | (19) | 
All 2-dimensional algebras with associative scalar product are symmetric.
Proof: The basis of the null space of the symmetric 
K matrix are all symmetric
YUS:T := unravel(map(x+->subst(x,U[2, 1]=U[1, 2]), ravel YU)) 
|  | (20) | 
KS := jacobian(ravel(YUS),concat(map(variables, ravel(Y)))::List Symbol); 
NS:=nullSpace(KS)
| ![\label{eq21}\begin{array}{@{}l}
\displaystyle
\left[{\left[{{{u^{1, \: 1}}^2}\over{{u^{1, \: 2}}^2}}, \:{{u^{1, \: 1}}\over{u^{1, \: 2}}}, \:{{u^{1, \: 1}}\over{u^{1, \: 2}}}, \: 1, \: 0, \: 0, \: 0, \: 0 \right]}, \: \right.
\
\
\displaystyle
\left.{\left[ -{{u^{2, \: 2}}\over{u^{1, \: 2}}}, \: 0, \: 0, \: 0, \: 1, \: 0, \: 0, \: 0 \right]}, \: \right.
\
\
\displaystyle
\left.{\left[{{-{{u^{1, \: 1}}\ {u^{2, \: 2}}}+{{u^{1, \: 2}}^2}}\over{{u^{1, \: 2}}^2}}, \: -{{u^{2, \: 2}}\over{u^{1, \: 2}}}, \: -{{u^{2, \: 2}}\over{u^{1, \: 2}}}, \: 0, \: 0, \: 1, \: 1, \: 0 \right]}, \: \right.
\
\
\displaystyle
\left.{\left[{{u^{1, \: 1}}\over{u^{1, \: 2}}}, \: 1, \: 1, \: 0, \: 0, \: 0, \: 0, \: 1 \right]}\right] 
 
\label{eq21}\begin{array}{@{}l}
\displaystyle
\left[{\left[{{{u^{1, \: 1}}^2}\over{{u^{1, \: 2}}^2}}, \:{{u^{1, \: 1}}\over{u^{1, \: 2}}}, \:{{u^{1, \: 1}}\over{u^{1, \: 2}}}, \: 1, \: 0, \: 0, \: 0, \: 0 \right]}, \: \right.
\
\
\displaystyle
\left.{\left[ -{{u^{2, \: 2}}\over{u^{1, \: 2}}}, \: 0, \: 0, \: 0, \: 1, \: 0, \: 0, \: 0 \right]}, \: \right.
\
\
\displaystyle
\left.{\left[{{-{{u^{1, \: 1}}\ {u^{2, \: 2}}}+{{u^{1, \: 2}}^2}}\over{{u^{1, \: 2}}^2}}, \: -{{u^{2, \: 2}}\over{u^{1, \: 2}}}, \: -{{u^{2, \: 2}}\over{u^{1, \: 2}}}, \: 0, \: 0, \: 1, \: 1, \: 0 \right]}, \: \right.
\
\
\displaystyle
\left.{\left[{{u^{1, \: 1}}\over{u^{1, \: 2}}}, \: 1, \: 1, \: 0, \: 0, \: 0, \: 0, \: 1 \right]}\right]](images/5537997349269801015-16.0px.png) | (21) | 
SS:=map((x,y)+->x=y, concat map(variables, ravel Y), entries reduce(+, [p[i]*NS.i for i in 1..#NS])) 
|  | (22) | 
YS:T := unravel(map(x+->subst(x,SS), ravel Y)) 
|  | (23) | 
This is a 4-parameter family of 2-d pre-Frobenius algebras with a given admissible (i.e. symmetric) scalar product.
UASS:T := unravel(map(x+->subst(x,SS), ravel YUS)) 
|  | (24) | 
J := jacobian(ravel(YU),concat(map(variables, ravel(U)))::List Symbol); 
uu := transpose matrix [concat(map(variables,ravel(U)))::List Symbol]; 
J::OutputForm * uu::OutputForm = 0
|  | (25) | 
The matrix J transforms the coefficients of the tensor  into coefficients of the tensor
into coefficients of the tensor  . We are looking for
coefficients of the tensor
. We are looking for
coefficients of the tensor  such that
 such that J transforms the
tensor  into
 into  for any
 for any  .
.
A necessary condition for the equation to have a non-trivial
solution is that all 70 of the 4x4 sub-matrices of J are
degenerate. To this end we can form the polynomial ideal of
the determinants of these sub-matrices.
JP:=ideal concat concat concat
  [[[[ determinant(
    matrix([row(J,
#generators(%)
|  | (26) | 
A 2-d algebra is pre-Frobenius if it is associative, commutative, anti-commutative or if it satisfies the Jacobi identity.
Proof
in?(JP,ideal ravel YY) -- associative 
|  | (27) | 
in?(JP,ideal ravel XY) -- commutative 
|  | (28) | 
in?(JP,ideal ravel XX) -- anti-commutative 
|  | (29) | 
in?(JP,ideal ravel YYX) -- Jacobi identity 
|  | (30) |