Let's say you have a boolean function that takes two numbers (in binary) and returns true if they equal sixteen:
01000 + 01000 = 10000
8 + 8 = 16 -> true
00110 + 01000 = 01110
6 + 8 = 14 -> false
In this example, the function takes ten inputs, let's call them abcde + fghij.
Under the hood, it is directly modeled on gate logic and uses two adders and some xnor gates to check for equivalence to the binary string 10000.
We then feed this binary function into a boolean satisfiability algorithm to find a set of inputs that yields a true output (the first example above, for example).
My question is: Would the SAT algorithm find a solution more quickly if we were to be explicit about observed constraints?
What do I mean by "observed constraints"? Well, one observed constraint might be "if either number is greater than 16, then don't bother carrying out the addition and return false".
You might include this constraint like so:
(a ^ ¬b ^ ¬c ^ ¬d ^ ¬e) ^ (f ^ ¬g ^ ¬h ^ ¬i ^ ¬j) ^ ( the function you had before )
Another constraint might be "if one number is even and the other is odd then return false".
((e ^ ¬j) v (¬e ^ j)) ^ ( the function you had before )
These boolean functions are equivalent in correctness, but in gate logic, the latter would (probably) be more efficient. Is modeling the problem the only concern when reducing to SAT, or does it help to include these observed constraints?
I realise this isn't a great example, but hopefully it explains what I'm asking.
Thanks in advance