|
|
|
last edited 13 years ago by test1 |
| 1 2 3 4 5 6 7 8 9 | ||
|
Editor: Bill Page
Time: 2009/05/13 08:05:16 GMT-7 |
||
| Note: corrections | ||
changed: -**On Date: Thu, 14 May 2009 21:46:06 +0200 Franz Lehner wrote:** **Date: Fri, 15 May 2009 21:03:00 +0200 Franz Lehner wrote:** removed: -There seems to be some confusion with free modules. changed: -FreeModule1 is of category FreeModuleCat, -its Rep however is FreeModule. FreeModuleCat does not require OrderedSet, but FreeModule does. FreeModule1 is of category FreeModuleCat, its Rep however is FreeModule. removed: - removed: - changed: -TensorProduct(R:CommutativeRing, B1:SetCategory, B2:SetCategory,M1:FreeModuleCat(R,B1),M2:FreeModuleCat(R,B2)): TPcat == TPimp where - TPcat == Join(TensorProductCategory(R,M1,M2),FreeModuleCat(R,Product(B1,B2))) TensorProduct(R : CommutativeRing, B1 : OrderedSet, B2 : OrderedSet, _ M1 : FreeModuleCat(R, B1), M2 : FreeModuleCat(R, B2)): TPcat == TPimp where TPcat == Join(TensorProductCategory(R,M1,M2),FreeModuleCat(R,Product(B1,B2))) with if M1 has Algebra(R) and M2 has Algebra(R) then Algebra(R) changed: - TPimp == FreeModule1(R,Product(M1,M2)) add - -- Representation - -- Rep == FreeModule1(R,Product(M1,M2)) - Rep == List TERM TPimp == FreeModule1(R, Product(B1, B2)) add changed: - - -- One should expect the following 3 functions to be inherited from FreeModule1 - -- but there are problems if these are omitted. - outTerm(r:R, s:B1xB2):OutputForm == - r=1 => s::OutputForm - r::OutputForm * s::OutputForm - coerce(a:%):OutputForm == - empty? (a pretend Rep) => (0$R)::OutputForm - reduce(_+, reverse_! [outTerm(t.c, t.k) for t in (a pretend Rep)])$List(OutputForm) - leadingMonomial(x:%):B1xB2 == (x pretend Rep).first.k - - product(x1:M1,x2:M2):% == - zero? x1 or zero? x2 => return 0 - x1l:List TERM1 := ListOfTerms x1 - x2l:List TERM2 := ListOfTerms x2 - res:List Rep := [[[makeprod(s1.k,s2.k),s1.c*s2.c ] for s2 in x2l] for s1 in x1l] - (reduce(concat,res)) pretend % product(x1:M1,x2:M2):% == zero? x1 or zero? x2 => return 0 ltx1:List TERM1 := ListOfTerms x1 ltx2:List TERM2 := ListOfTerms x2 res : List TERM := [] for s1 in ltx1 repeat for s2 in ltx2 repeat res := concat!(res,[makeprod(s1.k, s2.k), s1.c*s2.c]$TERM) res pretend % if M1 has Algebra(R) and M2 has Algebra(R) then (x1:% * x2:%):% == res : % := 0 for t1 in ListOfTerms x1 repeat for t2 in ListOfTerms x2 repeat -- the coefficients t1c:R := t1.c t2c:R := t2.c -- the basis elements t1k:B1xB2 := t1.k t2k:B1xB2 := t2.k t1a: M1 := monom(selectfirst t1k,1) t1b: M2 := monom(selectsecond t1k,1) t2a: M1 := monom(selectfirst t2k,1) t2b: M2 := monom(selectsecond t2k,1) res:= res + t1.c*t2.c *product(t1a*t2a,t1b*t2b) res removed: -\end{axiom} -The code seems to work partially, at least elements are created, -but most of the other functions are not accessible. Eq: - -\begin{axiom} -leadingMonomial t -\end{axiom} - -\begin{axiom} -numberOfMonomials t -\end{axiom} - -The last output shows that t was really created and the above errors -are due to malfunction of the inheritance mechanism. - -**Questions:** - - -1. The missing functions are probably due to the mixup of categories. - Why does the compiler not complain? - -2. Is there a way to extract the basis automatically from FreeModule? - Typing TensorProduct(R,B1,B2,M,N) every time is tedious. - That would need functions returning domains I guess. - -3. Is it difficult to implement a rep/per mechanism? - The current magic is rather mysterious, - moreover the error messages of the compiler are somewhat cryptic. - I had a hard time interpreting the message:: - - >> Apparent user error: - NoValueMode - is an unknown mode - - before I split:: - - reduce(concat,[[[makeprod(s1.k,s2.k),s1.c*s2.c ]@TERM for s2 in x2l] for s1 in x1l]) pretend % - - into two lines:: - - res:List Rep := [[[makeprod(s1.k,s2.k),s1.c*s2.c ]@TERM for s2 in x2l] for s1 in x1l] - (reduce(concat,res)) pretend % - -4. After TensorProduct ... == FreeModule1(R,Product(M1,M2)) add ..., - is it better to use:: - - Rep == FreeModule1(R,Product(M1,M2)) - - or rather:: - - Rep == List TERM - - as I did? - -**On Date: Fri, 15 May 2009 03:23:33 +0200 (CEST) Waldek Hebisch wrote:** - -The following seem to work OK: - -\begin{axiom} -)clear completely -\end{axiom} - -\begin{spad} -)abbrev package TENSORD TensorProduct -TensorProduct(R : CommutativeRing, B1 : OrderedSet, B2 : OrderedSet, _ - M1 : FreeModuleCat(R, B1), M2 : FreeModuleCat(R, B2)): TPcat == TPimp where - TPcat == Join(TensorProductCategory(R,M1,M2),FreeModuleCat(R,Product(B1,B2))) - TERM1 == Record(k: B1, c: R) - TERM2 == Record(k: B2, c: R) - B1xB2 == Product(B1,B2) - TERM == Record(k: B1xB2, c: R) - TPimp == FreeModule1(R, Product(B1, B2)) add - import Rep, TERM1, TERM2, TERM, B1xB2 - - product(x1:M1,x2:M2):% == - zero? x1 or zero? x2 => return 0 - x1l:List TERM1 := ListOfTerms x1 - x2l:List TERM2 := ListOfTerms x2 - res : % := 0 - for s1 in x1l repeat - for s2 in x2l repeat - res := res + monom(makeprod(s1.k, s2.k), s1.c*s2.c) - res -\end{spad} - -Note that both B1 and B2 is required to be OrderedSet, and I use -just FreeModule1(R, Product(B1, B2)) - -Note that the version I wrote does not use pretend. My version -may be quite slow -- if this is a problem than one can build a -list using cons and add pretend. However, list must be created -in correct order, otherwise functions from FreeMonoid would -work incorrectly. - -\begin{axiom} -M:=FreeModule1(Integer,Symbol) -N:=FreeModule1(Integer,Symbol) -a1:='a1::M -a2:='a2::M -b1:='b1::N -b2:='b2::N -MxN:=TensorProduct(Integer,Symbol,Symbol,M,N); -t:=product(2*a1+3*a2,5*b1+7*b2)$MxN; -t
Date: Fri, 15 May 2009 21:03:00 +0200 Franz Lehner wrote:
Attached is a prototype for tensor products. It is free modules over commutative rings.
FreeModule? is defined in poly.spad with a local category. FreeModuleCat? is defined in xpoly.spad. FreeModuleCat? does not require OrderedSet?, but FreeModule? does. FreeModule1? is of category FreeModuleCat?, its Rep however is FreeModule?.
(1) -> <spad>
)abbrev category TENSORC TensorProductCategory TensorProductCategory(R:CommutativeRing,M : Module(R), N : Module(R)):Category == Module(R) with product: (M, N) -> %
)abbrev category TENSORP TensorProductProperty TensorProductProperty(R:CommutativeRing,M : Module(R), N : Module(R), _ MxN : TensorProductCategory(R, M, N), S : Module(R)): Category == with eval: (MxN, (M, N) -> S) -> S
)abbrev package TENSORD TensorProduct TensorProduct(R : CommutativeRing,B1 : OrderedSet, B2 : OrderedSet, _ M1 : FreeModuleCat(R, B1), M2 : FreeModuleCat(R, B2)): TPcat == TPimp where TPcat == Join(TensorProductCategory(R, M1, M2), FreeModuleCat(R, Product(B1, B2))) with if M1 has Algebra(R) and M2 has Algebra(R) then Algebra(R) TERM1 == Record(k: B1, c: R) TERM2 == Record(k: B2, c: R) B1xB2 == Product(B1, B2) TERM == Record(k: B1xB2, c: R) TPimp == FreeModule1(R, Product(B1, B2)) add import Rep, TERM1, TERM2, TERM, B1xB2 product(x1:M1, x2:M2):% == zero? x1 or zero? x2 => return 0 ltx1:List TERM1 := ListOfTerms x1 ltx2:List TERM2 := ListOfTerms x2 res : List TERM := [] for s1 in ltx1 repeat for s2 in ltx2 repeat res := concat!(res, [makeprod(s1.k, s2.k), s1.c*s2.c]$TERM) res pretend % if M1 has Algebra(R) and M2 has Algebra(R) then (x1:% * x2:%):% == res : % := 0 for t1 in ListOfTerms x1 repeat for t2 in ListOfTerms x2 repeat -- the coefficients t1c:R := t1.c t2c:R := t2.c -- the basis elements t1k:B1xB2 := t1.k t2k:B1xB2 := t2.k t1a: M1 := monom(selectfirst t1k, 1) t1b: M2 := monom(selectsecond t1k, 1) t2a: M1 := monom(selectfirst t2k, 1) t2b: M2 := monom(selectsecond t2k, 1) res:= res + t1.c*t2.c *product(t1a*t2a, t1b*t2b) res</spad>
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/7772204117579672776-25px001.spad
using system compiler.
TENSORC abbreviates category TensorProductCategory
------------------------------------------------------------------------
initializing NRLIB TENSORC for TensorProductCategory
compiling into NRLIB TENSORC
;;; *** |TensorProductCategory| REDEFINED
Time: 0 SEC.
finalizing NRLIB TENSORC
Processing TensorProductCategory for Browser database:
--->/usr/local/lib/fricas/target/x86_64-linux-gnu/../../src/algebra/TENSCAT.spad-->TensorProductCategory(constructor): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-linux-gnu/../../src/algebra/TENSCAT.spad-->TensorProductCategory((product (% M N))): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-linux-gnu/../../src/algebra/TENSCAT.spad-->TensorProductCategory: Missing Description
; compiling file "/var/aw/var/LatexWiki/TENSORC.NRLIB/TENSORC.lsp" (written 24 OCT 2026 06:46:22 PM):
; wrote /var/aw/var/LatexWiki/TENSORC.NRLIB/TENSORC.fasl
; compilation finished in 0:00:00.004
------------------------------------------------------------------------
TensorProductCategory is now explicitly exposed in frame initial
TensorProductCategory will be automatically loaded when needed from
/var/aw/var/LatexWiki/TENSORC.NRLIB/TENSORC
TENSORP abbreviates category TensorProductProperty
------------------------------------------------------------------------
initializing NRLIB TENSORP for TensorProductProperty
compiling into NRLIB TENSORP
;;; *** |TensorProductProperty| REDEFINED
Time: 0 SEC.
finalizing NRLIB TENSORP
Processing TensorProductProperty for Browser database:
--->/usr/local/lib/fricas/target/x86_64-linux-gnu/../../src/algebra/TENSPRP.spad-->TensorProductProperty(constructor): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-linux-gnu/../../src/algebra/TENSPRP.spad-->TensorProductProperty((eval (S MxN (Mapping S M N)))): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-linux-gnu/../../src/algebra/TENSPRP.spad-->TensorProductProperty: Missing Description
; compiling file "/var/aw/var/LatexWiki/TENSORP.NRLIB/TENSORP.lsp" (written 24 OCT 2026 06:46:22 PM):
; wrote /var/aw/var/LatexWiki/TENSORP.NRLIB/TENSORP.fasl
; compilation finished in 0:00:00.000
------------------------------------------------------------------------
TensorProductProperty is now explicitly exposed in frame initial
TensorProductProperty will be automatically loaded when needed from
/var/aw/var/LatexWiki/TENSORP.NRLIB/TENSORP
TENSORD abbreviates package TensorProduct
------------------------------------------------------------------------
initializing NRLIB TENSORD for TensorProduct
compiling into NRLIB TENSORD
Semantic Errors:
[1] FreeModuleCat is not a known type
Warnings:
[1] FreeModuleCat has no value
****** comp fails at level 1 with expression: ******
((|FreeModuleCat| R (|Product| B1 B2)))
****** level 1 ******
x:= (FreeModuleCat R (Product B1 B2))
m:= $EmptyMode
f:=
((((M2 # #) (M1 # #) (B2 # #) (B1 # #) ...)))
>> Apparent user error:
cannot compile (FreeModuleCat R (Product B1 B2))M:=FreeModule1(Integer,Symbol)
There are no library operations named FreeModule1 Use HyperDoc Browse or issue )what op FreeModule1 to learn if there is any operation containing " FreeModule1 " in its name.
Cannot find a definition or applicable library operation named FreeModule1 with argument type(s) Type Type
Perhaps you should use "@" to indicate the required return type,or "$" to specify which version of the function you need.
Demonstrating the axioms of the tensor product:
x:M
M is not a valid type.