# Simplify

A complicated mathematical expression can often be transformed into a form that is easier to understand.

The `ce.simplify()`

function tries expanding, factoring and applying many
other transformations to find a simple a simpler form of a symbolic expression.

## Defining "Simplest"

In some cases there might be multiple equivalent forms for an expression. Deciding which is "the simplest" might depend on how the complexity is measured.

For example: \( (x + 4)(x-5) \) and \(x^2 -x -20\) represent the same expression.

By default, the complexity of an expression is measured by counting the number of operations in the expression, and giving an increasing cost to:

- integers with fewer digits
- integers with more digits
- other numeric values
- add, multiply, divide
- subtract and negate
- square root and root
- exp
- power and log
- trigonometric function
- inverse trigonometric function
- hyperbolic functions
- inverse hyperbolic functions
- other functions

**To influence how the complexity of an expression is measured**, specify a
cost function in the compute engine.

## Numeric Simplifications

The `ce.simplify()`

function will apply some numeric simplifications, such
as combining small integer and rational values, simplifying division by 1,
addition or subtraction of 0, etcâ€¦

It avoids making any simplification that could result in a loss of precision.
For example, \( 10^{300} + 1\) cannot be simplified without losing the
least significant digit, so `ce.simplify()`

will return the experssion unmodified.

## Using Assumptions

Assumptions are additional information available about some symbols, for example \( x > 0 \) or \(n \in \N\).

Some transformations are only applicable if some assumptions can be verified.

For example, if no assumptions about \(x \) is available the expression \( \sqrt{x^2} \) cannot be simplified. However, if an assumption that \( x \geq 0 \) is available, then the expression can be simplified to \( x \).