On Mon, Apr 2, 2012 at 8:40 AM, Sergiu Ivanov <[email protected]> wrote: > On Sun, Apr 1, 2012 at 10:26 PM, Aaron Meurer <[email protected]> wrote: >> On Sun, Apr 1, 2012 at 12:08 PM, Ronan Lamy <[email protected]> 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 [email protected]. > To unsubscribe from this group, send email to > [email protected]. > 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
