Using Assumptions

Mathematica normally makes as few assumptions as possible about the objects you ask it to manipulate. This means that the results it gives are as general as possible. But sometimes these results are considerably more complicated than they would be if more assumptions were made.

Refine[expr,assum]refine expr using assumptions
Simplify[expr,assum]simplify with assumptions
FullSimplify[expr,assum]full simplify with assumptions
FunctionExpand[expr,assum]function expand with assumptions

Doing operations with assumptions.

Simplify by default does essentially nothing with this expression.
In[1]:=
Click for copyable input
Out[1]=
The reason is that its value is quite different for different choices of .
In[2]:=
Click for copyable input
Out[2]=
With the assumption , Simplify can immediately reduce the expression to 0.
In[3]:=
Click for copyable input
Out[3]=
Without making assumptions about and , nothing can be done.
In[4]:=
Click for copyable input
Out[4]=
If and are both assumed positive, the log can be expanded.
In[5]:=
Click for copyable input
Out[5]=

By applying Simplify and FullSimplify with appropriate assumptions to equations and inequalities, you can in effect establish a vast range of theorems.

Without making assumptions about , the truth or falsity of this equation cannot be determined.
In[6]:=
Click for copyable input
Out[6]=
Now Simplify can prove that the equation is true.
In[7]:=
Click for copyable input
Out[7]=
This establishes the standard result that the arithmetic mean is larger than the geometric one.
In[8]:=
Click for copyable input
Out[8]=
This proves that lies in the range for all positive arguments.
In[9]:=
Click for copyable input
Out[9]=

Simplify and FullSimplify always try to find the simplest forms of expressions. Sometimes, however, you may just want Mathematica to follow its ordinary evaluation process, but with certain assumptions made. You can do this using Refine. The way it works is that Refine[expr, assum] performs the same transformations as Mathematica would perform automatically if the variables in expr were replaced by numerical expressions satisfying the assumptions assum.

There is no simpler form that Simplify can find.
In[10]:=
Click for copyable input
Out[10]=
Refine just evaluates Log[x] as it would for any explicit negative number .
In[11]:=
Click for copyable input
Out[11]=

An important class of assumptions is those which assert that some object is an element of a particular domain. You can set up such assumptions using , where the character can be entered as or \[Element].

xdom or Element[x,dom]assert that x is an element of the domain dom
{x1,x2,...}domassert that all the are elements of the domain dom
pattdomassert that any expression which matches patt is an element of the domain dom

Asserting that objects are elements of domains.

This confirms that is an element of the domain of real numbers.
In[12]:=
Click for copyable input
Out[12]=
These numbers are all elements of the domain of algebraic numbers.
In[13]:=
Click for copyable input
Out[13]=
Mathematica knows that is not an algebraic number.
In[14]:=
Click for copyable input
Out[14]=
Current mathematics has not established whether is an algebraic number or not.
In[15]:=
Click for copyable input
Out[15]=
This represents the assertion that the symbol is an element of the domain of real numbers.
In[16]:=
Click for copyable input
Out[16]=
Complexesthe domain of complex numbers
Realsthe domain of real numbers
Algebraicsthe domain of algebraic numbers
Rationalsthe domain of rational numbers
Integersthe domain of integers
Primesthe domain of primes
Booleansthe domain of Booleans (True and False)

Domains supported by Mathematica.

If is assumed to be an integer, is zero.
In[17]:=
Click for copyable input
Out[17]=
This establishes the theorem if is assumed to be a real number.
In[18]:=
Click for copyable input
Out[18]=
If you say that a variable satisfies an inequality, Mathematica will automatically assume that it is real.
In[19]:=
Click for copyable input
Out[19]=

By using Simplify, FullSimplify, and FunctionExpand with assumptions, you can access many of Mathematica's vast collection of mathematical facts.

This uses the periodicity of the tangent function.
In[20]:=
Click for copyable input
Out[20]=
The assumption k/2 Integers implies that k must be even.
In[21]:=
Click for copyable input
Out[21]=
Mathematica knows that for positive .
In[22]:=
Click for copyable input
Out[22]=
FullSimplify accesses knowledge about special functions.
In[23]:=
Click for copyable input
Out[23]=

Mathematica knows about discrete mathematics and number theory as well as continuous mathematics.

This uses Wilson's theorem to simplify the result.
In[24]:=
Click for copyable input
Out[24]=
This uses the multiplicative property of the Euler phi function.
In[25]:=
Click for copyable input
Out[25]=

In something like Simplify[expr, assum] or Refine[expr, assum], you explicitly give the assumptions you want to use. But sometimes you may want to specify one set of assumptions to use in a whole collection of operations. You can do this by using Assuming.

Assuming[assum,expr]use assumptions assum in the evaluation of expr
$Assumptionsthe default assumptions to use

Specifying assumptions with larger scopes.

This tells Simplify to use the default assumption .
In[26]:=
Click for copyable input
Out[26]=
This combines the two assumptions given.
In[27]:=
Click for copyable input
Out[27]=

Functions like Simplify and Refine take the option Assumptions, which specifies what default assumptions they should use. By default, the setting for this option is Assumptions:>$Assumptions. The way Assuming then works is to assign a local value to $Assumptions, much as in Block.

In addition to Simplify and Refine, a number of other functions take Assumptions options, and thus can have assumptions specified for them by Assuming. Examples are FunctionExpand, Integrate, Limit, Series, and LaplaceTransform.

The assumption is automatically used in Integrate.
In[28]:=
Click for copyable input
Out[28]=
New to Mathematica? Find your learning path »
Have a question? Ask support »