I suspect we may run into problems here at some point. The only reason we hit a fixed point is that `And` removes (exact) duplicate arguments automatically. But what happens when we start adding an infinite number of duplicate arguments none of which look exactly like each other? Or even if not infinite, many? We already are starting to do this: the relevant_facts will always contain both `Equivalent(Q.zero(x), ~Q.nonzero(x))` and `Equivalent(Q.nonzero(x), ~Q.zero(x))` if it contains one.  Maybe we don't need to care, if the SAT solver really is good at ignoring redundancies, but I highly suspect that we will. 

I think the more rigorous way (if we run into this problem) will be to use `satisfiable` to determine if the new part really does contain new logical information.