From 509f2b79ab847ebce4a7b700fa6f43d20a863ffa Mon Sep 17 00:00:00 2001 From: Patrick Baudin <patrick.baudin@cea.fr> Date: Fri, 1 Mar 2019 10:11:03 +0100 Subject: [PATCH] [WP/test] adding a test initializing multidimentianal arrays --- .../wp_typed/oracle/user_init.0.res.oracle | 345 ++++++++++-------- .../wp_typed/oracle/user_init.1.res.oracle | 345 ++++++++++-------- .../oracle_qualif/user_init.0.res.oracle | 12 +- .../oracle_qualif/user_init.1.res.oracle | 33 +- .../oracle_qualif/user_init.2.res.oracle | 27 +- src/plugins/wp/tests/wp_typed/user_init.i | 22 +- 6 files changed, 416 insertions(+), 368 deletions(-) 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 3981469580e..86999a74131 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 @@ -231,7 +231,7 @@ Prove: true. Function init_t2_bis_v1 ------------------------------------------------------------ -Goal Post-condition (file tests/wp_typed/user_init.i, line 125) in 'init_t2_bis_v1': +Goal Post-condition (file tests/wp_typed/user_init.i, line 127) in 'init_t2_bis_v1': Let a = global(G_t2_48). Assume { Type: is_uint32(i_2) /\ is_sint32(v). @@ -256,12 +256,12 @@ Prove: Mint_0[shift_sint32(shift_A20_sint32(a, i), i_1)] = v. ------------------------------------------------------------ -Goal Exit-condition (file tests/wp_typed/user_init.i, line 127) in 'init_t2_bis_v1': +Goal Exit-condition (file tests/wp_typed/user_init.i, line 129) in 'init_t2_bis_v1': Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 134): +Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 136): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Let a_2 = shift_sint32(a_1, 0). @@ -292,12 +292,12 @@ Prove: a_3[shift_sint32(shift_A20_sint32(a, i_1), i_2)] = Mint_undef_0[a_2]. ------------------------------------------------------------ -Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 134): +Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 136): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 133): +Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 135): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -325,12 +325,12 @@ Prove: to_uint32(1 + i) <= 10. ------------------------------------------------------------ -Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 133): +Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 135): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Offset' (file tests/wp_typed/user_init.i, line 139): +Goal Assertion 'Offset' (file tests/wp_typed/user_init.i, line 141): Prove: true. ------------------------------------------------------------ @@ -341,7 +341,7 @@ Prove: true. ------------------------------------------------------------ Goal Loop assigns 'lack,Zone' (2/3): -Effect at line 137 +Effect at line 139 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -378,7 +378,7 @@ Prove: (forall i_4,i_3 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_4 <= 9) -> ------------------------------------------------------------ Goal Loop assigns 'lack,Zone' (3/3): -Call Effect at line 138 +Call Effect at line 140 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -408,13 +408,13 @@ Prove: exists i_3,i_2 : Z. (i_3 <= i) /\ (i_2 <= i_1) /\ (0 <= i_2) /\ ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (1/3): -Effect at line 137 +Effect at line 139 Prove: true. ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (2/3): -Effect at line 137 +Effect at line 139 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -437,19 +437,19 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (0 <= i_4) /\ ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (3/3): -Call Effect at line 138 +Call Effect at line 140 Prove: true. ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (1/2): -Effect at line 137 +Effect at line 139 Prove: true. ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (2/2): -Effect at line 137 +Effect at line 139 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -471,7 +471,7 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (0 <= i_4) /\ ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 137): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 139): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -499,18 +499,18 @@ Prove: i < to_uint32(1 + i). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 137): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 139): Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 138) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 140) : Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 138) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 140) : Prove: true. @@ -519,13 +519,13 @@ Prove: true. Function init_t2_bis_v2 ------------------------------------------------------------ -Goal Post-condition (file tests/wp_typed/user_init.i, line 143) in 'init_t2_bis_v2': +Goal Post-condition (file tests/wp_typed/user_init.i, line 145) in 'init_t2_bis_v2': Let a = global(G_t2_48). Assume { Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_1 : addr. ((forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_4), i_3) != a_1)))) -> @@ -543,12 +543,12 @@ Prove: Mint_0[shift_sint32(shift_A20_sint32(a, i), i_1)] = v. ------------------------------------------------------------ -Goal Exit-condition (file tests/wp_typed/user_init.i, line 145) in 'init_t2_bis_v2': +Goal Exit-condition (file tests/wp_typed/user_init.i, line 147) in 'init_t2_bis_v2': Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 152): +Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 154): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Let a_2 = shift_sint32(a_1, 0). @@ -557,7 +557,7 @@ Assume { Type: is_uint32(i) /\ is_sint32(v). (* Goal *) When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 < to_uint32(1 + i)) /\ (i_2 <= 19). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_4 : addr. ((forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_4), i_3) != a_4)))) -> @@ -578,17 +578,17 @@ Prove: a_3[shift_sint32(shift_A20_sint32(a, i_1), i_2)] = Mint_undef_0[a_2]. ------------------------------------------------------------ -Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 152): +Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 154): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 151): +Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 153): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { Type: is_uint32(i) /\ is_sint32(v). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. ((forall i_2,i_1 : Z. ((0 <= i_2) -> ((i_2 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_2), i_1) != a_2)))) -> @@ -610,23 +610,23 @@ Prove: to_uint32(1 + i) <= 10. ------------------------------------------------------------ -Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 151): +Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 153): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Offset_i' (file tests/wp_typed/user_init.i, line 157): +Goal Assertion 'Offset_i' (file tests/wp_typed/user_init.i, line 159): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone' (1/3): +Goal Loop assigns 'tactic,Zone' (1/3): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone' (2/3): -Effect at line 155 +Goal Loop assigns 'tactic,Zone' (2/3): +Effect at line 157 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i_2). Assume { @@ -635,7 +635,7 @@ Assume { Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). - (* Loop assigns 'lack,Zone' *) + (* 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)))) -> @@ -658,15 +658,15 @@ Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (i_1 <= i_5) /\ ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone' (3/3): -Call Effect at line 156 +Goal Loop assigns 'tactic,Zone' (3/3): +Call Effect at line 158 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { Type: is_uint32(i) /\ is_sint32(v). (* Goal *) When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. ((forall i_3,i_2 : Z. ((0 <= i_3) -> ((i_3 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_3), i_2) != a_2)))) -> @@ -687,14 +687,14 @@ Prove: exists i_3,i_2 : Z. (i_3 <= i) /\ (i_2 <= i_1) /\ (i_1 <= i_2) /\ ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (1/3): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (1/3): +Effect at line 157 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (2/3): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (2/3): +Effect at line 157 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -702,7 +702,7 @@ Assume { Have: i_3 <= 19. Have: 0 <= i. Have: i <= 9. - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a : addr. ((forall i_5,i_4 : Z. ((0 <= i_5) -> ((i_5 <= 9) -> (shift_sint32(shift_A20_sint32(global(G_t2_48), i_5), i_4) != a)))) -> @@ -713,20 +713,20 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (i_1 <= i_4) /\ ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (3/3): -Call Effect at line 156 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (3/3): +Call Effect at line 158 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (1/2): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (1/2): +Effect at line 157 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (2/2): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (2/2): +Effect at line 157 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -734,7 +734,7 @@ Assume { Have: i_3 <= 19. Have: 0 <= i. Have: i <= 9. - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a : addr. ((forall i_5,i_4 : Z. ((0 <= i_5) -> ((i_5 <= 9) -> (shift_sint32(shift_A20_sint32(global(G_t2_48), i_5), i_4) != a)))) -> @@ -745,12 +745,12 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (i_1 <= i_4) /\ ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 155): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 157): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { Type: is_uint32(i) /\ is_sint32(v). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. ((forall i_2,i_1 : Z. ((0 <= i_2) -> ((i_2 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_2), i_1) != a_2)))) -> @@ -772,18 +772,18 @@ Prove: i < to_uint32(1 + i). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 155): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 157): Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 156) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 158) : Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 156) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 158) : Prove: true. @@ -1745,124 +1745,143 @@ Prove: true. Function init_t2_v3 ------------------------------------------------------------ -Goal Post-condition (file tests/wp_typed/user_init.i, line 97) in 'init_t2_v3': +Goal Post-condition (file tests/wp_typed/user_init.i, line 99) in 'init_t2_v3': Assume { + Type: is_sint32(v). (* Goal *) - When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> - ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> - (t2_1[i_3][i_2] = t2_0[i_3][i_2])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> - ((i_2 <= 19) -> (t2_0[i_3][i_2] = v))))). + When: (0 <= i) /\ (i <= 9). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 <= 9) -> + P_MemSet20(t2_0[i_1], 20, v))). } -Prove: t2_0[i][i_1] = v. +Prove: P_MemSet20(t2_0[i], 20, v). ------------------------------------------------------------ -Goal Preservation of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 105): +Goal Preservation of Invariant 'Partial_i' (file tests/wp_typed/user_init.i, line 108): Assume { - Type: is_uint32(i). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> - ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). + (* Goal *) + When: (0 <= i_1) /\ (i_1 < to_uint32(1 + i)). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> + ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> + (t2_1[i_3][i_2] = t2_0[i_3][i_2])))))). + (* Invariant 'Partial_i' *) + Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 < i) -> + P_MemSet20(t2_0[i_2], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 <= 19) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, 20, v_1). } -Prove: to_uint32(1 + i) <= 10. +Prove: P_MemSet20(t2_0[i <- v][i_1], 20, v_1). ------------------------------------------------------------ -Goal Establishment of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 105): +Goal Establishment of Invariant 'Partial_i' (file tests/wp_typed/user_init.i, line 108): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'lack,Partial_i' (file tests/wp_typed/user_init.i, line 106): +Goal Preservation of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 107): Assume { - Type: is_uint32(i). - (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 < to_uint32(1 + i)) /\ (i_2 <= 19). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> (((i_4 < 0) \/ (10 <= i_4)) -> - (t2_1[i_4][i_3] = t2_0[i_4][i_3])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_4 < i) -> - ((i_3 <= 19) -> (t2_0[i_4][i_3] = v_1))))). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (v[i_3] = v_1))). + Have: P_MemSet20(v, 20, v_1). } -Prove: t2_0[i <- v][i_1][i_2] = v[0]. +Prove: to_uint32(1 + i) <= 10. ------------------------------------------------------------ -Goal Establishment of Invariant 'lack,Partial_i' (file tests/wp_typed/user_init.i, line 106): +Goal Establishment of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 107): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 112): +Goal Preservation of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 114): +Let m = v[j <- v_1]. Assume { - Type: is_uint32(i_1) /\ is_uint32(j). - (* Goal *) - When: (0 <= i) /\ (i < to_uint32(1 + j)). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> - ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> - (t2_0[i_3][i_2] = t2_1[i_3][i_2])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 < i_1) -> - ((i_2 <= 19) -> (t2_1[i_3][i_2] = v_1))))). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_uint32(j) /\ + is_sint32(v_1) /\ IsArray1_sint32(t2_0[i]) /\ IsArray1_sint32(m). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) - Have: (0 <= i_1) /\ (i_1 <= 10). + Have: (0 <= i) /\ (i <= 10). (* Then *) - Have: i_1 <= 9. + Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 < j) -> (v[i_2] = v_1))). + Have: P_MemSet20(v, j, v_1). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) Have: j <= 19. } -Prove: v[j <- v_1][i] = v_1. +Prove: P_MemSet20(m, to_uint32(1 + j), v_1). ------------------------------------------------------------ -Goal Establishment of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 112): -Prove: true. +Goal Establishment of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 114): +Let m = t2_0[i]. +Assume { + Type: is_uint32(i) /\ is_sint32(v) /\ IsArray1_sint32(m). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v))). + (* Invariant 'Range_i' *) + Have: (0 <= i) /\ (i <= 10). + (* Then *) + Have: i <= 9. +} +Prove: P_MemSet20(m, 0, v). ------------------------------------------------------------ -Goal Preservation of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 111): +Goal Preservation of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 113): Assume { - Type: is_uint32(i) /\ is_uint32(j). - (* Loop assigns 'lack,Zone_i' *) + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_uint32(j) /\ + is_sint32(v_1) /\ IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < j) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, j, v_1). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) @@ -1872,95 +1891,97 @@ Prove: to_uint32(1 + j) <= 20. ------------------------------------------------------------ -Goal Establishment of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 111): +Goal Establishment of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 113): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Last_j' (file tests/wp_typed/user_init.i, line 118): +Goal Assertion 'Last_j' (file tests/wp_typed/user_init.i, line 120): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Last_i' (file tests/wp_typed/user_init.i, line 121): +Goal Assertion 'Last_i' (file tests/wp_typed/user_init.i, line 123): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_i' (1/3): +Goal Loop assigns 'tactic,Zone_i' (1/3): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_i' (2/3): -Effect at line 109 +Goal Loop assigns 'tactic,Zone_i' (2/3): +Effect at line 111 Assume { Have: 0 <= i. Have: i <= 9. - Type: is_uint32(i_2). + 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). - (* Loop assigns 'lack,Zone_i' *) + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_6,i_5 : Z. ((0 <= i_5) -> ((0 <= i_6) -> ((i_6 <= 9) -> ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_5) -> ((0 <= i_6) -> ((i_6 < i_2) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + (t2_1[i_6][i_5] = t2_0[i_6][i_5])))))). + (* Invariant 'Partial_i' *) + Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 < i_2) -> + P_MemSet20(t2_0[i_5], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> (v_1[i_5] = v))). + Have: P_MemSet20(v, 20, v_1). } Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (i_1 <= i_5) /\ (0 <= i_6) /\ (i <= i_6) /\ (i_6 <= 9). ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_i' (3/3): -Effect at line 115 +Goal Loop assigns 'tactic,Zone_i' (3/3): +Effect at line 117 Assume { - Type: is_uint32(i). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). (* Goal *) When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone_i' *) + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> - (t2_0[i_3][i_2] = t2_1[i_3][i_2])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 < i) -> - ((i_2 <= 19) -> (t2_1[i_3][i_2] = v))))). + (t2_1[i_3][i_2] = t2_0[i_3][i_2])))))). + (* Invariant 'Partial_i' *) + Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 < i) -> + P_MemSet20(t2_0[i_2], 20, v_1))). (* Invariant 'Range_i' *) Have: i <= 10. (* Invariant 'Partial_j' *) - Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 <= 19) -> (v_1[i_2] = v))). + Have: P_MemSet20(v, 20, v_1). } Prove: exists i_3,i_2 : Z. (i_3 <= i) /\ (i_2 <= i_1) /\ (i_1 <= i_2) /\ (0 <= i_3) /\ (i <= i_3) /\ (i_3 <= 9). ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_j' (1/2): +Goal Loop assigns 'tactic,Zone_j' (1/2): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_j' (2/2): -Effect at line 115 +Goal Loop assigns 'tactic,Zone_j' (2/2): +Effect at line 117 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_v3' (1/2): -Effect at line 109 +Goal Assigns 'tactic' in 'init_t2_v3' (1/2): +Effect at line 111 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_v3' (2/2): -Effect at line 109 +Goal Assigns 'tactic' in 'init_t2_v3' (2/2): +Effect at line 111 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -1968,7 +1989,7 @@ Assume { Have: i_3 <= 19. Have: 0 <= i. Have: i <= 9. - (* Loop assigns 'lack,Zone_i' *) + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_5,i_4 : Z. ((0 <= i_4) -> ((0 <= i_5) -> ((i_5 <= 9) -> ((i_4 <= 19) -> (((i_5 < 0) \/ (10 <= i_5)) -> (t2_0[i_5][i_4] = t2_1[i_5][i_4])))))). @@ -1978,48 +1999,50 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (i_1 <= i_4) /\ ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 109): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 111): Assume { - Type: is_uint32(i). - (* Loop assigns 'lack,Zone_i' *) + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 <= 19) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, 20, v_1). } Prove: i < to_uint32(1 + i). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 109): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 111): Prove: true. ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 115): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 117): Assume { - Type: is_uint32(i) /\ is_uint32(j). - (* Loop assigns 'lack,Zone_i' *) + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_uint32(j) /\ + is_sint32(v_1) /\ IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < j) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, j, v_1). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) @@ -2029,7 +2052,7 @@ Prove: j < to_uint32(1 + j). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 115): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 117): Prove: true. ------------------------------------------------------------ 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 04c72c68990..847496eab27 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 @@ -231,7 +231,7 @@ Prove: true. Function init_t2_bis_v1 ------------------------------------------------------------ -Goal Post-condition (file tests/wp_typed/user_init.i, line 125) in 'init_t2_bis_v1': +Goal Post-condition (file tests/wp_typed/user_init.i, line 127) in 'init_t2_bis_v1': Let a = global(G_t2_48). Assume { Type: is_uint32(i_2) /\ is_sint32(v). @@ -256,12 +256,12 @@ Prove: Mint_0[shift_sint32(shift_A20_sint32(a, i), i_1)] = v. ------------------------------------------------------------ -Goal Exit-condition (file tests/wp_typed/user_init.i, line 127) in 'init_t2_bis_v1': +Goal Exit-condition (file tests/wp_typed/user_init.i, line 129) in 'init_t2_bis_v1': Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 134): +Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 136): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Let a_2 = shift_sint32(a_1, 0). @@ -292,12 +292,12 @@ Prove: a_3[shift_sint32(shift_A20_sint32(a, i_1), i_2)] = Mint_undef_0[a_2]. ------------------------------------------------------------ -Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 134): +Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 136): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 133): +Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 135): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -325,12 +325,12 @@ Prove: to_uint32(1 + i) <= 10. ------------------------------------------------------------ -Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 133): +Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 135): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Offset' (file tests/wp_typed/user_init.i, line 139): +Goal Assertion 'Offset' (file tests/wp_typed/user_init.i, line 141): Prove: true. ------------------------------------------------------------ @@ -341,7 +341,7 @@ Prove: true. ------------------------------------------------------------ Goal Loop assigns 'lack,Zone' (2/3): -Effect at line 137 +Effect at line 139 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -378,7 +378,7 @@ Prove: (forall i_4,i_3 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_4 <= 9) -> ------------------------------------------------------------ Goal Loop assigns 'lack,Zone' (3/3): -Call Effect at line 138 +Call Effect at line 140 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -408,13 +408,13 @@ Prove: exists i_3,i_2 : Z. (i_3 <= i) /\ (i_2 <= i_1) /\ (0 <= i_2) /\ ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (1/3): -Effect at line 137 +Effect at line 139 Prove: true. ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (2/3): -Effect at line 137 +Effect at line 139 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -437,19 +437,19 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (0 <= i_4) /\ ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (3/3): -Call Effect at line 138 +Call Effect at line 140 Prove: true. ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (1/2): -Effect at line 137 +Effect at line 139 Prove: true. ------------------------------------------------------------ Goal Assigns 'lack' in 'init_t2_bis_v1' (2/2): -Effect at line 137 +Effect at line 139 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -471,7 +471,7 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (0 <= i_4) /\ ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 137): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 139): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { @@ -499,18 +499,18 @@ Prove: i < to_uint32(1 + i). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 137): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 139): Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 138) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 140) : Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 138) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v1' at call 'init' (file tests/wp_typed/user_init.i, line 140) : Prove: true. @@ -519,13 +519,13 @@ Prove: true. Function init_t2_bis_v2 ------------------------------------------------------------ -Goal Post-condition (file tests/wp_typed/user_init.i, line 143) in 'init_t2_bis_v2': +Goal Post-condition (file tests/wp_typed/user_init.i, line 145) in 'init_t2_bis_v2': Let a = global(G_t2_48). Assume { Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_1 : addr. ((forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_4), i_3) != a_1)))) -> @@ -543,12 +543,12 @@ Prove: Mint_0[shift_sint32(shift_A20_sint32(a, i), i_1)] = v. ------------------------------------------------------------ -Goal Exit-condition (file tests/wp_typed/user_init.i, line 145) in 'init_t2_bis_v2': +Goal Exit-condition (file tests/wp_typed/user_init.i, line 147) in 'init_t2_bis_v2': Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 152): +Goal Preservation of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 154): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Let a_2 = shift_sint32(a_1, 0). @@ -557,7 +557,7 @@ Assume { Type: is_uint32(i) /\ is_sint32(v). (* Goal *) When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 < to_uint32(1 + i)) /\ (i_2 <= 19). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_4 : addr. ((forall i_4,i_3 : Z. ((0 <= i_4) -> ((i_4 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_4), i_3) != a_4)))) -> @@ -578,17 +578,17 @@ Prove: a_3[shift_sint32(shift_A20_sint32(a, i_1), i_2)] = Mint_undef_0[a_2]. ------------------------------------------------------------ -Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 152): +Goal Establishment of Invariant 'Partial' (file tests/wp_typed/user_init.i, line 154): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 151): +Goal Preservation of Invariant 'Range' (file tests/wp_typed/user_init.i, line 153): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { Type: is_uint32(i) /\ is_sint32(v). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. ((forall i_2,i_1 : Z. ((0 <= i_2) -> ((i_2 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_2), i_1) != a_2)))) -> @@ -610,23 +610,23 @@ Prove: to_uint32(1 + i) <= 10. ------------------------------------------------------------ -Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 151): +Goal Establishment of Invariant 'Range' (file tests/wp_typed/user_init.i, line 153): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Offset_i' (file tests/wp_typed/user_init.i, line 157): +Goal Assertion 'Offset_i' (file tests/wp_typed/user_init.i, line 159): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone' (1/3): +Goal Loop assigns 'tactic,Zone' (1/3): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone' (2/3): -Effect at line 155 +Goal Loop assigns 'tactic,Zone' (2/3): +Effect at line 157 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i_2). Assume { @@ -635,7 +635,7 @@ Assume { Type: is_uint32(i_2) /\ is_sint32(v). (* Goal *) When: (0 <= i_3) /\ (0 <= i_4) /\ (i_3 <= 9) /\ (i_4 <= 19). - (* Loop assigns 'lack,Zone' *) + (* 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)))) -> @@ -658,15 +658,15 @@ Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (i_1 <= i_5) /\ ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone' (3/3): -Call Effect at line 156 +Goal Loop assigns 'tactic,Zone' (3/3): +Call Effect at line 158 Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { Type: is_uint32(i) /\ is_sint32(v). (* Goal *) When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. ((forall i_3,i_2 : Z. ((0 <= i_3) -> ((i_3 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_3), i_2) != a_2)))) -> @@ -687,14 +687,14 @@ Prove: exists i_3,i_2 : Z. (i_3 <= i) /\ (i_2 <= i_1) /\ (i_1 <= i_2) /\ ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (1/3): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (1/3): +Effect at line 157 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (2/3): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (2/3): +Effect at line 157 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -702,7 +702,7 @@ Assume { Have: i_3 <= 19. Have: 0 <= i. Have: i <= 9. - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a : addr. ((forall i_5,i_4 : Z. ((0 <= i_5) -> ((i_5 <= 9) -> (shift_sint32(shift_A20_sint32(global(G_t2_48), i_5), i_4) != a)))) -> @@ -713,20 +713,20 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (i_1 <= i_4) /\ ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (3/3): -Call Effect at line 156 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (3/3): +Call Effect at line 158 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (1/2): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (1/2): +Effect at line 157 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_bis_v2' (2/2): -Effect at line 155 +Goal Assigns 'tactic' in 'init_t2_bis_v2' (2/2): +Effect at line 157 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -734,7 +734,7 @@ Assume { Have: i_3 <= 19. Have: 0 <= i. Have: i <= 9. - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a : addr. ((forall i_5,i_4 : Z. ((0 <= i_5) -> ((i_5 <= 9) -> (shift_sint32(shift_A20_sint32(global(G_t2_48), i_5), i_4) != a)))) -> @@ -745,12 +745,12 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (i_1 <= i_4) /\ ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 155): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 157): Let a = global(G_t2_48). Let a_1 = shift_A20_sint32(a, i). Assume { Type: is_uint32(i) /\ is_sint32(v). - (* Loop assigns 'lack,Zone' *) + (* Loop assigns 'tactic,Zone' *) Have: forall a_2 : addr. ((forall i_2,i_1 : Z. ((0 <= i_2) -> ((i_2 <= 9) -> (shift_sint32(shift_A20_sint32(a, i_2), i_1) != a_2)))) -> @@ -772,18 +772,18 @@ Prove: i < to_uint32(1 + i). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 155): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 157): Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 156) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 7) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 158) : Prove: true. ------------------------------------------------------------ -Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 156) +Goal Instance of 'Pre-condition (file tests/wp_typed/user_init.i, line 8) in 'init'' in 'init_t2_bis_v2' at call 'init' (file tests/wp_typed/user_init.i, line 158) : Prove: true. @@ -1745,124 +1745,143 @@ Prove: true. Function init_t2_v3 ------------------------------------------------------------ -Goal Post-condition (file tests/wp_typed/user_init.i, line 97) in 'init_t2_v3': +Goal Post-condition (file tests/wp_typed/user_init.i, line 99) in 'init_t2_v3': Assume { + Type: is_sint32(v). (* Goal *) - When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> - ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> - (t2_1[i_3][i_2] = t2_0[i_3][i_2])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> - ((i_2 <= 19) -> (t2_0[i_3][i_2] = v))))). + When: (0 <= i) /\ (i <= 9). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 <= 9) -> + P_MemSet20(t2_0[i_1], 20, v))). } -Prove: t2_0[i][i_1] = v. +Prove: P_MemSet20(t2_0[i], 20, v). ------------------------------------------------------------ -Goal Preservation of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 105): +Goal Preservation of Invariant 'Partial_i' (file tests/wp_typed/user_init.i, line 108): Assume { - Type: is_uint32(i). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> - ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). + (* Goal *) + When: (0 <= i_1) /\ (i_1 < to_uint32(1 + i)). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> + ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> + (t2_1[i_3][i_2] = t2_0[i_3][i_2])))))). + (* Invariant 'Partial_i' *) + Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 < i) -> + P_MemSet20(t2_0[i_2], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 <= 19) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, 20, v_1). } -Prove: to_uint32(1 + i) <= 10. +Prove: P_MemSet20(t2_0[i <- v][i_1], 20, v_1). ------------------------------------------------------------ -Goal Establishment of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 105): +Goal Establishment of Invariant 'Partial_i' (file tests/wp_typed/user_init.i, line 108): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'lack,Partial_i' (file tests/wp_typed/user_init.i, line 106): +Goal Preservation of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 107): Assume { - Type: is_uint32(i). - (* Goal *) - When: (0 <= i_1) /\ (0 <= i_2) /\ (i_1 < to_uint32(1 + i)) /\ (i_2 <= 19). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_4 <= 9) -> - ((i_3 <= 19) -> (((i_4 < 0) \/ (10 <= i_4)) -> - (t2_1[i_4][i_3] = t2_0[i_4][i_3])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_4,i_3 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_4 < i) -> - ((i_3 <= 19) -> (t2_0[i_4][i_3] = v_1))))). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (v[i_3] = v_1))). + Have: P_MemSet20(v, 20, v_1). } -Prove: t2_0[i <- v][i_1][i_2] = v[0]. +Prove: to_uint32(1 + i) <= 10. ------------------------------------------------------------ -Goal Establishment of Invariant 'lack,Partial_i' (file tests/wp_typed/user_init.i, line 106): +Goal Establishment of Invariant 'Range_i' (file tests/wp_typed/user_init.i, line 107): Prove: true. ------------------------------------------------------------ -Goal Preservation of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 112): +Goal Preservation of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 114): +Let m = v[j <- v_1]. Assume { - Type: is_uint32(i_1) /\ is_uint32(j). - (* Goal *) - When: (0 <= i) /\ (i < to_uint32(1 + j)). - (* Loop assigns 'lack,Zone_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> - ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> - (t2_0[i_3][i_2] = t2_1[i_3][i_2])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 < i_1) -> - ((i_2 <= 19) -> (t2_1[i_3][i_2] = v_1))))). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_uint32(j) /\ + is_sint32(v_1) /\ IsArray1_sint32(t2_0[i]) /\ IsArray1_sint32(m). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) - Have: (0 <= i_1) /\ (i_1 <= 10). + Have: (0 <= i) /\ (i <= 10). (* Then *) - Have: i_1 <= 9. + Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 < j) -> (v[i_2] = v_1))). + Have: P_MemSet20(v, j, v_1). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) Have: j <= 19. } -Prove: v[j <- v_1][i] = v_1. +Prove: P_MemSet20(m, to_uint32(1 + j), v_1). ------------------------------------------------------------ -Goal Establishment of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 112): -Prove: true. +Goal Establishment of Invariant 'Partial_j' (file tests/wp_typed/user_init.i, line 114): +Let m = t2_0[i]. +Assume { + Type: is_uint32(i) /\ is_sint32(v) /\ IsArray1_sint32(m). + (* Loop assigns 'tactic,Zone_i' *) + Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> + ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v))). + (* Invariant 'Range_i' *) + Have: (0 <= i) /\ (i <= 10). + (* Then *) + Have: i <= 9. +} +Prove: P_MemSet20(m, 0, v). ------------------------------------------------------------ -Goal Preservation of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 111): +Goal Preservation of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 113): Assume { - Type: is_uint32(i) /\ is_uint32(j). - (* Loop assigns 'lack,Zone_i' *) + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_uint32(j) /\ + is_sint32(v_1) /\ IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < j) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, j, v_1). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) @@ -1872,95 +1891,97 @@ Prove: to_uint32(1 + j) <= 20. ------------------------------------------------------------ -Goal Establishment of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 111): +Goal Establishment of Invariant 'Range_j' (file tests/wp_typed/user_init.i, line 113): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Last_j' (file tests/wp_typed/user_init.i, line 118): +Goal Assertion 'Last_j' (file tests/wp_typed/user_init.i, line 120): Prove: true. ------------------------------------------------------------ -Goal Assertion 'Last_i' (file tests/wp_typed/user_init.i, line 121): +Goal Assertion 'Last_i' (file tests/wp_typed/user_init.i, line 123): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_i' (1/3): +Goal Loop assigns 'tactic,Zone_i' (1/3): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_i' (2/3): -Effect at line 109 +Goal Loop assigns 'tactic,Zone_i' (2/3): +Effect at line 111 Assume { Have: 0 <= i. Have: i <= 9. - Type: is_uint32(i_2). + 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). - (* Loop assigns 'lack,Zone_i' *) + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_6,i_5 : Z. ((0 <= i_5) -> ((0 <= i_6) -> ((i_6 <= 9) -> ((i_5 <= 19) -> (((i_6 < 0) \/ (10 <= i_6)) -> - (t2_0[i_6][i_5] = t2_1[i_6][i_5])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_6,i_5 : Z. ((0 <= i_5) -> ((0 <= i_6) -> ((i_6 < i_2) -> - ((i_5 <= 19) -> (t2_1[i_6][i_5] = v))))). + (t2_1[i_6][i_5] = t2_0[i_6][i_5])))))). + (* Invariant 'Partial_i' *) + Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 < i_2) -> + P_MemSet20(t2_0[i_5], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i_2) /\ (i_2 <= 10). (* Then *) Have: i_2 <= 9. (* Invariant 'Partial_j' *) - Have: forall i_5 : Z. ((0 <= i_5) -> ((i_5 <= 19) -> (v_1[i_5] = v))). + Have: P_MemSet20(v, 20, v_1). } Prove: exists i_6,i_5 : Z. (i_6 <= i) /\ (i_5 <= i_1) /\ (i_1 <= i_5) /\ (0 <= i_6) /\ (i <= i_6) /\ (i_6 <= 9). ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_i' (3/3): -Effect at line 115 +Goal Loop assigns 'tactic,Zone_i' (3/3): +Effect at line 117 Assume { - Type: is_uint32(i). + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). (* Goal *) When: (0 <= i) /\ (0 <= i_1) /\ (i <= 9) /\ (i_1 <= 19). - (* Loop assigns 'lack,Zone_i' *) + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 <= 9) -> ((i_2 <= 19) -> (((i_3 < 0) \/ (10 <= i_3)) -> - (t2_0[i_3][i_2] = t2_1[i_3][i_2])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_3,i_2 : Z. ((0 <= i_2) -> ((0 <= i_3) -> ((i_3 < i) -> - ((i_2 <= 19) -> (t2_1[i_3][i_2] = v))))). + (t2_1[i_3][i_2] = t2_0[i_3][i_2])))))). + (* Invariant 'Partial_i' *) + Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 < i) -> + P_MemSet20(t2_0[i_2], 20, v_1))). (* Invariant 'Range_i' *) Have: i <= 10. (* Invariant 'Partial_j' *) - Have: forall i_2 : Z. ((0 <= i_2) -> ((i_2 <= 19) -> (v_1[i_2] = v))). + Have: P_MemSet20(v, 20, v_1). } Prove: exists i_3,i_2 : Z. (i_3 <= i) /\ (i_2 <= i_1) /\ (i_1 <= i_2) /\ (0 <= i_3) /\ (i <= i_3) /\ (i_3 <= 9). ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_j' (1/2): +Goal Loop assigns 'tactic,Zone_j' (1/2): Prove: true. ------------------------------------------------------------ -Goal Loop assigns 'lack,Zone_j' (2/2): -Effect at line 115 +Goal Loop assigns 'tactic,Zone_j' (2/2): +Effect at line 117 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_v3' (1/2): -Effect at line 109 +Goal Assigns 'tactic' in 'init_t2_v3' (1/2): +Effect at line 111 Prove: true. ------------------------------------------------------------ -Goal Assigns 'lack' in 'init_t2_v3' (2/2): -Effect at line 109 +Goal Assigns 'tactic' in 'init_t2_v3' (2/2): +Effect at line 111 Assume { Have: 0 <= i_2. Have: 0 <= i_3. @@ -1968,7 +1989,7 @@ Assume { Have: i_3 <= 19. Have: 0 <= i. Have: i <= 9. - (* Loop assigns 'lack,Zone_i' *) + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_5,i_4 : Z. ((0 <= i_4) -> ((0 <= i_5) -> ((i_5 <= 9) -> ((i_4 <= 19) -> (((i_5 < 0) \/ (10 <= i_5)) -> (t2_0[i_5][i_4] = t2_1[i_5][i_4])))))). @@ -1978,48 +1999,50 @@ Prove: exists i_5,i_4 : Z. (i_5 <= i) /\ (i_4 <= i_1) /\ (i_1 <= i_4) /\ ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 109): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 111): Assume { - Type: is_uint32(i). - (* Loop assigns 'lack,Zone_i' *) + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_sint32(v_1) /\ + IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 <= 19) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, 20, v_1). } Prove: i < to_uint32(1 + i). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 109): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 111): Prove: true. ------------------------------------------------------------ -Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 115): +Goal Decreasing of Loop variant at loop (file tests/wp_typed/user_init.i, line 117): Assume { - Type: is_uint32(i) /\ is_uint32(j). - (* Loop assigns 'lack,Zone_i' *) + Type: IsArray1_sint32(v) /\ is_uint32(i) /\ is_uint32(j) /\ + is_sint32(v_1) /\ IsArray1_sint32(t2_0[i]). + (* Loop assigns 'tactic,Zone_i' *) Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 <= 9) -> ((i_1 <= 19) -> (((i_2 < 0) \/ (10 <= i_2)) -> - (t2_0[i_2][i_1] = t2_1[i_2][i_1])))))). - (* Invariant 'lack,Partial_i' *) - Have: forall i_2,i_1 : Z. ((0 <= i_1) -> ((0 <= i_2) -> ((i_2 < i) -> - ((i_1 <= 19) -> (t2_1[i_2][i_1] = v))))). + (t2_1[i_2][i_1] = t2_0[i_2][i_1])))))). + (* Invariant 'Partial_i' *) + Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < i) -> + P_MemSet20(t2_0[i_1], 20, v_1))). (* Invariant 'Range_i' *) Have: (0 <= i) /\ (i <= 10). (* Then *) Have: i <= 9. (* Invariant 'Partial_j' *) - Have: forall i_1 : Z. ((0 <= i_1) -> ((i_1 < j) -> (v_1[i_1] = v))). + Have: P_MemSet20(v, j, v_1). (* Invariant 'Range_j' *) Have: (0 <= j) /\ (j <= 20). (* Then *) @@ -2029,7 +2052,7 @@ Prove: j < to_uint32(1 + j). ------------------------------------------------------------ -Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 115): +Goal Positivity of Loop variant at loop (file tests/wp_typed/user_init.i, line 117): Prove: true. ------------------------------------------------------------ diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.0.res.oracle b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.0.res.oracle index ea38a9018b4..476ee7df2e4 100644 --- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.0.res.oracle +++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.0.res.oracle @@ -8,7 +8,7 @@ [wp] [CFG] Goal init_t2_v2_exits : Valid (Unreachable) [wp] [CFG] Goal init_t2_v3_exits : Valid (Unreachable) [wp] Warning: Missing RTE guards -[wp] 89 goals scheduled +[wp] 91 goals scheduled [wp] [Alt-Ergo] Goal typed_init_ensures : Valid [wp] [Alt-Ergo] Goal typed_init_loop_invariant_Partial_preserved : Valid [wp] [Qed] Goal typed_init_loop_invariant_Partial_established : Valid @@ -86,10 +86,12 @@ [wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_variant_2_decrease : Valid [wp] [Qed] Goal typed_init_t2_v2_loop_variant_2_positive : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v3_ensures : Valid +[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Partial_i_preserved : Valid +[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Partial_i_established : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Range_i_preserved : Valid [wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Range_i_established : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Partial_j_preserved : Valid -[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Partial_j_established : Valid +[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Partial_j_established : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Range_j_preserved : Valid [wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Range_j_established : Valid [wp] [Qed] Goal typed_init_t2_v3_assert_Last_j : Valid @@ -98,9 +100,9 @@ [wp] [Qed] Goal typed_init_t2_v3_loop_variant_positive : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_variant_2_decrease : Valid [wp] [Qed] Goal typed_init_t2_v3_loop_variant_2_positive : Valid -[wp] Proved goals: 89 / 89 +[wp] Proved goals: 91 / 91 Qed: 51 - Alt-Ergo: 38 + Alt-Ergo: 40 [wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.0.report.json' [wp] Report out: 'tests/wp_typed/result_qualif/user_init.0.report.json' ------------------------------------------------------------- @@ -109,7 +111,7 @@ init 6 4 (80..104) 10 100% init_t1 6 4 (12..24) 10 100% init_t2_v1 9 8 (40..52) 17 100% init_t2_v2 9 8 (32..44) 17 100% -init_t2_v3 7 6 (16..28) 13 100% +init_t2_v3 7 8 (28..40) 15 100% init_t2_bis_v1 7 4 (208..256) 11 100% init_t2_bis_v2 7 4 (192..240) 11 100% ------------------------------------------------------------- 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 77c6f534fe6..ef5a6f0f00a 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 @@ -8,10 +8,18 @@ [wp] [CFG] Goal init_t2_v2_exits : Valid (Unreachable) [wp] [CFG] Goal init_t2_v3_exits : Valid (Unreachable) [wp] Warning: Missing RTE guards -[wp] 8 goals scheduled +[wp] 23 goals scheduled +[wp] [Qed] Goal typed_init_t2_bis_v2_loop_assigns_part1 : Valid +[wp] Warning: creating session directory `tests/wp_typed/result_qualif/user_init-session-1' +[wp] Warning: creating session directory `tests/wp_typed/result_qualif/user_init-session-1/wp' +[wp] [Tactical] Goal typed_init_t2_bis_v2_loop_assigns_part2 : Valid +[wp] [Tactical] Goal typed_init_t2_bis_v2_loop_assigns_part3 : Valid +[wp] [Tactical] Goal typed_init_t2_bis_v2_assigns_exit_part1 : Valid +[wp] [Tactical] Goal typed_init_t2_bis_v2_assigns_exit_part2 : Valid +[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_exit_part3 : Valid +[wp] [Tactical] Goal typed_init_t2_bis_v2_assigns_normal_part1 : Valid +[wp] [Tactical] Goal typed_init_t2_bis_v2_assigns_normal_part2 : Valid [wp] [Qed] Goal typed_init_t2_v2_loop_assigns_part1 : Valid -[wp] Warning: creating session directory `tests/wp_typed/result_qualif/user_init-session/test-1' -[wp] Warning: creating session directory `tests/wp_typed/result_qualif/user_init-session/test-1/wp' [wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_part2 : Valid [wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_part3 : Valid [wp] [Qed] Goal typed_init_t2_v2_loop_assigns_2_part1 : Valid @@ -19,14 +27,23 @@ [wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_2_part3 : Valid [wp] [Tactical] Goal typed_init_t2_v2_assigns_part1 : Valid [wp] [Tactical] Goal typed_init_t2_v2_assigns_part2 : Valid -[wp] Proved goals: 8 / 8 - Qed: 3 - Alt-Ergo: 0 (unsuccess: 5) - Script: 5 -[wp] Updated session with 5 new valid scripts. +[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_part1 : Valid +[wp] [Tactical] Goal typed_init_t2_v3_loop_assigns_part2 : Valid +[wp] [Tactical] Goal typed_init_t2_v3_loop_assigns_part3 : Valid +[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_2_part1 : Valid +[wp] [Tactical] Goal typed_init_t2_v3_loop_assigns_2_part2 : Valid +[wp] [Tactical] Goal typed_init_t2_v3_assigns_part1 : Valid +[wp] [Tactical] Goal typed_init_t2_v3_assigns_part2 : Valid +[wp] Proved goals: 23 / 23 + Qed: 11 + Alt-Ergo: 0 (unsuccess: 12) + Script: 12 +[wp] Updated session with 12 new valid scripts. [wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.1.report.json' [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_v3 4 - (20..32) 7 100% +init_t2_bis_v2 4 - (28..40) 8 100% ------------------------------------------------------------- diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.2.res.oracle b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.2.res.oracle index 910fde6d48c..17ce10c2bdd 100644 --- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.2.res.oracle +++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.2.res.oracle @@ -8,7 +8,7 @@ [wp] [CFG] Goal init_t2_v2_exits : Valid (Unreachable) [wp] [CFG] Goal init_t2_v3_exits : Valid (Unreachable) [wp] Warning: Missing RTE guards -[wp] 33 goals scheduled +[wp] 16 goals scheduled [wp] [Qed] Goal typed_init_t2_bis_v1_loop_assigns_part1 : Valid [wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_assigns_part2 : Unsuccess [wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_assigns_part3 : Unsuccess @@ -17,14 +17,6 @@ [wp] [Qed] Goal typed_init_t2_bis_v1_assigns_exit_part3 : Valid [wp] [Qed] Goal typed_init_t2_bis_v1_assigns_normal_part1 : Valid [wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_assigns_normal_part2 : Unsuccess -[wp] [Qed] Goal typed_init_t2_bis_v2_loop_assigns_part1 : Valid -[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_assigns_part2 : Unsuccess -[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_assigns_part3 : Unsuccess -[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_exit_part1 : Valid -[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_assigns_exit_part2 : Unsuccess -[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_exit_part3 : Valid -[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_normal_part1 : Valid -[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_assigns_normal_part2 : Unsuccess [wp] [Qed] Goal typed_init_t2_v1_loop_assigns_part1 : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_part2 : Unsuccess [wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_part3 : Unsuccess @@ -33,24 +25,13 @@ [wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_2_part3 : Unsuccess [wp] [Qed] Goal typed_init_t2_v1_assigns_part1 : Valid [wp] [Alt-Ergo] Goal typed_init_t2_v1_assigns_part2 : Unsuccess -[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_lack_Partial_i_preserved : Unsuccess -[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_lack_Partial_i_established : Valid -[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_part1 : Valid -[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_assigns_part2 : Unsuccess -[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_assigns_part3 : Unsuccess -[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_2_part1 : Valid -[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_2_part2 : Valid -[wp] [Qed] Goal typed_init_t2_v3_assigns_part1 : Valid -[wp] [Alt-Ergo] Goal typed_init_t2_v3_assigns_part2 : Unsuccess -[wp] Proved goals: 16 / 33 - Qed: 16 - Alt-Ergo: 0 (unsuccess: 17) +[wp] Proved goals: 7 / 16 + Qed: 7 + Alt-Ergo: 0 (unsuccess: 9) [wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.2.report.json' [wp] Report out: 'tests/wp_typed/result_qualif/user_init.2.report.json' ------------------------------------------------------------- Functions WP Alt-Ergo Total Success init_t2_v1 3 - 8 37.5% -init_t2_v3 5 - 9 55.6% init_t2_bis_v1 4 - 8 50.0% -init_t2_bis_v2 4 - 8 50.0% ------------------------------------------------------------- diff --git a/src/plugins/wp/tests/wp_typed/user_init.i b/src/plugins/wp/tests/wp_typed/user_init.i index 06f597c3d3a..a34d4664bb4 100644 --- a/src/plugins/wp/tests/wp_typed/user_init.i +++ b/src/plugins/wp/tests/wp_typed/user_init.i @@ -1,7 +1,7 @@ /* run.config_qualif - EXECNOW: rm -rf @PTEST_DIR@/result@PTEST_CONFIG@/@PTEST_NAME@-session/ + EXECNOW: rm -rf @PTEST_DIR@/result@PTEST_CONFIG@/@PTEST_NAME@-session-1/ OPT: -wp-prop=-lack,-tactic - OPT: -wp-prop=tactic -wp-auto=wp:split -session @PTEST_DIR@/result@PTEST_CONFIG@/@PTEST_NAME@-session/test-@PTEST_NUMBER@ + OPT: -wp-prop=tactic -wp-auto=wp:split -session @PTEST_DIR@/result@PTEST_CONFIG@/@PTEST_NAME@-session-@PTEST_NUMBER@ OPT: -wp-prop=lack -wp-steps 300 */ /*@ requires \valid(a+(0..n-1)) ; @@ -94,22 +94,24 @@ void init_t2_v2(int v) { ; } //------------------------- -/*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v; +//@ predicate MemSet20(int t2[20], integer n, integer v) = n <= 20 && \forall integer k ; 0 <= k < n ==> t2[k] == v; + +/*@ ensures \forall integer k; 0 <= k < 10 ==> MemSet20(t2[k], 20, v); @ exits \false; - @ assigns lack: t2[..][..]; + @ assigns tactic: t2[..][..]; */ void init_t2_v3(int v) { unsigned i,j; - /*@ loop assigns lack: Zone_i: i, j, t2[..][..]; + /*@ loop assigns tactic: Zone_i: i, j, t2[..][..]; @ loop invariant Range_i: 0 <= i <= 10 ; - @ loop invariant lack: Partial_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v; + @ loop invariant Partial_i: \forall integer k; 0 <= k < i ==> MemSet20(t2[k], 20, v); @ loop variant V_i: 10 - i ; */ for(i = 0; i <= 9; i++) { - /*@ loop assigns lack: Zone_j: j, t2[i][..]; + /*@ loop assigns tactic: Zone_j: j, t2[i][..]; @ loop invariant Range_j: 0 <= j <= 20 ; - @ loop invariant Partial_j: \forall integer l; 0 <= l < j ==> t2[i][l] == v; + @ loop invariant Partial_j: MemSet20(t2[i], j, v); @ loop variant Decr_j: 20 - j ; */ for(j = 0; j <= 19; j++) { @@ -141,13 +143,13 @@ void init_t2_bis_v1(int v) { } //------------------------- /*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v; - @ assigns lack: t2[..][..]; + @ assigns tactic: t2[..][..]; @ exits \false; */ void init_t2_bis_v2(int v) { unsigned i; - /*@ loop assigns lack: Zone: i, t2[..][..]; + /*@ loop assigns tactic: Zone: i, t2[..][..]; @ loop invariant Range: 0 <= i <= 10 ; @ loop invariant Partial: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v; @ loop variant Decr: 10 - i ; -- GitLab