# Associative Swap

```
import mathy_core.rules.associative_swap
```

`Associative Property`

of numbers says that we can re-group two `addition`

or `multiplication`

terms so that one is evaluated before the other without changing the value of the expression. The formulation of this property is the same for addition and multiplication:

- Addition
`(a + b) + c = a + (b + c)`

- Multiplication
`(a * b) * c = a * (b * c)`

Note

Interestingly, applying the associative property of numbers to a binary expression tree is a standard tree operation called a "node rotation."

### Transformations¶

#### Addition¶

```
(a + b) + c = a + (b + c)
(y) + + (x)
/ \ / \
/ \ / \
(x) + c -> a + (y)
/ \ / \
/ \ / \
a b b c
```

#### Multiplication¶

```
(a * b) * c = a * (b * c)
(x) * * (y)
/ \ / \
/ \ / \
(y) * c <- a * (x)
/ \ / \
/ \ / \
a b b c
```

### Examples¶

Info

All the examples shown below are drawn from the mathy test suite that verifies the expected input/output combinations for rule transformations.

Input | Output | Valid |
---|---|---|

1f + 98i + 3f + 14t | 1f + (98i + 3f) + 14t | ✔ |

8x^2 * (9b * 7) | (8x^2 * 9b) * 7 | ✔ |

2 + 1 + 6 | 2 + (1 + 6) | ✔ |

2 + (1 + 6) | 2 + 1 + 6 | ✔ |

(2 + x) + 9 | 2 + (x + 9) | ✔ |

2x | --- | --- |

2 | --- | --- |

## API¶

## AssociativeSwapRule¶

```
AssociativeSwapRule(self, args, kwargs)
```

`(a + b) + c = a + (b + c)`

```
(y) + + (x)
/ \ / \
/ \ / \
(x) + c -> a + (y)
/ \ / \
/ \ / \
a b b c
```

Multiplication: `(ab)c = a(bc)`

```
(x) * * (y)
/ \ / \
/ \ / \
(y) * c <- a * (x)
/ \ / \
/ \ / \
a b b c
```