領域上の等式と不等式
Mathematica は通常,方程式の変数は任意の複素数を表すことができると仮定する.しかしReduceを使うときは変数がもっと限定された領域内のオブジェクトを表すことを明示的に Mathematica に伝えることができる.
領域内で解く
Reduceはデフォルトで

が複素数であり得ると仮定し,5つの複素解すべてを与える.
| Out[1]= |  |
しかしここでは

が実数であると仮定して実数解のみを返す.
| Out[2]= |  |
ここでは

が整数であると仮定して整数解のみを返す.
| Out[3]= |  |
一変数の単一の多項式は常に有限個の離散解を持つ.そのような場合,Reduce[eqns, vars, dom]は領域 dom 内にある解を選択することで解のフィルタの働きをしていると考えることができる.
しかし変数が増えると,ある変数の値が他の変数の値に依存するといったようなことが起り得るパラメトリックな曲線や曲面に方程式の解が対応し,途端に話は複雑になる可能性がある.このような依存関係はしばしば方程式あるいは不等式の集合で表現される.しかし,その形式はある領域から別の領域に移動すると甚だしく変化することがある.
| Out[4]= |  |
実数の解を表すためには不等式を導入する必要がある.
| Out[5]= |  |
| Out[6]= |  |
入力に含まれるのが等式のみであれば,Reduceはデフォルトによってすべての変数が複素数であると仮定する.しかし入力に不等式が含まれている場合は,不等式は実数のみしか比較できないのでReduceは含まれる代数的変数はどれも実数であると仮定する.
変数は不等式の中にあるので実数であると仮定される.
| Out[7]= |  |
整方程式と不等式の解のためのブロック構築の概略
実領域と複素領域上の多項式の系の場合,解は常に有限個の要素からなり,その要素内で代数あるいは関数によって変数の値が与えられる.
ここでは要素が

についての方程式あるいは不等式によって区別されている.
| Out[8]= |  |
ここでは要素が

についての不等式で区別されている.
| Out[9]= |  |
原則としてReduceは実変数と複素変数を持った整方程式と不等式のどのような集合についても常に完全な解を求めることができるが,変数の数が増えるにつれて要素の数が指数関数的に増加するため,結果は非常に複雑になることが多い.
| Out[10]= |  |
SinやExpのような関数を導入した途端に,変数が実変数あるいは複素変数1つの方程式でも解の要素が無限になることがある.Reduceは新たなパラメータを導入してこれらの要素にラベルを付ける.デフォルトでは与えられた解の 
番目のパラメータにC[n]という名前が付けられる.一般的には,オプション設定GeneratedParameters->f を使ってそれが
という名前になるように指定することができる.
ここの要素には整数パラメータ

によるラベルが付けられている.
| Out[11]= |  |
Reduceは実変数と複素変数を持つ方程式だけでなく整数領域の方程式も扱うことができる.ディオファントス(Diophantus)方程式のようなものを解くのは大変難しいことが多い.
実数上でのこの方程式の解を表すのは極めて簡単である.
| Out[12]= |  |
| Out[13]= |  |
このような方程式を効果的に解くのには大きな数を因数分解する必要がある.
| Out[14]= |  |
Reduceは整数領域のどのような線形方程式の系も不等式の系も解くことができる.
変数の
個の線形方程式では,一般に
個のパラメータが必要である.しかし不等式の場合ははるかに多くのパラメータが必要なことが多い.
変数は2つしかないが,ここでは3つのパラメータが必要である.
| Out[15]= |  |
変数が2つの場合,Reduceは整数についてのいかなる二次方程式も解くことができる.結果はフィボナッチ列に類似しており二次無理数のベキによって表される.
| Out[16]= |  |
| Out[17]= |  |
Reduceは整数についての方程式の多くの特定のクラスを扱うことができる.
| Out[18]= |  |
右辺を

にすると式には解がなくなる.
| Out[19]= |  |
整数についての方程式はときに全くランダムな解の集合を持つように見えることがある.そして,方程式にほんの少し変更を加えただけで解が全くなくなることがある.
実数と複素数についての整方程式の場合,解が存在するかどうかを決定するための確かな「アルゴリズム」が存在する.しかし整数についての整方程式の場合は,ヒルベルト(Hilbert)の第10問題が解けないことから分かるように,そのような一般的な方法は決して存在しない.
特定のクラスの方程式の場合は,そのようなアルゴリズムを見付けるのは可能であり,実際に多くがReduceに実装されている.しかし異なったクラスの方程式を扱うことは数論の全く違った分野と全く違った種類の計算を必要とするように見えることが多い.実際に,いくつかの変数を埋めることにより,他の変数の解が可能なすべてのプログラムの出力に対応するようにできる「普遍的な」整数の整方程式の存在が知られている.ここから,このような方程式には一般的に代数関数のように固定要素によって構築される解で構成される閉じた形は決して存在しないことになる.
Sinのような関数が含まれるようにすると,実数と複素数を含む方程式についても同じ問題が起り得る.
ここの
Reduceは事実上整数についての方程式を解かなくてはならない.
| Out[20]= |  |
モジュロ
の整数を含む方程式の処理
モジュロ
の整数方程式の可能な解の数は有限なので,Reduceはシステマティックにその解を求めることができる.
| Out[21]= |  |
Reduceはいくつかの異なる剰余を持つ方程式を扱うことができる.
| Out[22]= |  |
| Reduce[expr,vars,dom] | すべての変数のデフォルトの領域を指定する |
Reduce[{expr1,...,x1 dom1,...},vars] | 変数の明示的な各領域を指定する |
変数の領域を指定する別の方法
これは

は整数であるが

は実数であると仮定する.
| Out[23]= |  |
Reduceは通常複素変数を単一のオブジェクトとして扱う.しかし,解析的ではなかったり分岐切断線を持つ関数を扱う際は,複素変数を実数部分Re[z]と虚数部分Im[z]の2つの部分に分割する必要があることがある.
| Out[24]= |  |
| Out[25]= |  |
Reduceはデフォルトにより不等式に代数的に表れる数は実数であると仮定する.しかしComplexesをデフォルトの領域として明示的にこれを上書きすることもできる.そのような場合は特定の変数がなお実数であると指定することができると便利である.
| Out[26]= |  |
こうすると
Reduceは

が複素数である場合を考慮するようになる.
| Out[27]= |  |

は代数的に表れてはいないので,
Reduceはすぐにこれが複素数であると仮定する.
| Out[28]= |  |
ここでは

は実数だが

は複素数にもなり得る.
| Out[29]= |  |
領域中の特定の解を求める
Reduceは常に連立方程式あるいは連立不等式の解を完全に表すものを返す.しかし,特定の解の例だけを求めたい場合もあるだろう.そのようなときはFindInstanceを使うとよい.
FindInstance[expr, vars, dom]が
を返した場合は,expr が指定領域にある変数のいかなる値によっても満足されないことをMathematica が事実上証明したことを意味している.expr が満足される場合は,「方程式と不等式の操作:不等式」の不等式についての項で説明してあるように,FindInstanceは一般に極めて恣意的に満足する値を取り出す.
特に整数方程式の場合,たとえReduceが完全な解を求めることができなくても,FindInstanceが方程式の特定の解を求めることができることがしばしばある.そのような場合には方程式の最も小さな解のうちのいずれかが返される.
| Out[30]= |  |
FindInstanceの特徴のひとつに,変数がTrueあるいはFalseという値を持ち得るブール式と一緒にも使える点が挙げられる.式がTrueとなるような変数の真理値が選べるようにFindInstanceを使って特定の式が「満足可能」であるかどうかを検証することができる.

と

に何を選んでもこの式を満足することはできない.
| Out[31]= |  |
| Out[32]= |  |