I am fiddling around with the CVC4 SMT solver online version (with lang = cvc4).
I am not using the standard SMT-LIB format, but the native language implemented by CVC4, because it's a lot simpler. However, I am not able to prove very straightforward and obvious statements. For example, the first CHECKSAT gives me sat (satisfiable), which is correct, but the second CHECKSAT gives me unknow.
OPTION "incremental";
ASSERT FORALL (k : INT): ((k > 5 AND k < 7) => (k = 6));
CHECKSAT; % this returns sat, okay!
arr: ARRAY INT OF REAL;
ASSERT arr[6] = 123;
ASSERT FORALL (k : INT): ((k > 5 AND k < 7) => (arr[k] = 123));
CHECKSAT; % this returns unknown, why?
Why is CVC4 not being able to prove such a simple predicate logic expression? As far as I understand, SMT checking is not decidable, and therefore, there is no program that can prove all correct statements. However, this seems to be a very simple case, so I think I am misunderstanding something.