Closed DavePearce closed 7 years ago
With nonces enabled we have:
482. exists(int i'20, int[] ls'15).((((i'20 == |ls'15|)) && ((0 >= (|ls'15| ()
486. exists(int i'20, int[] ls'15).((i'20 == |ls'15|) && (0 >= (1 + (Simp 482)
485. (i'20 == |ls'15|) && (0 >= (1 + |ls'15|)) (Exists-E 486)
474. i'20 == |ls'15| (And-E 485)
484. 0 >= (1 + |ls'15|) (And-E 485)
488. 0 >= (1 + i'20) (Eq-S 484,474)
versus
530. exists(int i'42, int[] ls'46).((((i'42 == |ls'46|)) && ((0 >= (|ls'46| ()
534. exists(int i'42, int[] ls'46).((i'42 == |ls'46|) && (0 >= (1 + (Simp 530)
533. (i'42 == |ls'46|) && (0 >= (1 + |ls'46|)) (Exists-E 534)
532. 0 >= (1 + |ls'46|) (And-E 533)
535. |ls'46| >= 0 (ArrLen-I 532)
521. false (Ieq-I 535,532)
Yes, in the first we have i'20
versus ls'15
whilst in the second we have i'42
versus ls'46
. This looks like a variable ordering problem.
Fixed following #136 and #138
The following fails verification when compiled via WyC:
However, the generated verification conditions are easily dispatched using
wy verify
. The failing proof is:Whilst the passing version is: