/* Generated by Frama-C */
#include "stddef.h"
#include "stdio.h"
struct __anonstruct_r_1 {
   int x ;
   int y ;
};
union __anonunion_s_2 {
   int x ;
   char *y ;
};
int main(void)
{
  int __retres;
  union __anonunion_s_2 s;
  __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8);
  int n = -2;
  {
    long __gen_e_acsl_u;
    __gen_e_acsl_u = n * (long)n;
    __e_acsl_assert(__gen_e_acsl_u >= 0L,"Assertion","main",
                    "\\let u = n * n; u >= 0","tests/arith/let.c",7);
  }
  /*@ assert \let u = n * n; u ≥ 0; */ ;
  {
    long __gen_e_acsl_u_2;
    long __gen_e_acsl_v;
    __gen_e_acsl_u_2 = n * (long)n;
    __gen_e_acsl_v = __gen_e_acsl_u_2 + 1L;
    __e_acsl_assert(__gen_e_acsl_u_2 > 0L,"Assertion","main",
                    "\\let u = n * n;\n\\let v = u + 1; u > 0",
                    "tests/arith/let.c",9);
  }
  /*@ assert \let u = n * n; \let v = u + 1; u > 0; */ ;
  {
    int __gen_e_acsl_u_3;
    __gen_e_acsl_u_3 = 1;
    __e_acsl_assert(__gen_e_acsl_u_3 + 1 == 2,"Assertion","main",
                    "(\\let u = 1; u) + 1 == 2","tests/arith/let.c",12);
  }
  /*@ assert (\let u = 1; u) + 1 ≡ 2; */ ;
  {
    int __gen_e_acsl_u_4;
    int __gen_e_acsl_v_2;
    __gen_e_acsl_u_4 = 1;
    __gen_e_acsl_v_2 = __gen_e_acsl_u_4 + 1;
    __e_acsl_assert(__gen_e_acsl_v_2 == 2,"Assertion","main",
                    "\\let u = 1; (\\let v = u + 1; v) == 2",
                    "tests/arith/let.c",14);
  }
  /*@ assert \let u = 1; (\let v = u + 1; v) ≡ 2; */ ;
  {
    int __gen_e_acsl_u_5;
    int __gen_e_acsl_u_6;
    __gen_e_acsl_u_5 = 1;
    __gen_e_acsl_u_6 = __gen_e_acsl_u_5 + 1;
    __e_acsl_assert(__gen_e_acsl_u_6 == 2,"Assertion","main",
                    "\\let u = 1; (\\let u = u + 1; u) == 2",
                    "tests/arith/let.c",17);
  }
  /*@ assert \let u = 1; (\let u = u + 1; u) ≡ 2; */ ;
  long m = 0x7fffffffffffffffL;
  {
    long __gen_e_acsl_u_7;
    __e_acsl_mpz_t __gen_e_acsl_u_8;
    __e_acsl_mpz_t __gen_e_acsl_mul;
    __e_acsl_mpz_t __gen_e_acsl_m;
    int __gen_e_acsl_gt;
    __gen_e_acsl_u_7 = m;
    __gmpz_init_set_si(__gen_e_acsl_u_8,__gen_e_acsl_u_7);
    __gmpz_init(__gen_e_acsl_mul);
    __gmpz_mul(__gen_e_acsl_mul,
               (__e_acsl_mpz_struct const *)(__gen_e_acsl_u_8),
               (__e_acsl_mpz_struct const *)(__gen_e_acsl_u_8));
    __gmpz_init_set_si(__gen_e_acsl_m,m);
    __gen_e_acsl_gt = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_mul),
                                 (__e_acsl_mpz_struct const *)(__gen_e_acsl_m));
    __e_acsl_assert(__gen_e_acsl_gt > 0,"Assertion","main",
                    "(\\let u = m; u * u) > m","tests/arith/let.c",21);
    __gmpz_clear(__gen_e_acsl_u_8);
    __gmpz_clear(__gen_e_acsl_mul);
    __gmpz_clear(__gen_e_acsl_m);
  }
  /*@ assert (\let u = m; u * u) > m; */ ;
  char c = (char)'a';
  {
    int __gen_e_acsl_u_9;
    __gen_e_acsl_u_9 = 'b';
    __e_acsl_assert((int)c < __gen_e_acsl_u_9,"Assertion","main",
                    "\\let u = \'b\'; c < u","tests/arith/let.c",24);
  }
  /*@ assert \let u = 'b'; c < u; */ ;
  float f = 1.0f;
  __e_acsl_store_block((void *)(& f),(size_t)4);
  __e_acsl_full_init((void *)(& f));
  {
    float __gen_e_acsl_u_10;
    __gen_e_acsl_u_10 = f;
    __e_acsl_assert(__gen_e_acsl_u_10 == f,"Assertion","main",
                    "\\let u = f; u == f","tests/arith/let.c",27);
  }
  /*@ assert \let u = f; u ≡ f; */ ;
  int t[4] = {1, 2, 3, 4};
  {
    int * /*[4]*/ __gen_e_acsl_u_11;
    __gen_e_acsl_u_11 = & t[1];
    __e_acsl_assert(1,"Assertion","main","\\let u = &t[1]; 1 == 1",
                    "tests/arith/let.c",30);
  }
  /*@ assert \let u = &t[1]; 1 ≡ 1; */ ;
  {
    int * /*[4]*/ __gen_e_acsl_u_12;
    __gen_e_acsl_u_12 = & t[1];
    __e_acsl_assert(1,"Assertion","main","(\\let u = &t[1]; 1) == 1",
                    "tests/arith/let.c",32);
  }
  /*@ assert (\let u = &t[1]; 1) ≡ 1; */ ;
  struct __anonstruct_r_1 r = {.x = 1, .y = 2};
  __e_acsl_store_block((void *)(& r),(size_t)8);
  __e_acsl_full_init((void *)(& r));
  {
    struct __anonstruct_r_1 __gen_e_acsl_u_13;
    __gen_e_acsl_u_13 = r;
    __e_acsl_assert(__gen_e_acsl_u_13.x + (long)__gen_e_acsl_u_13.y == 3L,
                    "Assertion","main","\\let u = r; u.x + u.y == 3",
                    "tests/arith/let.c",35);
  }
  /*@ assert \let u = r; u.x + u.y ≡ 3; */ ;
  s.x = 5;
  {
    union __anonunion_s_2 __gen_e_acsl_u_14;
    __gen_e_acsl_u_14 = s;
    __e_acsl_assert(__gen_e_acsl_u_14.x > 0,"Assertion","main",
                    "(\\let u = s; u.x) > 0","tests/arith/let.c",39);
  }
  /*@ assert (\let u = s; u.x) > 0; */ ;
  __retres = 0;
  __e_acsl_delete_block((void *)(& r));
  __e_acsl_delete_block((void *)(& f));
  __e_acsl_memory_clean();
  return __retres;
}


