# 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.

Out[1]= | |

The reason is that its value is quite different for different choices of

x.

Out[2]= | |

With the assumption

,

Simplify can immediately reduce the expression to 0.

Out[3]= | |

Without making assumptions about

x and

y, nothing can be done.

Out[4]= | |

If

x and

y are both assumed positive, the log can be expanded.

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

x, the truth or falsity of this equation cannot be determined.

Out[6]= | |

Now

Simplify can prove that the equation is true.

Out[7]= | |

This establishes the standard result that the arithmetic mean is larger than the geometric one.

Out[8]= | |

This proves that

lies in the range

for all positive arguments.

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 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.

Out[10]= | |

Refine just evaluates

Log as it would for any explicit negative number

.

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 |

{x_{1},x_{2},...}dom | assert that all the are elements of the domain dom |

pattdom | assert 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.

Out[12]= | |

These numbers are all elements of the domain of algebraic numbers.

Out[13]= | |

*Mathematica* knows that

is not an algebraic number.

Out[14]= | |

Current mathematics has not established whether

is an algebraic number or not.

Out[15]= | |

This represents the assertion that the symbol

is an element of the domain of real numbers.

Out[16]= | |

Domains supported by *Mathematica*.

If

is assumed to be an integer,

is zero.

Out[17]= | |

This establishes the theorem

if

is assumed to be a real number.

Out[18]= | |

If you say that a variable satisfies an inequality,

*Mathematica* will automatically assume that it is real.

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.

Out[20]= | |

The assumption

Integers implies that

k must be even.

Out[21]= | |

*Mathematica* knows that

for positive

.

Out[22]= | |

Out[23]= | |

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

This uses Wilson's theorem to simplify the result.

Out[24]= | |

This uses the multiplicative property of the Euler phi function.

Out[25]= | |

In something like

Simplify or

Refine 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 |

$Assumptions | the default assumptions to use |

Specifying assumptions with larger scopes.

This tells

Simplify to use the default assumption

x>0.

Out[26]= | |

This combines the two assumptions given.

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,

LaplaceTransform.

The assumption is automatically used in

Integrate.

Out[28]= | |