I am using ToExpression because I plan on generating multiple different expressions programmatically, and then comparing them to see if any are mathematically/algebraically equivalent. I don't know how to do that without manipulating strings.
The following two expressions produce the correct output:
// expecting false, returns false
Reduce[ForAll[{a, b, c}, (a + b) - c == (a - b) + c]]
// expecting true, returns true
Reduce[ForAll[{a, b, c}, (a + b) - c == (a - c) + b]]
But I just tried that on one of the original comparison expressions, and so far it is failing to produce any output in Mathematica. It's been running for about 10 minutes now.
// expecting true, hasn't returned any output yet...
Reduce[ForAll[{a, b, c}, (a^b)^c == (a^c)^b]]
And... Actually, it looks like it just stopped. Still no output. I guess there is a 10 minute time limit for online calculations.
Can you think of any way to compare expressions to get the following results:
(a-b)+c == (c-b)+a -> True
(a-b)+c == (a-c)+b -> False
(a-b)/(c-d) == (b-a)/(d-c) -> True
(a-b)/(c-d) == (b-a)/(c-d) -> False
(a-b)/((c-d)^(d-e)) == (a-b)*((c-d)^(e-d)) -> True
(a-b)/((c-d)^(d-e)) == (a-b)*((d-c)^(e-d)) -> False
(a^b)^c == (a^c)^b -> True
(a^b)^c == (b^a)^c -> False
a^(b*c) == (a^c)^b -> True
a^(b^c) == (a^b)^c -> False