# How to Simplify equations over a Ring with Mathematica?

For example, when we work over a ring, the equation x^3=0 does not imply x^2=0 or x=0, but the vice versa is true. Can we use Mathematica to Simplify equations over a ring?

-

If you want to solve an equation over integer rings $\mathbb{Z}_n$ you should specify them with Modulus e.g.

Column[Solve[x^3 == 0, x, Modulus -> #] & /@ Range[2, 9]]


Edit

Since there was no further example of any expression to simplify over a finite ring let's define e.g. a polynomial which cannot be factorized over rationals (as Mathematica does by default)

p[x_] := x^5 + 3 x^4 + 6 x^3 - 2 x^2 + 1
Factor[p[x]]
p /@ Range[5]

1 - 2 x^2 + 6 x^3 + 3 x^4 + x^5
{9, 121, 631, 2145, 5701}


however over rings $\mathbb{Z}_n$ it is evaluated automatically with Mod[ p[x], n], (it has the Listable attribute), thus

Column[ Mod[p /@ Range[2, 10], #] & /@ Range[2, 10]]

 {{{1, 1, 1, 1, 1, 1, 1, 1, 1}},
{{1, 1, 0, 1, 1, 0, 1, 1, 0}},
{{1, 3, 1, 1, 1, 3, 1, 1, 1}},
{{1, 1, 0, 1, 4, 1, 1, 0, 1}},
{{1, 1, 3, 1, 1, 3, 1, 1, 3}},
{{2, 1, 3, 3, 2, 1, 2, 2, 1}},
{{1, 7, 1, 5, 1, 3, 1, 1, 1}},
{{4, 1, 3, 4, 1, 6, 4, 1, 0}},
{{1, 1, 5, 1, 9, 1, 1, 5, 1}} }


On the other hand you can use PolynomialMod to "simplify" a polynomial over a ring $\mathbb{Z}_n$, e.g.

Column[ PolynomialMod[ p[x], #] & /@ Range[2, 6] ]

1 + x^4 + x^5
1 + x^2 + x^5
1 + 2 x^2 + 2 x^3 + 3 x^4 + x^5
1 + 3 x^2 + x^3 + 3 x^4 + x^5
1 + 4 x^2 + 3 x^4 + x^5


So to get the table Column[ Mod[p /@ Range[2, 10], #] & /@ Range[2, 10]] as above, you can Apply as well PolynomialMod on a specific level of an adequate Table, e.g.

Column[ Apply[ PolynomialMod[ p[#2], #1] &, Table[{i, j}, {i, 2, 10}, {j, 2, 10}], {2}] ] ===
Column[ Mod[ p /@ Range[2, 10], #] & /@ Range[2, 10]]

True


In case you'd like to factorize p[x] over a finite field (for n prime $\mathbb{Z}_n$ is a field) it can be done with Modulus as well, e.g.

Column[ Factor[ p[x], Modulus -> #] & /@ Prime @ Range[4]]


Some related details (e.g. Extension to work with polynomials and algebraic functions over rings of Rationals extended by selected algebraic numbers) you could find here.

Consider another polynomial

w[x_] := 6 - 12 x + x^2 - 2 x^3 - x^4 + 2 x^5


you can solve the equation w[x] == 0 over the field of Rationals as well (by default Mathematica solves over Complexes, and then you needn't specify the domain), e.g.

Column[ Solve[w[x] == 0, x, #] & /@ {Integers, Rationals, Reals, Complexes} ]


You could factorize completely this polynomial with Extension :

Factor[ w[x]]
Factor[ w[x], Extension -> {Sqrt[2], Sqrt[3], I}]


There is also a package AbstractAlgebra to work with adequate algebraic concepts and a related book Exploring Abstract Algebra with Mathematica.

-
Nice. But it seems that the option Modulus is not capable to use with Simplify or FullSimplify. I don't want to solve the equations, but just want to simplify the relations of equations. Any idea? –  Osiris Xu Jun 20 '12 at 4:29
@OsirisXu You can use Simplify first and then use Mod. If your expression is quite simple as x^3==0you needn't to use any simplifications e.g. Mod[x^3, 9] /. x -> 6 yields 0 or directly evaluate (Mod[x^3, 9] /. x -> 6) == 0. Otherwise you should specify what you need giving an example. –  Artes Jun 20 '12 at 9:30
Cool. Is there any way to work over Ring of rational numbers QQ? Thanks. –  Osiris Xu Jun 20 '12 at 18:08
@OsirisXu If I understand what you mean, factorization is by default over Rationals, see more details mathematica.stackexchange.com/questions/4362/…. You can solve equations over Rationals, e.g. try Solve[-(6/7) - 2 x + (3 x^2)/7 + x^3 == 0, x, Rationals] and then Solve[-(6/7) - 2 x + (3 x^2)/7 + x^3 == 0, x]. –  Artes Jun 20 '12 at 19:34
@OsirisXu I edited the answer to include more details which you'll find interesting. You could edit your question as well to make it more precise since e.g. "Is there any way to work over Ring of rational numbers ?" is slightly too general and there are many aspects which can be still unclear. –  Artes Jun 21 '12 at 22:25