From 68a58d78dd0ada532495b9c0656699350a8096f3 Mon Sep 17 00:00:00 2001 From: Patrick Baudin <patrick.baudin@cea.fr> Date: Wed, 26 Jun 2019 16:50:19 +0200 Subject: [PATCH] [wp] improves forall_intro --- src/plugins/wp/Conditions.ml | 7 + .../wp_acsl/oracle_qualif/cnf.res.oracle | 24 +- .../wp/tests/wp_bts/oracle/ex5.res.oracle | 2 +- .../frama_c_hashtbl_solved.res.oracle | 2 +- .../wp_typed/oracle/user_init.0.res.oracle | 313 +++++++++--------- .../wp_typed/oracle/user_init.1.res.oracle | 313 +++++++++--------- .../oracle_qualif/user_init.1.res.oracle | 2 +- 7 files changed, 319 insertions(+), 344 deletions(-) diff --git a/src/plugins/wp/Conditions.ml b/src/plugins/wp/Conditions.ml index 554c893ef65..bad92bae2ea 100644 --- a/src/plugins/wp/Conditions.ml +++ b/src/plugins/wp/Conditions.ml @@ -478,6 +478,13 @@ let rec forall_intro p = let hs = exist_intros hs in let hp,p = forall_intro p in hs @ hp , p + | Or qs -> (* analogy with Imply *) + let hps,ps = List.fold_left (fun (hs,ps) q -> + let hp,p = forall_intro q in (* q <==> (hp ==> p) *) + (hp @ hs), (p::ps)) ([],[]) qs + in (* ORs qs <==> ORs (hps ==> ps) + <==> ((ANDs hps) ==> ORs ps) *) + hps, (p_disj ps) | _ -> [] , p (* -------------------------------------------------------------------------- *) diff --git a/src/plugins/wp/tests/wp_acsl/oracle_qualif/cnf.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle_qualif/cnf.res.oracle index 7f42f9cb837..e24296dd15a 100644 --- a/src/plugins/wp/tests/wp_acsl/oracle_qualif/cnf.res.oracle +++ b/src/plugins/wp/tests/wp_acsl/oracle_qualif/cnf.res.oracle @@ -29,14 +29,12 @@ /\ (P_A \/ P_A1 \/ P_A2 \/ P_B1 \/ P_B2 \/ P_C) [wp] [Alt-Ergo] Goal typed_f_ensures_a6 : Valid [wp:cnf] - CNF=((not P_A) \/ (not P_A1) \/ P_A2 \/ P_C) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ (not P_B) \/ P_C) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ (not P_B1) \/ P_C) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ P_B2 \/ P_C) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ (not P_B) \/ (not P_B1) \/ P_B2) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ (not P_B) \/ (not P_B1) \/ P_C) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ (not P_B) \/ P_B2 \/ P_C) - /\ ((not P_A) \/ (not P_A1) \/ P_A2 \/ (not P_B1) \/ P_B2 \/ P_C) + CNF=(P_A2 \/ P_C) /\ (P_A2 \/ (not P_B) \/ P_C) + /\ (P_A2 \/ (not P_B1) \/ P_C) /\ (P_A2 \/ P_B2 \/ P_C) + /\ (P_A2 \/ (not P_B) \/ (not P_B1) \/ P_B2) + /\ (P_A2 \/ (not P_B) \/ (not P_B1) \/ P_C) + /\ (P_A2 \/ (not P_B) \/ P_B2 \/ P_C) + /\ (P_A2 \/ (not P_B1) \/ P_B2 \/ P_C) [wp] [Alt-Ergo] Goal typed_f_ensures_a7 : Valid [wp:cnf] CNF=((not P_A1) \/ P_A2 \/ P_C) /\ (P_A1 \/ (not P_A2) \/ P_C) @@ -145,8 +143,8 @@ [wp] [Alt-Ergo] Goal typed_f_ensures_c0 : Valid [wp:cnf] CNF=P_B \/ P_B1 \/ P_B2 \/ P_C [wp] [Qed] Goal typed_f_ensures_c1 : Valid -[wp:cnf] CNF=(not P_B) \/ (not P_B1) \/ P_B2 \/ P_C -[wp] [Alt-Ergo] Goal typed_f_ensures_c2 : Valid +[wp:cnf] CNF=P_B2 \/ P_C +[wp] [Qed] Goal typed_f_ensures_c2 : Valid [wp:cnf] CNF=((not P_B1) \/ P_B2 \/ P_C) /\ (P_B1 \/ (not P_B2) \/ P_C) [wp] [Alt-Ergo] Goal typed_f_ensures_c3 : Valid [wp:cnf] @@ -301,12 +299,12 @@ [wp:cnf] CNF=P_C /\ ((not P_B) \/ P_C) /\ ((not P_A) \/ (not P_B) \/ P_C) [wp] [Alt-Ergo] Goal typed_f_ensures_e2 : Valid [wp] Proved goals: 43 / 43 - Qed: 11 - Alt-Ergo: 32 + Qed: 12 + Alt-Ergo: 31 [wp] Report in: 'tests/wp_acsl/oracle_qualif/cnf.0.report.json' [wp] Report out: 'tests/wp_acsl/result_qualif/cnf.0.report.json' ------------------------------------------------------------- Functions WP Alt-Ergo Total Success -f 11 32 (336..384) 43 100% +f 12 31 (336..384) 43 100% ------------------------------------------------------------- [wp] Logging keys: success-only,shell,cnf. diff --git a/src/plugins/wp/tests/wp_bts/oracle/ex5.res.oracle b/src/plugins/wp/tests/wp_bts/oracle/ex5.res.oracle index 5a458b3a95b..6a9e199c6af 100644 --- a/src/plugins/wp/tests/wp_bts/oracle/ex5.res.oracle +++ b/src/plugins/wp/tests/wp_bts/oracle/ex5.res.oracle @@ -175,7 +175,7 @@ Prove: (i + L_f(i)) != b. ------------------------------------------------------------ Goal Post-condition 'ko4' in 'forall': -Prove: P_P(i) \/ (forall i_1 : Z. L_f(i_1) != i). +Prove: (L_f(i) != i_1) \/ P_P(i_1). ------------------------------------------------------------ diff --git a/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle b/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle index 73e10138773..01958b282d4 100644 --- a/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle +++ b/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle @@ -119,7 +119,7 @@ hash 6 1 (12..24) 7 100% size 2 - 2 100% init 8 5 (72..96) 13 100% add 24 15 (384..432) 39 100% -mem_binding 18 8 (192..240) 26 100% +mem_binding 18 8 (336..384) 26 100% ------------------------------------------------------------- [wp] Running WP plugin... [rte] annotating function add diff --git a/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle b/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle index 466000394e6..099a8b0731a 100644 --- a/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle +++ b/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle @@ -343,37 +343,34 @@ Prove: true. Goal Loop assigns 'lack,Zone' (2/3): Effect at line 139 Let a = global(G_t2_50). -Let a_1 = shift_A20_sint32(a, i). +Let a_1 = shift_A20_sint32(a, i_2). Assume { - Type: is_uint32(i) /\ is_sint32(v). + Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone' *) Have: forall a_2 : addr. - ((forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (shift_sint32(shift_A20_sint32(a, i_4), i_3) != a_2)))))) -> + ((forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (shift_sint32(shift_A20_sint32(a, i_8), i_7) != a_2)))))) -> (Mint_0[a_2] = Mint_1[a_2])). (* Invariant 'Partial' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> - (Mint_1[shift_sint32(shift_A20_sint32(a, i_4), i_3)] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> + (Mint_1[shift_sint32(shift_A20_sint32(a, i_8), i_7)] = v))))). (* Invariant 'Range' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Call 'init' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 <= 19) -> (havoc(Mint_undef_0, Mint_1, shift_sint32(a_1, 0), 20) - [shift_sint32(a_1, i_3)] = v))). + [shift_sint32(a_1, i_7)] = v))). } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ @@ -630,31 +627,30 @@ Effect at line 157 Let a = global(G_t2_50). Let a_1 = shift_A20_sint32(a, i_2). Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. - ((forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 <= 9) -> - (shift_sint32(shift_A20_sint32(a, i_6), i_5) != a_2)))) -> + ((forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 <= 9) -> + (shift_sint32(shift_A20_sint32(a, i_7), i_6) != a_2)))) -> (Mint_0[a_2] = Mint_1[a_2])). (* Invariant 'Partial' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> - (Mint_1[shift_sint32(shift_A20_sint32(a, i_6), i_5)] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> + (Mint_1[shift_sint32(shift_A20_sint32(a, i_7), i_6)] = v))))). (* Invariant 'Range' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Call 'init' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 <= 19) -> (havoc(Mint_undef_0, Mint_1, shift_sint32(a_1, 0), 20) - [shift_sint32(a_1, i_5)] = v))). + [shift_sint32(a_1, i_6)] = v))). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ @@ -1023,78 +1019,74 @@ Prove: true. Goal Loop assigns 'lack,Zone_i' (2/3): Effect at line 51 Assume { - Type: is_uint32(i). + Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_0[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_0[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_1[i_4][i_3] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_1[i_8][i_7] = v))))). (* Invariant 'Range_i' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Loop assigns 'lack,Zone_j' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_2[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_2[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Previous_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_2[i_4][i_3] = t2_1[i_4][i_3]))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_2[i_8][i_7] = t2_1[i_8][i_7]))))). (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))). + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 <= 19) -> + (t2_2[i_2][i_7] = v))). } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ Goal Loop assigns 'lack,Zone_i' (3/3): Effect at line 58 Assume { - Type: is_uint32(i). + Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_0[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_0[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_1[i_4][i_3] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_1[i_8][i_7] = v))))). (* Invariant 'Range_i' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Loop assigns 'lack,Zone_j' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_2[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_2[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Previous_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_2[i_4][i_3] = t2_1[i_4][i_3]))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_2[i_8][i_7] = t2_1[i_8][i_7]))))). (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))). + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 <= 19) -> + (t2_2[i_2][i_7] = v))). } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ @@ -1106,43 +1098,40 @@ Prove: true. Goal Loop assigns 'lack,Zone_j' (2/3): Effect at line 58 Assume { - Type: is_uint32(i) /\ is_uint32(j). + Type: is_uint32(i_2) /\ is_uint32(j). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_0[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_0[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_1[i_4][i_3] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_1[i_8][i_7] = v))))). (* Invariant 'Range_i' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Loop assigns 'lack,Zone_j' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_2[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_2[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Previous_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_2[i_4][i_3] = t2_1[i_4][i_3]))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_2[i_8][i_7] = t2_1[i_8][i_7]))))). (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 < j) -> (t2_2[i][i_3] = v))). + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 < j) -> (t2_2[i_2][i_7] = v))). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) Have: j <= 19. } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ @@ -1505,70 +1494,68 @@ Prove: true. Goal Loop assigns 'tactic,Zone_i' (2/3): Effect at line 80 Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_0[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_1[i_7][i_6] = v))))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Loop assigns 'tactic,Zone_j' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_2[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_2[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Previous_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_2[i_6][i_5] = t2_1[i_6][i_5]))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_2[i_7][i_6] = t2_1[i_7][i_6]))))). (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> - (t2_2[i_2][i_5] = v))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 <= 19) -> + (t2_2[i_2][i_6] = v))). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ Goal Loop assigns 'tactic,Zone_i' (3/3): Effect at line 87 Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_0[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_1[i_7][i_6] = v))))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Loop assigns 'tactic,Zone_j' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_2[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_2[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Previous_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_2[i_6][i_5] = t2_1[i_6][i_5]))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_2[i_7][i_6] = t2_1[i_7][i_6]))))). (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> - (t2_2[i_2][i_5] = v))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 <= 19) -> + (t2_2[i_2][i_6] = v))). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ @@ -1580,38 +1567,37 @@ Prove: true. Goal Loop assigns 'tactic,Zone_j' (2/3): Effect at line 87 Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2) /\ is_uint32(j). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_0[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_1[i_7][i_6] = v))))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Loop assigns 'tactic,Zone_j' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_2[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_2[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Previous_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_2[i_6][i_5] = t2_1[i_6][i_5]))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_2[i_7][i_6] = t2_1[i_7][i_6]))))). (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 < j) -> (t2_2[i_2][i_5] = v))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 < j) -> (t2_2[i_2][i_6] = v))). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) Have: j <= 19. } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ @@ -1914,19 +1900,18 @@ Prove: true. Goal Loop assigns 'tactic,Zone_i' (2/3): Effect at line 111 Assume { - Have: 0 <= i. - Have: i <= 9. Type: IsArray1_sint32(v) /\ is_uint32(i_2) /\ is_sint32(v_1) /\ IsArray1_sint32(t2_0[i_2]). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_1[i_6][i_5] = t2_0[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_1[i_7][i_6] = t2_0[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 < i_2) -> - P_MemSet20(t2_0[i_5], 20, v_1))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> + P_MemSet20(t2_0[i_6], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) @@ -1934,8 +1919,8 @@ Assume { (* Invariant 'Partial_j' *) Have: P_MemSet20(v, 20, v_1). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ diff --git a/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle b/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle index d91b34a47a4..620a41fc301 100644 --- a/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle +++ b/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle @@ -343,37 +343,34 @@ Prove: true. Goal Loop assigns 'lack,Zone' (2/3): Effect at line 139 Let a = global(G_t2_50). -Let a_1 = shift_A20_sint32(a, i). +Let a_1 = shift_A20_sint32(a, i_2). Assume { - Type: is_uint32(i) /\ is_sint32(v). + Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone' *) Have: forall a_2 : addr. - ((forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (shift_sint32(shift_A20_sint32(a, i_4), i_3) != a_2)))))) -> + ((forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (shift_sint32(shift_A20_sint32(a, i_8), i_7) != a_2)))))) -> (Mint_0[a_2] = Mint_1[a_2])). (* Invariant 'Partial' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> - (Mint_1[shift_sint32(shift_A20_sint32(a, i_4), i_3)] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> + (Mint_1[shift_sint32(shift_A20_sint32(a, i_8), i_7)] = v))))). (* Invariant 'Range' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Call 'init' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 <= 19) -> (havoc(Mint_undef_0, Mint_1, shift_sint32(a_1, 0), 20) - [shift_sint32(a_1, i_3)] = v))). + [shift_sint32(a_1, i_7)] = v))). } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ @@ -630,31 +627,30 @@ Effect at line 157 Let a = global(G_t2_50). Let a_1 = shift_A20_sint32(a, i_2). Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. - ((forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 <= 9) -> - (shift_sint32(shift_A20_sint32(a, i_6), i_5) != a_2)))) -> + ((forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 <= 9) -> + (shift_sint32(shift_A20_sint32(a, i_7), i_6) != a_2)))) -> (Mint_0[a_2] = Mint_1[a_2])). (* Invariant 'Partial' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> - (Mint_1[shift_sint32(shift_A20_sint32(a, i_6), i_5)] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> + (Mint_1[shift_sint32(shift_A20_sint32(a, i_7), i_6)] = v))))). (* Invariant 'Range' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Call 'init' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 <= 19) -> (havoc(Mint_undef_0, Mint_1, shift_sint32(a_1, 0), 20) - [shift_sint32(a_1, i_5)] = v))). + [shift_sint32(a_1, i_6)] = v))). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ @@ -1023,78 +1019,74 @@ Prove: true. Goal Loop assigns 'lack,Zone_i' (2/3): Effect at line 51 Assume { - Type: is_uint32(i). + Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_0[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_0[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_1[i_4][i_3] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_1[i_8][i_7] = v))))). (* Invariant 'Range_i' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Loop assigns 'lack,Zone_j' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_2[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_2[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Previous_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_2[i_4][i_3] = t2_1[i_4][i_3]))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_2[i_8][i_7] = t2_1[i_8][i_7]))))). (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))). + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 <= 19) -> + (t2_2[i_2][i_7] = v))). } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ Goal Loop assigns 'lack,Zone_i' (3/3): Effect at line 58 Assume { - Type: is_uint32(i). + Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_0[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_0[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_1[i_4][i_3] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_1[i_8][i_7] = v))))). (* Invariant 'Range_i' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Loop assigns 'lack,Zone_j' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_2[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_2[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Previous_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_2[i_4][i_3] = t2_1[i_4][i_3]))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_2[i_8][i_7] = t2_1[i_8][i_7]))))). (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))). + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 <= 19) -> + (t2_2[i_2][i_7] = v))). } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ @@ -1106,43 +1098,40 @@ Prove: true. Goal Loop assigns 'lack,Zone_j' (2/3): Effect at line 58 Assume { - Type: is_uint32(i) /\ is_uint32(j). + Type: is_uint32(i_2) /\ is_uint32(j). (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 <= 9) /\ (i_2 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i_6) /\ (0 <= i) /\ + (0 <= i_1) /\ (i_3 <= 9) /\ (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19) /\ + (i_6 <= 19) /\ (i_1 <= 19). (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_0[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_0[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_1[i_4][i_3] = v))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_1[i_8][i_7] = v))))). (* Invariant 'Range_i' *) - Have: (0 <= i) /\ (i <= 10). + Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) - Have: i <= 9. + Have: i_2 <= 9. (* Loop assigns 'lack,Zone_j' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (((i_4 < 0) \/ (i_3 < 0) \/ (10 <= i_4) \/ (20 <= i_3)) -> - (t2_2[i_4][i_3] = t2_1[i_4][i_3])))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((0 <= i_7) -> ((i_8 <= 9) -> + ((i_7 <= 19) -> + (((i_8 < 0) \/ (i_7 < 0) \/ (10 <= i_8) \/ (20 <= i_7)) -> + (t2_2[i_8][i_7] = t2_1[i_8][i_7])))))). (* Invariant 'Previous_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 < i) -> ((0 <= i_3) -> - ((i_3 <= 19) -> (t2_2[i_4][i_3] = t2_1[i_4][i_3]))))). + Have: forall i_8,i_7 : Z. ((0 <= i_8) -> ((i_8 < i_2) -> ((0 <= i_7) -> + ((i_7 <= 19) -> (t2_2[i_8][i_7] = t2_1[i_8][i_7]))))). (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 < j) -> (t2_2[i][i_3] = v))). + Have: forall i_7 : Z. ((0 <= i_7) -> ((i_7 < j) -> (t2_2[i_2][i_7] = v))). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) Have: j <= 19. } -Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> false))))) \/ - (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> - (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\ - (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\ - (i_5 <= 19))))))). +Prove: exists i_8,i_7 : Z. (i_8 <= i) /\ (i_7 <= i_1) /\ (0 <= i_8) /\ + (i <= i_8) /\ (0 <= i_7) /\ (i_1 <= i_7) /\ (i_8 <= 9) /\ (i_7 <= 19). ------------------------------------------------------------ @@ -1505,70 +1494,68 @@ Prove: true. Goal Loop assigns 'tactic,Zone_i' (2/3): Effect at line 80 Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_0[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_1[i_7][i_6] = v))))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Loop assigns 'tactic,Zone_j' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_2[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_2[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Previous_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_2[i_6][i_5] = t2_1[i_6][i_5]))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_2[i_7][i_6] = t2_1[i_7][i_6]))))). (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> - (t2_2[i_2][i_5] = v))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 <= 19) -> + (t2_2[i_2][i_6] = v))). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ Goal Loop assigns 'tactic,Zone_i' (3/3): Effect at line 87 Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_0[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_1[i_7][i_6] = v))))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Loop assigns 'tactic,Zone_j' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_2[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_2[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Previous_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_2[i_6][i_5] = t2_1[i_6][i_5]))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_2[i_7][i_6] = t2_1[i_7][i_6]))))). (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> - (t2_2[i_2][i_5] = v))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 <= 19) -> + (t2_2[i_2][i_6] = v))). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ @@ -1580,38 +1567,37 @@ Prove: true. Goal Loop assigns 'tactic,Zone_j' (2/3): Effect at line 87 Assume { - Have: 0 <= i. - Have: i <= 9. Type: is_uint32(i_2) /\ is_uint32(j). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_0[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_1[i_7][i_6] = v))))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Loop assigns 'tactic,Zone_j' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_2[i_6][i_5] = t2_1[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_2[i_7][i_6] = t2_1[i_7][i_6])))))). (* Invariant 'Previous_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> ((0 <= i_5) -> - ((i_5 <= 19) -> (t2_2[i_6][i_5] = t2_1[i_6][i_5]))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((i_7 < i_2) -> ((0 <= i_6) -> + ((i_6 <= 19) -> (t2_2[i_7][i_6] = t2_1[i_7][i_6]))))). (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 < j) -> (t2_2[i_2][i_5] = v))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 < j) -> (t2_2[i_2][i_6] = v))). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) Have: j <= 19. } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ @@ -1914,19 +1900,18 @@ Prove: true. Goal Loop assigns 'tactic,Zone_i' (2/3): Effect at line 111 Assume { - Have: 0 <= i. - Have: i <= 9. Type: IsArray1_sint32(v) /\ is_uint32(i_2) /\ is_sint32(v_1) /\ IsArray1_sint32(t2_0[i_2]). (* Goal *) - When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). + When: (0 <= i_3) /\ (0 <= i_4) /\ (0 <= i_5) /\ (0 <= i) /\ (i_3 <= 9) /\ + (i_5 <= 9) /\ (i <= 9) /\ (i_4 <= 19). (* Loop assigns 'tactic,Zone_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_6) -> ((0 <= i_5) -> ((i_6 <= 9) -> - ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_1[i_6][i_5] = t2_0[i_6][i_5])))))). + Have: forall i_7,i_6 : Z. ((0 <= i_7) -> ((0 <= i_6) -> ((i_7 <= 9) -> + ((i_6 <= 19) -> (((i_7 < 0) \/ (10 <= i_7)) -> + (t2_1[i_7][i_6] = t2_0[i_7][i_6])))))). (* Invariant 'Partial_i' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 < i_2) -> - P_MemSet20(t2_0[i_5], 20, v_1))). + Have: forall i_6 : Z. ((0 <= i_6) -> ((i_6 < i_2) -> + P_MemSet20(t2_0[i_6], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) @@ -1934,8 +1919,8 @@ Assume { (* Invariant 'Partial_j' *) Have: P_MemSet20(v, 20, v_1). } -Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (0 <= i_6) /\ - (i <= i_6) /\ (i_1 <= i_5) /\ (i_6 <= 9). +Prove: exists i_7,i_6 : Z. (i_7 <= i) /\ (i_6 <= i_1) /\ (0 <= i_7) /\ + (i <= i_7) /\ (i_1 <= i_6) /\ (i_7 <= 9). ------------------------------------------------------------ diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.res.oracle b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.res.oracle index ef5a6f0f00a..feb4222c312 100644 --- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.res.oracle +++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.res.oracle @@ -43,7 +43,7 @@ [wp] Report out: 'tests/wp_typed/result_qualif/user_init.1.report.json' ------------------------------------------------------------- Functions WP Alt-Ergo Total Success -init_t2_v2 3 - (16..28) 8 100% +init_t2_v2 3 - (20..32) 8 100% init_t2_v3 4 - (20..32) 7 100% init_t2_bis_v2 4 - (28..40) 8 100% ------------------------------------------------------------- -- GitLab