Ask Your Question

viorel preoteasa's profile - activity

2020-07-16 18:14:29 +0200 received badge  Student (source)
2013-06-14 11:43:19 +0200 received badge  Famous Question (source)
2012-08-24 23:56:34 +0200 received badge  Notable Question (source)
2012-03-01 21:09:32 +0200 received badge  Popular Question (source)
2011-04-19 11:15:02 +0200 marked best answer simply_full for expressions with exponents

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.

2011-04-19 11:15:02 +0200 received badge  Scholar (source)
2011-04-19 11:14:58 +0200 received badge  Supporter (source)
2011-04-19 11:07:12 +0200 commented answer simply_full for expressions with exponents

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?

2011-04-19 11:00:28 +0200 commented answer simply_full for expressions with exponents

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.

2011-04-19 09:06:09 +0200 asked a question simply_full for expressions with exponents


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.