Obs(4) is a 16 dimensional Frobenius Algrebra
fricas
(1) -> )set output abbreviate on
V := OrderedVariableList [p,q,r,s]
Type: TYPE
fricas
M := FreeMonoid V
Type: TYPE
fricas
gens:List M := enumerate()$V
Type: LIST(FMONOID(OVAR([p,q,r,s])))
fricas
divisible := Record(lm: M,rm: M)
Type: TYPE
fricas
leftDiv(k:Union(divisible,"failed")):M == (k::divisible).lm
   Function declaration leftDiv : Union(Record(lm: FMONOID(OVAR([p,q,r,
      s])),rm: FMONOID(OVAR([p,q,r,s]))),"failed") -> FMONOID(OVAR([p,q
      ,r,s])) has been added to workspace.
Type: VOID
fricas
rightDiv(k:Union(divisible,"failed")):M == (k::divisible).rm
   Function declaration rightDiv : Union(Record(lm: FMONOID(OVAR([p,q,r
      ,s])),rm: FMONOID(OVAR([p,q,r,s]))),"failed") -> FMONOID(OVAR([p,
      q,r,s])) has been added to workspace.
Type: VOID
fricas
K := FRAC POLY INT
Type: TYPE
fricas
MK := FreeModule(K,M)
Type: TYPE
fricas
coeff(x:MK):K == leadingCoefficient(x)
   Function declaration coeff : FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,
      s]))) -> FRAC(POLY(INT)) has been added to workspace.
Type: VOID
fricas
monomial(x:MK):M == leadingMonomial(x)
   Function declaration monomial : FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q
      ,r,s]))) -> FMONOID(OVAR([p,q,r,s])) has been added to workspace.
Type: VOID
fricas
m(x:M):K == subscript('m,[retract(x)::Symbol])
   Function declaration m : FMONOID(OVAR([p,q,r,s])) -> FRAC(POLY(INT))
      has been added to workspace.
Type: VOID
fricas
γ(x:M,y:M):K == subscript('γ,[concat(string retract x, string retract y)::Symbol])
   Function declaration γ : (FMONOID(OVAR([p,q,r,s])), FMONOID(OVAR([p,
      q,r,s]))) -> FRAC(POLY(INT)) has been added to workspace.
Type: VOID
Basis
fricas
basis := concat(gens,concat [[j*i for i in gens | i~=j] for j in gens])
Type: LIST(FMONOID(OVAR([p,q,r,s])))
Idempotent
fricas
rule1(ij:MK):MK ==
  for k in gens repeat
    kk := divide(monomial(ij),k*k)
    if kk case divisible then
      ij:=(coeff(ij) * m(k)*γ(k,k)) * (leftDiv(kk) * k * rightDiv(kk))
  return(ij)
   Function declaration rule1 : FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,
      s]))) -> FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s]))) has been 
      added to workspace.
Type: VOID
Reduction
fricas
rule2(ij:MK):MK ==
  for i in gens repeat
    for j in gens | j ~= i repeat
      for k in gens | k ~= j repeat
        ijk:=divide(leadingMonomial(ij),i*j*k)
        if ijk case divisible then
          --if i=k then
          --  ij := (coeff(ij)*m(i)*m(j)*γ(i,j)*γ(j,i) ) * _
          --        (leftDiv(ijk)*i*rightDiv(ijk))
          --else
            ij := (coeff(ij)*m(j)*γ(i,j)*γ(j,k) / γ(i,k) ) * _
                  (leftDiv(ijk)*i*k*rightDiv(ijk))
  return(ij)
   Function declaration rule2 : FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,
      s]))) -> FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s]))) has been 
      added to workspace.
Type: VOID
Modulo fixed point of applied rules
fricas
mod(ij:MK):MK ==
  ijFix:MK := 1
  while ijFix~=ij repeat
    ijFix := ij
    ij := rule1(ij)
    ij := rule2(ij)
  return(ij)
   Function declaration mod : FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s]
      ))) -> FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s]))) has been 
      added to workspace.
Type: VOID
Matrix
Multiplication is monoidal concatenation modulo the fixed point
fricas
MT := [[mod(i*j) for j in basis] for i in basis]
   There are 1 exposed and 3 unexposed library operations named 
      leadingMonomial having 1 argument(s) but none was determined to 
      be applicable. Use HyperDoc Browse, or issue
                         )display op leadingMonomial
      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 
      leadingMonomial with argument type(s) 
                FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s])))
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
   FriCAS will attempt to step through and interpret the code.
fricas
Compiling function monomial with type FM(FRAC(POLY(INT)),FMONOID(
      OVAR([p,q,r,s]))) -> FMONOID(OVAR([p,q,r,s]))
fricas
Compiling function coeff with type FM(FRAC(POLY(INT)),FMONOID(OVAR([
      p,q,r,s]))) -> FRAC(POLY(INT))
fricas
Compiling function m with type FMONOID(OVAR([p,q,r,s])) -> FRAC(POLY
      (INT))
fricas
Compiling function γ with type (FMONOID(OVAR([p,q,r,s])), FMONOID(
      OVAR([p,q,r,s]))) -> FRAC(POLY(INT))
fricas
Compiling function leftDiv with type Union(Record(lm: FMONOID(OVAR([
      p,q,r,s])),rm: FMONOID(OVAR([p,q,r,s]))),"failed") -> FMONOID(
      OVAR([p,q,r,s]))fricas
Compiling function rightDiv with type Union(Record(lm: FMONOID(OVAR(
      [p,q,r,s])),rm: FMONOID(OVAR([p,q,r,s]))),"failed") -> FMONOID(
      OVAR([p,q,r,s]))fricas
Compiling function rule1 with type FM(FRAC(POLY(INT)),FMONOID(OVAR([
      p,q,r,s]))) -> FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s]))) 
   There are 2 exposed and 2 unexposed library operations named divide 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op divide
      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 
      divide with argument type(s) 
                FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s])))
                          FMONOID(OVAR([p,q,r,s]))
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
   FriCAS will attempt to step through and interpret the code.
fricas
Compiling function rule2 with type FM(FRAC(POLY(INT)),FMONOID(OVAR([
      p,q,r,s]))) -> FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s])))
fricas
Compiling function mod with type FM(FRAC(POLY(INT)),FMONOID(OVAR([p,
      q,r,s]))) -> FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s]))) 
   There are 1 exposed and 3 unexposed library operations named 
      leadingMonomial having 1 argument(s) but none was determined to 
      be applicable. Use HyperDoc Browse, or issue
                         )display op leadingMonomial
      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 
      leadingMonomial with argument type(s) 
                FM(FRAC(POLY(INT)),FMONOID(OVAR([p,q,r,s])))
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
Structure Constants
fricas
R:=FRAC DMP(concat [[m(i) for i in gens],concat [[γ(j,i) for i in gens] for j in gens]], INT)
Type: TYPE
fricas
mat3(y:M):List List R == map(z+->map(x+->coefficient(x,y)::FRAC POLY INT,z),MT)
   Function declaration mat3 : FMONOID(OVAR([p,q,r,s])) -> LIST(LIST(
      FRAC(DMP([m[p],m[q],m[r],m[s],γ[pp],γ[pq],γ[pr],γ[ps],γ[qp],γ[qq]
      ,γ[qr],γ[qs],γ[rp],γ[rq],γ[rr],γ[rs],γ[sp],γ[sq],γ[sr],γ[ss]],INT
      )))) has been added to workspace.
Type: VOID
fricas
ss:=map(mat3, basis)
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 66 exposed and 13 unexposed library operations named map 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op map
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are no library operations named *01000m 
      Use HyperDoc Browse or issue
                              )what op *01000m
      to learn if there is any operation containing " *01000m " in its 
      name.
   There are no library operations named *01000m 
      Use HyperDoc Browse or issue
                              )what op *01000m
      to learn if there is any operation containing " *01000m " in its 
      name.
   There are no library operations named *01000m 
      Use HyperDoc Browse or issue
                              )what op *01000m
      to learn if there is any operation containing " *01000m " in its 
      name.
   There are 66 exposed and 13 unexposed library operations named map 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op map
      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 map 
      with argument type(s) 
                                    ANON
                                VARIABLE(MT)
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
   FriCAS will attempt to step through and interpret the code.
fricas
Compiling function mat3 with type FMONOID(OVAR([p,q,r,s])) -> LIST(
      LIST(FRAC(DMP([m[p],m[q],m[r],m[s],γ[pp],γ[pq],γ[pr],γ[ps],γ[qp],
      γ[qq],γ[qr],γ[qs],γ[rp],γ[rq],γ[rr],γ[rs],γ[sp],γ[sq],γ[sr],γ[ss]
      ],INT)))) 
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are 66 exposed and 13 unexposed library operations named map 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op map
      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.
   There are 4 exposed and 6 unexposed library operations named 
      coefficient having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      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.
   There are no library operations named *01000m 
      Use HyperDoc Browse or issue
                              )what op *01000m
      to learn if there is any operation containing " *01000m " in its 
      name.
   Cannot find a definition or applicable library operation named 
      *01000m with argument type(s) 
                                 VARIABLE(p)
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
Algebra
fricas
cats(m:M):Symbol==concat(map(x+->string(x.gen::Symbol),factors m))::Symbol
   Function declaration cats : FMONOID(OVAR([p,q,r,s])) -> SYMBOL has 
      been added to workspace.
Type: VOID
fricas
A:=AlgebraGivenByStructuralConstants(R,#(basis)::PI,map(cats,basis),ss::Vector(Matrix R))
fricas
Compiling function cats with type FMONOID(OVAR([p,q,r,s])) -> SYMBOL
   Cannot convert the value from type VARIABLE(ss) to VECTOR(MATRIX(
      FRAC(DMP([m[p],m[q],m[r],m[s],γ[pp],γ[pq],γ[pr],γ[ps],γ[qp],γ[qq]
      ,γ[qr],γ[qs],γ[rp],γ[rq],γ[rr],γ[rs],γ[sp],γ[sq],γ[sr],γ[ss]],INT
      )))) .
Check Multiplication
fricas
AB := entries basis()$A
   A is not a valid type.
Trace
fricas
[rightTrace(i)$A for i in AB]
   FriCAS cannot iterate with i over your form now. Perhaps you should 
      try using a conversion to make sure your form is a list or 
      stream, for example.
Center
fricas
C:=basisOfCenter()$AlgebraPackage(R,A); # C
   A is not a valid type.
Unit
fricas
rightTrace(c)
   There are 1 exposed and 0 unexposed library operations named 
      rightTrace having 1 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op rightTrace
      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 
      rightTrace with argument type(s) 
                                 VARIABLE(c)
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
fricas
test(n=unit()$A)
   A is not a valid type.
Antisymmetric γ
fricas
eqAnti:List Equation EXPR INT := concat [[(i>j => γ(i,j)=γ(i,j);i=j =>γ(i,j)=0;γ(i,j)=-γ(j,i)) for j in gens] for i in gens]
Type: LIST(EQ(EXPR(INT)))
fricas
anti(x:R):R == subst(x::EXPR INT, eqAnti)::FRAC POLY INT
   Function declaration anti : FRAC(DMP([m[p],m[q],m[r],m[s],γ[pp],γ[pq
      ],γ[pr],γ[ps],γ[qp],γ[qq],γ[qr],γ[qs],γ[rp],γ[rq],γ[rr],γ[rs],γ[
      sp],γ[sq],γ[sr],γ[ss]],INT)) -> FRAC(DMP([m[p],m[q],m[r],m[s],γ[
      pp],γ[pq],γ[pr],γ[ps],γ[qp],γ[qq],γ[qr],γ[qs],γ[rp],γ[rq],γ[rr],γ
      [rs],γ[sp],γ[sq],γ[sr],γ[ss]],INT)) has been added to workspace.
Type: VOID
fricas
(anti(f)*map(anti ,coordinates(n))::A)::OutputForm / anti(f)::OutputForm
fricas
Compiling function anti with type FRAC(DMP([m[p],m[q],m[r],m[s],γ[pp
      ],γ[pq],γ[pr],γ[ps],γ[qp],γ[qq],γ[qr],γ[qs],γ[rp],γ[rq],γ[rr],γ[
      rs],γ[sp],γ[sq],γ[sr],γ[ss]],INT)) -> FRAC(DMP([m[p],m[q],m[r],m[
      s],γ[pp],γ[pq],γ[pr],γ[ps],γ[qp],γ[qq],γ[qr],γ[qs],γ[rp],γ[rq],γ[
      rr],γ[rs],γ[sp],γ[sq],γ[sr],γ[ss]],INT)) 
   Conversion failed in the compiled user function anti .
   Cannot convert the value from type SYMBOL to FRAC(DMP([m[p],m[q],m[r
      ],m[s],γ[pp],γ[pq],γ[pr],γ[ps],γ[qp],γ[qq],γ[qr],γ[qs],γ[rp],γ[rq
      ],γ[rr],γ[rs],γ[sp],γ[sq],γ[sr],γ[ss]],INT)) .
Scalar Product
fricas
S := matrix [[trace(x*y) for y in AB] for x in AB]
   FriCAS cannot iterate with x over your form now. Perhaps you should 
      try using a conversion to make sure your form is a list or 
      stream, for example.