You can subscribe to this list here.
2007 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}

_{Aug}
(73) 
_{Sep}
(57) 
_{Oct}
(138) 
_{Nov}
(91) 
_{Dec}
(99) 

2008 
_{Jan}
(91) 
_{Feb}
(53) 
_{Mar}
(37) 
_{Apr}
(125) 
_{May}
(176) 
_{Jun}
(23) 
_{Jul}
(135) 
_{Aug}
(119) 
_{Sep}
(26) 
_{Oct}
(38) 
_{Nov}
(46) 
_{Dec}
(11) 
2009 
_{Jan}
(4) 
_{Feb}
(2) 
_{Mar}
(5) 
_{Apr}
(15) 
_{May}
(4) 
_{Jun}
(18) 
_{Jul}
(1) 
_{Aug}
(4) 
_{Sep}
(17) 
_{Oct}
(9) 
_{Nov}
(14) 
_{Dec}
(11) 
2010 
_{Jan}
(9) 
_{Feb}
(6) 
_{Mar}
(1) 
_{Apr}
(1) 
_{May}
(4) 
_{Jun}
(3) 
_{Jul}

_{Aug}
(10) 
_{Sep}
(7) 
_{Oct}
(7) 
_{Nov}
(36) 
_{Dec}
(23) 
2011 
_{Jan}
(2) 
_{Feb}
(1) 
_{Mar}
(1) 
_{Apr}
(11) 
_{May}
(5) 
_{Jun}
(17) 
_{Jul}
(2) 
_{Aug}
(26) 
_{Sep}
(14) 
_{Oct}
(51) 
_{Nov}
(39) 
_{Dec}
(7) 
2012 
_{Jan}
(24) 
_{Feb}
(7) 
_{Mar}
(9) 
_{Apr}
(2) 
_{May}
(9) 
_{Jun}
(7) 
_{Jul}
(3) 
_{Aug}
(1) 
_{Sep}
(8) 
_{Oct}
(12) 
_{Nov}
(1) 
_{Dec}

2013 
_{Jan}

_{Feb}

_{Mar}

_{Apr}
(35) 
_{May}
(28) 
_{Jun}
(14) 
_{Jul}
(10) 
_{Aug}
(3) 
_{Sep}
(6) 
_{Oct}

_{Nov}
(1) 
_{Dec}

2014 
_{Jan}

_{Feb}

_{Mar}

_{Apr}
(4) 
_{May}
(3) 
_{Jun}
(2) 
_{Jul}
(2) 
_{Aug}
(2) 
_{Sep}
(1) 
_{Oct}
(3) 
_{Nov}
(5) 
_{Dec}
(8) 
2015 
_{Jan}
(3) 
_{Feb}
(2) 
_{Mar}

_{Apr}

_{May}
(1) 
_{Jun}

_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}

_{Dec}

S  M  T  W  T  F  S 





1

2
(2) 
3

4

5
(2) 
6
(2) 
7

8

9
(1) 
10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

From: Gabriel Dos Reis <gdr@cs...>  20111209 14:54:32

Waldek Hebisch <hebisch@...> writes:  Bill Page wrote:  >  > Very cool. But isn't it odd to make this a function of )read ? I  > would have expected )compile ...  >  > On Fri, Dec 9, 2011 at 9:22 AM, Waldek Hebisch <hebisch@...> wrote:  > > Ralf Hemmecke wrote:  > >> ...  > >> Can someone tell me how exactly that should be done?  > >> In particular, assume that I want to recompile ax.boot from within  > >> fricas. Of course, I'd also like to immediately use the (modified) boot  > >> function.  > >  > > In reasonably new FriCAS:  > >  > > )read ax.boot  > >   Originally )read would translate .boot file to lisp and load  the lisp file. This meant that the code was executed by  Lisp interpreter. IMHO loading files to be interpreted  makes little sense, so I changed ')read' so that the  Lisp file is compiled and loaded in compiled form.  Note that this is consistent with .input files, which  are also compiled by default.   Concerning ')compile': logically it should just compile,  without loading anything. But somewhat orignal authors  thought that combining several operations is more  convenient. Tim Daly sent me recently a document on Boot that explicitly stated that Boot (the old Boot) was designed to be compiled, not interpreted as Spad scripts are. Nowadays, given that the most efficient Lisp implementations have EVAL internally compile the Lisp forms, I think the change is benign and makes sense to.  Gaby 
From: Gabriel Dos Reis <gdr@cs...>  20111206 01:23:56

Bill Page <bill.page@...> writes:  On Mon, Dec 5, 2011 at 6:23 PM, Gabriel Dos Reis wrote:  > Bill Page <bill.page@...> writes:  > ...  >  Oddly, this variant:  >   >  MonadCat(A : SetCategory, M: SetCategory > SetCategory): Category == with  >  join: M M A > M A  >   >  gives a different result:  >   >  >> System error:  >  Control stack exhausted (no more space for function call frames).  >  This is probably due to heavily nested or infinitely recursive function  >  calls, or a tail call that SBCL cannot or has not optimized away.  >   >  PROCEED WITH CAUTION.  >  > That compiles fine with OpenAxiom.  >   I am sorry. I took it for granted that it was understood that these  errors are all generated when compiling MySet with this or another  definition of MonadCat. that wasn't clear to me as you seemed to report many bugs at the same time (or maybe wa sit just refinements?); I thought I had to compile each file (in the bug report) to reproduce them each of time. I will try again. Thanks. PS: Ideally, it would be nice if I could just download one file and feed it to OpenAxiom to reproduce the bug.   Regards,  Bill Page. 
From: Bill Page <bill.page@ne...>  20111206 01:16:43

On Mon, Dec 5, 2011 at 6:23 PM, Gabriel Dos Reis wrote: > Bill Page <bill.page@...> writes: > ... >  Oddly, this variant: >  >  MonadCat(A : SetCategory, M: SetCategory > SetCategory): Category == with >  join: M M A > M A >  >  gives a different result: >  >  >> System error: >  Control stack exhausted (no more space for function call frames). >  This is probably due to heavily nested or infinitely recursive function >  calls, or a tail call that SBCL cannot or has not optimized away. >  >  PROCEED WITH CAUTION. > > That compiles fine with OpenAxiom. > I am sorry. I took it for granted that it was understood that these errors are all generated when compiling MySet with this or another definition of MonadCat. Regards, Bill Page. 
From: Gabriel Dos Reis <gdr@cs...>  20111205 23:23:43

Bill Page <bill.page@...> writes: [...]  We really want   )abbrev category MONADC MonadCat  MonadCat(T:Type, M:Type>Type):Category == with  join: M M T > M T As far as I can tell, that compiles fine in OpenAxiom.  This is equivalent in this context to what actual appears in my  OpenAxiom bug report.   )abbrev category MONADC MonadCat  MonadCat(A : Type, M: Type > Type): Category == with  if A has SetCategory then SetCategory  fmap: (A>A, %) > %  unit: A > %  join: M % > %  mult: (%, %) > % This also compiles just fine.     Just replace % by 'M T'. And the error message is the same.   Oddly, this variant:   MonadCat(A : SetCategory, M: SetCategory > SetCategory): Category == with  join: M M A > M A   gives a different result:   >> System error:  Control stack exhausted (no more space for function call frames).  This is probably due to heavily nested or infinitely recursive function  calls, or a tail call that SBCL cannot or has not optimized away.   PROCEED WITH CAUTION. That compiles fine with OpenAxiom. 
From: Bill Page <bill.page@ne...>  20111205 15:50:27

Martin, On Mon, Dec 5, 2011 at 4:47 AM, you wrote: >> > Another idea that occurred to me would be to have an equivalent to the >> > Haskell typeclass. Like a higher order (nonconcrete) category, say a >> > category where all the function parameters and returns are only >> > specified in terms of types (not values). So the equivalent to the >> > Haskell typeclass might be: >> > >> > )abbrev hcategory MONADC MonadCat >> > MonadCat(M):Category == with >> > join: M M A > M A >> > On Monday 05 Dec 2011 02:07:45 Bill Page wrote: >> Except for omitting the type of M, I do not see much difference from >> what I wrote above. >> >> > So this could be implemented with 'M' as say: >> > Integer > Set Integer or Set Integer > Set Set Integer ... >> >> I don't think this makes sense. M must be an endofunctor, i.e. >> something like 'Set' itself. >> >> > Ideally 'A' would only need to be defined in join. >> >> As I described T above, A must be the formal parameter of the monad >> MySet as the endofunctor M . > > This is a difference between what I wrote (which seem to me to be the > Haskell way of doing it) and your code. Because > > M=Set A=PI gives: > join: Set Set PI > Set PI > > M=Set A=Set PI gives: > join: Set Set Set PI > Set Set PI > > M=Set A=Set Set PI gives: > join: Set Set Set Set PI > Set Set Set PI > > So the same category represents all these, but not if A is a parameter > of the whole monad, this seems to me quite a fundamental aspect of > monads which your code does not support? > Your comments have made me look more carefully at what I wrote in my reply and you are right, there was something wrong with my original code: > On Saturday 03 Dec 2011 21:42:20 Bill Page wrote: >> I would like to write: >> >> )abbrev category MONADC MonadCat >> MonadCat(T:Type, M:T>T):Category == with >> join: M M T > M T >> >> )abbrev domain MYSET MySet >> MySet(T:SetCategory): MonadCat(T,MySet) with >> finiteAggregate >> == add >> ... It does not make sense for me to write M:T>T. T is a *domain* but M is supposed to be an endofunctor from some *category* to the same category. We really want )abbrev category MONADC MonadCat MonadCat(T:Type, M:Type>Type):Category == with join: M M T > M T This is equivalent in this context to what actual appears in my OpenAxiom bug report. )abbrev category MONADC MonadCat MonadCat(A : Type, M: Type > Type): Category == with if A has SetCategory then SetCategory fmap: (A>A, %) > % unit: A > % join: M % > % mult: (%, %) > %  Just replace % by 'M T'. And the error message is the same. Oddly, this variant: MonadCat(A : SetCategory, M: SetCategory > SetCategory): Category == with join: M M A > M A gives a different result: >> System error: Control stack exhausted (no more space for function call frames). This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away. PROCEED WITH CAUTION.  But contrary to what you say, there is no problem (in principle) to write: MonadCat(PI,Set) to get join: Set Set PI > Set PI MonadCat(PI,Set Set) to get join: Set Set Set PI > Set Set PI etc. Regards, Bill Page. 
From: Bill Page <bill.page@ne...>  20111202 16:06:04

Bertfried, In FriCAS you should make the following change (:= instead of == and explicitly define rep and per): Rep := List T rep(x:%):Rep == x pretend Rep per(x:Rep):% == x pretend % But as I mentioned in my email to Gaby this code does not compile in FriCAS. It does compile and run in OpenAxiom. I haven't tried with old Axiom yet. Here is another variant that works in OpenAxiom but still fails in FriCAS where I have just replaced 'MySet %' with 'MySet MySet T'. As I understand it, this is now syntactically equivalent in OpenAxiom. I am not sure if this is the case in FriCAS. )abbrev domain MYSET MySet MySet(T:SetCategory): SetAggregate(T) with finiteAggregate join: MySet MySet T > MySet T == add Rep == List T rep(x:%):Rep == x pretend Rep per(x:Rep):% == x pretend % Rep2 := List List T rep2(x:MySet MySet T):Rep2 == x pretend Rep2 per2(x:Rep2):MySet MySet T == x pretend MySet MySet T coerce(x:%):OutputForm == brace [i::OutputForm for i in rep x] x = y == rep(x) = rep(y) construct(x) == per removeDuplicates(x)$Rep parts(x:%):List T == rep x join x == construct concat rep2 x  Perhaps as you know the point of this exercise was to be able to write 'MySet MySet T' (or equivalent) in the definition of MySet itself. There are still many functions missing in this definition. Of course as a functor we also need the equivalent of fmap, etc. Then my goal was to abstract the part of the definition involving join and return as a Monad category. Cheers, Bill Page. On Fri, Dec 2, 2011 at 10:44 AM, Bertfried Fauser <bertfried.fauser@...> wrote: > Dear Bill, > > Your code (which I copied and pasted into monad2.spad): > >> Here is some more realistic example code that does compile and run: >> >> )abbrev domain MYSET MySet >> MySet(T:SetCategory): SetAggregate(T) with >> finiteAggregate >> join: MySet % > MySet T >> == add >> Rep == List T >> rep(x:%):Rep == x pretend Rep >> per(x:Rep):% == x pretend % >> >> Rep2 := List List T >> rep2(x:MySet(%)):Rep2 == x pretend Rep2 >> per2(x:Rep2):MySet(%) == x pretend MySet(%) >> >> coerce(x:%):OutputForm == brace [i::OutputForm for i in rep x] >> x = y == rep(x) = rep(y) >> construct(x) == per removeDuplicates(x)$Rep >> parts(x:%):List T == rep x >> join x == construct concat rep2 x >> > > (1) > )co monad2 > Compiling FriCAS source code from file > /home/fauser/fricas/monad2.spad using old system compiler. > MYSET abbreviates domain MySet >  > initializing NRLIB MYSET for MySet > compiling into NRLIB MYSET > compiling local rep2 : MySet $ > Rep2 > MYSET;rep2 is replaced by x > Time: 0.03 SEC. > > compiling local per2 : Rep2 > MySet $ > MYSET;per2 is replaced by x > Time: 0 SEC. > > compiling exported coerce : $ > OutputForm > Internal Error > Error while instantiating type MySet$$ > > ? > Cheers > BF. > > >  > % PD Dr Bertfried Fauser > % Research Fellow, School of Computer Science, Univ. of Birmingham > % Honorary Associate, University of Tasmania > % Privat Docent: University of Konstanz, Physics Dept > <http://www.unikonstanz.de>; > % contact > URL : http://www.cs.bham.ac.uk/~fauserb/ > % Phone : +441214142795 
From: Bill Page <bill.page@ne...>  20111202 02:24:57

Gaby, On Mon, Nov 21, 2011 at 8:52 AM, you wrote: > Bill Page <bill.page@...> writes: > ... >  Suppose I >  was writing an "endofunctor" domain constructor like 'Set' and I >  wanted to treat constructions like 'Set Set R', i.e. sets of sets as >  something special. E.g. >  >  MySet:(T:SetCategory):SetCategory == with >  join: MySet MySet T > MySet T > > This would not compile in OpenAxiom because of syntax errors, etc. > > I suspect the colon before the open parenthesis is a typo. I removed > it, but then I could not make sense of the rest. The return type > "SetCategory" indicates that MySet is intended to be a functor, however > the body, i.e. the right hand side of the '==' is a category expression > not a domain expression. The OpenAxiom compiler rejects the construct > for that reason. Yes. I am sorry that my example was so sloppy and I appreciate your effort to understood my intention. Thank you. > I tried a variation of what you wrote > > )abbrev domain MYSET MySet > MySet(T:SetCategory): SetCategory with > join: MySet MySet T > MySet T > == add > Rep == Void > join x == per void() > > that compiles just fine. > Yes, thank you for giving this example. Maybe it is interesting that this example does not compile in FriCAS. > Whether one can use it is a different issue: that is a coinductive > definition without a witness of it being inhabited. > Here is some more realistic example code that does compile and run: )abbrev domain MYSET MySet MySet(T:SetCategory): SetAggregate(T) with finiteAggregate join: MySet % > MySet T == add Rep == List T rep(x:%):Rep == x pretend Rep per(x:Rep):% == x pretend % Rep2 := List List T rep2(x:MySet(%)):Rep2 == x pretend Rep2 per2(x:Rep2):MySet(%) == x pretend MySet(%) coerce(x:%):OutputForm == brace [i::OutputForm for i in rep x] x = y == rep(x) = rep(y) construct(x) == per removeDuplicates(x)$Rep parts(x:%):List T == rep x join x == construct concat rep2 x  (1) > m1:MySet(Integer) := construct([1,2,3])$MySet(Integer) (1) {1,2,3} Type: MySet Integer (2) > m2:MySet(Integer) := construct([4,5,6])$MySet(Integer) (2) {4,5,6} Type: MySet Integer (3) > m12:=construct([m1,m2])$MySet(MySet Integer) (3) {{1,2,3},{4,5,6}} Type: MySet MySet Integer (4) > join m12 (4) {1,2,3,4,5,6} Type: MySet Integer  Could you elaborate a little on what you mean by: "that is a coinductive definition without a witness of it being inhabited" Does this have something to do with the need to for a type coercion such as 'rep2' above? Regards, Bill Page. 