# TODOs
## Minterm Compression
Each bit in a minterm is generated from either a `Term` or an operator tree (`BinaryOperation` or `UnaryOperation`).
The leaf nodes in an operator tree must be `Term`s. By traversing the operator tree, we can work out the set of unique
`Term`s that the minterm really depends on, and represent it using only that many bits. The other bits can be derived
from the compressed minterm value, which means that both at runtime and when interacting with a data warehouse, these
derived values can be used without having to carry around the entire object.
"Leaf nodes in an operator tree" isn't quite the right place to collect `Term`s, because a `Term` can refer to a non-
boolean property of something. The minterm can be expressed by finding the lowest point(s) in the operator tree where
the node yields a boolean.