# Algebra

Algebraic structures

*Note:* Algebra requires Python 3.6 or higher.

## Requirements and Installation

`pip install algebra`

See also the instructions here.

## Algebra

This package provides an algebra where the elements can be manipulated
in a natural way, with basic algebraic simplifications happening automatically.
It also support equality checking, which is conservative:
if `x == y`

, then `x`

is equal to `y`

;
but if `x != y`

, then either `x`

is different from `y`

, or it could not be
proven that `x`

is equal to `y`

.

As an example, let's create numbered elements.

```
from algebra import Element
class Numbered(Element):
total = 0
def __init__(self):
self.num = Numbered.total
Numbered.total += 1
def render(self, formatter):
return f'x{self.num}'
```

Then instances of `Numbered`

can be manipulated as follows.

```
>>> x0 = Numbered()
>>> x1 = Numbered()
>>> x0 == x0
True
>>> x0 == x1
False
>>> x0 + x1
x0 + x1
>>> x0 + x0
2 * x0
>>> x0 + x1 == x1 + x0
True
>>> x0 - x0
0
>>> 2 + x0
2 * 1 + x0
>>> (2 + x0) * x1
(2 * 1 + x0) * x1
>>> (2 + x0) * x1 * 0
0
```

## Create Your Own Algebra

Coming soon.

## Function Algebra

Coming soon.

## Create Your Own Function Algebra

Coming soon.