Dear Why3 Club,
I have a why3 script that I think is relatively simple but why3 cannot
prove it. I wander if I did anything wrong.

## Advertising

*constant X : (map int int)*
*context:
*
* X[4] = X[6] && X[5] = X[6] && X[6] < X[7]
*
*predicate:
*
* exists k : int. 0 <= k && k <= 3 && not(X[k+4] = X[k+5])*
It is obvious that there exists such a k = 2. If I modify the predicate a
lilltle bit to :
*predicate:
*
* exists k : int. 0 <= k && k <= 3 && k = 2 && not(X[k+4] = X[k+5])*
why3 then has no problem to prove it. So I'm confused that why why3 cannot
prove the original case.
Thanks,
Ziqing Luo
University of Delaware
The following is the whole why3 script:
theory Why3Query_408
use import int.Int
use import map.Map
constant _X : (map int int)
(*
context:
X[4] = X[6]
X[5] = X[6]
X[6] < X[7]
predicate:
exists k : int. 0 <= k && k <= 3 && not(X[k+4] = X[k+5])
*)
predicate context = (((0) = ((get _X (4)) + ((-1) * (get _X (6)))))
&&
((0) = ((get _X (5)) + ((-1) * (get _X (6))))) &&
(((get _X (6)) + ((-1) * (get _X (7))) + (1))
<= (0)))
goal G0: context -> ((exists k : int. (((k + (-3)) <= (0)) && ((0)
<= k) &&
(not ((0) = ((get _X (k + (4))) + ((-1) *
(get _X (k + (5))))))))) )
end

_______________________________________________
Why3-club mailing list
Why3-club@lists.gforge.inria.fr
https://lists.gforge.inria.fr/mailman/listinfo/why3-club