On Jan 11, 2008, at 4:19 AM, Burcin Erocal wrote:

> On Fri, 4 Jan 2008 18:03:23 -0800
> Robert Bradshaw <[EMAIL PROTECTED]> wrote:
>
>> I'm going to separate the issues here--multiplication and addition.
>> The former is easily handled by implementing the coercion ZZ ->
>> BooleanMonomials via Z/2Z. David Roe and I still need to finish
>> pushing the new coercion model through, but I've been sidetracked
>> doing 3d and other stuff.
>
> In this case there is no coercion between Z/2Z and BooleanMonomials,
> but I can live with the fact that 1*x or x*1 doesn't work.

Is this because 0 is not a BooleanMonomial? Otherwise, I think there  
is a coercion (as multiplicative groups, and as rings if one looks at  
the "ambient algebra").

> An argument for making these work is that 1 should be treated as
> the unit in any multiplicative structure and it is really
> counterintuitive to get an error message after typing 1*x.  This was
> probably the intention behind including a special case for 1 in
> MonoidElement.__mul__.
>
>> As for addition, this violates the underlying assumption that
>> arithmetic on M is closed in M (with the exception of division which
>> passes to the fraction field). Here is the solution I propose:
>>
>> Monoid parents (such as BooleanMonomials) would implement an
>> ambient_algebra() function. It could optionally take a basering (for
>> groups returning a group ring, for monomials returning a polynomial
>> ring). This would be kind of like Mark Hansen's Combinatorial
>> Algebras. In element.pyx one would have
>>
>> cdef class MonoidElement(Element):
>>
>>      def __add__(left, right):
>>          if not have_same_parent(left, right):
>>              return coercion_model.bin_op_c(left, right, add)
>>          A = left. ambient_algebra()
>>          return A(left) + A(right)
>>
>> Thoughts?
>
> I like the idea of the ambient_algebra function, though I cannot  
> follow
> the code. I guess bin_op_c would have to be modified to consider the
> ambient_algebra if the operation is addition.

No, I don't think there is a need to modify bin_op_c at all.

> I've been staring at the coercion code a lot lately. If there is an
> agreement on the design, I could try implementing it.

Yes. Just one question--why do you need to separate the monomial and  
polynomial types? Why not just have everything be a polynomial?

- Robert

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to