From 8d592f4be1b73af61c43097db691c432d62fa91e Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Sun, 26 Dec 2021 19:12:06 +0100
Subject: [PATCH] [aorai] fix loop invariant generation

and remove some nearly duplicated code
---
 src/plugins/aorai/aorai_visitors.ml            | 18 ++----------------
 .../aorai/tests/ya/oracle/bts1289.1.res.oracle |  3 +--
 .../tests/ya/oracle/loop_bts1050.res.oracle    |  4 +---
 .../aorai/tests/ya/oracle/observed.res.oracle  |  5 +++--
 .../aorai/tests/ya/oracle/seq_loop.res.oracle  |  4 +---
 5 files changed, 8 insertions(+), 26 deletions(-)

diff --git a/src/plugins/aorai/aorai_visitors.ml b/src/plugins/aorai/aorai_visitors.ml
index aadd8a359bd..08dff72aecd 100644
--- a/src/plugins/aorai/aorai_visitors.ml
+++ b/src/plugins/aorai/aorai_visitors.ml
@@ -560,21 +560,6 @@ class visit_adding_pre_post_from_buch treatloops =
       predicate_to_invariant kf stmt pred
     end
   in
-  let impossible_states_preds start possible_states my_state =
-    let treat_one_start_state state start_state end_states acc =
-      if not (Data_for_aorai.Aorai_state.Map.mem state end_states) then
-        Logic_const.pimplies
-          (Logic_const.pat(Aorai_utils.is_state_pred start_state, start),
-           Aorai_utils.is_out_of_state_pred state)
-        :: acc
-      else acc
-    in
-    let treat_one_state state _ acc =
-      Data_for_aorai.Aorai_state.Map.fold
-        (treat_one_start_state state) my_state acc
-    in
-    Data_for_aorai.Aorai_state.Map.fold treat_one_state possible_states []
-  in
   let impossible_states_preds_inv start possible_states my_state =
     let treat_one_start_state state start_state end_states acc =
       if Data_for_aorai.Aorai_state.Map.mem state end_states then
@@ -1064,7 +1049,8 @@ class visit_adding_pre_post_from_buch treatloops =
         condition_to_invariant kf possible_states new_loop;
 
         let init_preds =
-          impossible_states_preds Logic_const.pre_label possible_states init_state
+          impossible_states_preds_inv
+            Logic_const.pre_label possible_states init_state
         in
         let treat_init_pred pred =
           let pred = mk_imply Rneq pred in
diff --git a/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle b/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle
index 835b432fec2..ad209874b35 100644
--- a/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle
@@ -325,8 +325,7 @@ void main(void)
       loop invariant Aorai: 0 ≡ aorai_intermediate_state_0;
       loop invariant Aorai: 0 ≡ init;
       loop invariant Aorai: 1 ≡ S ∨ 1 ≡ T;
-      loop invariant
-        Aorai: aorai_Loop_Init_4 ≢ 0 ⇒ \at(1 ≡ init,Pre) ⇒ 0 ≡ T;
+      loop invariant Aorai: aorai_Loop_Init_4 ≢ 0 ⇒ 0 ≡ T;
       loop assigns i, aorai_Loop_Init_4, aorai_CurOpStatus,
                    aorai_CurOperation, S, T, aorai_intermediate_state,
                    aorai_intermediate_state_0, init;
diff --git a/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle b/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle
index 87d2fbbdcfd..82b0886cf1f 100644
--- a/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle
@@ -610,9 +610,7 @@ int main(int c)
         Aorai:
           1 ≡ aorai_intermediate_state ∨ 1 ≡ aorai_intermediate_state_0;
       loop invariant
-        Aorai:
-          aorai_Loop_Init_13 ≢ 0 ⇒
-          \at(1 ≡ S0,Pre) ⇒ 0 ≡ aorai_intermediate_state_0;
+        Aorai: aorai_Loop_Init_13 ≢ 0 ⇒ 0 ≡ aorai_intermediate_state_0;
       loop invariant
         Aorai: aorai_Loop_Init_13 ≡ 0 ⇒ 0 ≡ aorai_intermediate_state;
       loop invariant
diff --git a/src/plugins/aorai/tests/ya/oracle/observed.res.oracle b/src/plugins/aorai/tests/ya/oracle/observed.res.oracle
index d02c3691359..ffb2b1dba40 100644
--- a/src/plugins/aorai/tests/ya/oracle/observed.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/observed.res.oracle
@@ -200,11 +200,12 @@ void g(void)
       loop invariant
         Aorai:
           aorai_Loop_Init_4 ≢ 0 ⇒
-          \at(1 ≡ aorai_intermediate_state_0,Pre) ⇒ 0 ≡ first_step;
+          \at(0 ≡ first_step,Pre) ⇒ 0 ≡ first_step;
       loop invariant
         Aorai:
           aorai_Loop_Init_4 ≢ 0 ⇒
-          \at(1 ≡ first_step,Pre) ⇒ 0 ≡ aorai_intermediate_state_0;
+          \at(0 ≡ aorai_intermediate_state_0,Pre) ⇒
+          0 ≡ aorai_intermediate_state_0;
       loop invariant
         Aorai:
           aorai_Loop_Init_4 ≡ 0 ⇒
diff --git a/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle b/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle
index fa3c9b2b57c..1a827b61513 100644
--- a/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle
@@ -615,9 +615,7 @@ int main(int c)
         Aorai:
           1 ≡ aorai_intermediate_state ∨ 1 ≡ aorai_intermediate_state_0;
       loop invariant
-        Aorai:
-          aorai_Loop_Init_14 ≢ 0 ⇒
-          \at(1 ≡ S0,Pre) ⇒ 0 ≡ aorai_intermediate_state_0;
+        Aorai: aorai_Loop_Init_14 ≢ 0 ⇒ 0 ≡ aorai_intermediate_state_0;
       loop invariant
         Aorai: aorai_Loop_Init_14 ≡ 0 ⇒ 0 ≡ aorai_intermediate_state;
       loop invariant
-- 
GitLab