| 
              
                
                  
                   | 
            
            
              
              
                
      
    
                
                 | 
            
            last edited 12 years ago by test1 | 
| 1 2 3 4 5 6 7 8 9 10 11 | ||
| 
              Editor: hemmecke
               Time: 2008/07/26 09:09:01 GMT-7  | 
          ||
| Note: Re: nothing to do with the actual names of operations | ||
added:
From hemmecke Sat Jul 26 09:09:01 -0700 2008
From: hemmecke
Date: Sat, 26 Jul 2008 09:09:01 -0700
Subject: Re: nothing to do with the actual names of operations
Message-ID: <20080726090901-0700@axiom-wiki.newsynthesis.org>
I **strongly** dislike::
  Commutative2(T:Type,s:Symbol):Category == with
    s:(T,T) -> T
until somebody tells me that an identifier in the language is connected to
Symbol (which is a library domain). That this works is **magic** and requires
that 'Symbol' is built into the compiler.
        Can the attribute commutative("*") be replaced with a category
definition like
spad)abbrev category COM Commutative Commutative(n:String):Category == with nil
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/4589802368271964260-25px001.spad using 
      old system compiler.
   COM abbreviates category Commutative 
------------------------------------------------------------------------
   initializing NRLIB COM for Commutative 
   compiling into NRLIB COM 
;;;     ***       |Commutative| REDEFINED
Time: 0.01 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/codespad)abbrev domain COMD CommutativeDomain CommutativeDomain(): Commutative("*") with coerce:%->OutputForm == add coerce(x)== x pretend OutputForm
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/5314528024349234223-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:  0)
;;;     ***       |CommutativeDomain| REDEFINED
;;;     ***       |CommutativeDomain| REDEFINED
Time: 0 SEC.
   Cumulative Statistics for Constructor CommutativeDomain
      Time: 0 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/codeaxiomCommutativeDomain has Commutative("*")
| (1) | 
axiomCommutativeDomain has Commutative("+")
| (2) | 
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 nothing 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 *.
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.
yixin.cao, I do not see anything wrong with writing, for example:
  Dpackage(): Join(Commutative("f1"),Commutative("f3", ...) with
    f1:(D,D)->D
    f2:(D,D)->D
    f3:(D,D)->D
To me this a reasonable encoding of the idea that "f1 and f3 are commutative, while f2 is not". But of course it is only referring to the symbols/strings "f1" etc. and not the actual functions.
I think it is possible to try something a little more ambitious that at least appears to relate to the names of functions.
spad)abbrev category COM2 Commutative2 Commutative2(T:Type,s:Symbol):Category == with s:(T,T) -> T
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/7119483407360057115-25px001.spad using 
      old system compiler.
   COM2 abbreviates category Commutative2 
------------------------------------------------------------------------
   initializing NRLIB COM2 for Commutative2 
   compiling into NRLIB COM2 
;;;     ***       |Commutative2| REDEFINED
Time: 0 SEC.
   finalizing NRLIB COM2 
   Processing Commutative2 for Browser database:
--->-->Commutative2((s (T$ T$ T$))): Not documented!!!!
--->-->Commutative2(constructor): Not documented!!!!
--->-->Commutative2(): Missing Description
------------------------------------------------------------------------
   Commutative2 is now explicitly exposed in frame initial 
   Commutative2 will be automatically loaded when needed from 
      /var/zope2/var/LatexWiki/COM2.NRLIB/codeaxiom)show COM2(Integer,"*")
Commutative2(Integer,*) is a category constructor. Abbreviation for Commutative2 is COM2 This constructor is exposed in this frame. Issue )edit /var/zope2/var/LatexWiki/7119483407360057115-25px001.spad to see algebra source code for COM2
------------------------------- Operations --------------------------------
?*? : (Integer,Integer) -> Integer
axiom)show COM2(Float,"+")
Commutative2(Float,+) is a category constructor. Abbreviation for Commutative2 is COM2 This constructor is exposed in this frame. Issue )edit /var/zope2/var/LatexWiki/7119483407360057115-25px001.spad to see algebra source code for COM2
------------------------------- Operations --------------------------------
?+? : (Float,Float) -> Float
spad)abbrev domain COMD2 CommutativeDomain2 CommutativeDomain2(): Commutative2(%,_*) with coerce:%->OutputForm == add coerce(x)== x pretend OutputForm x * x == x
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/8953674606596896921-25px003.spad using 
      old system compiler.
   COMD2 abbreviates domain CommutativeDomain2 
------------------------------------------------------------------------
   initializing NRLIB COMD2 for CommutativeDomain2 
   compiling into NRLIB COMD2 
   compiling exported coerce : $ -> OutputForm
      COMD2;coerce;$Of;1 is replaced by x 
Time: 0.01 SEC.
   compiling exported * : ($,$) -> $
      COMD2;*;3$;2 is replaced by x 
Time: 0 SEC.
(time taken in buildFunctor:  0)
;;;     ***       |CommutativeDomain2| REDEFINED
;;;     ***       |CommutativeDomain2| REDEFINED
Time: 0 SEC.
   Cumulative Statistics for Constructor CommutativeDomain2
      Time: 0.01 seconds
   finalizing NRLIB COMD2 
   Processing CommutativeDomain2 for Browser database:
--->-->CommutativeDomain2((coerce ((OutputForm) %))): Not documented!!!!
--->-->CommutativeDomain2(constructor): Not documented!!!!
--->-->CommutativeDomain2(): Missing Description
------------------------------------------------------------------------
   CommutativeDomain2 is now explicitly exposed in frame initial 
   CommutativeDomain2 will be automatically loaded when needed from 
      /var/zope2/var/LatexWiki/COMD2.NRLIB/codeaxiom)sh CommutativeDomain2
CommutativeDomain2 is a domain constructor Abbreviation for CommutativeDomain2 is COMD2 This constructor is exposed in this frame. Issue )edit /var/zope2/var/LatexWiki/8953674606596896921-25px003.spad to see algebra source code for COMD2
------------------------------- Operations -------------------------------- ?*? : (%,%) -> % coerce : % -> OutputForm
CommutativeDomain2 has Commutative2(CommutativeDomain2,"*")
| (1) | 
axiomCommutativeDomain2 has Commutative2(CommutativeDomain2,"+")
| (2) | 
Now, I do consider the fact that this works rather amazing!
  Commutative2(T:Type,s:Symbol):Category == with
    s:(T,T) -> T
until somebody tells me that an identifier in the language is connected to
Symbol (which is a library domain). That this works is magic and requires
that Symbol is built into the compiler.