login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for SandBoxCommutativeCategory revision 3 of 11

1 2 3 4 5 6 7 8 9 10 11
Editor: yixin.cao
Time: 2008/07/26 00:20:36 GMT-7
Note: Is this the really problem?

added:

From yixin.cao Sat Jul 26 00:20:36 -0700 2008
From: yixin.cao
Date: Sat, 26 Jul 2008 00:20:36 -0700
Subject: Is this the really problem?
Message-ID: <20080726002036-0700@axiom-wiki.newsynthesis.org>

Even such a category is possible, so we can define domain D:Join(Commutative(*),Commutative(+),Commutative(max),....).
But when I need to write a algorithm package to do some computations on that domain, in which I have several new functions(supposed all (D,D)->D), say, f1, f2, f3, how do I say f1 and f3 are commutative, while f2 is not?

One choice is adding properties inference with static analysis into the compiler(is there a possibility this inference algorithm be designed perfect?). Another is to define the property commutativity directly on the function *, instead of the domain. Or both.

Can the attribute commutative("*") be replaced with a category definition like

spad
)abbrev category COM Commutative Commutative(n:Symbol):Category == with nil
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/8368204408019739389-25px001.spad using 
      old system compiler.
   COM abbreviates category Commutative 
------------------------------------------------------------------------
   initializing NRLIB COM for Commutative 
   compiling into NRLIB COM 
;;; *** |Commutative| REDEFINED Time: 0 SEC.
finalizing NRLIB COM Processing Commutative for Browser database: --->-->Commutative(constructor): Not documented!!!! --->-->Commutative(): Missing Description ------------------------------------------------------------------------ Commutative is now explicitly exposed in frame initial Commutative will be automatically loaded when needed from /var/zope2/var/LatexWiki/COM.NRLIB/code

spad
)abbrev domain COMD CommutativeDomain CommutativeDomain(): Commutative(_*) with coerce:%->OutputForm == add coerce(x)== x pretend OutputForm
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/1059174451294536257-25px002.spad using 
      old system compiler.
   COMD abbreviates domain CommutativeDomain 
------------------------------------------------------------------------
   initializing NRLIB COMD for CommutativeDomain 
   compiling into NRLIB COMD 
   compiling exported coerce : $ -> OutputForm
      COMD;coerce;$Of;1 is replaced by x 
Time: 0 SEC.
(time taken in buildFunctor: 1)
;;; *** |CommutativeDomain| REDEFINED
;;; *** |CommutativeDomain| REDEFINED Time: 0.01 SEC.
Warnings: [1] * has no value
Cumulative Statistics for Constructor CommutativeDomain Time: 0.01 seconds
finalizing NRLIB COMD Processing CommutativeDomain for Browser database: --->-->CommutativeDomain((coerce ((OutputForm) %))): Not documented!!!! --->-->CommutativeDomain(constructor): Not documented!!!! --->-->CommutativeDomain(): Missing Description ------------------------------------------------------------------------ CommutativeDomain is now explicitly exposed in frame initial CommutativeDomain will be automatically loaded when needed from /var/zope2/var/LatexWiki/COMD.NRLIB/code

axiom
CommutativeDomain has Commutative("*")
LatexWiki Image(1)
Type: Boolean
axiom
CommutativeDomain has Commutative("+")
LatexWiki Image(2)
Type: Boolean

That is amazing. As demonstrated above, CommutativeDomain is just declared to be Commutative("*") even though there is no exported operation *.

In fact, what is demonstrated here has noting to do with the actual names of operations exported by a domain, but just with the declaration that CommutativeDomain is of category Commutative("*").

Since above the definition says Commutative(n:Symbol) there should be double quotes around the *.

Is this the really problem? --yixin.cao, Sat, 26 Jul 2008 00:20:36 -0700 reply
Even such a category is possible, so we can define domain D:Join(Commutative(*),Commutative(+),Commutative(max),....). But when I need to write a algorithm package to do some computations on that domain, in which I have several new functions(supposed all (D,D)->D), say, f1, f2, f3, how do I say f1 and f3 are commutative, while f2 is not?

One choice is adding properties inference with static analysis into the compiler(is there a possibility this inference algorithm be designed perfect?). Another is to define the property commutativity directly on the function *, instead of the domain. Or both.