Introduction
Bi-graded linear operators (transformations) over n-dimensional vector spaces on a commutative ring
. Members of this domain are morphisms
. Products, permutations and composition (grafting) of morphisms are 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.
See examples and documentation below
I would like you to make brief comments in the form at the bottom of this web page. For more detailed but related comments click discussion on the top menu.
Regards,
Bill Page.
We try to start the right way by defining the concept of a monoidal category.
Ref: http://en.wikipedia.org/wiki/PROP_(category_theory)
spad
)abbrev category MONAL Monoidal
Monoidal(R:AbelianSemiGroup):Category == Monoid with
dom: % -> R
++ domain
cod: % -> R
++ co-domain
_/: (%,%) -> %
++ vertical composition f/g = g*f
apply:(%,%) -> %
++ horizontal composition
coerce:(x:List PositiveInteger) -> %
++ identity for composition and permutations of its products
coerce:(x:List None) -> %
++ [] = 1
-- add
-- (f:% / g:%):% == apply(g,f)
spad
Compiling FriCAS source code from file
/var/zope2/var/LatexWiki/8030329591618487444-25px001.spad using
old system compiler.
MONAL abbreviates category Monoidal
------------------------------------------------------------------------
initializing NRLIB MONAL for Monoidal
compiling into NRLIB MONAL
;;; *** |Monoidal| REDEFINED
Time: 0.01 SEC.
finalizing NRLIB MONAL
Processing Monoidal for Browser database:
--------(dom (R %))---------
--------(cod (R %))---------
--------(/ (% % %))---------
--->-->Monoidal((/ (% % %))): Improper first word in comments: vertical
"vertical composition \\spad{f/g} = \\spad{g*f}"
--------(apply (% % %))---------
--------(coerce (% (List (PositiveInteger))))---------
--->-->Monoidal((coerce (% (List (PositiveInteger))))): Improper first word in comments: identity
"identity for composition and permutations of its products"
--------(coerce (% (List (None))))---------
--->-->Monoidal((coerce (% (List (None))))): Improper first word in comments: []
"[] = 1"
--->-->Monoidal(constructor): Not documented!!!!
--->-->Monoidal(): Missing Description
; compiling file "/var/zope2/var/LatexWiki/MONAL.NRLIB/MONAL.lsp" (written 11 APR 2011 09:06:47 PM):
; /var/zope2/var/LatexWiki/MONAL.NRLIB/MONAL.fasl written
; compilation finished in 0:00:00.043
------------------------------------------------------------------------
Monoidal is now explicitly exposed in frame initial
Monoidal will be automatically loaded when needed from
/var/zope2/var/LatexWiki/MONAL.NRLIB/MONAL
>> System error:
The bounding indices 163 and 162 are bad for a sequence of length 162.
See also:
The ANSI Standard, Glossary entry for "bounding index designator"
The ANSI Standard, writeup for Issue SUBSEQ-OUT-OF-BOUNDS:IS-AN-ERROR
The initial object in this category is the domain Prop (Products and Permutations).
spad
)abbrev domain PROP Prop
Prop(R:CommutativeRing): Join(Monoidal R, CoercibleTo OutputForm) with
_/:(R,R) -> %
== add
Rep == Record(domain:R,codomain:R)
rep(x:%):Rep == x pretend Rep
per(x:Rep):% == x pretend %
dom(f:%):R == rep(f).domain
cod(f:%):R == rep(f).codomain
coerce(f:%):OutputForm == dom(f)::OutputForm / cod(f)::OutputForm
(f:R / g:R):% == per [f,g]
apply(g:%,f:%):% == f/g
(f:% / g:%):% ==
cod(f) ~= dom(g) => error "arity"
per [dom f,cod g]
(f:% * g:%):% == per [dom(f)+dom(g),cod(f)+cod(g)]
1:% = per [0,0]
-- preserves arity
(f:% + g:%):% ==
dom(f)~=dom(g) or cod(g) ~= cod(g) => error "arity"
f
coerce(p:List PositiveInteger):% == per [#p::R,#p::R]
coerce(p:List None):% == per [0,0]
spad
Compiling FriCAS source code from file
/var/zope2/var/LatexWiki/5074464407714417206-25px002.spad using
old system compiler.
PROP abbreviates domain Prop
------------------------------------------------------------------------
initializing NRLIB PROP for Prop
compiling into NRLIB PROP
compiling local rep : $ -> Record(domain: R,codomain: R)
PROP;rep is replaced by x
Time: 0.03 SEC.
compiling local per : Record(domain: R,codomain: R) -> $
PROP;per is replaced by x
Time: 0.01 SEC.
compiling exported dom : $ -> R
Time: 0 SEC.
compiling exported cod : $ -> R
Time: 0 SEC.
compiling exported coerce : $ -> OutputForm
Time: 0.01 SEC.
compiling exported / : (R,R) -> $
Time: 0 SEC.
compiling exported apply : ($,$) -> $
Time: 0 SEC.
compiling exported / : ($,$) -> $
Time: 0 SEC.
compiling exported * : ($,$) -> $
Time: 0.01 SEC.
Semantic Errors:
[1] compColonInside: colon inside expressions is unsupported
****** comp fails at level 2 with expression: ******
(= | << | (|:| 1 $) | >> | (|per| (|construct| 0 0)))
****** level 2 ******
$x:= (: (One) $)
$m:= $EmptyMode
$f:=
((((|per| #)) ((|per| #) (|rep| #))
((|rep| #) (|copy| #) (|setelt| #) (|codomain| #) ...)))
>> Apparent user error:
cannot compile (= (: (One) $) (per (construct (Zero) (Zero))))
The LinearOperator? domain is Moniodal over NonNegativeInteger?. It is the free algebra over Prop with n-generators.
Ref: http://en.wikipedia.org/wiki/Category_of_vector_spaces
- all members of this domain have the same dimension
- it might be useful (but much more complicated) to allow source
and target dimensions to be different
spad
)abbrev domain LIN LinearOperator
LinearOperator(dim:NNI,gen:OrderedFinite,K:CommutativeRing): Exports == Implementation where
NNI ==> NonNegativeInteger
T ==> CartesianTensor(1,dim,K)
Exports ==> Join(Ring, BiModule(K,K), Monoidal NNI, RetractableTo K) with
inp: List K -> %
++ incoming vector
inp: List % -> %
out: List K -> %
++ output vector
out: List % -> %
arity: % -> Prop(NNI)
apply: (%,%) -> %
basisVectors: () -> List %
basisForms: () -> List %
tensor: % -> T
map: (K->K,%) -> %
ravel: % -> List K
unravel: (Prop NNI,List K) -> %
Implementation ==> add
import List NNI
Rep == Record(domain:NNI, codomain:NNI, data:T)
rep(x:%):Rep == x pretend Rep
per(x:Rep):% == x pretend %
-- Prop (arity)
dom(f:%):NNI == rep(f).domain
cod(f:%):NNI == rep(f).codomain
dat(f:%):T == rep(f).data
arity(f:%):Prop NNI == dom(f)/cod(f)
retractIfCan(f:%):Union(K,"failed") ==
dom(f)=0 and cod(f)=0 => retract(dat f)$T
return "failed"
retract(f:%):K ==
dom(f)=0 and cod(f)=0 => retract(dat f)$T
error "failed"
-- basis
basisVectors():List % == [per [0,1,entries(row(1,i)$SquareMatrix(dim,K))::T] for i in 1..dim]
basisForms():List % == [per [1,0,entries(row(1,i)$SquareMatrix(dim,K))::T] for i in 1..dim]
-- manipulation
map(f:K->K, g:%):% == per [dom g,cod g,unravel(map(f,ravel dat g))$T]
ravel(g:%):List K == ravel dat g
unravel(p:Prop NNI,r:List K):% ==
dim^(dom(p)+cod(p)) ~= #r => error "failed"
per [dom(p),cod(p),unravel(r)$T]
tensor(x:%):T == dat(x)
-- sum
(f:% + g:%):% ==
dat(f)=0 => g
dat(g)=0 => f
dom(f) ~= dom(g) or cod(f) ~= cod(g) => error "arity"
per [dom f,cod f,dat(f)+dat(g)]
(f:% - g:%):% ==
dom(f) ~= dom(f) or cod(g) ~= cod(g) => error "arity"
per [dom f, cod f,dat(f)-dat(g)]
0 == per [0,0,0]
-- repeated sum
(p:NNI * f:%):% ==
p=1 => f
q:=subtractIfCan(p,1)
q case NNI => q*f + f
per [dom f,cod f,0*dat(f)]
-- evaluation:
--
-- f/g : A^n -> A^p = f:A^n -> A^m / g:A^m -> A^p
-- g f : A^n -> A^p = g:A^m -> A^p * f:A^n -> A^m
--
apply(g:%,f:%):% == f/g
--apply(g:%,f:%):% ==
(f:% / g:%):% ==
dom(g) ~= cod(f) => error "arity"
r:T := product(dat f, dat g)
g1:Integer:=dom(f)+1
f1:Integer:=dom(f)+cod(f)+1
for i in 0..cod(f)-1 repeat
r := contract(r,g1,f1-i)
per [dom(f),cod(g),r]
-- permutations and identities
coerce(p:List PositiveInteger):% ==
r:=per([1,1,kroneckerDelta()$T])^#p
#p = 1 and p.1 = 1 => return r
p1:List Integer:=[i for i in 1..#p]
p2:List Integer:=[#p+i for i in p]
p3:=concat(p1,p2)
per [#p,#p,reindex(dat r,p3)]
coerce(p:List None):% == per [0,0,1]
1:% == per [0,0,1]
coerce(x:K):% == 1*x
-- product
(f:% * g:%):% ==
r:T := product(dat f,dat g)
-- dom(f) + cod(f) + dom(g) + cod(g)
p:List Integer := concat _
[[i for i in 1..dom(f)], _
[dom(f)+cod(f)+i for i in 1..dom(g)], _
[dom(f)+i for i in 1..cod(f)], _
[dom(f)+dom(g)+cod(f)+i for i in 1..cod(g)]]
-- dom(f) + dom(g) + cod(f) + cod(g)
per [dom(f)+dom(g),cod(f)+cod(g),reindex(r,p)]
-- repeated product
(f:% ^ p:NNI):% ==
p=1 => f
q:=subtractIfCan(p,1)
q case NNI => f^q * f
per [dom f,cod f,1]
-- inherited from Ring
(x:% = y:%):Boolean ==
dom(x) ~= dom(y) or cod(x) ~= cod(y) => error "arity"
dat(x) = dat(y)
(x:K * y:%):% == per [dom y, cod y,x*dat(y)]
(x:% * y:K):% == per [dom x,cod x,dat(x)*y]
(x:Integer * y:%):% == per [dom y,cod y,x*dat(y)]
-- constructors
inp(x:List K):% == per [1,0,entries(x)::T]
inp(x:List %):% ==
#removeDuplicates([dom(y) for y in x]) ~= 1 or
#removeDuplicates([cod(y) for y in x]) ~= 1 => error "arity"
per [(dom(first x)+1),cod(first x),[dat(y) for y in x]::T]$Rep
out(x:List K):% == per [0,1,entries(x)::T]
out(x:List %):% ==
#removeDuplicates([dom(y) for y in x])~=1 or
#removeDuplicates([cod(y) for y in x])~=1 => error "arity"
per [dom(first x),(cod(first x)+1),[dat(y) for y in x]::T]$Rep
-- display operators using basis
coerce(x:%):OutputForm ==
dom(x)=0 and cod(x)=0 => return dat(x)::OutputForm
if size()$gen > 0 then
gens:List OutputForm:=[index(i::PositiveInteger)$gen::OutputForm for i in 1..dim]
else
-- default to numeric indices
gens:List OutputForm:=[i::OutputForm for i in 1..dim]
-- input basis
inps:List OutputForm := []
for i in 1..dom(x) repeat
empty? inps => inps:=gens
inps:=concat [[hconcat(inps.k,gens.j) for j in 1..dim] for k in 1..#inps]
-- output basis
outs:List OutputForm := []
for i in 1..cod(x) repeat
empty? outs => outs:=gens
outs:=concat [[hconcat(outs.k,gens.j) for j in 1..dim] for k in 1..#outs]
-- term list
bases:List OutputForm:=[]
coeffs:=ravel dat(x)
if #inps > 0 and #outs > 0 then
expon:List List OutputForm:=concat([[[i,j] for j in outs] for i in inps])
bases:=[scripts('e::OutputForm,ij) for ij in expon]
else if #inps > 0 then
bases:=[sub('e::OutputForm,i) for i in inps]
else if #outs > 0 then
bases:=[super('e::OutputForm,j) for j in outs]
terms:=[(k=1 => base;k::OutputForm*base) for base in bases for k in coeffs | k~=0]
empty? terms => return 0::OutputForm
return reduce(_+,terms)
spad
Compiling FriCAS source code from file
/var/zope2/var/LatexWiki/8009333309120175973-25px003.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(domain: NonNegativeInteger,codomain: NonNegativeInteger,data: CartesianTensor(One,dim,K))
LIN;rep is replaced by x
Time: 0.06 SEC.
compiling local per : Record(domain: NonNegativeInteger,codomain: NonNegativeInteger,data: CartesianTensor(One,dim,K)) -> $
LIN;per is replaced by x
Time: 0 SEC.
compiling exported dom : $ -> NonNegativeInteger
Time: 0 SEC.
compiling exported cod : $ -> NonNegativeInteger
Time: 0 SEC.
compiling local dat : $ -> CartesianTensor(One,dim,K)
Time: 0.01 SEC.
compiling exported arity : $ -> Prop NonNegativeInteger
****** comp fails at level 1 with expression: ******
error in function arity
((/ (|dom| |f|) (|cod| |f|)))
****** level 1 ******
$x:= (/ (dom f) (cod f))
$m:= (Prop (NonNegativeInteger))
$f:=
((((|f| # #) (|dat| #)) ((|dat| #) (* #) (+ #) (- #) ...) ((|per| #) (|rep| #))
((|rep| #) (|copy| #) (|setelt| #) (|data| #) ...)))
>> Apparent user error:
cannot compile (/ (dom f) (cod f))
Consult the source code above for more details.
Basis
axiom
dim:=2
axiom
L:=LinearOperator(dim,OVAR [x,y],FRAC POLY INT)
LinearOperator is an unknown constructor and so is unavailable. Did
you mean to use -> but type something different instead?
Dx:=basisVectors()$L
The function basisVectors is not implemented in NIL .
dx:=basisForms()$L
The function basisForms is not implemented in NIL .
matrix [[dx.i * Dx.j for j in 1..dim] for i in 1..dim]
There are no library operations named dx
Use HyperDoc Browse or issue
)what op dx
to learn if there is any operation containing " dx " in its name.
Cannot find a definition or applicable library operation named dx
with argument type(s)
PositiveInteger
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.
There are no library operations named dx
Use HyperDoc Browse or issue
)what op dx
to learn if there is any operation containing " dx " in its name.
Cannot find a definition or applicable library operation named dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
matrix [[Dx.i / dx.j for j in 1..dim] for i in 1..dim]
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
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.
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Conveniences
axiom
macro Σ(x,b,i)==reduce(+,[x*b.i for i in 1..dim])
Type: Void
axiom
macro /\(x,s)==superscript(x,s)
Type: Void
axiom
macro \/(x,s)==subscript(x,s)
Type: Void
Construction
axiom
A1:L := Σ(a1\/[i],dx,i)
There are no library operations named dx
Use HyperDoc Browse or issue
)what op dx
to learn if there is any operation containing " dx " in its name.
Cannot find a definition or applicable library operation named dx
with argument type(s)
PositiveInteger
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.
There are no library operations named dx
Use HyperDoc Browse or issue
)what op dx
to learn if there is any operation containing " dx " in its name.
Cannot find a definition or applicable library operation named dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
arity A1
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(A1)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
A2:L := Σ(a2\/[i],dx,i)
There are no library operations named dx
Use HyperDoc Browse or issue
)what op dx
to learn if there is any operation containing " dx " in its name.
Cannot find a definition or applicable library operation named dx
with argument type(s)
PositiveInteger
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.
There are no library operations named dx
Use HyperDoc Browse or issue
)what op dx
to learn if there is any operation containing " dx " in its name.
Cannot find a definition or applicable library operation named dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
A:L := inp[A1,A2]
Type: Symbol
axiom
arity A
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Symbol
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
B1:L := Σ(b1/\[i],Dx,i)
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
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.
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
arity B1
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(B1)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
B2:L := Σ(b2/\[i],Dx,i)
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
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.
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
B:L := out[B1,B2]
Type: Symbol
axiom
arity B
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Symbol
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
B:L := Σ(Σ(b/\[i,j],Dx,i),Dx,j)
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
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.
There are no library operations named Dx
Use HyperDoc Browse or issue
)what op Dx
to learn if there is any operation containing " Dx " in its name.
Cannot find a definition or applicable library operation named Dx
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Composition
axiom
AB2 := A2 / B2; AB2::OutputForm = A2::OutputForm / B2::OutputForm
Type: Equation(OutputForm
?)
axiom
arity(AB2)::OutputForm = arity(A2)::OutputForm / arity(B2)::OutputForm
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Fraction(Polynomial(Integer))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
BA1 := B1 / A1; BA1::OutputForm = B1::OutputForm / A1::OutputForm
Type: Equation(OutputForm
?)
axiom
arity(BA1)::OutputForm = arity(B1)::OutputForm / arity(A1)::OutputForm
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Fraction(Polynomial(Integer))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
AB1 := A1 / B1; AB1::OutputForm = A1::OutputForm / B1::OutputForm
Type: Equation(OutputForm
?)
axiom
arity(AB1)::OutputForm = arity(A1)::OutputForm / arity(B1)::OutputForm
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Fraction(Polynomial(Integer))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Powers
axiom
AB3:=(AB1*AB1)*AB1;
Type: Fraction(Polynomial(Integer))
axiom
arity(AB3)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Fraction(Polynomial(Integer))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
test(AB3=AB1*(AB1*AB1))
Type: Boolean
axiom
test(AB3=AB1^3)
Type: Boolean
Sums
axiom
A12s := A1 + A2; A12s::OutputForm = A1::OutputForm + A2::OutputForm
Type: Equation(OutputForm
?)
axiom
arity(A12s)::OutputForm = arity(A1)::OutputForm + arity(A2)::OutputForm
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
B12s := B1 + B2; B12s::OutputForm = B1::OutputForm + B2::OutputForm
Type: Equation(OutputForm
?)
axiom
arity(B12s)::OutputForm = arity(B1)::OutputForm + arity(B2)::OutputForm
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Multiplication
axiom
A3s:=(A1+A1)+A1
Type: Polynomial(Integer)
axiom
arity(A3s)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
test(A3s=A1+(A1+A1))
Type: Boolean
axiom
test(A3s=A1*3)
Type: Boolean
axiom
B3s:=(B1+B1)+B1
Type: Polynomial(Integer)
axiom
arity(B3s)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
test(B3s=B1+(B1+B1))
Type: Boolean
axiom
test(B3s=B1*3)
Type: Boolean
Product
axiom
AB11:=A1*B1
Type: Polynomial(Integer)
axiom
arity(AB11)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
BA11:= B1*A1
Type: Polynomial(Integer)
axiom
arity(BA11)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
AB := A*B
Type: Polynomial(Integer)
axiom
arity(AB)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
BA := B*A
Type: Polynomial(Integer)
axiom
arity(BA)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
X2:L:=inp[inp([script(x,[[i,j]]) for j in 1..2])$L for i in 1..2]
The function inp is not implemented in NIL .
XB21:=X2*B1
Type: Polynomial(Integer)
axiom
arity(XB21)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Y2:L:=out[out([script(y,[[],[i,j]]) for j in 1..2])$L for i in 1..2]
The function out is not implemented in NIL .
XY22:=X2*Y2
Type: Polynomial(Integer)
axiom
arity(XY22)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
YX22:=Y2*X2
Type: Polynomial(Integer)
axiom
arity(XY22)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
test((A*A)*A=A*(A*A))
Type: Boolean
axiom
test((B*B)*B=B*(B*B))
Type: Boolean
axiom
test((A*B)*A=A*(B*A))
Type: Boolean
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]
The function inp is not implemented in NIL .
WB1:=W*B1
Type: Polynomial(Integer)
axiom
arity(WB1)
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Permutations and Identities
axiom
H:L:=[1,2]
Type: List(PositiveInteger
?)
axiom
X:L:=[2,1]
Type: List(PositiveInteger
?)
axiom
test(X/X=H)
There are 13 exposed and 12 unexposed library operations named /
having 2 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op /
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 /
with argument type(s)
List(PositiveInteger)
List(PositiveInteger)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Tensor
axiom
tensor AB
There are 1 exposed and 1 unexposed library operations named tensor
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op tensor
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
tensor with argument type(s)
Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Another kind of diagram:
___ _ _
___ _) = _\_ _
_/ ___ _)
axiom
Y:=out[inp[inp([script(y,[[i,j],[k]]) for k in 1..2])$L for j in 1..2] for i in 1..2]
The function inp is not implemented in NIL .
arity Y
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(Y)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
tensor Y
There are 1 exposed and 1 unexposed library operations named tensor
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op tensor
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
tensor with argument type(s)
Variable(Y)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
U:=inp[inp([script(u,[[i,j],[]]) for j in 1..2])$L for i in 1..2]
The function inp is not implemented in NIL .
arity U
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(U)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
YU:=(Y*[1])/U
There are 35 exposed and 24 unexposed library operations named *
having 2 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op *
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 *
with argument type(s)
Variable(Y)
List(PositiveInteger)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
arity YU
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(YU)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
UY:=([1]*Y)/U
There are 35 exposed and 24 unexposed library operations named *
having 2 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op *
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 *
with argument type(s)
List(PositiveInteger)
Variable(Y)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
arity UY
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(UY)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Handle
_/ _\__
axiom
λ:=inp[out[out([script(y,[[i],[j,k]]) for k in 1..2])$L for j in 1..2] for i in 1..2]
The function out is not implemented in NIL .
arity λ
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Variable(λ)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
tensor λ
There are 1 exposed and 1 unexposed library operations named tensor
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op tensor
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
tensor with argument type(s)
Variable(λ)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Φ := λ/Y
Type: Fraction(Polynomial(Integer))
axiom
arity Φ
There are 1 exposed and 0 unexposed library operations named arity
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op arity
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 arity
with argument type(s)
Fraction(Polynomial(Integer))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Manipulations
axiom
ravel YU
There are 1 exposed and 0 unexposed library operations named ravel
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op ravel
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 ravel
with argument type(s)
Variable(YU)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
test(unravel(arity YU,ravel YU)$L=YU)
The function unravel is not implemented in NIL .
map(x+->x+1,YU)$L
The function map is not implemented in NIL .
Back to the top.
Please leave comments and suggestions.
Thanks
Bill Page
If linear operators really are to be morphisms (in the sense of category theory) then they must have a domain and a co-domain that are vector spaces, not just an in-degree and out-degree. E.g.:
Rep == Record(Dom:VectorSpace, Cod:VectorSpace, t:T)
But VectorSpace? is a category which would make Dom and Cod domains. The domains that currently satisfy VectorSpace? in Axiom are rather limited and seem oddly focused on number theory (finite fields). It is a good thing however that DirectProduct? is a conditional member of this cateogry.
axiom
DirectProduct(2,FRAC INT) has VectorSpace(FRAC INT)
Type: Boolean
Unfortunately:
axiom
DirectProduct(2,DirectProduct(2,FRAC INT)) has VectorSpace(FRAC INT)
Type: Boolean
The problem with VectorSpace? is that the domain [Vector]? is not a member of this category instead it satisfies VectoryCategory?.
Is it possible to treat tensors from CartesianTensor? as maps from VectorSpace? to VectorSpace?? We would like for example:
T:DirectProduct(dim,DirectProduct(dim,FRAC INT)) -> DirectProduct(dim,FRAC INT))
To be a linear operator with two inputs and one output.
A [FreeModule]
? over a [Field]
? is a VectorSpace
? unfortunately this is not currently understood by Axiom:
axiom
FreeModule(Fraction Integer,OrderedVariableList [e1,e1]) has VectorSpace(Fraction Integer)
Type: Boolean