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.
The reason is that its value is quite different for different choices of x.
Out[2]=  

With the assumption x>0, 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]=  

This establishes the standard result that the arithmetic mean is larger than the geometric one.
Out[8]=  

This proves that erf (x) lies in the range (0, 1) 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[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.
Refine just evaluates Log[x] as it would for any explicit negative number x.
Out[11]=  

An important class of assumptions are those which assert that some object is an element of a particular domain. You can set up such assumptions using
xdom, where the
character can be entered as
el 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 x_{i} 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 e+ is an algebraic number or not.
Out[15]=  

This represents the assertion that the symbol x is an element of the domain of real numbers.
Out[16]=  

Domains supported by Mathematica.
If n is assumed to be an integer, sin (n) is zero.
Out[17]=  

This establishes the theorem cosh (x)≥1 if x 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]=  

Mathematica knows that log (x)<exp (x) for positive x.
Out[22]=  

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[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 
$Assumptions  the default assumptions to use 
Specifying assumptions with larger scopes.
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.