diff --git a/src/plugins/e-acsl/src/analyses/interval.ml b/src/plugins/e-acsl/src/analyses/interval.ml
index f2937821bc68e16241c86164a9964f1a9e12c215..125ffabd7c5e84213944bece0b0ba2250cb4a0b1 100644
--- a/src/plugins/e-acsl/src/analyses/interval.ml
+++ b/src/plugins/e-acsl/src/analyses/interval.ml
@@ -377,7 +377,6 @@ let rec fixpoint ~(infer : force:bool ->
       let assumed_ival = interv_of_typ_containing_interv inferred_ival in
       fixpoint ~infer li args_ival t' assumed_ival
 
-
 (* Memoization module which retrieves the computed info of some terms *)
 module Memo: sig
   val memo:
@@ -482,8 +481,6 @@ end = struct
   let clear () =
     Options.feedback ~level:4 "clearing the typing tables";
     LFProf.Hashtbl.clear widened_profile_tbl
-
-
 end
 
 let plus_one i =
@@ -742,17 +739,18 @@ let rec infer ~force ~logic_env t =
          if LF_env.is_rec li then
            let widened_profile = widen_profile profile in
            Widened_profile.add profile li widened_profile;
-           (match li.l_body with
-            | LBpred p ->
-              LF_env.add_pred li widened_profile;
-              infer_predicate
-                ~logic_env:(Logic_env.make widened_profile) p;
-              Ival Ival.zero_or_one
-            | LBterm t' ->
-              (try LF_env.find li widened_profile
-               with Not_found ->
-                 fixpoint ~infer li widened_profile t' (Ival Ival.bottom))
-            | _ -> assert false)
+           try LF_env.find li widened_profile
+           with
+           | Not_found ->
+             (match li.l_body with
+              | LBpred p ->
+                LF_env.add_pred li widened_profile;
+                infer_predicate
+                  ~logic_env:(Logic_env.make widened_profile) p;
+                Ival Ival.zero_or_one
+              | LBterm t' ->
+                fixpoint ~infer li widened_profile t' (Ival Ival.bottom)
+              | _ -> assert false)
          else
            let logic_env = Logic_env.make profile in
            (match li.l_body with
@@ -1059,8 +1057,11 @@ and infer_predicate ~logic_env p =
     infer_predicate ~logic_env p;
   | Pif(t, p1, p2) ->
     ignore (infer ~force:false ~logic_env t);
-    infer_predicate ~logic_env p1;
-    infer_predicate ~logic_env p2
+    let logic_env_tbranch, logic_env_fbranch =
+      compute_logic_env_if_branches logic_env t
+    in
+    infer_predicate ~logic_env:logic_env_tbranch p1;
+    infer_predicate ~logic_env:logic_env_fbranch p2
   | Plet(li, p) ->
     let li_t = Misc.term_of_li li in
     let li_v = li.l_var_info in
diff --git a/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle
index 6332bd48d4b8d961b978cbf1ee83e7f3f568e931..f53305dc5bcad0814d39ca78341b1a0304480a20 100644
--- a/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle
+++ b/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle
@@ -1,28 +1,16 @@
 [e-acsl] beginning translation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] functions_rec.c:11: Warning: 
-  accessing uninitialized left-value.
-  assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub);
-[eva:alarm] functions_rec.c:11: Warning: 
-  accessing uninitialized left-value.
-  assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_2);
 [eva] functions_rec.c:11: Warning: 
-  Using specification of function __gen_e_acsl_even_3 for recursive calls.
-  Analysis of function __gen_e_acsl_even_3 is thus incomplete and its soundness
-  relies on the written specification.
-[eva:alarm] functions_rec.c:12: Warning: 
-  accessing uninitialized left-value.
-  assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add);
-[eva] functions_rec.c:12: Warning: 
-  Using specification of function __gen_e_acsl_even_3 for recursive calls.
-  Analysis of function __gen_e_acsl_even_3 is thus incomplete and its soundness
+  Using specification of function __gen_e_acsl_even for recursive calls.
+  Analysis of function __gen_e_acsl_even is thus incomplete and its soundness
   relies on the written specification.
 [eva:alarm] functions_rec.c:40: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] functions_rec.c:40: Warning: assertion got status unknown.
-[eva:alarm] functions_rec.c:12: Warning: 
-  accessing uninitialized left-value.
-  assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_2);
+[eva] functions_rec.c:12: Warning: 
+  Using specification of function __gen_e_acsl_even for recursive calls.
+  Analysis of function __gen_e_acsl_even is thus incomplete and its soundness
+  relies on the written specification.
 [eva:alarm] functions_rec.c:41: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] functions_rec.c:41: Warning: assertion got status unknown.
diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c b/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c
index 7c2bcabacd397e0c75e4c589de4872c23e20b9ff..7d95aadc010abf548b870ae7719e59590b93dfc6 100644
--- a/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c
+++ b/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c
@@ -11,14 +11,9 @@ extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 /*@
 predicate even(integer n) =
   n == 0? \true: (n > 0? !even(n - 1): !even(n + 1));
-
-*/
-int __gen_e_acsl_even_2(long n);
-
+ */
 int __gen_e_acsl_even(int n);
 
-int __gen_e_acsl_even_3(__e_acsl_mpz_struct * n);
-
 /*@
 predicate even_and_not_negative(integer n) =
   n == 0? \true: (n > 0? !even(n - 1): \false);
@@ -62,35 +57,35 @@ int main(void)
   int __retres;
   __e_acsl_memory_init((int *)0,(char ***)0,8UL);
   {
-    int __gen_e_acsl_even_14;
+    int __gen_e_acsl_even_6;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
-    __gen_e_acsl_even_14 = __gen_e_acsl_even(10);
+    __gen_e_acsl_even_6 = __gen_e_acsl_even(10);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"even(10)",0,
-                                 __gen_e_acsl_even_14);
+                                 __gen_e_acsl_even_6);
     __gen_e_acsl_assert_data.blocking = 1;
     __gen_e_acsl_assert_data.kind = "Assertion";
     __gen_e_acsl_assert_data.pred_txt = "even(10)";
     __gen_e_acsl_assert_data.file = "functions_rec.c";
     __gen_e_acsl_assert_data.fct = "main";
     __gen_e_acsl_assert_data.line = 40;
-    __e_acsl_assert(__gen_e_acsl_even_14,& __gen_e_acsl_assert_data);
+    __e_acsl_assert(__gen_e_acsl_even_6,& __gen_e_acsl_assert_data);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
   }
   /*@ assert even(10); */ ;
   {
-    int __gen_e_acsl_even_16;
+    int __gen_e_acsl_even_8;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
       {.values = (void *)0};
-    __gen_e_acsl_even_16 = __gen_e_acsl_even(-6);
+    __gen_e_acsl_even_8 = __gen_e_acsl_even(-6);
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,"even(-6)",0,
-                                 __gen_e_acsl_even_16);
+                                 __gen_e_acsl_even_8);
     __gen_e_acsl_assert_data_2.blocking = 1;
     __gen_e_acsl_assert_data_2.kind = "Assertion";
     __gen_e_acsl_assert_data_2.pred_txt = "even(-6)";
     __gen_e_acsl_assert_data_2.file = "functions_rec.c";
     __gen_e_acsl_assert_data_2.fct = "main";
     __gen_e_acsl_assert_data_2.line = 41;
-    __e_acsl_assert(__gen_e_acsl_even_16,& __gen_e_acsl_assert_data_2);
+    __e_acsl_assert(__gen_e_acsl_even_8,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
   }
   /*@ assert even(-6); */ ;
@@ -116,14 +111,14 @@ int main(void)
   /*@ assert even_and_not_negative(10); */ ;
   {
     __e_acsl_mpz_t __gen_e_acsl_f1_4;
-    __e_acsl_mpz_t __gen_e_acsl__8;
-    int __gen_e_acsl_eq_2;
+    __e_acsl_mpz_t __gen_e_acsl__2;
+    int __gen_e_acsl_eq;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
       {.values = (void *)0};
     __gen_e_acsl_f1(& __gen_e_acsl_f1_4,0);
-    __gmpz_init_set_si(__gen_e_acsl__8,0L);
-    __gen_e_acsl_eq_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_4),
-                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
+    __gmpz_init_set_si(__gen_e_acsl__2,0L);
+    __gen_e_acsl_eq = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_4),
+                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_4,"f1(0)",0,
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_4));
     __gen_e_acsl_assert_data_4.blocking = 1;
@@ -132,22 +127,22 @@ int main(void)
     __gen_e_acsl_assert_data_4.file = "functions_rec.c";
     __gen_e_acsl_assert_data_4.fct = "main";
     __gen_e_acsl_assert_data_4.line = 43;
-    __e_acsl_assert(__gen_e_acsl_eq_2 == 0,& __gen_e_acsl_assert_data_4);
+    __e_acsl_assert(__gen_e_acsl_eq == 0,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
     __gmpz_clear(__gen_e_acsl_f1_4);
-    __gmpz_clear(__gen_e_acsl__8);
+    __gmpz_clear(__gen_e_acsl__2);
   }
   /*@ assert f1(0) == 0; */ ;
   {
     __e_acsl_mpz_t __gen_e_acsl_f1_6;
-    __e_acsl_mpz_t __gen_e_acsl__9;
-    int __gen_e_acsl_eq_3;
+    __e_acsl_mpz_t __gen_e_acsl__3;
+    int __gen_e_acsl_eq_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
       {.values = (void *)0};
     __gen_e_acsl_f1(& __gen_e_acsl_f1_6,1);
-    __gmpz_init_set_si(__gen_e_acsl__9,1L);
-    __gen_e_acsl_eq_3 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_6),
-                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__9));
+    __gmpz_init_set_si(__gen_e_acsl__3,1L);
+    __gen_e_acsl_eq_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_6),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__3));
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_5,"f1(1)",0,
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_6));
     __gen_e_acsl_assert_data_5.blocking = 1;
@@ -156,22 +151,22 @@ int main(void)
     __gen_e_acsl_assert_data_5.file = "functions_rec.c";
     __gen_e_acsl_assert_data_5.fct = "main";
     __gen_e_acsl_assert_data_5.line = 44;
-    __e_acsl_assert(__gen_e_acsl_eq_3 == 0,& __gen_e_acsl_assert_data_5);
+    __e_acsl_assert(__gen_e_acsl_eq_2 == 0,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
     __gmpz_clear(__gen_e_acsl_f1_6);
-    __gmpz_clear(__gen_e_acsl__9);
+    __gmpz_clear(__gen_e_acsl__3);
   }
   /*@ assert f1(1) == 1; */ ;
   {
     __e_acsl_mpz_t __gen_e_acsl_f1_8;
-    __e_acsl_mpz_t __gen_e_acsl__10;
-    int __gen_e_acsl_eq_4;
+    __e_acsl_mpz_t __gen_e_acsl__4;
+    int __gen_e_acsl_eq_3;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 =
       {.values = (void *)0};
     __gen_e_acsl_f1(& __gen_e_acsl_f1_8,10);
-    __gmpz_init_set_si(__gen_e_acsl__10,55L);
-    __gen_e_acsl_eq_4 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8),
-                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__10));
+    __gmpz_init_set_si(__gen_e_acsl__4,55L);
+    __gen_e_acsl_eq_3 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__4));
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_6,"f1(10)",0,
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8));
     __gen_e_acsl_assert_data_6.blocking = 1;
@@ -180,22 +175,22 @@ int main(void)
     __gen_e_acsl_assert_data_6.file = "functions_rec.c";
     __gen_e_acsl_assert_data_6.fct = "main";
     __gen_e_acsl_assert_data_6.line = 45;
-    __e_acsl_assert(__gen_e_acsl_eq_4 == 0,& __gen_e_acsl_assert_data_6);
+    __e_acsl_assert(__gen_e_acsl_eq_3 == 0,& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
     __gmpz_clear(__gen_e_acsl_f1_8);
-    __gmpz_clear(__gen_e_acsl__10);
+    __gmpz_clear(__gen_e_acsl__4);
   }
   /*@ assert f1(10) == 55; */ ;
   {
     __e_acsl_mpz_t __gen_e_acsl_f2_8;
-    __e_acsl_mpz_t __gen_e_acsl__13;
-    int __gen_e_acsl_eq_5;
+    __e_acsl_mpz_t __gen_e_acsl__7;
+    int __gen_e_acsl_eq_4;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 =
       {.values = (void *)0};
     __gen_e_acsl_f2(& __gen_e_acsl_f2_8,7);
-    __gmpz_init_set_si(__gen_e_acsl__13,1L);
-    __gen_e_acsl_eq_5 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_8),
-                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__13));
+    __gmpz_init_set_si(__gen_e_acsl__7,1L);
+    __gen_e_acsl_eq_4 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_8),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__7));
     /*@ assert Eva: initialization: \initialized(&n); */
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_8,"n",0,n);
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_8,"f2(n - 3)",0,
@@ -208,10 +203,10 @@ int main(void)
     __gen_e_acsl_assert_data_7.file = "functions_rec.c";
     __gen_e_acsl_assert_data_7.fct = "main";
     __gen_e_acsl_assert_data_7.line = 47;
-    __e_acsl_assert(__gen_e_acsl_eq_5 == 0,& __gen_e_acsl_assert_data_7);
+    __e_acsl_assert(__gen_e_acsl_eq_4 == 0,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
     __gmpz_clear(__gen_e_acsl_f2_8);
-    __gmpz_clear(__gen_e_acsl__13);
+    __gmpz_clear(__gen_e_acsl__7);
   }
   /*@ assert f2(7) == 1; */ ;
   {
@@ -250,14 +245,14 @@ int main(void)
   /*@ assert f4(9) > 0; */ ;
   {
     __e_acsl_mpz_t __gen_e_acsl_f5_4;
-    __e_acsl_mpz_t __gen_e_acsl__15;
-    int __gen_e_acsl_eq_6;
+    __e_acsl_mpz_t __gen_e_acsl__9;
+    int __gen_e_acsl_eq_5;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_11 =
       {.values = (void *)0};
     __gen_e_acsl_f5(& __gen_e_acsl_f5_4,0);
-    __gmpz_init_set_si(__gen_e_acsl__15,0L);
-    __gen_e_acsl_eq_6 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_4),
-                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__15));
+    __gmpz_init_set_si(__gen_e_acsl__9,0L);
+    __gen_e_acsl_eq_5 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_4),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__9));
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_11,"f5(0)",0,
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_4));
     __gen_e_acsl_assert_data_11.blocking = 1;
@@ -266,26 +261,26 @@ int main(void)
     __gen_e_acsl_assert_data_11.file = "functions_rec.c";
     __gen_e_acsl_assert_data_11.fct = "main";
     __gen_e_acsl_assert_data_11.line = 53;
-    __e_acsl_assert(__gen_e_acsl_eq_6 == 0,& __gen_e_acsl_assert_data_11);
+    __e_acsl_assert(__gen_e_acsl_eq_5 == 0,& __gen_e_acsl_assert_data_11);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11);
     __gmpz_clear(__gen_e_acsl_f5_4);
-    __gmpz_clear(__gen_e_acsl__15);
+    __gmpz_clear(__gen_e_acsl__9);
   }
   /*@ assert f5(0) == 0; */ ;
   {
-    long __gen_e_acsl_n_5;
+    long __gen_e_acsl_n_3;
     __e_acsl_mpz_t __gen_e_acsl_f5_8;
-    __e_acsl_mpz_t __gen_e_acsl__17;
-    int __gen_e_acsl_eq_7;
+    __e_acsl_mpz_t __gen_e_acsl__11;
+    int __gen_e_acsl_eq_6;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_12 =
       {.values = (void *)0};
-    __gen_e_acsl_n_5 = 9223372036854775807L;
-    __gen_e_acsl_f5_5(& __gen_e_acsl_f5_8,__gen_e_acsl_n_5);
-    __gmpz_init_set_si(__gen_e_acsl__17,0L);
-    __gen_e_acsl_eq_7 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8),
-                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__17));
+    __gen_e_acsl_n_3 = 9223372036854775807L;
+    __gen_e_acsl_f5_5(& __gen_e_acsl_f5_8,__gen_e_acsl_n_3);
+    __gmpz_init_set_si(__gen_e_acsl__11,0L);
+    __gen_e_acsl_eq_6 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8),
+                                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__11));
     __e_acsl_assert_register_long(& __gen_e_acsl_assert_data_12,"n",0,
-                                  __gen_e_acsl_n_5);
+                                  __gen_e_acsl_n_3);
     __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_12,"f5(n)",0,
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8));
     __gen_e_acsl_assert_data_12.blocking = 1;
@@ -294,10 +289,10 @@ int main(void)
     __gen_e_acsl_assert_data_12.file = "functions_rec.c";
     __gen_e_acsl_assert_data_12.fct = "main";
     __gen_e_acsl_assert_data_12.line = 55;
-    __e_acsl_assert(__gen_e_acsl_eq_7 == 0,& __gen_e_acsl_assert_data_12);
+    __e_acsl_assert(__gen_e_acsl_eq_6 == 0,& __gen_e_acsl_assert_data_12);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_12);
     __gmpz_clear(__gen_e_acsl_f5_8);
-    __gmpz_clear(__gen_e_acsl__17);
+    __gmpz_clear(__gen_e_acsl__11);
   }
   /*@ assert \let n = 0 == 0? 0x7fffffffffffffffL: -1; f5(n) == 0; */ ;
   __retres = 0;
@@ -305,140 +300,26 @@ int main(void)
   return __retres;
 }
 
-/*@ assigns \result;
-    assigns \result \from n; */
-int __gen_e_acsl_even_2(long n)
-{
-  int __gen_e_acsl_if_4;
-  if (n == 0L) __gen_e_acsl_if_4 = 1;
-  else {
-    int __gen_e_acsl_if_3;
-    if (n > 0L) {
-      __e_acsl_mpz_t __gen_e_acsl_n;
-      __e_acsl_mpz_t __gen_e_acsl_;
-      __e_acsl_mpz_t __gen_e_acsl_sub;
-      int __gen_e_acsl_even_8;
-      __gmpz_init_set_si(__gen_e_acsl_n,n);
-      __gmpz_init_set_si(__gen_e_acsl_,1L);
-      __gmpz_init(__gen_e_acsl_sub);
-      __gmpz_sub(__gen_e_acsl_sub,
-                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_n),
-                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-      /*@ assert
-          Eva: initialization:
-            \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub);
-      */
-      __gen_e_acsl_even_8 = __gen_e_acsl_even_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub);
-      __gen_e_acsl_if_3 = ! __gen_e_acsl_even_8;
-      __gmpz_clear(__gen_e_acsl_n);
-      __gmpz_clear(__gen_e_acsl_);
-      __gmpz_clear(__gen_e_acsl_sub);
-    }
-    else {
-      __e_acsl_mpz_t __gen_e_acsl_n_2;
-      __e_acsl_mpz_t __gen_e_acsl__6;
-      __e_acsl_mpz_t __gen_e_acsl_add_2;
-      int __gen_e_acsl_even_10;
-      __gmpz_init_set_si(__gen_e_acsl_n_2,n);
-      __gmpz_init_set_si(__gen_e_acsl__6,1L);
-      __gmpz_init(__gen_e_acsl_add_2);
-      __gmpz_add(__gen_e_acsl_add_2,
-                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2),
-                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__6));
-      /*@ assert
-          Eva: initialization:
-            \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_2);
-      */
-      __gen_e_acsl_even_10 = __gen_e_acsl_even_3((__e_acsl_mpz_struct *)__gen_e_acsl_add_2);
-      __gen_e_acsl_if_3 = ! __gen_e_acsl_even_10;
-      __gmpz_clear(__gen_e_acsl_n_2);
-      __gmpz_clear(__gen_e_acsl__6);
-      __gmpz_clear(__gen_e_acsl_add_2);
-    }
-    __gen_e_acsl_if_4 = __gen_e_acsl_if_3;
-  }
-  return __gen_e_acsl_if_4;
-}
-
 /*@ assigns \result;
     assigns \result \from n; */
 int __gen_e_acsl_even(int n)
 {
-  int __gen_e_acsl_if_6;
-  if (n == 0) __gen_e_acsl_if_6 = 1;
+  int __gen_e_acsl_if_2;
+  if (n == 0) __gen_e_acsl_if_2 = 1;
   else {
-    int __gen_e_acsl_if_5;
+    int __gen_e_acsl_if;
     if (n > 0) {
-      int __gen_e_acsl_even_11;
-      __gen_e_acsl_even_11 = __gen_e_acsl_even_2(n - 1L);
-      __gen_e_acsl_if_5 = ! __gen_e_acsl_even_11;
+      int __gen_e_acsl_even_3;
+      __gen_e_acsl_even_3 = __gen_e_acsl_even(n - 1);
+      __gen_e_acsl_if = ! __gen_e_acsl_even_3;
     }
     else {
-      int __gen_e_acsl_even_13;
-      __gen_e_acsl_even_13 = __gen_e_acsl_even_2(n + 1L);
-      __gen_e_acsl_if_5 = ! __gen_e_acsl_even_13;
-    }
-    __gen_e_acsl_if_6 = __gen_e_acsl_if_5;
-  }
-  return __gen_e_acsl_if_6;
-}
-
-/*@ assigns \result;
-    assigns \result \from *((__e_acsl_mpz_struct *)n); */
-int __gen_e_acsl_even_3(__e_acsl_mpz_struct * n)
-{
-  __e_acsl_mpz_t __gen_e_acsl__2;
-  int __gen_e_acsl_eq;
-  int __gen_e_acsl_if_2;
-  __gmpz_init_set_si(__gen_e_acsl__2,0L);
-  __gen_e_acsl_eq = __gmpz_cmp((__e_acsl_mpz_struct const *)(n),
-                               (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
-  if (__gen_e_acsl_eq == 0) __gen_e_acsl_if_2 = 1;
-  else {
-    __e_acsl_mpz_t __gen_e_acsl__3;
-    int __gen_e_acsl_gt;
-    int __gen_e_acsl_if;
-    __gmpz_init_set_si(__gen_e_acsl__3,0L);
-    __gen_e_acsl_gt = __gmpz_cmp((__e_acsl_mpz_struct const *)(n),
-                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__3));
-    if (__gen_e_acsl_gt > 0) {
-      __e_acsl_mpz_t __gen_e_acsl__4;
-      __e_acsl_mpz_t __gen_e_acsl_sub_2;
       int __gen_e_acsl_even_5;
-      __gmpz_init_set_si(__gen_e_acsl__4,1L);
-      __gmpz_init(__gen_e_acsl_sub_2);
-      __gmpz_sub(__gen_e_acsl_sub_2,(__e_acsl_mpz_struct const *)(n),
-                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__4));
-      /*@ assert
-          Eva: initialization:
-            \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_2);
-      */
-      __gen_e_acsl_even_5 = __gen_e_acsl_even_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_2);
+      __gen_e_acsl_even_5 = __gen_e_acsl_even(n + 1);
       __gen_e_acsl_if = ! __gen_e_acsl_even_5;
-      __gmpz_clear(__gen_e_acsl__4);
-      __gmpz_clear(__gen_e_acsl_sub_2);
-    }
-    else {
-      __e_acsl_mpz_t __gen_e_acsl__5;
-      __e_acsl_mpz_t __gen_e_acsl_add;
-      int __gen_e_acsl_even_7;
-      __gmpz_init_set_si(__gen_e_acsl__5,1L);
-      __gmpz_init(__gen_e_acsl_add);
-      __gmpz_add(__gen_e_acsl_add,(__e_acsl_mpz_struct const *)(n),
-                 (__e_acsl_mpz_struct const *)(__gen_e_acsl__5));
-      /*@ assert
-          Eva: initialization:
-            \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add);
-      */
-      __gen_e_acsl_even_7 = __gen_e_acsl_even_3((__e_acsl_mpz_struct *)__gen_e_acsl_add);
-      __gen_e_acsl_if = ! __gen_e_acsl_even_7;
-      __gmpz_clear(__gen_e_acsl__5);
-      __gmpz_clear(__gen_e_acsl_add);
     }
     __gen_e_acsl_if_2 = __gen_e_acsl_if;
-    __gmpz_clear(__gen_e_acsl__3);
   }
-  __gmpz_clear(__gen_e_acsl__2);
   return __gen_e_acsl_if_2;
 }
 
@@ -446,52 +327,52 @@ int __gen_e_acsl_even_3(__e_acsl_mpz_struct * n)
     assigns \result \from n; */
 int __gen_e_acsl_even_and_not_negative(int n)
 {
-  int __gen_e_acsl_if_8;
-  if (n == 0) __gen_e_acsl_if_8 = 1;
+  int __gen_e_acsl_if_4;
+  if (n == 0) __gen_e_acsl_if_4 = 1;
   else {
-    int __gen_e_acsl_if_7;
+    int __gen_e_acsl_if_3;
     if (n > 0) {
-      int __gen_e_acsl_even_18;
-      __gen_e_acsl_even_18 = __gen_e_acsl_even(n - 1);
-      __gen_e_acsl_if_7 = ! __gen_e_acsl_even_18;
+      int __gen_e_acsl_even_10;
+      __gen_e_acsl_even_10 = __gen_e_acsl_even(n - 1);
+      __gen_e_acsl_if_3 = ! __gen_e_acsl_even_10;
     }
-    else __gen_e_acsl_if_7 = 0;
-    __gen_e_acsl_if_8 = __gen_e_acsl_if_7;
+    else __gen_e_acsl_if_3 = 0;
+    __gen_e_acsl_if_4 = __gen_e_acsl_if_3;
   }
-  return __gen_e_acsl_if_8;
+  return __gen_e_acsl_if_4;
 }
 
 /*@ assigns (*__retres_arg)[0];
     assigns (*__retres_arg)[0] \from n; */
 void __gen_e_acsl_f1(__e_acsl_mpz_t *__retres_arg, int n)
 {
-  __e_acsl_mpz_t __gen_e_acsl_if_9;
+  __e_acsl_mpz_t __gen_e_acsl_if_5;
   if (n <= 0) {
-    __e_acsl_mpz_t __gen_e_acsl__7;
-    __gmpz_init_set_si(__gen_e_acsl__7,0L);
-    __gmpz_init_set(__gen_e_acsl_if_9,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__7));
-    __gmpz_clear(__gen_e_acsl__7);
+    __e_acsl_mpz_t __gen_e_acsl_;
+    __gmpz_init_set_si(__gen_e_acsl_,0L);
+    __gmpz_init_set(__gen_e_acsl_if_5,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+    __gmpz_clear(__gen_e_acsl_);
   }
   else {
     __e_acsl_mpz_t __gen_e_acsl_f1_3;
-    __e_acsl_mpz_t __gen_e_acsl_n_3;
-    __e_acsl_mpz_t __gen_e_acsl_add_3;
+    __e_acsl_mpz_t __gen_e_acsl_n;
+    __e_acsl_mpz_t __gen_e_acsl_add;
     __gen_e_acsl_f1(& __gen_e_acsl_f1_3,n - 1);
-    __gmpz_init_set_si(__gen_e_acsl_n_3,(long)n);
-    __gmpz_init(__gen_e_acsl_add_3);
-    __gmpz_add(__gen_e_acsl_add_3,
+    __gmpz_init_set_si(__gen_e_acsl_n,(long)n);
+    __gmpz_init(__gen_e_acsl_add);
+    __gmpz_add(__gen_e_acsl_add,
                (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_3),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_3));
-    __gmpz_init_set(__gen_e_acsl_if_9,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n));
+    __gmpz_init_set(__gen_e_acsl_if_5,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_add));
     __gmpz_clear(__gen_e_acsl_f1_3);
-    __gmpz_clear(__gen_e_acsl_n_3);
-    __gmpz_clear(__gen_e_acsl_add_3);
+    __gmpz_clear(__gen_e_acsl_n);
+    __gmpz_clear(__gen_e_acsl_add);
   }
   __gmpz_init_set(*__retres_arg,
-                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_9));
-  __gmpz_clear(__gen_e_acsl_if_9);
+                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_5));
+  __gmpz_clear(__gen_e_acsl_if_5);
   return;
 }
 
@@ -499,20 +380,20 @@ void __gen_e_acsl_f1(__e_acsl_mpz_t *__retres_arg, int n)
     assigns (*__retres_arg)[0] \from n; */
 void __gen_e_acsl_f2(__e_acsl_mpz_t *__retres_arg, int n)
 {
-  __e_acsl_mpz_t __gen_e_acsl_if_10;
+  __e_acsl_mpz_t __gen_e_acsl_if_6;
   if (n < 0) {
-    __e_acsl_mpz_t __gen_e_acsl__11;
-    __gmpz_init_set_si(__gen_e_acsl__11,1L);
-    __gmpz_init_set(__gen_e_acsl_if_10,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__11));
-    __gmpz_clear(__gen_e_acsl__11);
+    __e_acsl_mpz_t __gen_e_acsl__5;
+    __gmpz_init_set_si(__gen_e_acsl__5,1L);
+    __gmpz_init_set(__gen_e_acsl_if_6,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__5));
+    __gmpz_clear(__gen_e_acsl__5);
   }
   else {
     __e_acsl_mpz_t __gen_e_acsl_f2_3;
     __e_acsl_mpz_t __gen_e_acsl_f2_5;
     __e_acsl_mpz_t __gen_e_acsl_mul;
     __e_acsl_mpz_t __gen_e_acsl_f2_7;
-    __e_acsl_mpz_t __gen_e_acsl__12;
+    __e_acsl_mpz_t __gen_e_acsl__6;
     int __gen_e_acsl_div_guard;
     __e_acsl_mpz_t __gen_e_acsl_div;
     __gen_e_acsl_f2(& __gen_e_acsl_f2_3,n - 1);
@@ -524,9 +405,9 @@ void __gen_e_acsl_f2(__e_acsl_mpz_t *__retres_arg, int n)
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 =
       {.values = (void *)0};
     __gen_e_acsl_f2(& __gen_e_acsl_f2_7,n - 3);
-    __gmpz_init_set_si(__gen_e_acsl__12,0L);
+    __gmpz_init_set_si(__gen_e_acsl__6,0L);
     __gen_e_acsl_div_guard = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_7),
-                                        (__e_acsl_mpz_struct const *)(__gen_e_acsl__12));
+                                        (__e_acsl_mpz_struct const *)(__gen_e_acsl__6));
     __gmpz_init(__gen_e_acsl_div);
     /*@ assert E_ACSL: f2(n - 3) != 0; */
     {
@@ -543,18 +424,18 @@ void __gen_e_acsl_f2(__e_acsl_mpz_t *__retres_arg, int n)
     __gmpz_tdiv_q(__gen_e_acsl_div,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_7));
-    __gmpz_init_set(__gen_e_acsl_if_10,
+    __gmpz_init_set(__gen_e_acsl_if_6,
                     (__e_acsl_mpz_struct const *)(__gen_e_acsl_div));
     __gmpz_clear(__gen_e_acsl_f2_3);
     __gmpz_clear(__gen_e_acsl_f2_5);
     __gmpz_clear(__gen_e_acsl_mul);
     __gmpz_clear(__gen_e_acsl_f2_7);
-    __gmpz_clear(__gen_e_acsl__12);
+    __gmpz_clear(__gen_e_acsl__6);
     __gmpz_clear(__gen_e_acsl_div);
   }
   __gmpz_init_set(*__retres_arg,
-                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_10));
-  __gmpz_clear(__gen_e_acsl_if_10);
+                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_6));
+  __gmpz_clear(__gen_e_acsl_if_6);
   return;
 }
 
@@ -578,72 +459,72 @@ int __gen_e_acsl_g(unsigned int n)
     assigns \result \from n; */
 int __gen_e_acsl_f3(int n)
 {
-  int __gen_e_acsl_if_11;
+  int __gen_e_acsl_if_7;
   if (n > 0) {
     int __gen_e_acsl_g_2;
     int __gen_e_acsl_f3_3;
     __gen_e_acsl_g_2 = __gen_e_acsl_g((unsigned int)n);
     __gen_e_acsl_f3_3 = __gen_e_acsl_f3(n - 1);
-    __gen_e_acsl_if_11 = __gen_e_acsl_g_2 * __gen_e_acsl_f3_3 - 5;
+    __gen_e_acsl_if_7 = __gen_e_acsl_g_2 * __gen_e_acsl_f3_3 - 5;
   }
   else {
     int __gen_e_acsl_g_4;
     __gen_e_acsl_g_4 = __gen_e_acsl_g_3(n + 1);
-    __gen_e_acsl_if_11 = __gen_e_acsl_g_4;
+    __gen_e_acsl_if_7 = __gen_e_acsl_g_4;
   }
-  return __gen_e_acsl_if_11;
+  return __gen_e_acsl_if_7;
 }
 
 /*@ assigns \result;
     assigns \result \from n; */
 unsigned long __gen_e_acsl_f4(int n)
 {
-  unsigned long __gen_e_acsl_if_13;
+  unsigned long __gen_e_acsl_if_9;
   if (n < 100) {
     unsigned long __gen_e_acsl_f4_3;
     __gen_e_acsl_f4_3 = __gen_e_acsl_f4(n + 1);
-    __gen_e_acsl_if_13 = __gen_e_acsl_f4_3;
+    __gen_e_acsl_if_9 = __gen_e_acsl_f4_3;
   }
   else {
-    unsigned long __gen_e_acsl_if_12;
-    if ((unsigned long)n < 9223372036854775807UL) __gen_e_acsl_if_12 = 9223372036854775807UL;
-    else __gen_e_acsl_if_12 = 6UL;
-    __gen_e_acsl_if_13 = __gen_e_acsl_if_12;
+    unsigned long __gen_e_acsl_if_8;
+    if ((unsigned long)n < 9223372036854775807UL) __gen_e_acsl_if_8 = 9223372036854775807UL;
+    else __gen_e_acsl_if_8 = 6UL;
+    __gen_e_acsl_if_9 = __gen_e_acsl_if_8;
   }
-  return __gen_e_acsl_if_13;
+  return __gen_e_acsl_if_9;
 }
 
 /*@ assigns (*__retres_arg)[0];
     assigns (*__retres_arg)[0] \from n; */
 void __gen_e_acsl_f5_5(__e_acsl_mpz_t *__retres_arg, long n)
 {
-  __e_acsl_mpz_t __gen_e_acsl_if_15;
+  __e_acsl_mpz_t __gen_e_acsl_if_11;
   if (n >= 0L) {
-    __e_acsl_mpz_t __gen_e_acsl__16;
-    __gmpz_init_set_si(__gen_e_acsl__16,0L);
-    __gmpz_init_set(__gen_e_acsl_if_15,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__16));
-    __gmpz_clear(__gen_e_acsl__16);
+    __e_acsl_mpz_t __gen_e_acsl__10;
+    __gmpz_init_set_si(__gen_e_acsl__10,0L);
+    __gmpz_init_set(__gen_e_acsl_if_11,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__10));
+    __gmpz_clear(__gen_e_acsl__10);
   }
   else {
     __e_acsl_mpz_t __gen_e_acsl_f5_7;
-    __e_acsl_mpz_t __gen_e_acsl_n_6;
-    __e_acsl_mpz_t __gen_e_acsl_add_5;
+    __e_acsl_mpz_t __gen_e_acsl_n_4;
+    __e_acsl_mpz_t __gen_e_acsl_add_3;
     __gen_e_acsl_f5_5(& __gen_e_acsl_f5_7,n + 1L);
-    __gmpz_init_set_si(__gen_e_acsl_n_6,n);
-    __gmpz_init(__gen_e_acsl_add_5);
-    __gmpz_add(__gen_e_acsl_add_5,
+    __gmpz_init_set_si(__gen_e_acsl_n_4,n);
+    __gmpz_init(__gen_e_acsl_add_3);
+    __gmpz_add(__gen_e_acsl_add_3,
                (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_7),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_6));
-    __gmpz_init_set(__gen_e_acsl_if_15,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_5));
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_4));
+    __gmpz_init_set(__gen_e_acsl_if_11,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3));
     __gmpz_clear(__gen_e_acsl_f5_7);
-    __gmpz_clear(__gen_e_acsl_n_6);
-    __gmpz_clear(__gen_e_acsl_add_5);
+    __gmpz_clear(__gen_e_acsl_n_4);
+    __gmpz_clear(__gen_e_acsl_add_3);
   }
   __gmpz_init_set(*__retres_arg,
-                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_15));
-  __gmpz_clear(__gen_e_acsl_if_15);
+                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_11));
+  __gmpz_clear(__gen_e_acsl_if_11);
   return;
 }
 
@@ -651,33 +532,33 @@ void __gen_e_acsl_f5_5(__e_acsl_mpz_t *__retres_arg, long n)
     assigns (*__retres_arg)[0] \from n; */
 void __gen_e_acsl_f5(__e_acsl_mpz_t *__retres_arg, int n)
 {
-  __e_acsl_mpz_t __gen_e_acsl_if_14;
+  __e_acsl_mpz_t __gen_e_acsl_if_10;
   if (n >= 0) {
-    __e_acsl_mpz_t __gen_e_acsl__14;
-    __gmpz_init_set_si(__gen_e_acsl__14,0L);
-    __gmpz_init_set(__gen_e_acsl_if_14,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__14));
-    __gmpz_clear(__gen_e_acsl__14);
+    __e_acsl_mpz_t __gen_e_acsl__8;
+    __gmpz_init_set_si(__gen_e_acsl__8,0L);
+    __gmpz_init_set(__gen_e_acsl_if_10,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl__8));
+    __gmpz_clear(__gen_e_acsl__8);
   }
   else {
     __e_acsl_mpz_t __gen_e_acsl_f5_3;
-    __e_acsl_mpz_t __gen_e_acsl_n_4;
-    __e_acsl_mpz_t __gen_e_acsl_add_4;
+    __e_acsl_mpz_t __gen_e_acsl_n_2;
+    __e_acsl_mpz_t __gen_e_acsl_add_2;
     __gen_e_acsl_f5(& __gen_e_acsl_f5_3,n + 1);
-    __gmpz_init_set_si(__gen_e_acsl_n_4,(long)n);
-    __gmpz_init(__gen_e_acsl_add_4);
-    __gmpz_add(__gen_e_acsl_add_4,
+    __gmpz_init_set_si(__gen_e_acsl_n_2,(long)n);
+    __gmpz_init(__gen_e_acsl_add_2);
+    __gmpz_add(__gen_e_acsl_add_2,
                (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_3),
-               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_4));
-    __gmpz_init_set(__gen_e_acsl_if_14,
-                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_4));
+               (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2));
+    __gmpz_init_set(__gen_e_acsl_if_10,
+                    (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
     __gmpz_clear(__gen_e_acsl_f5_3);
-    __gmpz_clear(__gen_e_acsl_n_4);
-    __gmpz_clear(__gen_e_acsl_add_4);
+    __gmpz_clear(__gen_e_acsl_n_2);
+    __gmpz_clear(__gen_e_acsl_add_2);
   }
   __gmpz_init_set(*__retres_arg,
-                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_14));
-  __gmpz_clear(__gen_e_acsl_if_14);
+                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_10));
+  __gmpz_clear(__gen_e_acsl_if_10);
   return;
 }