# Simplifying Boolean Expressions

I recently had a boolean expression of the following form:

```
a || (x && b) || (x && y && c) || (x && y && z && d)
```

It looked redundant with 10 instances of only 7 different variables.

Pretty much the only rule I know for manipulating boolean logic is how to change `AND`

to `OR`

so I didn’t have much luck working on the above until I realized that `AND`

can be seen as `multiply`

and `OR`

as `plus`

(with `false`

being `0`

and everything else being `true`

).

Using that insight we instead have:

```
a + (x · b) + (x · y · c) + (x · y · z · d)
```

It is now possible to use the algebraic properties with which most of us should be somewhat familiar. For example we can use the distributivity property to only have one instance of `x`

:

```
a + x · (b + y · c + y · z · d)
```

We can do exactly the same with `y`

:

```
a + x · (b + y · (c + z · d))
```

We now only list each variable once, so this is optimal (assuming that all variables can affect the result of the expression). Going back to boolean operations we end with:

```
a || x && (b || y && (c || z && d))
```

Another thing I gained from this exercise is that now I will always be able to remember that `AND`

has higher precedence than `OR`

which is useful if you want to cut down on your use of parenthesis.