Currently all the options of `or`, `and`, `xor` operates directly. It's possible to simplify the operation before evaluating the intersection of curves (a expensive operation). Example, for any subsets `A` and `B`: * `A + A * B` can be easily simplified to `A` The possible solutions are: * `LazyNot`, `LazyOr` and `LazyAnd`. But some structure is repeated: * `Not[Or[A, B]] = And[Not[A], Not[B]]` * `Not[Or[A, B]] = And[Not[A], Not[B]]` * Use only two: Either `LazyNot + LazyAnd` or `LazyNot + LazyOr` * Use only one: `NAND` port