Normalize and expand rules
This section will cover the rules that are applied when normalizing and/or expanding functions. But before we start on
that, take a look at the example below which explains shortly how functions are handled internally.
Example:
Take the following function: \(x^4 \cdot (3 + 2)\). To enter this function in a problem, you would type the following:
x^4*(3+2), which in turn could be graphically displayed as the image below.

The following terminology is used regarding the tree you see above.
- node referring to a box in the tree
-
operation every node, together with its children, can be referred to as an operation.
The example above consists of the following operations
-
Multiplication Operation (or simply MultiplicationOp)
- PowerOp,
- AddOp
- VariableOp and
- NumberOp.
Operations can be combined together to make more complex operations. The formula used above can therefor also be referred to as an operation.
Every node has the following properties:
and based on the type, possibly a:
- base (if it is a NumberOp)
- identifier (if it is a VariableOp)
Keeping this in our mind, we can take a look at the rules being applied when normalizing and/or expanding functions.
When normalizing/expanding, all rules will be applied until a stable state of the function has been reached, resulting in a normalized/expanded function. The rules for
normalization and expanding are shown below (showing the Class name of the Java-code in brackets), along with several examples for each rule.
Rules for normalizing functions
Collapse factors of a variable (NormalizeMultRule)
|
|
|
| \(3 \cdot 5 \cdot x\) |
\(\Rightarrow\) |
\(15x\) |
| \(3 \cdot 5 \cdot x + 2 \cdot 4 \cdot y + 2 \cdot 3\) |
\(\Rightarrow\) |
\(15x+8y+2 \cdot 3\) |
Collapse multiplications and additions (CollapseEqualOpsRule)
For addition:
|
|
|
| \(4+(3-4)\) |
\(\Rightarrow\) |
\(4+3-4\) |
| \(3-(-4+x)\) |
\(\Rightarrow\) |
\(3+4-x\) |
For multiplication:
|
|
|
| \(3 \cdot (4 \cdot 9 \cdot x)\) |
\(\Rightarrow\) |
\(3 \cdot 4 \cdot 9 \cdot x\) |
| \(\frac{3}{\frac{1}{4} \cdot x}\) |
\(\Rightarrow\) |
\(\frac{3 \cdot 4}{x \cdot 1}\) |
Collapse powers of i (CollapsePowerOfIRule)
|
|
|
| \(i^2\) |
\(\Rightarrow\) |
\(-1\) |
| \(i^8\) |
\(\Rightarrow\) |
\(1\) |
| \(i^{-7}\) |
\(\Rightarrow\) |
\(i\) |
Evaluate expressions involving only numbers (PropagateConstantsRule)
|
|
|
| \(12.0+2.0^{3.0} \cdot 3\) |
\(\Rightarrow\) |
\(36\) |
Evaluate expressions having zero as a factor (RemoveZeroMultRule)
|
|
|
| \(0 \cdot 3\) |
\(\Rightarrow\) |
\(0\) |
| \(0 \cdot x\) |
\(\Rightarrow\) |
\(0\) |
Evaluate powers with zero as exponent (RemoveZeroExponentRule)
|
|
|
| \(2x^{0}\) |
\(\Rightarrow\) |
\(2 \cdot 1\) |
Collapse equal children belonging to addition operations (SummarizeEqualAddChildrenRule)
|
|
|
| \(y+2x + z - x\) |
\(\Rightarrow\) |
\(y+x+z\) |
Collapse equal children belonging to multiplication operations (SummarizeEqualMultChildrenRule)
|
|
|
| \(x \cdot y \cdot x\) |
\(\Rightarrow\) |
\(x^2 \cdot y\) |
| \(y \cdot x^2 \cdot z \cdot x^{-1}\) |
\(\Rightarrow\) |
\(y \cdot x \cdot z\) |
Remove neutral elements (RemoveNeutralElementRule)
Only handles the following three cases
|
|
|
| \(x \cdot 1\) |
\(\Rightarrow\) |
\(x\) |
| \(x \cdot -1\) |
\(\Rightarrow\) |
\(-x\) |
| \(x + 0\) |
\(\Rightarrow\) |
\(x\) |
Collapse powers (CollapsePowerRule)
Implements the following two rules:
|
|
|
| \((a^b)^c\) |
\(\Rightarrow\) |
\(a^{bc}\) |
| \(e^x\) |
\(\Rightarrow\) |
\(\exp(x)\) |
Collapse powers when rational (CollapseRationalPowerRule)
If the node is a PowerOp with a rational exponent and the denominator of the exponent is n != 1 a n-th root node will be added as parent and the child will get the numerator as exponent.
|
|
|
| \(x^{\frac{3}{2}}\) |
\(\Rightarrow\) |
\(\sqrt{x^3}\) |
Simplify constants of single nodes (NormalizeConstantRule)
Sets exponent to \(1\) and factor to \(+/- 1\) and calculates its base.
|
|
|
| \((-2)^3\) |
\(\Rightarrow\) |
\(-8\) |
Collapse function nodes that have their inverse function as child (CollapseInverseFunctionRule)
This rule only works on functions with a definded inverse function.
|
|
|
| \(\cos(\arccos(x))\) |
\(\Rightarrow\) |
\(x\) |
| \(\ln(\exp(x))\) |
\(\Rightarrow\) |
\(x\) |
Collapse function nodes for powers and n-roots (CollapseNrtRule)
This is a special case of the rule above.
|
|
|
| \(\sqrt{x^2}\) |
\(\Rightarrow\) |
\(\vert x \vert\) |
Symmetry of elementary functions (HandleFunctionSymmetryRule)
Currently only applies to the following functions: @abs, acos, asin, atan, cos, cosh, n-root (for uneven n), sinh, sin and tan@. The rule is dependent on whether the function is symmetric or antisymmetric.
|
|
|
| \(\sin(-x)\) |
\(\Rightarrow\) |
\(-\sin(x)\) |
| \(\vert -x \vert\) |
\(\Rightarrow\) |
\(\vert x \vert\) |
Distributive law (NormalizeAddRule)
|
|
|
| \(3 \cdot (-x + 4)\) |
\(\Rightarrow\) |
\(-3x + 12\) |
Rules for expanding functions
Distributive law (ExpandProductRule)
|
|
|
| \(4 \cdot (-b-3)\) |
\(\Rightarrow\) |
\(4 \cdot (-b) + 4 \cdot (-3)\) |
Expand data in single node (ExpandInternalDataRule)
|
|
|
| \(-x^6\) |
\(\Rightarrow\) |
\(-1 \cdot x^6\) |
Expands a power of products (ExpandPowerRule)
|
|
|
| \((2 \cdot x)^4\) |
\(\Rightarrow\) |
\(2^4 \cdot x^4\) |
Expands a power of sums (ExpandPowerOfSumRule)
|
|
|
| \((2+x)^4\) |
\(\Rightarrow\) |
\((2+x) \cdot (2+x) \cdot (2+x) \cdot (2+x)\) |