/* Generated by Frama-C */
#include "pthread.h"
#include "sched.h"
#include "signal.h"
#include "stddef.h"
#include "stdint.h"
#include "stdio.h"
#include "time.h"
extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;

int f(int x)
{
  int __gen_e_acsl_old_variant;
  /*@ loop variant x; */
  while (1) {
    __gen_e_acsl_old_variant = x;
    if (! (x >= 0)) break;
    x -= 2;
    {
      __e_acsl_assert_data_t __gen_e_acsl_assert_data =
        {.values = (void *)0};
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"old x",0,
                                   __gen_e_acsl_old_variant);
      __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
        {.values = (void *)0};
      __e_acsl_assert_copy_values(& __gen_e_acsl_assert_data_2,
                                  & __gen_e_acsl_assert_data);
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,"current x",
                                   0,x);
      __gen_e_acsl_assert_data.blocking = 1;
      __gen_e_acsl_assert_data.kind = "Variant";
      __gen_e_acsl_assert_data.pred_txt = "(old x) >= 0";
      __gen_e_acsl_assert_data.file = "decrease.c";
      __gen_e_acsl_assert_data.fct = "f";
      __gen_e_acsl_assert_data.line = 10;
      __e_acsl_assert(__gen_e_acsl_old_variant >= 0,
                      & __gen_e_acsl_assert_data);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
      __gen_e_acsl_assert_data_2.blocking = 1;
      __gen_e_acsl_assert_data_2.kind = "Variant";
      __gen_e_acsl_assert_data_2.pred_txt = "(old x) > x";
      __gen_e_acsl_assert_data_2.file = "decrease.c";
      __gen_e_acsl_assert_data_2.fct = "f";
      __gen_e_acsl_assert_data_2.line = 10;
      __e_acsl_assert(__gen_e_acsl_old_variant > x,
                      & __gen_e_acsl_assert_data_2);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
    }
  }
  return x;
}

/*@ predicate lexico(integer x, integer y) = x > y && 0 <= x;

*/
int __gen_e_acsl_lexico(int x, int y);

int g(int x)
{
  int __gen_e_acsl_old_variant;
  /*@ loop variant x for lexico; */
  while (1) {
    __gen_e_acsl_old_variant = x;
    if (! (x >= 0)) break;
    x -= 2;
    {
      int __gen_e_acsl_lexico_2;
      __gen_e_acsl_lexico_2 = __gen_e_acsl_lexico(__gen_e_acsl_old_variant,x);
      __e_acsl_assert_data_t __gen_e_acsl_assert_data =
        {.values = (void *)0};
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"old x",0,
                                   __gen_e_acsl_old_variant);
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"current x",0,
                                   x);
      __gen_e_acsl_assert_data.blocking = 1;
      __gen_e_acsl_assert_data.kind = "Variant";
      __gen_e_acsl_assert_data.pred_txt = "lexico(old x, x)";
      __gen_e_acsl_assert_data.file = "decrease.c";
      __gen_e_acsl_assert_data.fct = "g";
      __gen_e_acsl_assert_data.line = 21;
      __e_acsl_assert(__gen_e_acsl_lexico_2,& __gen_e_acsl_assert_data);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
    }
  }
  return x;
}

/*@ requires n <= 12; */
int __gen_e_acsl_fact(int n);

int fact(int n)
{
  int __gen_e_acsl_old_variant;
  int result = n;
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"n",0,n);
    __gen_e_acsl_assert_data.blocking = 1;
    __gen_e_acsl_assert_data.kind = "Invariant";
    __gen_e_acsl_assert_data.pred_txt = "n >= 1";
    __gen_e_acsl_assert_data.file = "decrease.c";
    __gen_e_acsl_assert_data.fct = "fact";
    __gen_e_acsl_assert_data.line = 31;
    __e_acsl_assert(n >= 1,& __gen_e_acsl_assert_data);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
  }
  /*@ loop invariant n >= 1;
      loop variant n; */
  while (1) {
    __gen_e_acsl_old_variant = n;
    if (! (n > 1)) break;
    {
      result *= n - 1;
      n --;
      __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
        {.values = (void *)0};
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,"n",0,n);
      __gen_e_acsl_assert_data_2.blocking = 1;
      __gen_e_acsl_assert_data_2.kind = "Invariant";
      __gen_e_acsl_assert_data_2.pred_txt = "n >= 1";
      __gen_e_acsl_assert_data_2.file = "decrease.c";
      __gen_e_acsl_assert_data_2.fct = "fact";
      __gen_e_acsl_assert_data_2.line = 31;
      __e_acsl_assert(n >= 1,& __gen_e_acsl_assert_data_2);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
    }
    {
      __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
        {.values = (void *)0};
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"old n",0,
                                   __gen_e_acsl_old_variant);
      __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
        {.values = (void *)0};
      __e_acsl_assert_copy_values(& __gen_e_acsl_assert_data_4,
                                  & __gen_e_acsl_assert_data_3);
      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"current n",
                                   0,n);
      __gen_e_acsl_assert_data_3.blocking = 1;
      __gen_e_acsl_assert_data_3.kind = "Variant";
      __gen_e_acsl_assert_data_3.pred_txt = "(old n) >= 0";
      __gen_e_acsl_assert_data_3.file = "decrease.c";
      __gen_e_acsl_assert_data_3.fct = "fact";
      __gen_e_acsl_assert_data_3.line = 33;
      __e_acsl_assert(__gen_e_acsl_old_variant >= 0,
                      & __gen_e_acsl_assert_data_3);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
      __gen_e_acsl_assert_data_4.blocking = 1;
      __gen_e_acsl_assert_data_4.kind = "Variant";
      __gen_e_acsl_assert_data_4.pred_txt = "(old n) > n";
      __gen_e_acsl_assert_data_4.file = "decrease.c";
      __gen_e_acsl_assert_data_4.fct = "fact";
      __gen_e_acsl_assert_data_4.line = 33;
      __e_acsl_assert(__gen_e_acsl_old_variant > n,
                      & __gen_e_acsl_assert_data_4);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
    }
  }
  return result;
}

/*@ requires n <= 20; */
size_t __gen_e_acsl_fact2(size_t n);

size_t fact2(size_t n)
{
  size_t result = n;
  {
    size_t i = 1UL;
    {
      int __gen_e_acsl_and;
      __e_acsl_assert_data_t __gen_e_acsl_assert_data =
        {.values = (void *)0};
      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"i",0,i);
      if (1UL <= i) {
        __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"i",0,i);
        __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
        __gen_e_acsl_and = i < n;
      }
      else __gen_e_acsl_and = 0;
      __gen_e_acsl_assert_data.blocking = 1;
      __gen_e_acsl_assert_data.kind = "Invariant";
      __gen_e_acsl_assert_data.pred_txt = "1 <= i < n";
      __gen_e_acsl_assert_data.file = "decrease.c";
      __gen_e_acsl_assert_data.fct = "fact2";
      __gen_e_acsl_assert_data.line = 44;
      __e_acsl_assert(__gen_e_acsl_and,& __gen_e_acsl_assert_data);
      __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
    }
    /*@ loop invariant 1 <= i < n;
        loop variant n - i; */
    while (i < n - 1UL) {
      result *= n - i;
      {
        int __gen_e_acsl_and_2;
        i ++;
        __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
          {.values = (void *)0};
        __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"i",0,i);
        if (1UL <= i) {
          __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"i",0,
                                         i);
          __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,"n",0,
                                         n);
          __gen_e_acsl_and_2 = i < n;
        }
        else __gen_e_acsl_and_2 = 0;
        __gen_e_acsl_assert_data_2.blocking = 1;
        __gen_e_acsl_assert_data_2.kind = "Invariant";
        __gen_e_acsl_assert_data_2.pred_txt = "1 <= i < n";
        __gen_e_acsl_assert_data_2.file = "decrease.c";
        __gen_e_acsl_assert_data_2.fct = "fact2";
        __gen_e_acsl_assert_data_2.line = 44;
        __e_acsl_assert(__gen_e_acsl_and_2,& __gen_e_acsl_assert_data_2);
        __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
      }
    }
  }
  return result;
}

/*@ decreases n; */
int __gen_e_acsl_fib(int n);

int fib(int n)
{
  int __retres;
  int tmp;
  int tmp_0;
  if (n == 1) {
    __retres = 1;
    goto return_label;
  }
  if (n <= 0) {
    __retres = 0;
    goto return_label;
  }
  tmp = __gen_e_acsl_fib(n - 1);
  tmp_0 = __gen_e_acsl_fib(n - 2);
  __retres = tmp + tmp_0;
  return_label: return __retres;
}

/*@ requires n >= 0;
    decreases n; */
int __gen_e_acsl_odd(int n);

int odd(int n);

/*@ requires n >= 0;
    decreases n; */
int __gen_e_acsl_even(int n);

int even(int n)
{
  int __retres;
  int tmp;
  if (n == 0) {
    __retres = 1;
    goto return_label;
  }
  tmp = __gen_e_acsl_odd(n - 1);
  __retres = tmp;
  return_label: return __retres;
}

int odd(int n)
{
  int __retres;
  int tmp;
  if (n == 0) {
    __retres = 0;
    goto return_label;
  }
  tmp = __gen_e_acsl_even(n - 1);
  __retres = tmp;
  return_label: return __retres;
}

int main(void)
{
  int __retres;
  __e_acsl_memory_init((int *)0,(char ***)0,8UL);
  int f10 = f(10);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"f10",0,f10);
    __gen_e_acsl_assert_data.blocking = 1;
    __gen_e_acsl_assert_data.kind = "Assertion";
    __gen_e_acsl_assert_data.pred_txt = "f10 == -2";
    __gen_e_acsl_assert_data.file = "decrease.c";
    __gen_e_acsl_assert_data.fct = "main";
    __gen_e_acsl_assert_data.line = 81;
    __e_acsl_assert(f10 == -2,& __gen_e_acsl_assert_data);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
  }
  /*@ assert f10 == -2; */ ;
  int f7 = f(7);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,"f7",0,f7);
    __gen_e_acsl_assert_data_2.blocking = 1;
    __gen_e_acsl_assert_data_2.kind = "Assertion";
    __gen_e_acsl_assert_data_2.pred_txt = "f7 == -1";
    __gen_e_acsl_assert_data_2.file = "decrease.c";
    __gen_e_acsl_assert_data_2.fct = "main";
    __gen_e_acsl_assert_data_2.line = 83;
    __e_acsl_assert(f7 == -1,& __gen_e_acsl_assert_data_2);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
  }
  /*@ assert f7 == -1; */ ;
  int g10 = g(10);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"g10",0,g10);
    __gen_e_acsl_assert_data_3.blocking = 1;
    __gen_e_acsl_assert_data_3.kind = "Assertion";
    __gen_e_acsl_assert_data_3.pred_txt = "g10 == -2";
    __gen_e_acsl_assert_data_3.file = "decrease.c";
    __gen_e_acsl_assert_data_3.fct = "main";
    __gen_e_acsl_assert_data_3.line = 85;
    __e_acsl_assert(g10 == -2,& __gen_e_acsl_assert_data_3);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
  }
  /*@ assert g10 == -2; */ ;
  int g7 = g(7);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"g7",0,g7);
    __gen_e_acsl_assert_data_4.blocking = 1;
    __gen_e_acsl_assert_data_4.kind = "Assertion";
    __gen_e_acsl_assert_data_4.pred_txt = "g7 == -1";
    __gen_e_acsl_assert_data_4.file = "decrease.c";
    __gen_e_acsl_assert_data_4.fct = "main";
    __gen_e_acsl_assert_data_4.line = 87;
    __e_acsl_assert(g7 == -1,& __gen_e_acsl_assert_data_4);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
  }
  /*@ assert g7 == -1; */ ;
  int fact7 = __gen_e_acsl_fact(7);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"fact7",0,
                                 fact7);
    __gen_e_acsl_assert_data_5.blocking = 1;
    __gen_e_acsl_assert_data_5.kind = "Assertion";
    __gen_e_acsl_assert_data_5.pred_txt = "fact7 == 5040";
    __gen_e_acsl_assert_data_5.file = "decrease.c";
    __gen_e_acsl_assert_data_5.fct = "main";
    __gen_e_acsl_assert_data_5.line = 90;
    __e_acsl_assert(fact7 == 5040,& __gen_e_acsl_assert_data_5);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
  }
  /*@ assert fact7 == 5040; */ ;
  size_t fact18 = __gen_e_acsl_fact2((size_t)18);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 =
      {.values = (void *)0};
    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_6,"fact18",0,
                                   fact18);
    __gen_e_acsl_assert_data_6.blocking = 1;
    __gen_e_acsl_assert_data_6.kind = "Assertion";
    __gen_e_acsl_assert_data_6.pred_txt = "fact18 == 6402373705728000UL";
    __gen_e_acsl_assert_data_6.file = "decrease.c";
    __gen_e_acsl_assert_data_6.fct = "main";
    __gen_e_acsl_assert_data_6.line = 93;
    __e_acsl_assert(fact18 == 6402373705728000UL,
                    & __gen_e_acsl_assert_data_6);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
  }
  /*@ assert fact18 == 6402373705728000UL; */ ;
  int fib7 = __gen_e_acsl_fib(7);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_7,"fib7",0,fib7);
    __gen_e_acsl_assert_data_7.blocking = 1;
    __gen_e_acsl_assert_data_7.kind = "Assertion";
    __gen_e_acsl_assert_data_7.pred_txt = "fib7 == 13";
    __gen_e_acsl_assert_data_7.file = "decrease.c";
    __gen_e_acsl_assert_data_7.fct = "main";
    __gen_e_acsl_assert_data_7.line = 96;
    __e_acsl_assert(fib7 == 13,& __gen_e_acsl_assert_data_7);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
  }
  /*@ assert fib7 == 13; */ ;
  int even7 = __gen_e_acsl_even(7);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_8,"even7",0,
                                 even7);
    __gen_e_acsl_assert_data_8.blocking = 1;
    __gen_e_acsl_assert_data_8.kind = "Assertion";
    __gen_e_acsl_assert_data_8.pred_txt = "even7 == 0";
    __gen_e_acsl_assert_data_8.file = "decrease.c";
    __gen_e_acsl_assert_data_8.fct = "main";
    __gen_e_acsl_assert_data_8.line = 99;
    __e_acsl_assert(even7 == 0,& __gen_e_acsl_assert_data_8);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
  }
  /*@ assert even7 == 0; */ ;
  int even10 = __gen_e_acsl_even(10);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_9 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_9,"even10",0,
                                 even10);
    __gen_e_acsl_assert_data_9.blocking = 1;
    __gen_e_acsl_assert_data_9.kind = "Assertion";
    __gen_e_acsl_assert_data_9.pred_txt = "even10 == 1";
    __gen_e_acsl_assert_data_9.file = "decrease.c";
    __gen_e_acsl_assert_data_9.fct = "main";
    __gen_e_acsl_assert_data_9.line = 101;
    __e_acsl_assert(even10 == 1,& __gen_e_acsl_assert_data_9);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9);
  }
  /*@ assert even10 == 1; */ ;
  int odd7 = __gen_e_acsl_odd(7);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_10 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_10,"odd7",0,odd7);
    __gen_e_acsl_assert_data_10.blocking = 1;
    __gen_e_acsl_assert_data_10.kind = "Assertion";
    __gen_e_acsl_assert_data_10.pred_txt = "odd7 == 1";
    __gen_e_acsl_assert_data_10.file = "decrease.c";
    __gen_e_acsl_assert_data_10.fct = "main";
    __gen_e_acsl_assert_data_10.line = 103;
    __e_acsl_assert(odd7 == 1,& __gen_e_acsl_assert_data_10);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10);
  }
  /*@ assert odd7 == 1; */ ;
  int odd10 = __gen_e_acsl_odd(10);
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data_11 =
      {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_11,"odd10",0,
                                 odd10);
    __gen_e_acsl_assert_data_11.blocking = 1;
    __gen_e_acsl_assert_data_11.kind = "Assertion";
    __gen_e_acsl_assert_data_11.pred_txt = "odd10 == 0";
    __gen_e_acsl_assert_data_11.file = "decrease.c";
    __gen_e_acsl_assert_data_11.fct = "main";
    __gen_e_acsl_assert_data_11.line = 105;
    __e_acsl_assert(odd10 == 0,& __gen_e_acsl_assert_data_11);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11);
  }
  /*@ assert odd10 == 0; */ ;
  __retres = 0;
  __e_acsl_memory_clean();
  return __retres;
}

/*@ requires n >= 0;
    decreases n; */
int __gen_e_acsl_even(int n)
{
  int __retres;
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"n",0,n);
    __gen_e_acsl_assert_data.blocking = 1;
    __gen_e_acsl_assert_data.kind = "Precondition";
    __gen_e_acsl_assert_data.pred_txt = "n >= 0";
    __gen_e_acsl_assert_data.file = "decrease.c";
    __gen_e_acsl_assert_data.fct = "even";
    __gen_e_acsl_assert_data.line = 64;
    __e_acsl_assert(n >= 0,& __gen_e_acsl_assert_data);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
  }
  __retres = even(n);
  return __retres;
}

/*@ requires n >= 0;
    decreases n; */
int __gen_e_acsl_odd(int n)
{
  int __retres;
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"n",0,n);
    __gen_e_acsl_assert_data.blocking = 1;
    __gen_e_acsl_assert_data.kind = "Precondition";
    __gen_e_acsl_assert_data.pred_txt = "n >= 0";
    __gen_e_acsl_assert_data.file = "decrease.c";
    __gen_e_acsl_assert_data.fct = "odd";
    __gen_e_acsl_assert_data.line = 71;
    __e_acsl_assert(n >= 0,& __gen_e_acsl_assert_data);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
  }
  __retres = odd(n);
  return __retres;
}

/*@ decreases n; */
int __gen_e_acsl_fib(int n)
{
  int __retres;
  __retres = fib(n);
  return __retres;
}

/*@ requires n <= 20; */
size_t __gen_e_acsl_fact2(size_t n)
{
  size_t __retres;
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,"n",0,n);
    __gen_e_acsl_assert_data.blocking = 1;
    __gen_e_acsl_assert_data.kind = "Precondition";
    __gen_e_acsl_assert_data.pred_txt = "n <= 20";
    __gen_e_acsl_assert_data.file = "decrease.c";
    __gen_e_acsl_assert_data.fct = "fact2";
    __gen_e_acsl_assert_data.line = 41;
    __e_acsl_assert(n <= 20UL,& __gen_e_acsl_assert_data);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
  }
  __retres = fact2(n);
  return __retres;
}

/*@ requires n <= 12; */
int __gen_e_acsl_fact(int n)
{
  int __retres;
  {
    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,"n",0,n);
    __gen_e_acsl_assert_data.blocking = 1;
    __gen_e_acsl_assert_data.kind = "Precondition";
    __gen_e_acsl_assert_data.pred_txt = "n <= 12";
    __gen_e_acsl_assert_data.file = "decrease.c";
    __gen_e_acsl_assert_data.fct = "fact";
    __gen_e_acsl_assert_data.line = 28;
    __e_acsl_assert(n <= 12,& __gen_e_acsl_assert_data);
    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
  }
  __retres = fact(n);
  return __retres;
}

/*@ assigns \result;
    assigns \result \from x, y; */
int __gen_e_acsl_lexico(int x, int y)
{
  int __gen_e_acsl_and;
  if (x > y) __gen_e_acsl_and = 0 <= x; else __gen_e_acsl_and = 0;
  return __gen_e_acsl_and;
}


