# New to sage, but it seems wrong.

I am doing some calculations and I was just check on some simplifications and came across a discrepancy. Logically, this does not make any sense to me, so I must assume this is something weird with sage that I am not aware of. I put the problem in a new worksheet to check that I didn't have some variable assigned to a different value elsewhere by accident.

[I apologize for the code and the formatting to follow, I can't upload an image since I am a new user]

in: l=arccosh(-8sqrt(2)(sqrt(2) - 2)/((2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2)^2(2sqrt(2)/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2) - 4/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2))(sqrt(2)/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2) - 2/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2))) + 1)

in: l

out:"arccosh(-4sqrt(2)(sqrt(2) - 2)/((2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2)^2(sqrt(2)/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2) - 2/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2))^2) + 1)

in: n=cosh(l)

in: n

out:"-4sqrt(2)(sqrt(2) - 2)/((2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2)^2(sqrt(2)/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2) - 2/(2^(3/4)sqrt(sqrt(2) + 2) + sqrt(2) + 2))^2) + 1

in: bool(n==5+4*sqrt(2))

out:"True"

in: bool(l==arccosh(n))

out:"True"

in: bool(l==arccosh(5+4*sqrt(2)))

out:"False"

So, what this says, I have some number l, which is arccosh of an ugly string, and I name the ugly string n. Turns out n simplifies to 5+4sqrt(2), which I check in the middle of the code with bool. And sage agrees, and I check that l is still arccosh of n, and sage agrees. BUT, then sage says that l is NOT arccosh of 5+4sqrt(2), which we see at the end of my code.

I don't understand how this could be giving me seemingly contradictory statements. Any help would be very appreciated.

edit retag close merge delete

2

As it turns out, bool only returns True when Sage knows the answer is true, and otherwise returns False - even if it turns out it is true. So apparently whatever algorithm is checking the individual parts isn't able to check the last statement properly. I'm not sure if that happens in Pynac or Maxima, but hopefully someone will be able to give you more details; however, that is the essence.

1

There is nothing wrong in being new to sage. (I have very often the same feeling.)

And Sage is so big that even those of us who are now superannuated in Sage terms feel new as soon as we step into an unfamiliar corner of it!

Sort by » oldest newest most voted

The following code reproduces the issue.

s0 = 2^(3/4) * sqrt( sqrt(2) + 2 ) + sqrt(2) + 2

s = ( 1 - 8*sqrt(2)*(sqrt(2) - 2)
/
( s0^2 * (2*sqrt(2)/s0 - 4/s0) * (sqrt(2)/s0 - 2/s0) ) )

S = ( 1 - 8*sqrt(2)*(sqrt(2) - 2)
/
( s0^2 * (2*sqrt(2)-4)/s0 * (sqrt(2)-2)/s0 ) )

l = arccosh( s )
n =    cosh( l )

L = arccosh( S )
N =    cosh( L )

bool( n == 5+4*sqrt(2)  )
bool( l == arccosh( n ) )
bool( l == arccosh( 5+4*sqrt(2) ) )

bool( N == 5+4*sqrt(2)  )
bool( L == arccosh( N ) )
bool( L == arccosh( 5+4*sqrt(2) ) )


I'm just using a new variable s0 for the repeatedly used denominator. In the posted code, there is some expression (2*sqrt(2)/s0 - 4/s0) that can be humanly immediately rephrased as (2*sqrt(2)-4)/s0. Same for the half values. But let us make distinction between the two expressions. So we have two distinct expressions s and S. We propagate the change for l and n, getting capitalized variables. Running the boolean evaluations against N and L we have (in the sage interpreter, started from the linux console):

sage: bool( N == 5+4*sqrt(2)  )
....: bool( L == arccosh( N ) )
....: bool( L == arccosh( 5+4*sqrt(2) ) )
....:
True
True
True


Doing the same job for the lower case variables...

sage: bool( n == 5+4*sqrt(2)  )
....: bool( l == arccosh( n ) )
....: bool( l == arccosh( 5+4*sqrt(2) ) )
....:
True
True
False


As said in the above comment to the post (and in so many other places), the last False means that the "standard program/plan" started by sage to test equality did not lead to "the same". The False should be considered as a "can not prove it is true by doing the usual check operations". We can of course help sage simplify one more step...

sage: bool( l.simplify_full() == arccosh( 5+4*sqrt(2) ) )
True

more

The small L is a bad name for a variable. (Even if we tolerate with no hesitation one letter python variables.) Even with glasses, it is hard to not see the one first in it. (Only the big O is the alternative to have a similar bad situation, but fortunately we have a "function" with this name in mathematics - and thus also in sage, this is generally considered ok, so the small L wins the first place for a bad notation.)