Ask Your Question

simply_full for expressions with exponents

asked 2011-04-19 02:06:09 -0600

viorel preoteasa gravatar image

updated 2011-04-28 12:25:49 -0600

Kelvin Li gravatar image


I am new to sage and I am trying to simplify some expression. If I try:

var('a'); h = 2^(a - 2) * 3^(a + 3) / 6^a; h.simplify_full();

I get 27 / 4 which is right. However if I try

var('a'); h = (2^(a - 2) * 3^(a + 3) / 6^a == 27 / 4); h.simplify_full();

I get (27/4) == (27/4). I don't understand why I do not get the answer True in this case.

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2011-04-19 03:44:01 -0600

DSM gravatar image

updated 2011-04-19 03:45:27 -0600

This is because of the way the Sage type system works. When you ask Sage to simplify an equation, it tries to do just that: it tries to find a simpler expression. It doesn't change an equation into a boolean truth value. In this case, the fact you're using the symbol "h" for both a (non-relational) expression and a relation is confusing things a bit, I think.

You have the variable a, which is an Expression:

sage: a = var("a")
sage: type(a)
<type 'sage.symbolic.expression.Expression'>

h, which is also an Expression:

sage: h = 2^(a - 2) * 3^(a + 3) / 6^a
sage: type(h)
<type 'sage.symbolic.expression.Expression'>

but isn't an equation or inequality:

sage: h.is_relational()

and which simplifies as you note.

sage: h.simplify_full()

Now we write the equation:

sage: eq = h == 27/4
sage: type(eq)
<type 'sage.symbolic.expression.Expression'>

This is also an Expression, but now it's a little different:

sage: eq.is_relational()

If you want to find out if the equation is true, you convert the equation to a boolean value:

sage: bool(eq)

In this case you don't even need to simplify it. Does that make sense? Expressions can get simplified, but in general they don't simplify to truth values. You have to ask for that explicitly if that's what you want.

Warning: bool(eq) doesn't mean what you think it might!

Sage inherits the convention that while bool(eq)==True means that the expression is true (subject to whatever assumptions are in effect), bool(eq) == False doesn't mean the expression is (necessarily) false! It only means it couldn't figure out how to prove it.

edit flag offensive delete link more


Thank you for your answer. It was certainly useful. I have expected that my second expression, which is an equation (var('a'); h = (2^(a - 2) * 3^(a + 3) / 6^a == 27 / 4)) to be simplified directly to true. But I can use bool(h.simplify_full()) to check if the relation is true. However it still feels strange because if you just type the expression 27/4 == 27/4 then the system returns true and h.simplify_full() is just 27/4 == 27/4. The problem seems more acute when something is not necessarily true. If you test bool(a == b) for a, b variables you get false and not a == b as you would get when using simplification. On the other hand you would not be able to simplify an expression h as before to true, just using simplify_full.

viorel preoteasa gravatar imageviorel preoteasa ( 2011-04-19 04:00:28 -0600 )edit

Here it is another example: ((2^(a - 2) * 3^(a + 3) / 6^a == 27 / 4) and a == a).simplify_full() this is simplified to a == a. Why here not 27/4 == 27 / 4 and a == a? The expression (a == a and (2^(a - 2) * 3^(a + 3) / 6^a == 27 / 4)).simplify_full() returns 27/4 == 27/4. Why terms in a conjunction are simplified away if they are true, except the last term?

viorel preoteasa gravatar imageviorel preoteasa ( 2011-04-19 04:07:12 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2011-04-19 02:06:09 -0600

Seen: 1,204 times

Last updated: Apr 19 '11