I'm trying to figure out how an SMT solver works as simple as possible.
Let's assume we have a simple input program with symbolic values x and y.
E.g.
if (x+y < 20) {
if (x > 10) {
if (y > 10) {
assume(false);
}
}
}
Here we have different paths, depending on the conditions. To reach assume(false) each condition has to be true, so our outcoming formula is:
$x+y < 20 \,\,\,\,\,\wedge \,\,\,\,\, x > 10 \,\,\,\,\, \wedge \,\,\,\,\, y > 10$
So far, so good. What happens next, step by step?
I would like to implement, as simple as possible, a solver which gets as input something like the formula above and delivers specific output to reach the end of the path - here assume(false), i.e. x = 2147483647, y = 2147483647 (jfi: x+y would be -2) - for overflow detection or similar.
I know there are a lot of SMT solvers on the internet, but I couldn't find a really simple self-explaining one. Looking forward to a suggestion.