spad
)abbrev domain LIN LinearOperator
LinearOperator(dim:NonNegativeInteger,K:CommutativeRing): Join(Ring,BiModule(K,K)) with
arity: % -> DirectProduct(2,NonNegativeInteger)
elt: (%,%) -> %
id: %
coerce: Vector K -> %
coerce: Vector % -> %
coerce: List K -> %
coerce: 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(x).n+xm,yn+rep(x).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]
coerce(x:Vector K):% == per [0,1,entries(x)::T]
coerce(x:List K):% == per [1,0,entries(x)::T]
coerce(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
coerce(x:SquareMatrix(dim,K)):% == per [2,0,x::T]
coerce(x:%):OutputForm == (rep(x).t)::OutputForm
spad
Compiling FriCAS source code from file
/var/zope2/var/LatexWiki/2311065628842128602-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.14 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.01 SEC.
compiling exported + : ($,$) -> $
Time: 0.26 SEC.
compiling exported - : ($,$) -> $
Time: 0.02 SEC.
compiling exported One : () -> $
Time: 0 SEC.
compiling exported * : ($,$) -> $
Time: 0 SEC.
compiling exported = : ($,$) -> Boolean
Time: 0.01 SEC.
compiling exported * : (K,$) -> $
Time: 0.01 SEC.
compiling exported * : ($,K) -> $
Time: 0.01 SEC.
compiling exported elt : ($,$) -> $
Time: 0.01 SEC.
compiling local id : () -> $
Time: 0 SEC.
compiling exported coerce : Vector K -> $
Time: 0.06 SEC.
compiling exported coerce : List K -> $
Time: 0.05 SEC.
compiling exported coerce : List $ -> $
Time: 0.09 SEC.
compiling exported coerce : SquareMatrix(dim,K) -> $
Time: 0 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.71 seconds
finalizing NRLIB LIN
Processing LinearOperator for Browser database:
--->-->LinearOperator((arity ((DirectProduct 2 (NonNegativeInteger)) %))): Not documented!!!!
--->-->LinearOperator((elt (% % %))): Not documented!!!!
--->-->LinearOperator(): Not documented!!!!
--->-->LinearOperator((coerce (% (Vector K)))): Not documented!!!!
--->-->LinearOperator((coerce (% (Vector %)))): Not documented!!!!
--->-->LinearOperator((coerce (% (List K)))): Not documented!!!!
--->-->LinearOperator((coerce (% (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 01:07:00 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| ...)
; compiling (DEFUN |LIN;coerce;V$;14| ...)
; compiling (DEFUN |LIN;coerce;L$;15| ...)
; compiling (DEFUN |LIN;coerce;L$;16| ...)
; compiling (DEFUN |LIN;coerce;Sm$;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:00.637
------------------------------------------------------------------------
LinearOperator is now explicitly exposed in frame initial
LinearOperator will be automatically loaded when needed from
/var/zope2/var/LatexWiki/LIN.NRLIB/LIN
axiom
Y:LIN(2,FRAC POLY INT):=[y1,y2]::List FRAC POLY INT
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity Y
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
A:LIN(2,FRAC POLY INT):=[a1,a2]::Vector FRAC POLY INT
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity A
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
X:LIN(2, FRAC POLY INT):=[[x11,x12],[x21,x22]]::SquareMatrix(2,FRAC POLY INT)
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(X)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
T:=A*Y
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(T)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
C:=A Y
1
1
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(C)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
D:= Y A
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(D)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
XA:=X A
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(XA)
Type: DirectProduct
?(2,
NonNegativeInteger
?)
axiom
Z:LIN(2, FRAC POLY INT):=[A,A]
Type: LinearOperator
?(2,
Fraction(Polynomial(Integer)))
axiom
arity(Z)
Type: DirectProduct
?(2,
NonNegativeInteger
?)