|
|
|
last edited 3 years ago by Bill Page |
| 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/04/12 16:43:32 GMT-7 |
||
| Note: general list of applicators | ||
changed: - Exports ==> Join(Ring, BiModule(K,K), Monoidal NNI, RetractableTo K) with Exports ==> Join(Field, BiModule(K,K), Monoidal NNI, RetractableTo K) with removed: - _/:(%,List %) -> List % - ++ lists of applicators - apply:(List %,%) -> List % - ++ lists of applicators removed: - -- lists of applicators - apply(gg:List %,ff:%):List % == [ff/g for g in gg] - (f:% / g:List %):List % == [f/gg for gg in g] - added: Lists of applicators Lists of members from all domains that export a function with signature:: /: (%,%) -> % now become operators. I had no idea that a package of this kind was even possible! Note: In particular this will affect all Fields. \begin{spad} )abbrev package LINFUN1 LinearOperatorFunctions1 LinearOperatorFunctions1(S): Exports == Implementation where S:with _/:(%,%)->% Exports ==> with _/:(S,List S) -> List S -- ++ lists of applicators apply:(List S,S) -> List S ++ lists of applicators Implementation ==> add apply(gg:List S,ff:S):List S == [(ff/g)$S for g in gg] (f:S / g:List S):List S == [(f/gg)$S for gg in g] \end{spad} added: Possibly surprising consequence of the generality of the LinearOperatorFunctions1 package. Does this fairly deep semantic change have any bad side-effects on Axiom's apparent "syntax"? I mean does this cause notational problems in other parts of Axiom? \begin{axiom} 1.0/[2.0,3.0] [2.0,3.0](2.0) \end{axiom}
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)
(1) -> <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
-- add
-- (f:% / g:%):% == apply(g, f)</spad>
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/2643402771659714163-25px001.spad
using old system compiler.
MONAL abbreviates category Monoidal
------------------------------------------------------------------------
initializing NRLIB MONAL for Monoidal
compiling into NRLIB MONAL
Time: 0 SEC.
finalizing NRLIB MONAL
Processing Monoidal for Browser database:
--->-->Monoidal(constructor): Not documented!!!!
--------(dom (R %))---------
--------(cod (R %))---------
--------(/ (% % %))---------
--->-->Monoidal((/ (% % %))): Improper first word in comments: vertical
"vertical composition \\spad{f/g} = \\spad{g*f}"
--------(apply (% % %))---------
--->-->Monoidal(): Missing Description
; compiling file "/var/aw/var/LatexWiki/MONAL.NRLIB/MONAL.lsp" (written 14 SEP 2026 12:02:12 PM):
; wrote /var/aw/var/LatexWiki/MONAL.NRLIB/MONAL.fasl
; compilation finished in 0:00:00.004
------------------------------------------------------------------------
Monoidal is now explicitly exposed in frame initial
Monoidal will be automatically loaded when needed from
/var/aw/var/LatexWiki/MONAL.NRLIB/MONALThe initial object in this category is the domain Prop (Products and Permutations).
)abbrev domain PROP Prop Prop(): Exports == Implementation where R ==> NonNegativeInteger
Exports ==> Join(Monoidal R,CoercibleTo OutputForm) with _/:(R, R) -> %
Implementation ==> 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(gg:%, ff:%):% == -- partial application from the right n:=subtractIfCan(dom ff, cod gg) f:=ff; n case R => f:=1^n*ff m:=subtractIfCan(cod gg, dom ff) g:=gg; m case R => g:=1^m*gg f/g (ff:% / gg:%):% == -- partial application from the left n:=subtractIfCan(dom ff, cod gg) f:=ff; n case R => f:=ff*1^n m:=subtractIfCan(cod gg, dom ff) g:=gg; m case R => g:=gg*1^m --dom(g) ~= cod(f) => error "arity" per [dom f, cod g] 1:% == per [0, 0] (f:% * g:%):% == per [dom(f)+dom(g), cod(f)+cod(g)] 0:% == per [0, 0] -- preserves arity (f:% + g:%):% == dom(f)~=dom(g) or cod(g) ~= cod(g) => error "arity" f
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/3365105071098393884-25px002.spad
using old system compiler.
PROP abbreviates domain Prop
------------------------------------------------------------------------
initializing NRLIB PROP for Prop
compiling into NRLIB PROP
************* USER ERROR **********
available signatures for Rep:
NONE
NEED Rep: () -> ?
****** comp fails at level 1 with expression: ******
((DEF (|Rep|) (NIL)
(|Record| (|:| |domain| (|NonNegativeInteger|))
(|:| |codomain| (|NonNegativeInteger|)))))
****** level 1 ******
x:= (DEF (Rep) (NIL) (Record (: domain (NonNegativeInteger)) (: codomain (NonNegativeInteger))))
m:= $EmptyMode
f:=
((((~= #) (= #) (|coerce| #) (|latex| #) ...)))
>> Apparent user error:
unspecified errorThe 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
)abbrev domain LIN LinearOperator LinearOperator(dim:NNI,gen:OrderedFinite, K:CommutativeRing): Exports == Implementation where NNI ==> NonNegativeInteger T ==> CartesianTensor(1, dim, K)
Exports ==> Join(Field,BiModule(K, K), Monoidal NNI, RetractableTo K) with inp: List K -> % ++ incoming vector inp: List % -> % out: List K -> % ++ output vector out: List % -> % arity: % -> Prop basisVectors: () -> List % basisForms: () -> List % tensor: % -> T map: (K->K, %) -> % ravel: % -> List K unravel: (Prop, List K) -> % coerce:(x:List PositiveInteger) -> % ++ identity for composition and permutations of its products coerce:(x:List None) -> % ++ [] = 1
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 == 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, 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:%):% == dat(f)=0 => g dat(g)=0 => f 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: -- -- g f : A^n -> A^p = g:A^m -> A^p * f:A^n -> A^m apply(gg:%,ff:%):% == -- partial application from the right n:=subtractIfCan(dom ff, cod gg) f:=ff; n case NNI => f:=1^n*ff m:=subtractIfCan(cod gg, dom ff) g:=gg; m case NNI => g:=1^m*gg f/g
-- f/g : A^n -> A^p = f:A^n -> A^m / g:A^m -> A^p (ff:% / gg:%):% == -- partial application from the left n:=subtractIfCan(dom ff,cod gg) f:=ff; n case NNI => f:=ff*1^n m:=subtractIfCan(cod gg, dom ff) g:=gg; m case NNI => g:=gg*1^m --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)
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/8662645430778724175-25px003.spad
using old system compiler.
LIN abbreviates domain LinearOperator
------------------------------------------------------------------------
initializing NRLIB LIN for LinearOperator
compiling into NRLIB LIN
importing List NonNegativeInteger
************* USER ERROR **********
available signatures for Rep:
NONE
NEED Rep: () -> ?
****** comp fails at level 1 with expression: ******
((DEF (|Rep|) (NIL)
(|Record| (|:| |domain| (|NonNegativeInteger|))
(|:| |codomain| (|NonNegativeInteger|))
(|:| |data| (|CartesianTensor| 1 |dim| K)))))
****** level 1 ******
x:= (DEF (Rep) (NIL) (Record (: domain (NonNegativeInteger)) (: codomain (NonNegativeInteger)) (: data (CartesianTensor (One) dim K))))
m:= $EmptyMode
f:=
((((|#| #) (< #) (<= #) (= #) ...)))
>> Apparent user error:
unspecified errorLists of applicators
Lists of members from all domains that export a function with signature:
/: (%,%) -> %
now become operators. I had no idea that a package of this kind was even possible!
Note: In particular this will affect all Fields.
)abbrev package LINFUN1 LinearOperatorFunctions1
LinearOperatorFunctions1(S): Exports == Implementation where
S:with
_/:(%, %)->%
Exports ==> with
_/:(S, List S) -> List S
-- ++ lists of applicators
apply:(List S, S) -> List S
++ lists of applicators
Implementation ==> add
apply(gg:List S, ff:S):List S == [(ff/g)$S for g in gg]
(f:S / g:List S):List S == [(f/gg)$S for gg in g]
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1575882449424638229-25px004.spad
using old system compiler.
LINFUN1 abbreviates package LinearOperatorFunctions1
------------------------------------------------------------------------
initializing NRLIB LINFUN1 for LinearOperatorFunctions1
compiling into NRLIB LINFUN1
compiling exported apply : (List S, S) -> List S
Time: 0 SEC.
compiling exported / : (S, List S) -> List S
Time: 0 SEC.
(time taken in buildFunctor: 0)
Time: 0 SEC.
Cumulative Statistics for Constructor LinearOperatorFunctions1
Time: 0 seconds
finalizing NRLIB LINFUN1
Processing LinearOperatorFunctions1 for Browser database:
--->-->LinearOperatorFunctions1(constructor): Not documented!!!!
--->-->LinearOperatorFunctions1((/ (% % %))): Not documented!!!!
--->-->LinearOperatorFunctions1((/ ((List S) S (List S)))): Not documented!!!!
--------(apply ((List S) (List S) S))---------
--->-->LinearOperatorFunctions1((apply ((List S) (List S) S))): Improper first word in comments: lists
"lists of applicators"
--->-->LinearOperatorFunctions1(): Missing Description
; compiling file "/var/aw/var/LatexWiki/LINFUN1.NRLIB/LINFUN1.lsp" (written 14 SEP 2026 12:02:12 PM):
; wrote /var/aw/var/LatexWiki/LINFUN1.NRLIB/LINFUN1.fasl
; compilation finished in 0:00:00.004
------------------------------------------------------------------------
LinearOperatorFunctions1 is now explicitly exposed in frame initial
LinearOperatorFunctions1 will be automatically loaded when needed
from /var/aw/var/LatexWiki/LINFUN1.NRLIB/LINFUN1Consult the source code above for more details.
Basis
dim:=2
| (1) |
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?
Conveniences
macro Σ(x,b, i)==reduce(+, [x*b.i for i in 1..dim])
macro /\(x,s)==superscript(x, s)
macro \/(x,s)==subscript(x, s)
Construction
A1:L := Σ(a1\/[i],dx, i)
L is not a valid type.
AB2 := A2 / B2; AB2::OutputForm = A2::OutputForm / B2::OutputForm
| (2) |
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.
Partial Evaluation
BBA1 := B/A1
| (3) |
BBA2 := B A1
There are no library operations named B Use HyperDoc Browse or issue )what op B to learn if there is any operation containing " B " in its name.
Cannot find a definition or applicable library operation named B 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.
List of Applicators
B/[A1,A2]
There are 13 exposed and 15 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(B) List(OrderedVariableList([A1,A2]))
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.
Possibly surprising consequence of the generality of the LinearOperatorFunctions1? package.
Does this fairly deep semantic change have any bad side-effects on Axiom's apparent "syntax"? I mean does this cause notational problems in other parts of Axiom?
1.0/[2.0,3.0]
| (4) |
[2.0,3.0](2.0)
| (5) |
Powers
AB3:=(AB1*AB1)*AB1;
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) Polynomial(Integer)
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.
A12s := A1 + A2; A12s::OutputForm = A1::OutputForm + A2::OutputForm
| (6) |
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.
Multiplication
A3s:=(A1+A1)+A1
| (7) |
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.
B3s:=(B1+B1)+B1
| (8) |
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.
Product
AB11:=A1*B1
| (9) |
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.
Permutations and Identities
H:L:=[1,2]
L is not a valid type.
Manipulations
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) Variable(AB)
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.
Another kind of diagram::
__ _ __ ) = \ / __ )
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]
L is not a valid type.
Handle
_/ _\__
λ:=inp[out[out([script(y,[[i], [j, k]]) for k in 1..2])$L for j in 1..2] for i in 1..2]
L is not a valid type.
Back to the top.
Please leave comments and suggestions.
Thanks
Bill Page
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.
DirectProduct(2,FRAC INT) has VectorSpace(FRAC INT)
There are no library operations named VectorSpace Use HyperDoc Browse or issue )what op VectorSpace to learn if there is any operation containing " VectorSpace " in its name.
Cannot find a definition or applicable library operation named VectorSpace with argument type(s) Type
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.
Unfortunately:
DirectProduct(2,DirectProduct(2, FRAC INT)) has VectorSpace(FRAC INT)
There are no library operations named VectorSpace Use HyperDoc Browse or issue )what op VectorSpace to learn if there is any operation containing " VectorSpace " in its name.
Cannot find a definition or applicable library operation named VectorSpace with argument type(s) Type
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.
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:FreeModule(Fraction Integer,OrderedVariableList [e1, e1]) has VectorSpace(Fraction Integer)
There are no library operations named VectorSpace Use HyperDoc Browse or issue )what op VectorSpace to learn if there is any operation containing " VectorSpace " in its name.
Cannot find a definition or applicable library operation named VectorSpace with argument type(s) Type
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.