sage: var("x, y, z")
(x, y, z)
sage: Ex = (x-y)^2*(y-z)*(z-x) + (y-z)^2*(z-x)*(x-y) + (z-x)^2*(x-y)*(y-z)
sage: Ex
-(x - y)^2*(x - z)*(y - z) + (x - y)*(x - z)^2*(y - z) - (x - y)*(x - z)*(y - z)^2
sage: Ex.expand()
0
sage: Ex.factor()
-(x - y)^2*(x - z)*(y - z) + (x - y)*(x - z)^2*(y - z) - (x - y)*(x - z)*(y - z)^2
sage: Ex.simplify()
-(x - y)^2*(x - z)*(y - z) + (x - y)*(x - z)^2*(y - z) - (x - y)*(x - z)*(y - z)^2
sage: Ex.simplify_full()
0
sage: Ex._sympy_().expand()._sage_()
0
sage: Ex._sympy_().factor()._sage_()
0
sage: Ex._giac_().factor()._sage_()
0
sage: Ex._fricas_().factor()._sage_()
0
sage: mathematica.Factor(Ex).sage()
0
So what ?
Sage’s factor
doesn’t factorize this expression ? Big fail ! Film at 11…
As illustrated, Sage has lots of ways to factorize this expression. BTW, expand
a symbolic expression is often a clever way to (start to) finding a “nice” expression of this quantity.
To understand why factorizing this expression is not trivial, meditate :
sage: Ex.operator()
<function add_vararg at 0x7ff7aaf70700>
sage: [u.expand() for u in Ex.operands()]
[-x^3*y + 2*x^2*y^2 - x*y^3 + x^3*z - x^2*y*z - x*y^2*z + y^3*z - x^2*z^2 + 2*x*y*z^2 - y^2*z^2,
x^3*y - x^2*y^2 - x^3*z - x^2*y*z + 2*x*y^2*z + 2*x^2*z^2 - x*y*z^2 - y^2*z^2 - x*z^3 + y*z^3,
-x^2*y^2 + x*y^3 + 2*x^2*y*z - x*y^2*z - y^3*z - x^2*z^2 - x*y*z^2 + 2*y^2*z^2 + x*z^3 - y*z^3]
sage: [u.expand().cancel() for u in Ex._sympy_().args]
[x**3*y - x**3*z - x**2*y**2 - x**2*y*z + 2*x**2*z**2 + 2*x*y**2*z - x*y*z**2 - x*z**3 - y**2*z**2 + y*z**3,
-x**3*y + x**3*z + 2*x**2*y**2 - x**2*y*z - x**2*z**2 - x*y**3 - x*y**2*z + 2*x*y*z**2 + y**3*z - y**2*z**2,
-x**2*y**2 + 2*x**2*y*z - x**2*z**2 + x*y**3 - x*y**2*z - x*y*z**2 + x*z**3 - y**3*z + 2*y**2*z**2 - y*z**3]
sage: Ex._sympy_().cancel()
0
HTH,