|
|
|
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: page
Time: 2011/04/09 07:58:14 GMT-7 |
||
| Note: Monoidal Prop | ||
changed: -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. Linear transformations (operators) over n-dimensional cartesian vector spaces over 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. added: We try to start the **right way** by defining the concept of a monoidal category. \begin{spad} )abbrev category MONAL Monoidal Monoidal(R:AbelianSemiGroup):Category == BasicType with dom: % -> R ++ domain cod: % -> R ++ co-domain _*: (%,%) -> % ++ composition _/: (%,%) -> % ++ vertical composition f/g = g*f elt:(%,%) -> % ++ horizontal composition (product) add (f:% / g:%):% == g*f \end{spad} The initial object in this category is the domain Prop (Products and Permutations). \begin{spad} )abbrev domain PROP Prop Prop(R:AbelianSemiGroup): 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] (g:% * f:%):% == cod(f) ~= dom(g) => error "arity" per [dom f,cod g] elt(f:%,g:%):% == per [dom(f)+dom(g),cod(f)+cod(g)] \end{spad} The LinearOperator domain is Moniodal over NonNegativeInteger changed: -LinearOperator(dim:NonNegativeInteger,K:CommutativeRing): Join(Ring,BiModule(K,K)) with - arity: % -> DirectProduct(2,NonNegativeInteger) - elt: (%,%) -> % - ++ tensor product - _/: (%,%) -> % - ++ operator composition LinearOperator(dim:NonNegativeInteger,K:CommutativeRing): Exports == Implementation where NNI ==> NonNegativeInteger Exports ==> Join(Ring, BiModule(K,K), Monoidal NNI, CoercibleTo Prop NNI) with changed: - == add - import List NonNegativeInteger Implementation ==> add import List NNI removed: - NNI ==> NonNegativeInteger added: changed: - arity(f:%):DirectProduct(2,NonNegativeInteger) == directProduct [dom f,cod f] coerce(f:%):Prop(NNI) == dom(f)/cod(f) changed: - (f:% / g:%):% == (g:% * f:%):% == removed: - (g:% * f:%):% == f/g - changed: - q case NonNegativeInteger => f^q * f q case NNI => f^q * f changed: - q case NonNegativeInteger => f*q + f q case NNI => f*q + f changed: -Products Composition changed: -f*g : A^n \to A^{m+p} = f:A^n \to A^m * g:A^n \to A^p g/f : A^n \to A^{m+p} = f:A^n \to A^m * g:A^n \to A^p changed: -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} AB2 := A2 / B2; AB2::OutputForm = A2::OutputForm / B2::OutputForm arity(AB2)::OutputForm = arity(A2)::OutputForm / arity(B2)::OutputForm BA1 := B1 / A1; BA1::OutputForm = B1::OutputForm / A1::OutputForm arity(BA1)::OutputForm = arity(B1)::OutputForm / arity(A1)::OutputForm AB1 := A1 / B1; AB1::OutputForm = A1::OutputForm / B1::OutputForm arity(AB1)::OutputForm = arity(A1)::OutputForm / arity(B1)::OutputForm \end{axiom} changed: -A3p:=(A1*A1)*A1 -arity(A3p) -test(A3p=A1*(A1*A1)) -test(A3p=A1^3) -\end{axiom} AB3:=(AB1/AB1)/AB1 arity(AB3) test(AB3=AB1/(AB1/AB1)) test(AB3=AB1^3) \end{axiom}
Linear transformations (operators) over n-dimensional cartesian vector spaces over a commutative ring
. Members of this domain are morphisms
. 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.
We try to start the right way by defining the concept of a monoidal category.
(1) -> <spad>
)abbrev category MONAL Monoidal
Monoidal(R:AbelianSemiGroup):Category == BasicType with
dom: % -> R
++ domain
cod: % -> R
++ co-domain
_*: (%, %) -> %
++ composition
_/: (%, %) -> %
++ vertical composition f/g = g*f
elt:(%, %) -> %
++ horizontal composition (product)
add
(f:% / g:%):% == g*f</spad>
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1467253716425331323-25px001.spad
using old system compiler.
MONAL abbreviates category Monoidal
------------------------------------------------------------------------
initializing NRLIB MONAL for Monoidal
compiling into NRLIB MONAL
Time: 0 SEC.
MONAL- abbreviates domain Monoidal&
------------------------------------------------------------------------
initializing NRLIB MONAL- for Monoidal&
compiling into NRLIB MONAL-
compiling exported / : (S, S) -> S
Time: 0 SEC.
(time taken in buildFunctor: 0)
Time: 0 SEC.
Cumulative Statistics for Constructor Monoidal&
Time: 0 seconds
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}"
--------(elt (% % %))---------
--->-->Monoidal&((elt (% % %))): Improper first word in comments: horizontal
"horizontal composition (\\spad{product})"
--->-->Monoidal&(): Missing Description
; compiling file "/var/aw/var/LatexWiki/MONAL-.NRLIB/MONAL-.lsp" (written 15 SEP 2026 08:00:27 AM):
; wrote /var/aw/var/LatexWiki/MONAL-.NRLIB/MONAL-.fasl
; compilation finished in 0:00:00.000
------------------------------------------------------------------------
Monoidal& is now explicitly exposed in frame initial
Monoidal& will be automatically loaded when needed from
/var/aw/var/LatexWiki/MONAL-.NRLIB/MONAL-
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}"
--------(elt (% % %))---------
--->-->Monoidal((elt (% % %))): Improper first word in comments: horizontal
"horizontal composition (\\spad{product})"
--->-->Monoidal(): Missing Description
; compiling file "/var/aw/var/LatexWiki/MONAL.NRLIB/MONAL.lsp" (written 15 SEP 2026 08:00:27 AM):
; wrote /var/aw/var/LatexWiki/MONAL.NRLIB/MONAL.fasl
; compilation finished in 0:00:00.000
------------------------------------------------------------------------
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(R:AbelianSemiGroup): 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] (g:% * f:%):% == cod(f) ~= dom(g) => error "arity" per [dom f, cod g] elt(f:%, g:%):% == per [dom(f)+dom(g), cod(f)+cod(g)]
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/3672717930539873036-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| R) (|:| |codomain| R))))
****** level 1 ******
x:= (DEF (Rep) (NIL) (Record (: domain R) (: codomain R)))
m:= $EmptyMode
f:=
((((~= #) (= #) (|coerce| #) (|latex| #) ...)))
>> Apparent user error:
unspecified errorThe LinearOperator? domain is Moniodal over NonNegativeInteger?
)abbrev domain LIN LinearOperator LinearOperator(dim:NonNegativeInteger,K:CommutativeRing): Exports == Implementation where NNI ==> NonNegativeInteger
Exports ==> Join(Ring,BiModule(K, K), Monoidal NNI, CoercibleTo Prop NNI) with inp: List K -> % ++ incoming vector inp: List % -> % out: List K -> % ++ output vector out: List % -> % coerce: SquareMatrix(dim, K) -> % _*: (%, NonNegativeInteger) -> %
Implementation ==> add import List NNI T ==> CartesianTensor(1,dim, K) Rep == Record(domain:NNI, codomain:NNI, data:T) rep(x:%):Rep == x pretend Rep per(x:Rep):% == x pretend %
dom(f:%):NNI == rep(f).domain cod(f:%):NNI == rep(f).codomain
dat(f:%):T == rep(f).data
coerce(f:%):Prop(NNI) == dom(f)/cod(f)
0 == per [0,0, 0]
-- -- f+g : A^{n+m} -> A^p = f:A^n -> A^p + g:A^m -> A^p -- (f:% + g:%):% == 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)]
-- -- 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 -- (g:% * f:%):% == cod(f) ~= dom(g) => error "arity" r:T := product(dat(f),dat(g)) n:=dom(f)+1 m:=n+cod(f) while m>n repeat r := contract(r, n, m) m:=m-1 per [dom f, cod g, r]
1:% == per [1,1, kroneckerDelta()$T]
-- repeated composition (f:% ^ p:NNI):% == cod(f) ~= dom(f) => error "arity" q:=subtractIfCan(p,1) q case NNI => f^q * f 1
-- repeated sum (f:% * p:NNI):% == q:=subtractIfCan(p,1) q case NNI => f*q + f 0
(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]
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
coerce(x:%):OutputForm == (dat(x))::OutputForm
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/4431927989007062318-25px003.spad
using old system compiler.
LIN abbreviates domain LinearOperator
------------------------------------------------------------------------
initializing NRLIB LIN for LinearOperator
compiling into NRLIB LIN
Semantic Errors:
[1] cannot form Join of: ((Ring) (BiModule K K) (Monoidal (NonNegativeInteger)) (CoercibleTo (Prop (NonNegativeInteger))) (CATEGORY domain (SIGNATURE inp (% (List K))) (SIGNATURE inp (% (List %))) (SIGNATURE out (% (List K))) (SIGNATURE out (% (List %))) (SIGNATURE coerce (% (SquareMatrix dim K))) (SIGNATURE * (% % (NonNegativeInteger)))))
Warnings:
[1] Prop has no value
****** comp fails at level 3 with expression: ******
(|Join| (|Ring|) (|BiModule| K K) (|Monoidal| (|NonNegativeInteger|))
(|CoercibleTo| | << | (|Prop| (|NonNegativeInteger|)) | >> |)
(CATEGORY |domain| (SIGNATURE |inp| (% (|List| K)))
(SIGNATURE |inp| (% (|List| %))) (SIGNATURE |out| (% (|List| K)))
(SIGNATURE |out| (% (|List| %)))
(SIGNATURE |coerce| (% (|SquareMatrix| |dim| K)))
(SIGNATURE * (% % (|NonNegativeInteger|)))))
****** level 3 ******
x:= (Prop (NonNegativeInteger))
m:= $EmptyMode
f:=
((((% #) (K # #) (|dim| # #) (|LinearOperator| #) ...)))
>> Apparent user error:
cannot compile (Prop (NonNegativeInteger))Construction operators: input and output
L:=LIN(2,FRAC POLY INT)
LinearOperator is an unknown constructor and so is unavailable. Did you mean to use -> but type something different instead?
AB2 := A2 / B2; AB2::OutputForm = A2::OutputForm / B2::OutputForm
| (1) |
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.
Powers
AB3:=(AB1/AB1)/AB1
| (2) |
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.
B3p:=(B1*B1)*B1
| (3) |
arity(B3p)
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
| (4) |
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
| (5) |
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
| (6) |
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.
Expected error
B1A1:=B1*A1
| (7) |
arity(B1A1)
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.
Composition
AB11:=A1 B1
There are no library operations named A1 Use HyperDoc Browse or issue )what op A1 to learn if there is any operation containing " A1 " in its name.
Cannot find a definition or applicable library operation named A1 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.
Multiple inputs and outputs
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]
L is not a valid type.
___ _ _ _ _ ___ _) = _\_ _ _\/_ _/ ___ _) _/\_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.
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.