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 -> %
inp: List % -> %
out: List K -> %
out: List % -> %
coerce: SquareMatrix(dim,K) -> %
== 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]
(x:% * y:%):% == per [rep(x).n+rep(y).n,rep(x).m+rep(y).m,product(rep(x).t, rep(y).t)]
(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
--print(yn::OutputForm)$PrintPackage
--print(xm::OutputForm)$PrintPackage
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,1]
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/9201705897152006478-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.09 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.02 SEC.
compiling exported Zero : () -> $
Time: 0 SEC.
compiling exported + : ($,$) -> $
Time: 0.23 SEC.
compiling exported - : ($,$) -> $
Time: 0.02 SEC.
compiling exported One : () -> $
Time: 0 SEC.
compiling exported * : ($,$) -> $
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.01 SEC.
compiling exported id : () -> $
Time: 0 SEC.
compiling exported inp : List K -> $
Time: 0.07 SEC.
compiling exported inp : List $ -> $
Time: 0.10 SEC.
compiling exported out : List K -> $
Time: 0 SEC.
compiling exported out : List $ -> $
Time: 0.01 SEC.
compiling exported coerce : $ -> OutputForm
Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |LinearOperator| REDEFINED
;;; *** |LinearOperator| REDEFINED
Time: 0.02 SEC.
Cumulative Statistics for Constructor LinearOperator
Time: 0.61 seconds
finalizing NRLIB LIN
Processing LinearOperator for Browser database:
--->-->LinearOperator((arity ((DirectProduct 2 (NonNegativeInteger)) %))): Not documented!!!!
--->-->LinearOperator((elt (% % %))): Not documented!!!!
--->-->LinearOperator((id (%))): Not documented!!!!
--->-->LinearOperator((inp (% (List K)))): Not documented!!!!
--->-->LinearOperator((inp (% (List %)))): Not documented!!!!
--->-->LinearOperator((out (% (List K)))): Not documented!!!!
--->-->LinearOperator((out (% (List %)))): Not documented!!!!
--->-->LinearOperator((coerce (% (SquareMatrix dim K)))): Not documented!!!!
--->-->LinearOperator(constructor): Not documented!!!!
--->-->LinearOperator(): Missing Description
; compiling file "/var/zope2/var/LatexWiki/LIN.NRLIB/LIN.lsp" (written 08 MAR 2011 04:48:32 AM):
; 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;=;2$B;9| ...)
; compiling (DEFUN |LIN;*;K2$;10| ...)
; compiling (DEFUN |LIN;*;$K$;11| ...)
; compiling (DEFUN |LIN;elt;3$;12| ...)
; compiling (DEFUN |LIN;id;$;13| ...)
; compiling (DEFUN |LIN;inp;L$;14| ...)
; compiling (DEFUN |LIN;inp;L$;15| ...)
; compiling (DEFUN |LIN;out;L$;16| ...)
; compiling (DEFUN |LIN;out;L$;17| ...)
; compiling (DEFUN |LIN;coerce;$Of;18| ...)
; compiling (DEFUN |LinearOperator| ...)
; compiling (DEFUN |LinearOperator;| ...)
; compiling (MAKEPROP (QUOTE |LinearOperator|) ...)
; /var/zope2/var/LatexWiki/LIN.NRLIB/LIN.fasl written
; compilation finished in 0:00:01.152
------------------------------------------------------------------------
LinearOperator is now explicitly exposed in frame initial
LinearOperator will be automatically loaded when needed from
/var/zope2/var/LatexWiki/LIN.NRLIB/LIN
axiom
L:=LIN(2,FRAC POLY INT)
Type: Domain
axiom
X1:L:=inp[script(x,[[i]]) for i in 1..2]
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity X1
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
Y1:L:=out[script(y,[[],[i]]) for i in 1..2]
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity Y1
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
Y11:L:=inp[Y1,Y1]
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(Y11)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
Y1X1:=Y1*X1
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(Y1X1)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
XY11:=X1 Y1
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(XY11)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
YX11:= Y1 X1
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(YX11)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
X2:L:=inp[inp([script(x,[[i,j]]) for j in 1..2])$L for i in 1..2]
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(X2)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
XX21:=X2 X1
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(XX21)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
Y2:L:=out[out([script(y,[[],[i,j]]) for j in 1..2])$L for i in 1..2]
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(Y2)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
XY22:=X2 Y2
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(XY22)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
YX22:=Y2 X2
>> Error detected within library code:
Improper index for contraction