On Mon, Apr 2, 2012 at 8:40 AM, Sergiu Ivanov
<unlimitedscol...@gmail.com> wrote:
> On Sun, Apr 1, 2012 at 10:26 PM, Aaron Meurer <asmeu...@gmail.com> wrote:
>> On Sun, Apr 1, 2012 at 12:08 PM, Ronan Lamy <ronan.l...@gmail.com> wrote:
>>
>>> Besides, how can a and b know which they belong to? This would require
>>> having several different versions of e.g. sqrt(6): one in QQ[sqrt(6)],
>>> one in QQ[sqrt(2), sqrt(3)], one in RR, one in CC, ... IIUC, Sage does
>>> exactly that, but it feels profoundly wrong.
>>
>> I agree with this.  Doing it this way feels like just too much
>> unnecessary work (for the user).  I think it makes sense to just
>> define sqrt(6) in one way, namely, as 6**(1/2), and let each ring or
>> field figure out how it makes sense in itself (or doesn't).  This
>> feels natural because sqrt(6) is actually implemented as Pow(6,
>> Rational(1, 2)).  Maybe if you are treating QQ<sqrt(6)> as a vector
>> space, you can internally convert sqrt(6) to something like [0, 1].
>> But the coercion rules should make it so that you never need to even
>> care about that, unless you are specifically working with code that
>> requires this implementation, or if you are in the coercion code.
>
> I think we absolutely must distinguish between concrete rings of
> numbers and abstract rings.  I absolutely agree that having the user
> explicitly specify which sqrt() to apply to a given number goes
> against usual practise.  However, just as Tom says, I don't see
> absolutely any problem with the fact that an *abstract* ring will have
> to explicitly define sqrt(), should this definition make any sense.
>
>>> It should clearly be the other way round: R.mul(a, b) should be defined as 
>>> a*b.
>>> And since we'd like ring operations to be symbolic objects, we should
>>> even have R.mul = Lambda((x, y), x*y).
>>
>> So supposing that we had QQ<sqrt(6)>, and we wanted to define a*b as
>> [a1*b1 + 6*a2*b2, a1*b2 + a2*b1], where a = [a1, a2], b = [b1, b2],
>> and a = [a1, a2] means that a = a1 + a2*sqrt(6).  Would it make sense
>> to make R.mul equal to Lambda((x, y), x.as_vector()*y.as_vector())?
>
> This would make sense *iff* R would have a large number of useful
> properties (for example, if it were a vector space).  Attempting to
> transform the arguments of R.mul to vectors imposes a lot of
> unnecessary restrictions on R (like that it should be isomorphic to a
> vector space).
>
> I hope I understood your statement correctly.

I meant just for this specific R, QQ<sqrt(6)>. Other rings may have a
different multiplication rule.

Aaron Meurer

>
> Sergiu
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To post to this group, send email to sympy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sympy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sympy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sympy@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to