axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] Re: [sage-devel] Re: sage thoughts


From: daly
Subject: [Axiom-developer] Re: [sage-devel] Re: sage thoughts
Date: Thu, 10 Feb 2011 01:46:53 -0500

On Wed, 2011-02-09 at 22:18 -0800, rjf wrote:
> You say,
> > gcd(2/1,4) returns 1 "for simplicity" (!), because 2/1 is a rational.
> > This is shockingly silly.
> 
> I don't know exactly how this came up, but if 2/1 is in a different
> domain (rational)
> from 2, (integer),  then gcd should probably be 1,  since any non-
> zero
> rational number divides any other, and one commonly uses the positive
> "unit" 1 for
> such a case. You could argue that since you can coerce 2/1, you
> should.
> 
> That's sometimes OK, but not always.
> 
> Really, the issue is much broader. for example, do you also want to
> treat the complex number
> 1+0*i the same as 1?   do you want to treat the floating point number
> 1.0 the same as 1?
> 
> What about 1X1 matrices?
> 
> Is 1^0  the same as 1^0.0  or 1.0^0  or 1.0^0.0?  Do you perhaps wish
> to consider/dismiss
> the existence of number systems with signed zeros (IEEE floating-point
> standard) on the
> grounds that -0 = +0,  [true, for numerical comparison] and therefore
> there should be
> only a single zero?
> 
> While I don't know the exact formulation of this GCD problem, the
> issue of
> implicit coercion is one of the troubling sore spots in a system
> design, and should not
>  be decided by counting up casual +1 votes.
> 
> I think the Axiom people might have thought more about it than others.
> 

It is a question of domains. In Axiom you can specify the domains.

2/1 is a Fraction(Integer) aka rational
4 is an Integer
(2/1)::Integer => 2 where 2 is an Integer.
4::Fraction(Integer) is a Fraction(Integer) 

So there are several cases:
gcd((2/1),4::Fraction(Integer)) => 1 of type Fraction(Integer)
gcd((2/1)::Integer,4))          => 2 of type PositiveInteger
gcd(2/1,4)                      => 1 of type Fraction(Integer)
gcd(2,4)                        => 2 of type PositiveInteger
gcd(2,4::Fraction(Integer))     => 1 of type Fraction(Integer)

Tim Daly






reply via email to

[Prev in Thread] Current Thread [Next in Thread]