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

Edit detail for LinearOperator revision 6 of 63

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
Editor: Bill Page
Time: 2011/03/08 19:42:31 GMT-8
Note: debug coproduct

added:
    _*: (%,NonNegativeInteger) -> %

added:
    --
    -- f*g : A^n -> A^{m+p} = f:A^n -> A^m * g:A^n -> A^p
    --

added:
      output("* rep(x).n",rep(x).n::OutputForm)$OutputPackage
      output("* rep(y).n",rep(y).n::OutputForm)$OutputPackage

changed:
-      r:=product(rep(x).t, rep(y).t)
-      u:=1$DirectProduct(dim,K)::T
-      ud:=product(u,kroneckerDelta()$T)
      r := product(rep(x).t, rep(y).t)
      u := 1$DirectProduct(dim,K)::T
      ud:= product(u,kroneckerDelta()$T)

changed:
-        r:=contract(contract(ud,1,r,rep(x).n+1),1,rep(x).n+1)
        r := contract(contract(ud,1,r,rep(x).n+1),1,rep(x).n+1)

added:

    -- repeated product

changed:
-       1$%
-
       per [rep(x).n,0,1]

    --
    -- f+g : A^{n+m} -> A^p = f:A^n -> A^p + g:A^m -> A^p
    --

added:
      output("+ rep(x).m",rep(x).m::OutputForm)$OutputPackage
      output("+ rep(y).m",rep(y).m::OutputForm)$OutputPackage

changed:
-      r:=product(rep(x).t, rep(y).t)
-      u:=1$DirectProduct(dim,K)::T
-      du:=product(kroneckerDelta()$T,u)
      output("+ rep(x).n",rep(x).n::OutputForm)$OutputPackage
      output("+ rep(y).n",rep(y).n::OutputForm)$OutputPackage
      r := product(rep(x).t, rep(y).t)
      u := 1$DirectProduct(dim,K)::T
      du:= product(kroneckerDelta()$T,u)

added:
        output("+ rank",rank(r)::OutputForm)$OutputPackage
        output("+ rep(y).m",rep(y).m::OutputForm)$OutputPackage
        r := contract(contract(du,1,r,rep(y).m+1),1,rep(y).m+2)

changed:
-        --output("m",rep(y).m::OutputForm)$OutputPackage
-        r:=contract(contract(du,1,r,rep(y).m+1),1,rep(y).m+1)
-        --output("rank",rank(r)::OutputForm)$OutputPackage
-      per [rep(x).n+rep(y).m,rep(y).m,r]
-
-    (x:% ** p:NonNegativeInteger):% ==
      per [rep(x).n+rep(y).n,rep(y).m,r]

    -- repeated sum
    (x:% * p:NonNegativeInteger):% ==

changed:
-      q case NonNegativeInteger => x**q + x
-      0$%
      q case NonNegativeInteger => x*q + x
      per [0,rep(x).m,1]  -- need identity for + !!!

added:
Products
$$
f*g : A^n \to A^{m+p} = f:A^n \to A^m * g:A^n \to A^p
$$
\begin{axiom}
A12p := A1 * A2; A12p::OutputForm = A1::OutputForm * A2::OutputForm
arity(A12p)::OutputForm = arity(A1)::OutputForm * arity(A2)::OutputForm
B12p := B1 * B2; B12p::OutputForm = B1::OutputForm * B2::OutputForm
arity(B12p)::OutputForm = arity(B1)::OutputForm * arity(B2)::OutputForm
\end{axiom}


added:
$$
f+g : A^{n+m} \to A^p = f:A^n \to A^p + g:A^m \to A^p
$$
\begin{axiom}
A12s := A1 + A2; A12s::OutputForm = A1::OutputForm + A2::OutputForm
arity(A12s)::OutputForm = arity(A1)::OutputForm + arity(A2)::OutputForm
B12s := B1 + B2; B12s::OutputForm = B1::OutputForm + B2::OutputForm
arity(B12s)::OutputForm = arity(B1)::OutputForm + arity(B2)::OutputForm
\end{axiom}

Multiplication

changed:
-test(A3s=A1*(A1*A1))
-test(A3s=A1^3)
-\end{axiom}
test(A3s=A1+(A1+A1))
test(A3s=A1*3)
\end{axiom}

changed:
-test(B3s=B1*(B1*B1))
-test(B3s=B1^3)
-\end{axiom}
test(B3s=B1+(B1+B1))
test(B3s=B1*3)
\end{axiom}

Linear transformations (operators) over n-dimensional cartesian vector spaces oveer a commutative ring K. Members of this domain are morphisms K^n \to K^m. Products, co-products and composition (grafting) of morphisms is implemented. Operators are represented internally as tensors.

Operator composition and products can be visualized by directed graphs (read from top to bottom) such as:

      n = 3     inputs

      \  |  /         \  /   /         \              |
       \ | /           \/   /           \            / \
        \|/             \  /           / \          /   \
        / \              \/           /   \         \   /
       /   \              \          /   / \         \ /
      /     \              \        /   /   \         |

      m = 2     outputs

Lines (edges) in the graph represent vectors, nodes represent operators. Horizontal juxtaposition represents product. Vertical juxtaposition represents composition.

spad
)abbrev domain LIN LinearOperator
LinearOperator(dim:NonNegativeInteger,K:CommutativeRing): Join(Ring,BiModule(K,K)) with
    arity: % -> DirectProduct(2,NonNegativeInteger)
    elt: (%,%) -> %
    id: ()->%
    inp: List K -> %
      ++ incoming vector
    inp: List % -> %
    out: List K -> %
      ++ output vector
    out: List % -> %
    coerce: SquareMatrix(dim,K) -> %
    _*: (%,NonNegativeInteger) -> %
  == add
    import List NonNegativeInteger
    T == CartesianTensor(1,dim,K)
    Rep == Record(n:NonNegativeInteger, m:NonNegativeInteger, t:T)
    rep(x:%):Rep == x pretend Rep
    per(x:Rep):% == x pretend %
arity(x:%):DirectProduct(2,NonNegativeInteger) == directProduct [rep(x).n,rep(x).m]
0 == per [0,0,0]
(x:% + y:%):% == rep(x).t=0 => per [rep(y).n,rep(y).m,rep(y).t] rep(y).t=0 => per [rep(x).n,rep(x).m,rep(x).t] rep(x).n ~= rep(y).n or rep(x).m ~= rep(y).m => error "arity" per [rep(x).n,rep(x).m,rep(x).t+rep(y).t]
(x:% - y:%):% == rep(x).t=0 => per [rep(y).n,rep(y).m,-rep(y).t] rep(y).t=0 => per [rep(x).n,rep(x).m,rep(x).t] rep(x).n ~= rep(y).n or rep(x).m ~= rep(y).m => error "arity" per [rep(x).n,rep(x).m,rep(x).t-rep(y).t]
1 == per [0,0,1]
-- -- f*g : A^n -> A^{m+p} = f:A^n -> A^m * g:A^n -> A^p -- (x:% * y:%):% == output("* rep(x).n",rep(x).n::OutputForm)$OutputPackage output("* rep(y).n",rep(y).n::OutputForm)$OutputPackage rep(x).n ~= rep(y).n => error "arity" r := product(rep(x).t, rep(y).t) u := 1$DirectProduct(dim,K)::T ud:= product(u,kroneckerDelta()$T) for i in 1..rep(x).n repeat --output("rank",rank(r)::OutputForm)$OutputPackage --output("n",rep(x).n::OutputForm)$OutputPackage r := contract(contract(ud,1,r,rep(x).n+1),1,rep(x).n+1) --output("rank",rank(r)::OutputForm)$OutputPackage per [rep(x).n,rep(x).m+rep(y).m,r]
-- repeated product ((x:%)^(p:NonNegativeInteger)):% == q:=subtractIfCan(p,1) q case NonNegativeInteger => x^q * x per [rep(x).n,0,1]
-- -- f+g : A^{n+m} -> A^p = f:A^n -> A^p + g:A^m -> A^p -- (x:% + y:%):% == output("+ rep(x).m",rep(x).m::OutputForm)$OutputPackage output("+ rep(y).m",rep(y).m::OutputForm)$OutputPackage rep(x).m ~= rep(y).m => error "arity" output("+ rep(x).n",rep(x).n::OutputForm)$OutputPackage output("+ rep(y).n",rep(y).n::OutputForm)$OutputPackage r := product(rep(x).t, rep(y).t) u := 1$DirectProduct(dim,K)::T du:= product(kroneckerDelta()$T,u) for i in 1..rep(y).m repeat output("+ rank",rank(r)::OutputForm)$OutputPackage output("+ rep(y).m",rep(y).m::OutputForm)$OutputPackage r := contract(contract(du,1,r,rep(y).m+1),1,rep(y).m+2) --output("rank",rank(r)::OutputForm)$OutputPackage per [rep(x).n+rep(y).n,rep(y).m,r]
-- repeated sum (x:% * p:NonNegativeInteger):% == q:=subtractIfCan(p,1) q case NonNegativeInteger => x*q + x per [0,rep(x).m,1] -- need identity for + !!!
(x:% = y:%):Boolean == rep(x).n ~= rep(y).n or rep(x).m ~= rep(y).m => error "arity" rep(x).t = rep(y).t
(x:K * y:%):% == per [rep(y).n,rep(y).m,x*rep(y).t]
(x:% * y:K):% == per [rep(x).n,rep(x).m,rep(x).t*y]
elt(x:%,y:%):% == r:=product(rep(x).t,rep(y).t) yn:=rep(y).n -- outputs of y xm:=rep(x).m -- inputs of x while yn>0 and xm>0 repeat output("yn",yn::OutputForm)$OutputPackage output("xm",xm::OutputForm)$OutputPackage output("rank",rank(r)::OutputForm)$OutputPackage r:=contract(r,rep(y).n+xm,yn+rep(y).m) yn:=subtractIfCan(yn,1)::NonNegativeInteger xm:=subtractIfCan(xm,1)::NonNegativeInteger per [rep(x).n+xm,yn+rep(y).m,r]
id():% == per [1,1,kroneckerDelta()$T]
inp(x:List K):% == per [1,0,entries(x)::T]
inp(x:List %):% == #removeDuplicates([rep(y).n for y in x])~=1 or #removeDuplicates([rep(y).m for y in x])~=1 => error "arity" per [rep(first x).n+1,rep(first x).m,[rep(y).t for y in x]::T]$Rep
out(x:List K):% == per [0,1,entries(x)::T]
out(x:List %):% == #removeDuplicates([rep(y).n for y in x])~=1 or #removeDuplicates([rep(y).m for y in x])~=1 => error "arity" per [rep(first x).n,rep(first x).m+1,[rep(y).t for y in x]::T]$Rep
coerce(x:%):OutputForm == (rep(x).t)::OutputForm
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/6154772542123042263-25px001.spad using 
      old system compiler.
   LIN abbreviates domain LinearOperator 
------------------------------------------------------------------------
   initializing NRLIB LIN for LinearOperator 
   compiling into NRLIB LIN 
   importing List NonNegativeInteger
   compiling local rep : $ -> Record(n: NonNegativeInteger,m: NonNegativeInteger,t: CartesianTensor(One,dim,K))
      LIN;rep is replaced by x 
Time: 0.10 SEC.
compiling local per : Record(n: NonNegativeInteger,m: NonNegativeInteger,t: CartesianTensor(One,dim,K)) -> $ LIN;per is replaced by x Time: 0 SEC.
compiling exported arity : $ -> DirectProduct(2,NonNegativeInteger) Time: 0.22 SEC.
compiling exported Zero : () -> $ Time: 0.02 SEC.
compiling exported + : ($,$) -> $ Time: 0.03 SEC.
compiling exported - : ($,$) -> $ Time: 0.02 SEC.
compiling exported One : () -> $ Time: 0 SEC.
compiling exported * : ($,$) -> $ Time: 0.04 SEC.
compiling exported ^ : ($,NonNegativeInteger) -> $ Time: 0.01 SEC.
compiling exported + : ($,$) -> $ Time: 0.03 SEC.
compiling exported * : ($,NonNegativeInteger) -> $ Time: 0.01 SEC.
compiling exported = : ($,$) -> Boolean Time: 0.01 SEC.
compiling exported * : (K,$) -> $ Time: 0.01 SEC.
compiling exported * : ($,K) -> $ Time: 0 SEC.
compiling exported elt : ($,$) -> $ Time: 0.02 SEC.
compiling exported id : () -> $ Time: 0.01 SEC.
compiling exported inp : List K -> $ Time: 0.06 SEC.
compiling exported inp : List $ -> $ Time: 0.15 SEC.
compiling exported out : List K -> $ Time: 0.01 SEC.
compiling exported out : List $ -> $ Time: 0.02 SEC.
compiling exported coerce : $ -> OutputForm Time: 0 SEC.
(time taken in buildFunctor: 10)
;;; *** |LinearOperator| REDEFINED
;;; *** |LinearOperator| REDEFINED Time: 0.02 SEC.
Cumulative Statistics for Constructor LinearOperator Time: 0.79 seconds
finalizing NRLIB LIN Processing LinearOperator for Browser database: --->-->LinearOperator((arity ((DirectProduct 2 (NonNegativeInteger)) %))): Not documented!!!! --->-->LinearOperator((elt (% % %))): Not documented!!!! --->-->LinearOperator((id (%))): Not documented!!!! --------(inp (% (List K)))--------- --->-->LinearOperator((inp (% (List %)))): Not documented!!!! --------(out (% (List K)))--------- --->-->LinearOperator((out (% (List %)))): Not documented!!!! --->-->LinearOperator((coerce (% (SquareMatrix dim K)))): Not documented!!!! --->-->LinearOperator((* (% % (NonNegativeInteger)))): Not documented!!!! --->-->LinearOperator(constructor): Not documented!!!! --->-->LinearOperator(): Missing Description ; compiling file "/var/zope2/var/LatexWiki/LIN.NRLIB/LIN.lsp" (written 08 MAR 2011 07:42:11 PM): ; compiling (/VERSIONCHECK 2) ; compiling (PUT (QUOTE |LIN;rep|) ...) ; compiling (DEFUN |LIN;rep| ...) ; compiling (PUT (QUOTE |LIN;per|) ...) ; compiling (DEFUN |LIN;per| ...) ; compiling (DEFUN |LIN;arity;$Dp;3| ...) ; compiling (DEFUN |LIN;Zero;$;4| ...) ; compiling (DEFUN |LIN;+;3$;5| ...) ; compiling (DEFUN |LIN;-;3$;6| ...) ; compiling (DEFUN |LIN;One;$;7| ...) ; compiling (DEFUN |LIN;*;3$;8| ...) ; compiling (DEFUN |LIN;^;$Nni$;9| ...) ; compiling (DEFUN |LIN;+;3$;10| ...) ; compiling (DEFUN |LIN;*;$Nni$;11| ...) ; compiling (DEFUN |LIN;=;2$B;12| ...) ; compiling (DEFUN |LIN;*;K2$;13| ...) ; compiling (DEFUN |LIN;*;$K$;14| ...) ; compiling (DEFUN |LIN;elt;3$;15| ...) ; compiling (DEFUN |LIN;id;$;16| ...) ; compiling (DEFUN |LIN;inp;L$;17| ...) ; compiling (DEFUN |LIN;inp;L$;18| ...) ; compiling (DEFUN |LIN;out;L$;19| ...) ; compiling (DEFUN |LIN;out;L$;20| ...) ; compiling (DEFUN |LIN;coerce;$Of;21| ...) ; compiling (DEFUN |LinearOperator| ...) ; compiling (DEFUN |LinearOperator;| ...) ; compiling (MAKEPROP (QUOTE |LinearOperator|) ...)
; /var/zope2/var/LatexWiki/LIN.NRLIB/LIN.fasl written ; compilation finished in 0:00:00.709 ------------------------------------------------------------------------ LinearOperator is now explicitly exposed in frame initial LinearOperator will be automatically loaded when needed from /var/zope2/var/LatexWiki/LIN.NRLIB/LIN

Construction operators: input and output

axiom
L:=LIN(2,FRAC POLY INT)

\label{eq1}\hbox{\axiomType{LinearOperator}\ } (2, \hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ })))(1)
Type: Domain
axiom
A1:L:=inp[script(a,[[1,i]]) for i in 1..2]

\label{eq2}\left[{a_{1, \: 1}}, \:{a_{1, \: 2}}\right](2)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity A1

\label{eq3}\left[ 1, \: 0 \right](3)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
A2:L:=inp[script(a,[[2,i]]) for i in 1..2]

\label{eq4}\left[{a_{2, \: 1}}, \:{a_{2, \: 2}}\right](4)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
A:L:=inp[A1,A2]

\label{eq5}\left[ 
\begin{array}{cc}
{a_{1, \: 1}}&{a_{1, \: 2}}
\
{a_{2, \: 1}}&{a_{2, \: 2}}
(5)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity A

\label{eq6}\left[ 2, \: 0 \right](6)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
B1:L:=out[script(b,[[],[1,i]]) for i in 1..2]

\label{eq7}\left[{b^{1, \: 1}}, \:{b^{1, \: 2}}\right](7)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity B1

\label{eq8}\left[ 0, \: 1 \right](8)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
B2:L:=out[script(b,[[],[2,i]]) for i in 1..2]

\label{eq9}\left[{b^{2, \: 1}}, \:{b^{2, \: 2}}\right](9)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
B:L:=out[B1,B2]

\label{eq10}\left[ 
\begin{array}{cc}
{b^{1, \: 1}}&{b^{1, \: 2}}
\
{b^{2, \: 1}}&{b^{2, \: 2}}
(10)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity B

\label{eq11}\left[ 0, \: 2 \right](11)
Type: DirectProduct?(2,NonNegativeInteger?)

Products


f<em>g : A^n \to A^{m+p} = f:A^n \to A^m </em> g:A^n \to A^p
 
axiom
A12p := A1 * A2; A12p::OutputForm = A1::OutputForm * A2::OutputForm
* rep(x).n 1 * rep(y).n 1

\label{eq12}\begin{array}{@{}l}
\displaystyle
{\left[{{2 \ {a_{1, \: 1}}\ {a_{2, \: 2}}}+{2 \ {a_{1, \: 1}}\ {a_{2, \: 1}}}}, \:{{2 \ {a_{1, \: 2}}\ {a_{2, \: 2}}}+{2 \ {a_{1, \: 2}}\ {a_{2, \: 1}}}}\right]}= 
\
\
\displaystyle
{{\left[{a_{1, \: 1}}, \:{a_{1, \: 2}}\right]}\ {\left[{a_{2, \: 1}}, \:{a_{2, \: 2}}\right]}}
(12)
Type: Equation(OutputForm?)
axiom
arity(A12p)::OutputForm = arity(A1)::OutputForm * arity(A2)::OutputForm

\label{eq13}{\left[ 1, \: 0 \right]}={{\left[ 1, \: 0 \right]}\ {\left[ 1, \: 0 \right]}}(13)
Type: Equation(OutputForm?)
axiom
B12p := B1 * B2; B12p::OutputForm = B1::OutputForm * B2::OutputForm
* rep(x).n 0 * rep(y).n 0

\label{eq14}\begin{array}{@{}l}
\displaystyle
{\left[ 
\begin{array}{cc}
{{b^{1, \: 1}}\ {b^{2, \: 1}}}&{{b^{1, \: 1}}\ {b^{2, \: 2}}}
\
{{b^{1, \: 2}}\ {b^{2, \: 1}}}&{{b^{1, \: 2}}\ {b^{2, \: 2}}}
(14)
Type: Equation(OutputForm?)
axiom
arity(B12p)::OutputForm = arity(B1)::OutputForm * arity(B2)::OutputForm

\label{eq15}{\left[ 0, \: 2 \right]}={{\left[ 0, \: 1 \right]}\ {\left[ 0, \: 1 \right]}}(15)
Type: Equation(OutputForm?)

Powers

axiom
A3p:=(A1*A1)*A1
* rep(x).n 1 * rep(y).n 1 * rep(x).n 1 * rep(y).n 1

\label{eq16}\begin{array}{@{}l}
\displaystyle
\left[{{4 \ {a_{1, \: 1}}\ {{a_{1, \: 2}}^2}}+{8 \ {{a_{1, \: 1}}^2}\ {a_{1, \: 2}}}+{4 \ {{a_{1, \: 1}}^3}}}, \: \right.
\
\
\displaystyle
\left.{{4 \ {{a_{1, \: 2}}^3}}+{8 \ {a_{1, \: 1}}\ {{a_{1, \: 2}}^2}}+{4 \ {{a_{1, \: 1}}^2}\ {a_{1, \: 2}}}}\right] 
(16)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(A3p)

\label{eq17}\left[ 1, \: 0 \right](17)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
test(A3p=A1*(A1*A1))
* rep(x).n 1 * rep(y).n 1 * rep(x).n 1 * rep(y).n 1

\label{eq18} \mbox{\rm true} (18)
Type: Boolean
axiom
test(A3p=A1^3)
* rep(x).n 1 * rep(y).n 1 * rep(x).n 1 * rep(y).n 1

\label{eq19} \mbox{\rm true} (19)
Type: Boolean

axiom
B3p:=(B1*B1)*B1
* rep(x).n 0 * rep(y).n 0 * rep(x).n 0 * rep(y).n 0

\label{eq20}\begin{array}{@{}l}
\displaystyle
\left[{\left[ 
\begin{array}{cc}
{{b^{1, \: 1}}^3}&{{{b^{1, \: 1}}^2}\ {b^{1, \: 2}}}
\
{{{b^{1, \: 1}}^2}\ {b^{1, \: 2}}}&{{b^{1, \: 1}}\ {{b^{1, \: 2}}^2}}
(20)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(B3p)

\label{eq21}\left[ 0, \: 3 \right](21)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
test(B3p=B1*(B1*B1))
* rep(x).n 0 * rep(y).n 0 * rep(x).n 0 * rep(y).n 0

\label{eq22} \mbox{\rm true} (22)
Type: Boolean
axiom
test(B3p=B1^3)
* rep(x).n 0 * rep(y).n 0 * rep(x).n 0 * rep(y).n 0

\label{eq23} \mbox{\rm true} (23)
Type: Boolean

Sums


f+g : A^{n+m} \to A^p = f:A^n \to A^p + g:A^m \to A^p
 
axiom
A12s := A1 + A2; A12s::OutputForm = A1::OutputForm + A2::OutputForm
+ rep(x).m 0 + rep(y).m 0 + rep(x).n 1 + rep(y).n 1

\label{eq24}\begin{array}{@{}l}
\displaystyle
{\left[ 
\begin{array}{cc}
{{a_{1, \: 1}}\ {a_{2, \: 1}}}&{{a_{1, \: 1}}\ {a_{2, \: 2}}}
\
{{a_{1, \: 2}}\ {a_{2, \: 1}}}&{{a_{1, \: 2}}\ {a_{2, \: 2}}}
(24)
Type: Equation(OutputForm?)
axiom
arity(A12s)::OutputForm = arity(A1)::OutputForm + arity(A2)::OutputForm

\label{eq25}{\left[ 2, \: 0 \right]}={{\left[ 1, \: 0 \right]}+{\left[ 1, \: 0 \right]}}(25)
Type: Equation(OutputForm?)
axiom
B12s := B1 + B2; B12s::OutputForm = B1::OutputForm + B2::OutputForm
+ rep(x).m 1 + rep(y).m 1 + rep(x).n 0 + rep(y).n 0 + rank 2 + rep(y).m 1

\label{eq26}\begin{array}{@{}l}
\displaystyle
{\left[{{{b^{1, \: 2}}\ {b^{2, \: 2}}}+{{b^{1, \: 1}}\ {b^{2, \: 1}}}}, \:{{{b^{1, \: 2}}\ {b^{2, \: 2}}}+{{b^{1, \: 1}}\ {b^{2, \: 1}}}}\right]}= 
\
\
\displaystyle
{{\left[{b^{1, \: 1}}, \:{b^{1, \: 2}}\right]}+{\left[{b^{2, \: 1}}, \:{b^{2, \: 2}}\right]}}
(26)
Type: Equation(OutputForm?)
axiom
arity(B12s)::OutputForm = arity(B1)::OutputForm + arity(B2)::OutputForm

\label{eq27}{\left[ 0, \: 1 \right]}={{\left[ 0, \: 1 \right]}+{\left[ 0, \: 1 \right]}}(27)
Type: Equation(OutputForm?)

Multiplication

axiom
A3s:=(A1+A1)+A1
+ rep(x).m 0 + rep(y).m 0 + rep(x).n 1 + rep(y).n 1 + rep(x).m 0 + rep(y).m 0 + rep(x).n 2 + rep(y).n 1

\label{eq28}\begin{array}{@{}l}
\displaystyle
\left[{\left[ 
\begin{array}{cc}
{{a_{1, \: 1}}^3}&{{{a_{1, \: 1}}^2}\ {a_{1, \: 2}}}
\
{{{a_{1, \: 1}}^2}\ {a_{1, \: 2}}}&{{a_{1, \: 1}}\ {{a_{1, \: 2}}^2}}
(28)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(A3s)

\label{eq29}\left[ 3, \: 0 \right](29)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
test(A3s=A1+(A1+A1))
+ rep(x).m 0 + rep(y).m 0 + rep(x).n 1 + rep(y).n 1 + rep(x).m 0 + rep(y).m 0 + rep(x).n 1 + rep(y).n 2

\label{eq30} \mbox{\rm true} (30)
Type: Boolean
axiom
test(A3s=A1*3)
+ rep(x).m 0 + rep(y).m 0 + rep(x).n 0 + rep(y).n 1 + rep(x).m 0 + rep(y).m 0 + rep(x).n 1 + rep(y).n 1 + rep(x).m 0 + rep(y).m 0 + rep(x).n 2 + rep(y).n 1

\label{eq31} \mbox{\rm true} (31)
Type: Boolean

axiom
B3s:=(B1+B1)+B1
+ rep(x).m 1 + rep(y).m 1 + rep(x).n 0 + rep(y).n 0 + rank 2 + rep(y).m 1 + rep(x).m 1 + rep(y).m 1 + rep(x).n 0 + rep(y).n 0 + rank 2 + rep(y).m 1

\label{eq32}\begin{array}{@{}l}
\displaystyle
\left[{{{b^{1, \: 2}}^3}+{{b^{1, \: 1}}\ {{b^{1, \: 2}}^2}}+{{{b^{1, \: 1}}^2}\ {b^{1, \: 2}}}+{{b^{1, \: 1}}^3}}, \: \right.
\
\
\displaystyle
\left.{{{b^{1, \: 2}}^3}+{{b^{1, \: 1}}\ {{b^{1, \: 2}}^2}}+{{{b^{1, \: 1}}^2}\ {b^{1, \: 2}}}+{{b^{1, \: 1}}^3}}\right] 
(32)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(B3s)

\label{eq33}\left[ 0, \: 1 \right](33)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
test(B3s=B1+(B1+B1))
+ rep(x).m 1 + rep(y).m 1 + rep(x).n 0 + rep(y).n 0 + rank 2 + rep(y).m 1 + rep(x).m 1 + rep(y).m 1 + rep(x).n 0 + rep(y).n 0 + rank 2 + rep(y).m 1

\label{eq34} \mbox{\rm true} (34)
Type: Boolean
axiom
test(B3s=B1*3)
+ rep(x).m 1 + rep(y).m 1 + rep(x).n 0 + rep(y).n 0 + rank 1 + rep(y).m 1
>> Error detected within library code: Improper index for contraction

Expected error

axiom
B1A1:=B1*A1
* rep(x).n 0 * rep(y).n 1
>> Error detected within library code: arity

Composition

axiom
AB11:=A1 B1

\label{eq35}\left[ 
\begin{array}{cc}
{{b^{1, \: 1}}\ {a_{1, \: 1}}}&{{b^{1, \: 2}}\ {a_{1, \: 1}}}
\
{{b^{1, \: 1}}\ {a_{1, \: 2}}}&{{b^{1, \: 2}}\ {a_{1, \: 2}}}
(35)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(AB11)

\label{eq36}\left[ 1, \: 1 \right](36)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
BA11:= B1 A1
yn 1 xm 1 rank 2

\label{eq37}{{b^{1, \: 2}}\ {a_{1, \: 2}}}+{{b^{1, \: 1}}\ {a_{1, \: 1}}}(37)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(BA11)

\label{eq38}\left[ 0, \: 0 \right](38)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
AB := A B

\label{eq39}\left[ 
\begin{array}{cc}
{\left[ 
\begin{array}{cc}
{{b^{1, \: 1}}\ {a_{1, \: 1}}}&{{b^{1, \: 2}}\ {a_{1, \: 1}}}
\
{{b^{2, \: 1}}\ {a_{1, \: 1}}}&{{b^{2, \: 2}}\ {a_{1, \: 1}}}
(39)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(AB)

\label{eq40}\left[ 2, \: 2 \right](40)
Type: DirectProduct?(2,NonNegativeInteger?)
axiom
BA := B A
yn 2 xm 2 rank 4 yn 1 xm 1 rank 2
>> Error detected within library code: Improper index for contraction

Multiple inputs and outputs

axiom
W:L:=out[inp[inp([script(w,[[i,j],[k]]) for j in 1..2])$L for i in 1..2] for k in 1..2]

\label{eq41}\begin{array}{@{}l}
\displaystyle
\left[{\left[ 
\begin{array}{cc}
{w_{1, \: 1}^{1}}&{w_{1, \: 2}^{1}}
\
{w_{2, \: 1}^{1}}&{w_{2, \: 2}^{1}}
(41)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
WB1:=W B1

\label{eq42}\left[ 
\begin{array}{cc}
{\left[ 
\begin{array}{cc}
{{b^{1, \: 1}}\ {w_{1, \: 1}^{1}}}&{{b^{1, \: 2}}\ {w_{1, \: 1}^{1}}}
\
{{b^{1, \: 1}}\ {w_{1, \: 2}^{1}}}&{{b^{1, \: 2}}\ {w_{1, \: 2}^{1}}}
(42)
Type: LinearOperator?(2,Fraction(Polynomial(Integer)))
axiom
arity(WB1)

\label{eq43}\left[ 3, \: 1 \right](43)
Type: DirectProduct?(2,NonNegativeInteger?)