login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for #285 equal in AlgebraicNumber fails revision 1 of 3

1 2 3
Editor:
Time: 2007/11/17 22:21:16 GMT-8
Note:

changed:
-
I try :

\begin{axiom}
a := 3 + sqrt 5
(-a = (a^2)^(1/2))::Boolean
\end{axiom}

But

\begin{axiom}
(sqrt 2 = - sqrt 2)::Boolean
\end{axiom}

I expect the same result, and I prefer false.

From BillPage Wed Apr 19 10:30:27 -0500 2006
From: Bill Page
Date: Wed, 19 Apr 2006 10:30:27 -0500
Subject: meaning of sqrt
Message-ID: <20060419103027-0500@wiki.axiom-developer.org>

Do you consider $\sqrt{2}$ to be a particular (single) solution
of $x^2-2=0$, e.g. the positive one, or *the* general solution of
this polynomial? I prefer the latter, so I think both (2) and (3)
should be 'true'.

From BobMcElrath Wed Apr 19 11:11:19 -0500 2006
From: Bob McElrath
Date: Wed, 19 Apr 2006 11:11:19 -0500
Subject: meaning of sqrt
Message-ID: <20060419161112.GA28426@mcelrath.org>
In-Reply-To: <20060419103027-0500@wiki.axiom-developer.org>

Axiom's sqrt does not seem to be multiple valued, so therefore I
disagree with you Bill, it cannot be the general solution of the
polynomial.  As with most other systems, sqrt is taken to be the
positive root only, and if it comes from the solution of a quadratic,
the +/- multiple valued-ness must be encoded elsewhere.

e.g.
\begin{axiom}
sqrt(2)::Float
\end{axiom}
gives only one value.

Also note that axiom is not even self-consistent here:
\begin{axiom}
-a::Float
(a^2)^(1/2)::Float
\end{axiom}
which clearly are not equal.



From BillPage Wed Apr 19 18:11:31 -0500 2006
From: Bill Page
Date: Wed, 19 Apr 2006 18:11:31 -0500
Subject: equality is domain specific
Message-ID: <20060419181131-0500@wiki.axiom-developer.org>

If you write:
\begin{axiom}
-a=(a^2)^(1/2)
coerce(%%(7))$Equation(AlgebraicNumber)
\end{axiom}

you are asking about equality in the domain of
AlgebraicNumber (whatever that happens to be). But
if you write:
\begin{axiom}
coerce(%%(7)::Equation(Float))$Equation(Float)
\end{axiom}

then you are referring to equality in the domain
Float. These need not be the same thing. But I agree
that Axiom does not have an entirely consistent
treatment of 'sqrt' even within a given domain. :(


From BillPage Wed Apr 19 18:22:55 -0500 2006
From: Bill Page
Date: Wed, 19 Apr 2006 18:22:55 -0500
Subject: equality in AlgebraicNumber
Message-ID: <20060419182255-0500@wiki.axiom-developer.org>

From:

http://wiki.axiom-developer.org/axiom--test--1/src/algebra/ConstantSpad

In AlgebraicNumber we find::

    a=b == trueEqual((a-b)::Rep,0::Rep)

In InnerAlgebraicNumber it says::

    trueEqual(a,b) ==
       -- if two algebraic numbers have the same norm (after deleting repeated
       -- roots, then they are certainly conjugates. Note that we start with a
       -- monic polynomial, so don't have to check for constant factors.
       -- this will be fooled by sqrt(2) and -sqrt(2), but the = in
       -- AlgebraicNumber knows what to do about this.

but unfortunately is seems that the special treatment of 'sqrt(2)'
(and similar algebraic numbers) was never implemented. :(


From BillPage Wed Apr 19 20:35:13 -0500 2006
From: Bill Page
Date: Wed, 19 Apr 2006 20:35:13 -0500
Subject: equality in InnerAlgebraicNumber
Message-ID: <20060419203513-0500@wiki.axiom-developer.org>

InnerAlgebraicNumber (IAN) is described as --
  Algebraic closure of the rational numbers.

while AlgebraicNumber (AN) is described as --
  Algebraic closure of the rational numbers, with mathematical =

Apparently IAN implements 'trueEqual' as the equivalence relation
defined by conjugation::

  trueEqual : (%,%) -> Boolean
      ++ trueEqual(x,y) tries to determine if the two numbers are equal

\begin{axiom}
trueEqual(sqrt(2),-sqrt(2))$IAN
\end{axiom}


From WilliamSit Wed Apr 19 22:18:11 -0500 2006
From: William Sit
Date: Wed, 19 Apr 2006 22:18:11 -0500
Subject: So = in AN is not transitive.
Message-ID: <20060419221811-0500@wiki.axiom-developer.org>

This is quite strange. As I understand it, 'AN' is almost 'IAN' (only three functions have over-riding implementations: 'zero?' , 'one?' , and '=' ) and yet,  '=' in 'AN' is not transitive, but apparently, 'trueEqual' in 'IAN' is:
\begin{axiom}
a:AN:=sqrt(5)+3
b:=(a^2)^(1/2)
(a=b)::Boolean
(a=-b)::Boolean
(b=-b)::Boolean
f:IAN:=sqrt(5)+3
g:=(f^2)^(1/2)
trueEqual(f,-g)
trueEqual(f,g)
trueEqual(g,-g)
\end{axiom}

But this is deceptive since 'trueEqual(g, -g)' is not 'trueEqual(g+g,0)'. Note we cannot use 'trueEqual(a,b)' or 'trueEqual(a-b,0)' since there is *no* coercion from 'AN' to 'IAN' .  Moreover, 'trueEqual' is not transitive either.

\begin{axiom}
trueEqual(g+g,0)  -- not the same as trueEqual(g, -g)
trueEqual(-f,g)
trueEqual(f,-f)
\end{axiom}

There is also '=' in 'IAN', which is implemented using '=' in 'EXPR INT' .

Perhaps 'trueEqual' should be called 'conjugate?' instead and exported from 'AN', and '=' in 'AN' is really not possible. Also, 'trueEqual' is only used in 'constant.spad' and changing its name will not affect any other constructors. But 

From BillPage Thu Apr 20 00:16:28 -0500 2006
From: Bill Page
Date: Thu, 20 Apr 2006 00:16:28 -0500
Subject: conjugacy relation is an equivalence relation
Message-ID: <20060420001628-0500@wiki.axiom-developer.org>

http://mathworld.wolfram.com/ConjugateElements.html

> Two elements alpha, beta of a field K, which is an extension
> field of a field F, are called conjugate (over F) if they are
> both algebraic over F and have the same minimal polynomial.
> ...
> This conjugacy relation is an equivalence relation on the set
> of algebraic elements in a given extension K of the field F.

So if 'trueEqual' is supposed to implement 'conjugate?' then
the bug must be in 'trueEqual', I think.

Some details of the algorithm are here:

http://www.csd.uwo.ca/~watt/pub/reprints/1995-issac-dynev.pdf

See especially reference ![DDD].

From BillPage Thu Apr 20 00:47:57 -0500 2006
From: Bill Page
Date: Thu, 20 Apr 2006 00:47:57 -0500
Subject: 
Message-ID: <20060420004757-0500@wiki.axiom-developer.org>

Anonymous wrote:

> I expect the same result, and I prefer false.

This result is possible using the RealClosure package:
\begin{axiom}
Ran := RealClosure( Fraction(Integer) )
a1:Ran := 3 + sqrt 5
(-a1 = (a1^2)^(1/2))::Boolean
a2:=sqrt(2)$Ran
a3:=-sqrt(2)$Ran
(a2=a3)::Boolean
\end{axiom}


Submitted by : (unknown) at: 2007-11-17T22:21:16-08:00 (17 years ago)
Name :
Axiom Version :
Category : Severity : Status :
Optional subject :  
Optional comment :

I try :

axiom
a := 3 + sqrt 5

\label{eq1}{\sqrt{5}}+ 3(1)
Type: AlgebraicNumber?
axiom
(-a = (a^2)^(1/2))::Boolean

\label{eq2} \mbox{\rm true} (2)
Type: Boolean

But

axiom
(sqrt 2 = - sqrt 2)::Boolean

\label{eq3} \mbox{\rm false} (3)
Type: Boolean

I expect the same result, and I prefer false.

meaning of sqrt --Bill Page, Wed, 19 Apr 2006 10:30:27 -0500 reply
Do you consider \sqrt{2} to be a particular (single) solution of x^2-2=0, e.g. the positive one, or the general solution of this polynomial? I prefer the latter, so I think both (2) and (3) should be true.

meaning of sqrt --Bob McElrath?, Wed, 19 Apr 2006 11:11:19 -0500 reply
Axiom's sqrt does not seem to be multiple valued, so therefore I disagree with you Bill, it cannot be the general solution of the polynomial. As with most other systems, sqrt is taken to be the positive root only, and if it comes from the solution of a quadratic, the +/- multiple valued-ness must be encoded elsewhere.

e.g.

axiom
sqrt(2)::Float

\label{eq4}1.4142135623730950488(4)
Type: Float

gives only one value.

Also note that axiom is not even self-consistent here:

axiom
-a::Float

\label{eq5}-{5.2360679774997896964}(5)
Type: Float
axiom
(a^2)^(1/2)::Float

\label{eq6}5.2360679774997896964(6)
Type: Expression(Float)

which clearly are not equal.

equality is domain specific --Bill Page, Wed, 19 Apr 2006 18:11:31 -0500 reply
If you write:
axiom
-a=(a^2)^(1/2)

\label{eq7}{-{\sqrt{5}}- 3}={\sqrt{{6 \ {\sqrt{5}}}+{14}}}(7)
Type: Equation(AlgebraicNumber?)
axiom
coerce(%%(7))$Equation(AlgebraicNumber)

\label{eq8} \mbox{\rm true} (8)
Type: Boolean

you are asking about equality in the domain of AlgebraicNumber? (whatever that happens to be). But if you write:

axiom
coerce(%%(7)::Equation(Float))$Equation(Float)

\label{eq9} \mbox{\rm false} (9)
Type: Boolean

then you are referring to equality in the domain Float. These need not be the same thing. But I agree that Axiom does not have an entirely consistent treatment of sqrt even within a given domain. :(

equality in AlgebraicNumber? --Bill Page, Wed, 19 Apr 2006 18:22:55 -0500 reply
From:

http://wiki.axiom-developer.org/axiom--test--1/src/algebra/ConstantSpad

In AlgebraicNumber? we find:

    a=b == trueEqual((a-b)::Rep,0::Rep)

In InnerAlgebraicNumber? it says:

    trueEqual(a,b) ==
       -- if two algebraic numbers have the same norm (after deleting repeated
       -- roots, then they are certainly conjugates. Note that we start with a
       -- monic polynomial, so don't have to check for constant factors.
       -- this will be fooled by sqrt(2) and -sqrt(2), but the = in
       -- AlgebraicNumber knows what to do about this.

but unfortunately is seems that the special treatment of sqrt(2) (and similar algebraic numbers) was never implemented. :(

equality in InnerAlgebraicNumber? --Bill Page, Wed, 19 Apr 2006 20:35:13 -0500 reply
InnerAlgebraicNumber? (IAN) is described as
Algebraic closure of the rational numbers.
while AlgebraicNumber? (AN) is described as
Algebraic closure of the rational numbers, with mathematical =

Apparently IAN implements trueEqual as the equivalence relation defined by conjugation:

  trueEqual : (%,%) -> Boolean
      ++ trueEqual(x,y) tries to determine if the two numbers are equal

axiom
trueEqual(sqrt(2),-sqrt(2))$IAN

\label{eq10} \mbox{\rm true} (10)
Type: Boolean

So = in AN is not transitive. --William Sit, Wed, 19 Apr 2006 22:18:11 -0500 reply
This is quite strange. As I understand it, AN is almost IAN (only three functions have over-riding implementations: zero? , one? , and = ) and yet, = in AN is not transitive, but apparently, trueEqual in IAN is:
axiom
a:AN:=sqrt(5)+3

\label{eq11}{\sqrt{5}}+ 3(11)
Type: AlgebraicNumber?
axiom
b:=(a^2)^(1/2)

\label{eq12}\sqrt{{6 \ {\sqrt{5}}}+{14}}(12)
Type: AlgebraicNumber?
axiom
(a=b)::Boolean

\label{eq13} \mbox{\rm true} (13)
Type: Boolean
axiom
(a=-b)::Boolean

\label{eq14} \mbox{\rm true} (14)
Type: Boolean
axiom
(b=-b)::Boolean

\label{eq15} \mbox{\rm false} (15)
Type: Boolean
axiom
f:IAN:=sqrt(5)+3

\label{eq16}{\sqrt{5}}+ 3(16)
Type: InnerAlgebraicNumber?
axiom
g:=(f^2)^(1/2)

\label{eq17}\sqrt{{6 \ {\sqrt{5}}}+{14}}(17)
Type: InnerAlgebraicNumber?
axiom
trueEqual(f,-g)

\label{eq18} \mbox{\rm true} (18)
Type: Boolean
axiom
trueEqual(f,g)

\label{eq19} \mbox{\rm true} (19)
Type: Boolean
axiom
trueEqual(g,-g)

\label{eq20} \mbox{\rm true} (20)
Type: Boolean

But this is deceptive since trueEqual(g, -g) is not trueEqual(g+g,0). Note we cannot use trueEqual(a,b) or trueEqual(a-b,0) since there is no coercion from AN to IAN . Moreover, trueEqual is not transitive either.

axiom
trueEqual(g+g,0)
not the same as trueEqual(g, -g)

\label{eq21} \mbox{\rm false} (21)
Type: Boolean
axiom
trueEqual(-f,g)

\label{eq22} \mbox{\rm true} (22)
Type: Boolean
axiom
trueEqual(f,-f)

\label{eq23} \mbox{\rm false} (23)
Type: Boolean

There is also = in IAN, which is implemented using = in EXPR INT .

Perhaps trueEqual should be called conjugate? instead and exported from AN, and = in AN is really not possible. Also, trueEqual is only used in constant.spad and changing its name will not affect any other constructors. But

conjugacy relation is an equivalence relation --Bill Page, Thu, 20 Apr 2006 00:16:28 -0500 reply
http://mathworld.wolfram.com/ConjugateElements.html
Two elements alpha, beta of a field K, which is an extension field of a field F, are called conjugate (over F) if they are both algebraic over F and have the same minimal polynomial. ... This conjugacy relation is an equivalence relation on the set of algebraic elements in a given extension K of the field F.

So if trueEqual is supposed to implement conjugate? then the bug must be in trueEqual, I think.

Some details of the algorithm are here:

http://www.csd.uwo.ca/~watt/pub/reprints/1995-issac-dynev.pdf

See especially reference [DDD].

Anonymous wrote:
I expect the same result, and I prefer false.

This result is possible using the RealClosure? package:

axiom
Ran := RealClosure( Fraction(Integer) )

\label{eq24}\hbox{\axiomType{RealClosure}\ } (\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Integer}\ }))(24)
Type: Type
axiom
a1:Ran := 3 + sqrt 5

\label{eq25}{\sqrt{5}}+ 3(25)
Type: RealClosure?(Fraction(Integer))
axiom
(-a1 = (a1^2)^(1/2))::Boolean

\label{eq26} \mbox{\rm false} (26)
Type: Boolean
axiom
a2:=sqrt(2)$Ran

\label{eq27}\sqrt{2}(27)
Type: RealClosure?(Fraction(Integer))
axiom
a3:=-sqrt(2)$Ran

\label{eq28}-{\sqrt{2}}(28)
Type: RealClosure?(Fraction(Integer))
axiom
(a2=a3)::Boolean

\label{eq29} \mbox{\rm false} (29)
Type: Boolean