The Representation of Solution Sets

Any combination of equations or inequalities can be thought of as implicitly defining a region in some kind of space. The fundamental function of (RefLink[Reduce, paclet:ref/Reduce]) is to turn this type of implicit description into an explicit one.

An implicit description in terms of equations or inequalities is sufficient if you just want to test whether a point specified by values of variables is in the region. But to understand the structure of the region, or to generate points in it, you typically needs a more explicit description, of the kind obtained from (RefLink[Reduce, paclet:ref/Reduce]).

Here are inequalities that implicitly define a semicircular region:

semi=x>0&&x^2+y^2<1

This shows that the point (1/2,1/2) lies in the region:

semi/.{x->1/2,y->1/2}

(RefLink[Reduce, paclet:ref/Reduce]) gives a more explicit representation of the region:

Reduce[semi,{x,y}]

If you pick a value for x consistent with the first inequality, you then immediately get an explicit inequality for y:

%/.x->1/2

(RefLink[Reduce, paclet:ref/Reduce])[expr,{(Subscript[x, 1]),(Subscript[x, 2]),…}] is set up to describe regions by first giving fixed conditions for (Subscript[x, 1]), then giving conditions for (Subscript[x, 2]) that depend on (Subscript[x, 1]), then conditions for (Subscript[x, 3]) that depend on (Subscript[x, 1]) and (Subscript[x, 2]), and so on. This structure has the feature that it allows you to pick points by successively choosing values for each of the (Subscript[x, i]) in turn—in much the same way as when you uses iterators in functions like (RefLink[Table, paclet:ref/Table]).

This gives a representation for the region in which you first pick a value for y, then x:

Reduce[semi,{y,x}]

In some simple cases the region defined by a system of equations or inequalities will end up having only one component. In such cases, the output from (RefLink[Reduce, paclet:ref/Reduce]) will be of the form (Subscript[e, 1])&&(Subscript[e, 2])…, where each of the (Subscript[e, i]) is an equation or inequality involving variables up to (Subscript[x, i]).

In most cases, however, there will be several components, represented by output containing forms such as (Subscript[u, 1])||(Subscript[u, 2])||…. (RefLink[Reduce, paclet:ref/Reduce]) typically tries to minimize the number of components used in describing a region. But in some cases multiple parametrizations may be needed to cover a single connected component, and each one of these will appear as a separate component in the output from (RefLink[Reduce, paclet:ref/Reduce]).

In representing solution sets, it is common to find that several components can be described together by using forms such as …&&((Subscript[u, 1])||(Subscript[u, 2]))&&…. (RefLink[Reduce, paclet:ref/Reduce]) by default does this so as to return its results as compactly as possible. You can use (RefLink[LogicalExpand, paclet:ref/LogicalExpand]) to generate an expanded form in which each component appears separately.

In generating the most compact results, (RefLink[Reduce, paclet:ref/Reduce]) sometimes ends up making conditions on later variables (Subscript[x, i]) depend on more of the earlier (Subscript[x, i]) than is strictly necessary. You can force (RefLink[Reduce, paclet:ref/Reduce]) to generate results in which a particular (Subscript[x, i]) only has minimal dependence on earlier (Subscript[x, i]) by giving the option Backsubstitution->(RefLink[True, paclet:ref/True]). Usually this will lead to much larger output, although sometimes it may be easier to interpret.

By default, (RefLink[Reduce, paclet:ref/Reduce]) expresses the condition on y in terms of x:

Reduce[x^2+y==4&&x^3-4y==8,{x,y}]

Backsubstituting allows conditions for y to be given without involving x:

Reduce[x^2+y==4&&x^3-4y==8,{x,y},Backsubstitution->True]

Cylindrical algebraic decomposition.

For polynomial equations or inequalities over the reals, the structure of the result returned by (RefLink[Reduce, paclet:ref/Reduce]) is typically a cylindrical algebraic decomposition or CAD. Sometimes (RefLink[Reduce, paclet:ref/Reduce]) can yield a simpler form. But in all cases you can get the complete CAD by using (RefLink[CylindricalDecomposition, paclet:ref/CylindricalDecomposition]). For systems containing inequalities only, (RefLink[GenericCylindricalDecomposition, paclet:ref/GenericCylindricalDecomposition]) gives you "most" of the solution set and is often faster.

Here is the cylindrical algebraic decomposition of a region bounded by a hyperbola:

CylindricalDecomposition[x^2-y^2>=1,{x,y}]

This gives the two-dimensional part of the solution set along with a curve containing the boundary:

GenericCylindricalDecomposition[x^2-y^2>=1,{x,y}]

This finds solutions from both parts of the solution set:

SemialgebraicComponentInstances[x^2-y^2>=1,{x,y}]

The results include a few points from each piece of the solution set:

Show[{RegionPlot[x^2-y^2>=1,{x,-3,3},{y,-3,3}],Graphics[Point[{x,y}]/.%]}]