login  home  contents  what's new  discussion  bug reports help  links  subscribe  changes  refresh  edit

# Edit detail for Frobenius Algebra, Vector Spaces and Polynomial Ideals revision 3 of 3

 1 2 3 Editor: Bill Page Time: 2011/05/13 20:57:07 GMT-7 Note: Use new LinearOperator domain

changed:
-An n-dimensional algebra is represented by a (2,1)-tensor
2-d Example

Use LinearOperator (LOP)

\begin{axiom}
)lib CARTEN MONAL PROP LOP
L:=LOP(OVAR ['1,'2], EXPR INT)
-- basis
dx:=basisIn()$L Dx:=basisOut()$L
-- summation
macro Σ(f,b,i) == reduce(+,[f*b.i for i in 1..#b])
-- identity
I:L:=[1]
-- twist
X:L:=[2,1]
-- co-evaluation
Λ:L:=co(1)
-- evaluation
V:L:=ev(1)
\end{axiom}

Algebra

An n-dimensional algebra is represented by a (2,1)-tensor

changed:
-\begin{axiom}
-n:=2
-T:=CartesianTensor(1,n,FRAC POLY INT)
-Y:T := unravel(concat concat
-  [[[script(y,[[i,j],[k]])
-    for i in 1..n]
-      for j in 1..n]
-        for k in 1..n]
-          )
-\end{axiom}
-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])

\begin{axiom}
Y:=Σ(Σ(Σ(script(y,[[i,j],[k]]),dx,i),dx,j),Dx,k)
\end{axiom}

Multiplication

Given two vectors $P=\{ p^i \}$ and $Q=\{ q^j \}$

\begin{axiom}
P:=Σ(script(p,[[],[i]]),Dx,i)
Q:=Σ(script(q,[[],[i]]),Dx,i)

changed:
-R:=contract(contract(Y,3,product(P,Q),1),2,3)
R:=(P,Q)/Y

changed:
-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 is said to be *associative* if::
-
-  Y    =    Y
-   Y       Y
-
-**Note:** the right hand side of the equation above is
-implicitly the mirror image of the left hand side::
-
-  i   j   k   i  j     k   i     j  k
-   \  |  /     \/     /     \     \/
-    \ | /       \    /       \    /
-     \|/    =    e  k    -    i  e
-      |           \/           \/
-      |            \           /
-      l             l         l
Associator

An algebra is said to be *associative* if::

Y    =    Y
Y       Y

i   j   k   i  j     k   i     j  k
\  |  /     \/     /     \     \/
\ | /       \    /       \    /
\|/    =    e  k    -    i  e
|           \/           \/
|            \           /
l             l         l

changed:
-\begin{axiom}
-YY := reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2])-Y*Y; ravel(YY)
-\end{axiom}
-
-The algebra $Y$ is *commutative* if::
-
-  Y = Y
-
-  i   j     i  j     j  i
-   \ /   =   \/   -   \/
-    |         \       /
-    k          k     k
\begin{axiom}
YY := (Y,I)/Y - (I,Y)/Y
\end{axiom}

Commutator

The algebra $Y$ is *commutative* if::

Y = Y

i   j     i  j     j  i
\ /   =   \/   -   \/
|         \       /
k          k     k

changed:
-YC:=Y-reindex(Y,[1,3,2])
YC:=Y-(X/Y)

changed:
-The algebra $Y$ is *anti-commutative* if::
-
-  Y = -Y
-
-  i   j     i  j     j  i
-   \ /   =   \/   =   \/
-    |         \       /
-    k          k     k
Anti-commutator

The algebra $Y$ is *anti-commutative* if::

Y = -Y

i   j     i  j     j  i
\ /   =   \/   =   \/
|         \       /
k          k     k

changed:
-YA:=Y+reindex(Y,[1,3,2])
YA:=Y+(X/Y)

changed:
-The *Jacobi identity* is::
-
-            X
-  Y =  Y + Y
-   Y  Y     Y
-
-  i     j     k  i      j     k  i     j      k   i  j   k
-   \    |    /    \    /     /    \     \    /     \  \ /
-    \   |   /      \  /     /      \     \  /       \  0
-     \  |  /        \/     /        \     \/         \/ \
-      \ | /          \    /          \    /           \  \
-       \|/     =      e  k      -     i  e       -     e  j
-        |              \/              \/               \/
-        |               \              /                /
-        l                l            l                 l
Jacobi

The *Jacobi identity* is::

X
Y =  Y + Y
Y  Y     Y

i     j     k  i      j     k  i     j      k   i  j   k
\    |    /    \    /     /    \     \    /     \  \ /
\   |   /      \  /     /      \     \  /       \  0
\  |  /        \/     /        \     \/         \/ \
\ | /          \    /          \    /           \  \
\|/     =      e  k      -     i  e       -     e  j
|              \/              \/               \/
|               \              /                /
l                l            l                 l

changed:
-YX := YY - reindex(contract(Y,1,Y,2),[3,1,4,2]); ravel(YX)
-\end{axiom}
-A scalar product is denoted by the (2,0)-tensor
YX := YY - (I,X)/(Y,I)/Y
\end{axiom}

Scalar Product

A scalar product is denoted by the (2,0)-tensor

changed:
-U:T := unravel(concat
-  [[script(u,[[],[j,i]])
-    for i in 1..n]
-      for j in 1..n]
-        )
-\end{axiom}
U:=Σ(Σ(script(u,[[],[i,j]]),dx,i),dx,j)
\end{axiom}

changed:
-YU := reindex(reindex(U,[2,1])*reindex(Y,[1,3,2]),[3,2,1])-U*Y
YU := (Y,I)/U - (I,Y)/U

changed:
-Ud:DMP(concat map(variables,ravel(U)),FRAC INT) := determinant [[U[i,j] for j in 1..n] for i in 1..n]
Ud:DMP(concat map(variables,ravel(U)),FRAC INT) := determinant [[retract((Dx.i,Dx.j)/U) for j in 1..#Dx] for i in 1..#Dx]

changed:
-US:T := unravel(map(x+->subst(x,U[2,1]=U[1,2]),ravel U))
-\end{axiom}
US:=eval(U,retract((Dx.2,Dx.1)/U)=retract((Dx.1,Dx.2)/U))
\end{axiom}

changed:
-YUS:T :=  reindex(reindex(US,[2,1])*reindex(Y,[1,3,2]),[3,2,1])-US*Y
YUS := (I,Y)/US - (Y,I)/US

changed:
-YS:T := unravel(map(x+->subst(x,SS),ravel Y))
YS:=eval(U,SS)

changed:
-test(unravel(map(x+->subst(x,SS),ravel YUS))$T=0*YU) -\end{axiom} test(eval(YUS,SS)=0*YUS) \end{axiom} changed: - matrix([row(J,i1),row(J,i2),row(J,i3),row(J,i4)])) matrix([row(J,i1),row(J,i2),row(J,i3),row(J,i4)]))::FRAC POLY INT changed: -YYI:=ideal ravel YY; YYI:=ideal(ravel(YY)::List FRAC POLY INT); changed: -YCI:=ideal ravel YC; YCI:=ideal(ravel(YC)::List FRAC POLY INT); changed: -YAI:=ideal ravel YA; YAI:=ideal(ravel(YA)::List FRAC POLY INT); changed: -YXI:=ideal ravel YX; YXI:=ideal(ravel(YX)::List FRAC POLY INT); changed: -Three traces of two graftings of an algebra gives six Three traces of two graftings of an algebra gives six changed: -LS:=contract(Y*Y,1,2) -RS:=reindex(contract(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),1,2),[2,1]) LS:= ( Y Λ )/ _ ( Y I )/ _ V RS:= ( Λ Y )/ _ ( I Y )/ _ V changed: -RD:=contract(Y*Y,1,3) -LD:=reindex(contract(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),1,3),[2,1]) RD:= ( I Λ I ) / _ ( Y X ) / _ ( Y I ) / _ V LD:= ( I Λ I ) / _ ( X Y ) / _ ( I Y ) / _ V changed: -RT:=contract(Y*Y,1,4) -LT:=reindex(contract(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),1,4),[2,1]) RT:= ( Λ I I ) / _ ( I Y I ) / _ ( I Y ) / _ V LT:= ( I I Λ ) / _ ( I Y I ) / _ ( Y I ) / _ V changed: -test(RT=reindex(RT,[2,1])) -test(LT=reindex(LT,[2,1])) test(RT = X/RT) test(LT = X/LT) changed: -in?(ideal ravel(RT-RS),YYI) -in?(ideal ravel(LT-LS),YYI) in?(ideal(ravel(RT-RS)::List FRAC POLY INT),YYI) in?(ideal(ravel(LT-LS)::List FRAC POLY INT),YYI) changed: -in?(ideal ravel(RS),YXI) -in?(ideal ravel(LS),YXI) in?(ideal(ravel(RS)::List FRAC POLY INT),YXI) in?(ideal(ravel(LS)::List FRAC POLY INT),YXI) changed: -in?(ideal ravel(RT+RD),YXI) -\end{axiom} - -From BillPage Fri May 13 11:28:33 -0700 2011 -From: Bill Page -Date: Fri, 13 May 2011 11:28:33 -0700 -Subject: Use new LinearOperator domain -Message-ID: <20110513112833-0700@axiom-wiki.newsynthesis.org> - -SandBoxFrobeniusAlgebra updated in?(ideal(ravel(RT+RD)::List FRAC POLY INT),YXI) \end{axiom}  References See also: ## 2-d Example Use LinearOperator (LOP) fricas )lib CARTEN MONAL PROP LOP CartesianTensor is now explicitly exposed in frame initial CartesianTensor will be automatically loaded when needed from /var/aw/var/LatexWiki/CARTEN.NRLIB/CARTEN Monoidal is now explicitly exposed in frame initial Monoidal will be automatically loaded when needed from /var/aw/var/LatexWiki/MONAL.NRLIB/MONAL Prop is now explicitly exposed in frame initial Prop will be automatically loaded when needed from /var/aw/var/LatexWiki/PROP.NRLIB/PROP LinearOperator is now explicitly exposed in frame initial LinearOperator will be automatically loaded when needed from /var/aw/var/LatexWiki/LOP.NRLIB/LOP L:=LOP(OVAR ['1,'2], EXPR INT)  (1) Type: Type fricas -- basis dx:=basisIn()$L
 (2)
Type: List(LinearOperator(OrderedVariableList([1,2]),Expression(Integer)))
fricas
Dx:=basisOut()\$L
 (3)
Type: List(LinearOperator(OrderedVariableList([1,2]),Expression(Integer)))
fricas
-- summation
macro Σ(f,b,i) == reduce(+,[f*b.i for i in 1..#b])
Type: Void
fricas
-- identity
I:L:=[1]
 (4)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
-- twist
X:L:=[2,1]
 (5)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
-- co-evaluation
Λ:L:=co(1)
 (6)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
-- evaluation
V:L:=ev(1)
 (7)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Algebra

An n-dimensional algebra is represented by a (2,1)-tensor viewed as a linear operator with two inputs and one output . For example in 2 dimensions

fricas
Y:=Σ(Σ(Σ(script(y,[[i,j],[k]]),dx,i),dx,j),Dx,k)
 (8)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Multiplication

Given two vectors and

fricas
P:=Σ(script(p,[[],[i]]),Dx,i)
 (9)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
Q:=Σ(script(q,[[],[i]]),Dx,i)
 (10)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

the tensor operates on their tensor product to yield a vector

fricas
R:=(P,Q)/Y
 (11)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

Pictorially:

  P Q
Y
R

or more explicitly

Pi Qj
\/
\
Rk


## Associator

An algebra is said to be associative if:

    Y    =    Y
Y       Y

i   j   k   i  j     k   i     j  k
\  |  /     \/     /     \     \/
\ | /       \    /       \    /
\|/    =    e  k    -    i  e
|           \/           \/
|            \           /
l             l         l


This requires that the following (3,1)-tensor

 (12)
(associator) is zero.
fricas
YY := (Y,I)/Y - (I,Y)/Y
 (13)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Commutator

The algebra is commutative if:

    Y = Y

i   j     i  j     j  i
\ /   =   \/   -   \/
|         \       /
k          k     k


This requires that the following (2,1)-tensor

 (14)
(commutator) is zero.
fricas
YC:=Y-(X/Y)
 (15)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

A basis for the ideal defined by the coefficients of the commutator is given by:

fricas
groebner(ravel(YC))
 (16)
Type: List(Polynomial(Integer))

## Anti-commutator

The algebra is anti-commutative if:

    Y = -Y

i   j     i  j     j  i
\ /   =   \/   =   \/
|         \       /
k          k     k


This requires that the following (2,1)-tensor

 (17)
(anti-commutator) is zero.
fricas
YA:=Y+(X/Y)
 (18)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

A basis for the ideal defined by the coefficients of the commutator is given by:

fricas
groebner(ravel(YA))
 (19)
Type: List(Polynomial(Integer))

## Jacobi

The Jacobi identity is:

              X
Y =  Y + Y
Y  Y     Y

i     j     k  i      j     k  i     j      k   i  j   k
\    |    /    \    /     /    \     \    /     \  \ /
\   |   /      \  /     /      \     \  /       \  0
\  |  /        \/     /        \     \/         \/ \
\ | /          \    /          \    /           \  \
\|/     =      e  k      -     i  e       -     e  j
|              \/              \/               \/
|               \              /                /
l                l            l                 l


An algebra satisfies the Jacobi identity if and only if the following (3,1)-tensor

 (20)
is zero.

fricas
YX := YY - (I,X)/(Y,I)/Y
 (21)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Scalar Product

A scalar product is denoted by the (2,0)-tensor

fricas
U:=Σ(Σ(script(u,[[],[i,j]]),dx,i),dx,j)
 (22)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Definition 1

We say that the scalar product is associative if the tensor equation holds:

    Y   =   Y
U     U


In other words, if the (3,0)-tensor:

    i  j  k   i  j  k   i  j  k
\ | /     \/  /     \  \/
\|/   =   \ /   -   \ /
0         0         0


 (23)
(three-point function) is zero.

fricas
YU := (Y,I)/U - (I,Y)/U
 (24)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Definition 2

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 or we may consider an scalar product U as given, and look for all algebras such that the scalar product is associative.

This problem can be solved using linear algebra.

fricas
)expose MCALCFN
MultiVariableCalculusFunctions is now explicitly exposed in frame
initial
K := jacobian(ravel(YU),concat(map(variables,ravel(Y)))::List Symbol);
Type: Matrix(Expression(Integer))
fricas
yy := transpose matrix [concat(map(variables,ravel(Y)))::List Symbol];
Type: Matrix(Polynomial(Integer))
fricas
K::OutputForm * yy::OutputForm = 0
 (25)
Type: Equation(OutputForm?)

The matrix K transforms the coefficients of the tensor into coefficients of the tensor . We are looking for coefficients of the tensor such that K transforms the tensor into for any .

A necessary condition for the equation to have a non-trivial solution is that the matrix K be degenerate.

## Theorem 1

All 2-dimensional pre-Frobenius algebras are symmetric.

Proof: Consider the determinant of the matrix K above.

fricas
Kd := factor(determinant(K)::DMP(concat map(variables,ravel(U)),FRAC INT))
 (26)
Type: Factored(DistributedMultivariatePolynomial?([u[;1,1],u[;1,2],u[;2,1],u[;2,2]],Fraction(Integer)))

The scalar product must also be non-degenerate

fricas
Ud:DMP(concat map(variables,ravel(U)),FRAC INT) := determinant [[retract((Dx.i,Dx.j)/U) for j in 1..#Dx] for i in 1..#Dx]
 (27)
Type: DistributedMultivariatePolynomial?([u[;1,1],u[;1,2],u[;2,1],u[;2,2]],Fraction(Integer))

therefore U must be symmetric.

fricas
nthFactor(Kd,1)
 (28)
Type: DistributedMultivariatePolynomial?([u[;1,1],u[;1,2],u[;2,1],u[;2,2]],Fraction(Integer))
fricas
US:=eval(U,retract((Dx.2,Dx.1)/U)=retract((Dx.1,Dx.2)/U))
 (29)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

## Theorem 2

All 2-dimensional algebras with associative scalar product are commutative.

Proof: The basis of the null space of the symmetric K matrix are all symmetric

fricas
YUS := (I,Y)/US - (Y,I)/US
 (30)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
KS := jacobian(ravel(YUS),concat(map(variables,ravel(Y)))::List Symbol);
Type: Matrix(Expression(Integer))
fricas
NS:=nullSpace(KS)
 (31)
Type: List(Vector(Expression(Integer)))
fricas
SS:=map((x,y)+->x=y,concat map(variables,ravel Y),
entries reduce(+,[p[i]*NS.i for i in 1..#NS]))
 (32)
Type: List(Equation(Expression(Integer)))
fricas
YS:=eval(U,SS)
 (33)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))

This defines a 4-parameter family of 2-d pre-Frobenius algebras

fricas
test(eval(YUS,SS)=0*YUS)
 (34)
Type: Boolean

Alternatively we may consider

fricas
J := jacobian(ravel(YU),concat(map(variables,ravel(U)))::List Symbol);
Type: Matrix(Expression(Integer))
fricas
uu := transpose matrix [concat(map(variables,ravel(U)))::List Symbol];
Type: Matrix(Polynomial(Integer))
fricas
J::OutputForm * uu::OutputForm = 0
 (35)
Type: Equation(OutputForm?)

The matrix J transforms the coefficients of the tensor into coefficients of the tensor . We are looking for coefficients of the tensor such that J transforms the tensor into 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.

fricas
JP:=ideal concat concat concat
[[[[ determinant(
matrix([row(J,i1),row(J,i2),row(J,i3),row(J,i4)]))::FRAC POLY INT
for i4 in (i3+1)..maxRowIndex(J) ]
for i3 in (i2+1)..(maxRowIndex(J)-1) ]
for i2 in (i1+1)..(maxRowIndex(J)-2) ]
for i1 in minRowIndex(J)..(maxRowIndex(J)-3) ];
Type: PolynomialIdeal?(Fraction(Integer),IndexedExponents?(Symbol),Symbol,Polynomial(Fraction(Integer)))
fricas
#generators(%)
 (36)
Type: PositiveInteger?

## Theorem 3

If a 2-d algebra is associative, commutative, anti-commutative or if it satisfies the Jacobi identity then it is a pre-Frobenius algebra.

Proof

Consider the ideals of the associator, commutator, anti-commutator and Jacobi identity

fricas
YYI:=ideal(ravel(YY)::List FRAC POLY INT);
Type: PolynomialIdeal?(Fraction(Integer),IndexedExponents?(Symbol),Symbol,Polynomial(Fraction(Integer)))
fricas
in?(JP,YYI)  -- associative
 (37)
Type: Boolean
fricas
YCI:=ideal(ravel(YC)::List FRAC POLY INT);
Type: PolynomialIdeal?(Fraction(Integer),IndexedExponents?(Symbol),Symbol,Polynomial(Fraction(Integer)))
fricas
in?(JP,YCI)  -- commutative
 (38)
Type: Boolean
fricas
YAI:=ideal(ravel(YA)::List FRAC POLY INT);
Type: PolynomialIdeal?(Fraction(Integer),IndexedExponents?(Symbol),Symbol,Polynomial(Fraction(Integer)))
fricas
in?(JP,YAI)  -- anti-commutative
 (39)
Type: Boolean
fricas
YXI:=ideal(ravel(YX)::List FRAC POLY INT);
Type: PolynomialIdeal?(Fraction(Integer),IndexedExponents?(Symbol),Symbol,Polynomial(Fraction(Integer)))
fricas
in?(JP,YXI) -- Jacobi identity
 (40)
Type: Boolean

## Y-forms

Three traces of two graftings of an algebra gives six (2,0)-forms.

Left snail and right snail:

  LS                    RS

Y /\                    /\ Y
Y  )                  (  Y
\/                    \/

i  j                        j  i
\/                          \/
\    /\              /\    /
e  f  \            /  f  e
\/    \          /    \/
\    /          \    /
f  /            \  f
\/              \/


 (41)

fricas
LS:=
( Y Λ  )/ _
(  Y I )/ _
V
 (42)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
RS:=
(  Λ Y )/ _
( I Y  )/ _
V
 (43)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
test(LS=RS)
 (44)
Type: Boolean

Left and right deer:

   RD                 LD

\ /\/              \/\ /
Y /\              /\ Y
Y  )            (  Y
\/              \/

i            j    i            j
\    /\    /      \    /\    /
\  f  \  /        \  /  f  /
\/    \/          \/    \/
\    /\          /\    /
e  /  \        /  \  e
\/    \      /    \/
\    /      \    /
f  /        \  f
\/          \/


 (45)
Left and right deer forms are identical but different from snails.
fricas
RD:=
(  I Λ I  ) / _
(   Y X   ) / _
(    Y I  ) / _
V
 (46)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
LD:=
(  I Λ I  ) / _
(   X Y   ) / _
(  I Y    ) / _
V
 (47)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
test(LD=RD)
 (48)
Type: Boolean
fricas
test(RD=RS)
 (49)
Type: Boolean
fricas
test(RD=LS)
 (50)
Type: Boolean

Left and right turtles:

  RT                   LT

/\ / /               \ \ /\
(  Y /                 \ Y  )
\  Y                   Y  /
\/                     \/

i     j      i     j
/\    /     /        \     \    /\
/  f  /     /          \     \  f  \
/    \/     /            \     \/    \
\     \    /              \    /     /
\     e  /                \  e     /
\     \/                  \/     /
\    /                    \    /
\  f                      f  /
\/                        \/


 (51)

fricas
RT:=
(  Λ I I ) / _
( I Y I  ) / _
(  I Y   ) / _
V
 (52)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
LT:=
( I I Λ  ) / _
(  I Y I ) / _
(   Y I  ) / _
V
 (53)
Type: LinearOperator(OrderedVariableList([1,2]),Expression(Integer))
fricas
test(LT=RT)
 (54)
Type: Boolean

The turles are symmetric

fricas
test(RT = X/RT)
 (55)
Type: Boolean
fricas
test(LT = X/LT)
 (56)
Type: Boolean

Five of the six forms are independent.

fricas
test(RT=RS)
 (57)
Type: Boolean
fricas
test(RT=LS)
 (58)
Type: Boolean
fricas
test(RT=RD)
 (59)
Type: Boolean
fricas
test(LT=RS)
 (60)
Type: Boolean
fricas
test(LT=LS)
 (61)
Type: Boolean
fricas
test(LT=RD)
 (62)
Type: Boolean

Associativity implies right turtle equals right snail and left turtle equals left snail.

fricas
in?(ideal(ravel(RT-RS)::List FRAC POLY INT),YYI)
 (63)
Type: Boolean
fricas
in?(ideal(ravel(LT-LS)::List FRAC POLY INT),YYI)
 (64)
Type: Boolean

If the Jacobi identity holds then both snails are zero

fricas
in?(ideal(ravel(RS)::List FRAC POLY INT),YXI)
 (65)
Type: Boolean
fricas
in?(ideal(ravel(LS)::List FRAC POLY INT),YXI)
 (66)
Type: Boolean

and right turtle and deer have opposite signs

fricas
in?(ideal(ravel(RT+RD)::List FRAC POLY INT),YXI)
 (67)
Type: Boolean