sage math:如何检查两个表达式是否相等?

sage math:如何检查两个表达式是否相等?,math,sage,Math,Sage,我如何在sage中确定两个表达式是否相等?例如: sage: var('x') x sage: e1 = 1 + x sage: e2 = x + 1 sage: e3 = x + 2 sage: is_equivalent(e1, e2) True sage: is_equivalent(e1, e3) False sage: var('y') y sage: e4 = x * (1 + y) sage: e5 = x + (x * y) sage: is_equivalent(e4, e5)

我如何在sage中确定两个表达式是否相等?例如:

sage: var('x')
x
sage: e1 = 1 + x
sage: e2 = x + 1
sage: e3 = x + 2
sage: is_equivalent(e1, e2)
True
sage: is_equivalent(e1, e3)
False
sage: var('y')
y
sage: e4 = x * (1 + y)
sage: e5 = x + (x * y)
sage: is_equivalent(e4, e5)
True
sage: is_equivalent(e4, e1)
False
sage: assume(x, 'real')
sage: e6 = sqrt(x**2) + 1
sage: is_equivalent(e6, e1)
True
已经建议/尝试的内容:(Ubuntu Linux上的sage 6.4.1)


通常的方法是从它们中得出一个等式,然后检查它是
True
还是
False

sage: e4 == e5
x*(y + 1) == x*y + x
sage: bool(_)
True
但是,请记住,如果Sage不能证明它是
真的
,它将返回
,这与假不一样。检查两个任意表达式的等价性可能需要任意长的时间,并且可能需要计算机无法预测的一系列疯狂的扩展/简化

这是在回答一个不同的问题:

sage: e1 is e2
False
这就是Python,这是一个非常强的条件,即两个对象是相同的“对象”,而在本例中它们不是

sage: a = 1
sage: b = 1
sage: a is b
False
sage: a = 1
sage: b = a
sage: a is b
True

没有更好的方法,比如指定变量是有理数?例如,为什么这不起作用(似乎很简单):
bool((x^2)^(1/2)==x)
我熟悉python,但最后还是尝试了“is”。我搜索了文档,但得到的结果太多了。顺便问一下,你知道我应该在sage docs的什么地方找到这个吗?嗯,我不得不说,它在那里,但没有组织得尽可能好。符号表达式文档可能是它的最佳布局。
sage: a = 1
sage: b = 1
sage: a is b
False
sage: a = 1
sage: b = a
sage: a is b
True