From 79464946c36902104a4899d012ef198bd57e5896 Mon Sep 17 00:00:00 2001
From: Allan Blanchard <allan.blanchard@cea.fr>
Date: Wed, 18 Sep 2024 10:56:38 +0200
Subject: [PATCH] [wp] adds tests for the MemBytes module

---
 src/plugins/wp/tests/ptests_config            |    4 +-
 src/plugins/wp/tests/wp_bytes/assigns_sep.i   |   31 +
 src/plugins/wp/tests/wp_bytes/floats.i        |   15 +
 src/plugins/wp/tests/wp_bytes/integers.i      |  182 ++
 .../wp_bytes/oracle/assigns_sep.res.oracle    |   79 +
 .../tests/wp_bytes/oracle/floats.res.oracle   |   44 +
 .../tests/wp_bytes/oracle/integers.res.oracle | 2098 +++++++++++++++++
 .../tests/wp_bytes/oracle/pointers.res.oracle |  120 +
 .../tests/wp_bytes/oracle/structs.res.oracle  |   46 +
 .../wp/tests/wp_bytes/oracle/union.res.oracle |  424 ++++
 .../oracle_qualif/assigns_sep.res.oracle      |   32 +
 .../wp_bytes/oracle_qualif/floats.res.oracle  |   20 +
 .../oracle_qualif/integers.res.oracle         |   90 +
 .../oracle_qualif/pointers.res.oracle         |   33 +
 .../wp_bytes/oracle_qualif/structs.res.oracle |   20 +
 .../wp_bytes/oracle_qualif/union.res.oracle   |   43 +
 src/plugins/wp/tests/wp_bytes/pointers.i      |   50 +
 src/plugins/wp/tests/wp_bytes/structs.i       |   22 +
 src/plugins/wp/tests/wp_bytes/test_config     |    1 +
 .../wp/tests/wp_bytes/test_config_qualif      |    1 +
 src/plugins/wp/tests/wp_bytes/union.i         |   76 +
 21 files changed, 3429 insertions(+), 2 deletions(-)
 create mode 100644 src/plugins/wp/tests/wp_bytes/assigns_sep.i
 create mode 100644 src/plugins/wp/tests/wp_bytes/floats.i
 create mode 100644 src/plugins/wp/tests/wp_bytes/integers.i
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle/assigns_sep.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle/floats.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle/integers.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle/pointers.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle/structs.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle/union.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle_qualif/assigns_sep.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle_qualif/floats.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle_qualif/integers.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle_qualif/pointers.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle_qualif/structs.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/oracle_qualif/union.res.oracle
 create mode 100644 src/plugins/wp/tests/wp_bytes/pointers.i
 create mode 100644 src/plugins/wp/tests/wp_bytes/structs.i
 create mode 100644 src/plugins/wp/tests/wp_bytes/test_config
 create mode 100644 src/plugins/wp/tests/wp_bytes/test_config_qualif
 create mode 100644 src/plugins/wp/tests/wp_bytes/union.i

diff --git a/src/plugins/wp/tests/ptests_config b/src/plugins/wp/tests/ptests_config
index d71d6024da0..9ea351239b8 100644
--- a/src/plugins/wp/tests/ptests_config
+++ b/src/plugins/wp/tests/ptests_config
@@ -1,8 +1,8 @@
 DEFAULT_SUITES= wp wp_acsl wp_plugin wp_ce wp_bts wp_store wp_hoare
-DEFAULT_SUITES= wp_typed wp_usage wp_gallery wp_manual wp_tip
+DEFAULT_SUITES= wp_typed wp_bytes wp_usage wp_gallery wp_manual wp_tip
 
 qualif_SUITES= wp wp_acsl wp_plugin wp_bts wp_store wp_hoare
-qualif_SUITES= wp_typed wp_usage wp_gallery wp_manual wp_tip
+qualif_SUITES= wp_typed wp_bytes wp_usage wp_gallery wp_manual wp_tip
 qualif_SUITES= why3
 
 ce_SUITES= wp_ce
diff --git a/src/plugins/wp/tests/wp_bytes/assigns_sep.i b/src/plugins/wp/tests/wp_bytes/assigns_sep.i
new file mode 100644
index 00000000000..8f2285630ce
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/assigns_sep.i
@@ -0,0 +1,31 @@
+typedef unsigned           uint32 ;
+typedef unsigned char      uint8 ;
+
+void assignment(uint8 * array){
+  uint32 u32_0a = * (uint32 *) array ;
+  array[7] = 0x00 ;
+  uint32 u32_0b = * (uint32 *) array ;
+
+  //@ check u32_0a == u32_0b ;
+}
+
+//@ assigns array[l] ;
+void assigns(uint8* array, uint8 l);
+
+//@ assigns array[b .. e] ;
+void assigns_r(uint8* array, uint8 b, uint8 e);
+
+//@ assigns { array[i] | integer i ; i == x || i == y } ;
+void assigns_l2(uint8* array, uint8 x, uint8 y);
+
+void assigns_clause(uint8 * array){
+  uint32 u32_0a = * (uint32 *) array ;
+  assigns (array, 7) ;
+  uint32 u32_0b = * (uint32 *) array ;
+  assigns_r (array, 4, 7) ;
+  uint32 u32_0c = * (uint32 *) array ;
+  //@ check u32_0a == u32_0b == u32_0c ;
+  assigns_l2 (array, 4, 6) ;
+  uint32 u32_0d = * (uint32 *) array ;
+  //@ check u32_0c == u32_0d ;
+}
diff --git a/src/plugins/wp/tests/wp_bytes/floats.i b/src/plugins/wp/tests/wp_bytes/floats.i
new file mode 100644
index 00000000000..0ea0cc1c8fb
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/floats.i
@@ -0,0 +1,15 @@
+typedef unsigned char      uint8 ;
+
+void float_(float f){
+  uint8 buffer[sizeof(float)] ;
+  *((float*) buffer) = f ;
+  float read = *((float*) buffer) ;
+  //@ assert read == f ;
+}
+
+void double_(double d){
+  uint8 buffer[sizeof(double)] ;
+  *((double*) buffer) = d ;
+  double read = *((double*) buffer) ;
+  //@ assert read == d ;
+}
diff --git a/src/plugins/wp/tests/wp_bytes/integers.i b/src/plugins/wp/tests/wp_bytes/integers.i
new file mode 100644
index 00000000000..b67a164c323
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/integers.i
@@ -0,0 +1,182 @@
+/* run.config*
+   STDOPT:+"-wp-model bytes+raw"
+*/
+
+typedef unsigned long long uint64 ;
+typedef unsigned           uint32 ;
+typedef unsigned short     uint16 ;
+typedef unsigned char      uint8 ;
+
+typedef long long          int64 ;
+typedef int                int32 ;
+typedef short int          int16 ;
+typedef signed char        int8 ;
+
+void unsigned_(void){
+  uint64 u64 ;
+  uint32 u32 ;
+  uint16 u16 ;
+  uint8  u8 ;
+  unsigned write ;
+
+  u64 = 0x1122334455667788ULL ;
+  u32 = 0x11223344U ;
+  u16 = 0x1122 ;
+  u8  = 0x11 ;
+
+  write = 0 ;
+
+  //@ check \initialized(&u64) ;
+  //@ check \initialized(&u32) ;
+  //@ check \initialized(&u16) ;
+  //@ check \initialized(&u8) ;
+
+  //@ check u64 == 0x1122334455667788ULL ;
+  //@ check u32 == 0x11223344U ;
+  //@ check u16 == 0x1122 ;
+  //@ check u8  == 0x11 ;
+}
+
+void signed_pos(void){
+  int64 p64 ;
+  int32 p32 ;
+  int16 p16 ;
+  int8  p8 ;
+  unsigned write ;
+
+  p64 = 0x0122334455667788LL ;
+  p32 = 0x01223344 ;
+  p16 = 0x0122 ;
+  p8  = 0x01 ;
+
+  write = 0 ;
+
+  //@ check \initialized(&p64) ;
+  //@ check \initialized(&p32) ;
+  //@ check \initialized(&p16) ;
+  //@ check \initialized(&p8) ;
+
+  //@ check 0 < p64 == 0x0122334455667788LL ;
+  //@ check 0 < p32 == 0x01223344 ;
+  //@ check 0 < p16 == 0x0122 ;
+  //@ check 0 < p8  == 0x01 ;
+}
+
+void signed_neg(void){
+  int64 m64 ;
+  int32 m32 ;
+  int16 m16 ;
+  int8  m8 ;
+  unsigned write ;
+
+  m64 = -0x0122334455667788LL ;
+  m32 = -0x01223344 ;
+  m16 = -0x0122 ;
+  m8  = -0x01 ;
+
+  write = 0 ;
+
+  //@ check \initialized(&m64) ;
+  //@ check \initialized(&m32) ;
+  //@ check \initialized(&m16) ;
+  //@ check \initialized(&m8) ;
+
+  //@ check 0 > m64 == -0x0122334455667788LL ;
+  //@ check 0 > m32 == -0x01223344 ;
+  //@ check 0 > m16 == -0x0122 ;
+  //@ check 0 > m8  == -0x01 ;
+}
+
+void cast_unsigned_signed_pos(void){
+  uint64 u64 ;
+  uint16 u16 ;
+  unsigned write ;
+
+  u64 = 0x0122334455667788ULL ;
+  u16 = 0x0122 ;
+
+  //@ check 0 < *((int64*)&u64)     == 0x0122334455667788LL ;
+  //@ check 0 < *(((int32*)&u64)+1) == 0x01223344 ;
+  //@ check 0 < *((int16*)&u16)     == 0x0122 ;
+  //@ check 0 < *(((int8*) &u16)+1) == 0x01 ;
+}
+
+void cast_unsigned_signed_neg(void){
+  uint64 u64 ;
+  uint16 u16 ;
+  unsigned write ;
+
+  u64 = 0x8122334455667788ULL ;
+  u16 = 0x8182 ;
+
+  //@ check 0 > *((int64*)&u64)     == -0x7EDDCCBBAA998878;
+  //@ check 0 > *(((int32*)&u64)+1) == -0x7EDDCCBC;
+  //@ check 0 > *((int16*)&u16)     == -0x7E7E;
+  //@ check 0 > *(((int8*)&u16)+1)  == -0x7F;
+}
+
+void cast_from_bytes_to_unsigned(void){
+  uint8 array[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 };
+
+  uint64 u64_0 = * (uint64 *) array ;
+
+  uint32 u32_0 = * (uint32 *) array ;
+  uint32 u32_1 = * (((uint32 *) array) + 1) ;
+
+  uint16 u16_0 = * (uint16 *) array ;
+  uint16 u16_1 = * (((uint16 *) array) + 1) ;
+  uint16 u16_2 = * (((uint16 *) array) + 2) ;
+  uint16 u16_3 = * (((uint16 *) array) + 3) ;
+
+  //@ check u64_0 == 0x8877665544332211ULL ;
+  //@ check u32_0 == 0x44332211UL ;
+  //@ check u32_1 == 0x88776655UL ;
+  //@ check u16_0 == 0x2211 ;
+  //@ check u16_1 == 0x4433 ;
+  //@ check u16_2 == 0x6655 ;
+  //@ check u16_3 == 0x8877 ;
+}
+
+void cast_from_bytes_to_signed_pos(void){
+  uint8 array[] = { 0x11, 0x02, 0x33, 0x04, 0x55, 0x06, 0x77, 0x08 };
+
+  int64 i64_0 = * (int64 *) array ;
+
+  int32 i32_0 = * (int32 *) array ;
+  int32 i32_1 = * (((int32 *) array) + 1) ;
+
+  int16 i16_0 = * (int16 *) array ;
+  int16 i16_1 = * (((int16 *) array) + 1) ;
+  int16 i16_2 = * (((int16 *) array) + 2) ;
+  int16 i16_3 = * (((int16 *) array) + 3) ;
+
+  //@ check i64_0 > 0 && i64_0 == 0x0877065504330211LL ;
+  //@ check i32_0 > 0 && i32_0 == 0x04330211L ;
+  //@ check i32_1 > 0 && i32_1 == 0x08770655L ;
+  //@ check i16_0 > 0 && i16_0 == 0x0211 ;
+  //@ check i16_1 > 0 && i16_1 == 0x0433 ;
+  //@ check i16_2 > 0 && i16_2 == 0x0655 ;
+  //@ check i16_3 > 0 && i16_3 == 0x0877 ;
+}
+
+void cast_from_bytes_to_signed_neg(void){
+  uint8 array[] = { 0x11, 0x82, 0x33, 0x84, 0x55, 0x86, 0x77, 0x88 };
+
+  int64 i64_0 = * (int64 *) array ;
+
+  int32 i32_0 = * (int32 *) array ;
+  int32 i32_1 = * (((int32 *) array) + 1) ;
+
+  int16 i16_0 = * (int16 *) array ;
+  int16 i16_1 = * (((int16 *) array) + 1) ;
+  int16 i16_2 = * (((int16 *) array) + 2) ;
+  int16 i16_3 = * (((int16 *) array) + 3) ;
+
+  //@ check i64_0 < 0 && i64_0 == -0x778879AA7BCC7DEFLL ;
+  //@ check i32_0 < 0 && i32_0 == -0x7BCC7DEFL ;
+  //@ check i32_1 < 0 && i32_1 == -0x778879ABL ;
+  //@ check i16_0 < 0 && i16_0 == -0x7DEF ;
+  //@ check i16_1 < 0 && i16_1 == -0x7BCD ;
+  //@ check i16_2 < 0 && i16_2 == -0x79AB ;
+  //@ check i16_3 < 0 && i16_3 == -0x7789 ;
+}
diff --git a/src/plugins/wp/tests/wp_bytes/oracle/assigns_sep.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle/assigns_sep.res.oracle
new file mode 100644
index 00000000000..db98c5be956
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle/assigns_sep.res.oracle
@@ -0,0 +1,79 @@
+# frama-c -wp -wp-model 'Bytes' [...]
+[kernel] Parsing assigns_sep.i (no preprocessing)
+[wp] Running WP plugin...
+[kernel:annot:missing-spec] assigns_sep.i:13: Warning: 
+  Neither code nor explicit exits and terminates for function assigns,
+   generating default clauses. See -generated-spec-* options for more info
+[kernel:annot:missing-spec] assigns_sep.i:16: Warning: 
+  Neither code nor explicit exits and terminates for function assigns_r,
+   generating default clauses. See -generated-spec-* options for more info
+[kernel:annot:missing-spec] assigns_sep.i:19: Warning: 
+  Neither code nor explicit exits and terminates for function assigns_l2,
+   generating default clauses. See -generated-spec-* options for more info
+[wp] [Valid] Goal assignment_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal assignment_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+------------------------------------------------------------
+  Function assignment
+------------------------------------------------------------
+
+Goal Check (file assigns_sep.i, line 9):
+Let x = read_uint32(mem_0, array_0).
+Let x_1 = read_uint32(write_uint8(mem_0, shift_uint8(array_0, 7), 0),
+            array_0).
+Assume {
+  Type: is_uint32(x) /\ is_uint32(x_1).
+  (* Heap *)
+  Type: (region(array_0.base) <= 0) /\ sconst(mem_0).
+}
+Prove: x_1 = x.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function assigns_clause
+------------------------------------------------------------
+
+Goal Termination-condition (generated) in 'assigns_clause':
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Exit-condition (generated) in 'assigns_clause':
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Check (file assigns_sep.i, line 27):
+Let x = read_uint32(mem_0, array_0).
+Let m = write_uint8(mem_0, shift_uint8(array_0, 7), v).
+Let x_1 = read_uint32(m, array_0).
+Let x_2 = read_uint32(havoc(mem_undef_0, m, shift_uint8(array_0, 4), 4),
+            array_0).
+Assume {
+  Type: is_uint32(x) /\ is_uint32(x_1) /\ is_uint32(x_2).
+  (* Heap *)
+  Type: (region(array_0.base) <= 0) /\ sconst(mem_0).
+}
+Prove: (x_1 = x) /\ (x_2 = x_1).
+
+------------------------------------------------------------
+
+Goal Check (file assigns_sep.i, line 30):
+Let m = write_uint8(mem_0, shift_uint8(array_0, 7), v).
+Let a = havoc(mem_undef_0, m, shift_uint8(array_0, 4), 4).
+Let x = read_uint32(mem_1, array_0).
+Let x_1 = read_uint32(a, array_0).
+Assume {
+  Type: is_uint32(x) /\ is_uint32(read_uint32(mem_0, array_0)) /\
+      is_uint32(read_uint32(m, array_0)) /\ is_uint32(x_1).
+  (* Heap *)
+  Type: (region(array_0.base) <= 0) /\ sconst(mem_0).
+  (* Call Effects *)
+  Have: forall a_1 : addr.
+      ((forall i : Z. (((i = 4) \/ (i = 6)) ->
+        (shift_uint8(array_0, i) != a_1))) ->
+      (raw_get(a, a_1) = raw_get(mem_1, a_1))).
+}
+Prove: x_1 = x.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle/floats.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle/floats.res.oracle
new file mode 100644
index 00000000000..af3805ad36e
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle/floats.res.oracle
@@ -0,0 +1,44 @@
+# frama-c -wp -wp-model 'Bytes' [...]
+[kernel] Parsing floats.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal double_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal double_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal float_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal float_terminates (Cfg) (Trivial)
+------------------------------------------------------------
+  Function double_
+------------------------------------------------------------
+
+Goal Assertion (file floats.i, line 14):
+Let a = shift_uint8(global(L_buffer_30), 0).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_buffer_30 <- 8]).
+}
+Prove: of_f64(int_to_float64(read_uint64(write_uint64(mem_0, a,
+                                           float64_to_int(d)), a)))
+         = of_f64(d).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function float_
+------------------------------------------------------------
+
+Goal Assertion (file floats.i, line 7):
+Let a = shift_uint8(global(L_buffer_23), 0).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_buffer_23 <- 4]).
+}
+Prove: of_f32(int_to_float32(read_uint32(write_uint32(mem_0, a,
+                                           float32_to_int(f)), a)))
+         = of_f32(f).
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle/integers.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle/integers.res.oracle
new file mode 100644
index 00000000000..99ddd415285
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle/integers.res.oracle
@@ -0,0 +1,2098 @@
+# frama-c -wp -wp-model 'Bytes (Raw)' [...]
+[kernel] Parsing integers.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal cast_from_bytes_to_signed_neg_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_from_bytes_to_signed_neg_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal cast_from_bytes_to_signed_pos_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_from_bytes_to_signed_pos_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal cast_from_bytes_to_unsigned_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_from_bytes_to_unsigned_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal cast_unsigned_signed_neg_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_unsigned_signed_neg_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal cast_unsigned_signed_pos_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_unsigned_signed_pos_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal signed_neg_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal signed_neg_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal signed_pos_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal signed_pos_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal unsigned_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal unsigned_terminates (Cfg) (Trivial)
+------------------------------------------------------------
+  Function cast_from_bytes_to_signed_neg
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 175):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_13 = (-8613268060474473967)) /\ (x_13 < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 176):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_11 = (-2076999151)) /\ (x_11 < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 177):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_9 = (-2005432747)) /\ (x_9 < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 178):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_7 = (-32239)) /\ (x_7 < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 179):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_5 = (-31693)) /\ (x_5 < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 180):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_3 = (-31147)) /\ (x_3 < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 181):
+Let a = global(L_array_75).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_82)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_81)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_80)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_79)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_78)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_77)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_76)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_75 <- 8][L_i64_0_76 <- 8][L_i32_0_77 <- 4]
+                    [L_i32_1_78 <- 4][L_i16_0_79 <- 2][L_i16_1_80 <- 2]
+                    [L_i16_2_81 <- 2][L_i16_3_82 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 130.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 132.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 134.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_1 = (-30601)) /\ (x_1 < 0).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function cast_from_bytes_to_signed_pos
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 153):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_13 = 609963236744430097) /\ (0 < x_13).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 154):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_11 = 70451729) /\ (0 < x_11).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 155):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_9 = 142018133) /\ (0 < x_9).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 156):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_7 = 529) /\ (0 < x_7).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 157):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_5 = 1075) /\ (0 < x_5).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 158):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_3 = 1621) /\ (0 < x_3).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 159):
+Let a = global(L_array_65).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_sint16(mem_0, shift_sint16(a_1, 3)).
+Let x_1 = read_sint16(mem_0, global(L_i16_3_72)).
+Let x_2 = read_sint16(mem_0, shift_sint16(a_1, 2)).
+Let x_3 = read_sint16(mem_0, global(L_i16_2_71)).
+Let x_4 = read_sint16(mem_0, shift_sint16(a_1, 1)).
+Let x_5 = read_sint16(mem_0, global(L_i16_1_70)).
+Let x_6 = read_sint16(mem_0, a_1).
+Let x_7 = read_sint16(mem_0, global(L_i16_0_69)).
+Let x_8 = read_sint32(mem_0, shift_sint32(a_1, 1)).
+Let x_9 = read_sint32(mem_0, global(L_i32_1_68)).
+Let x_10 = read_sint32(mem_0, a_1).
+Let x_11 = read_sint32(mem_0, global(L_i32_0_67)).
+Let x_12 = read_sint64(mem_0, a_1).
+Let x_13 = read_sint64(mem_0, global(L_i64_0_66)).
+Assume {
+  Type: is_sint16(x_7) /\ is_sint16(x_5) /\ is_sint16(x_3) /\
+      is_sint16(x_1) /\ is_sint32(x_11) /\ is_sint32(x_9) /\
+      is_sint64(x_13) /\ is_sint16(x_6) /\ is_sint32(x_10) /\
+      is_sint64(x_12) /\ is_sint16(x_4) /\ is_sint16(x_2) /\ is_sint16(x) /\
+      is_sint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_65 <- 8][L_i64_0_66 <- 8][L_i32_0_67 <- 4]
+                    [L_i32_1_68 <- 4][L_i16_0_69 <- 2][L_i16_1_70 <- 2]
+                    [L_i16_2_71 <- 2][L_i16_3_72 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 2.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 4.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 6.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 8.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: (x_1 = 2167) /\ (0 < x_1).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function cast_from_bytes_to_unsigned
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 131):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_13 = 9833440827789222417.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 132):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_11 = 1144201745.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 133):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_9 = 2289526357.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 134):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_7 = 8721.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 135):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_5 = 17459.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 136):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_3 = 26197.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 137):
+Let a = global(L_array_55).
+Let a_1 = shift_uint8(a, 0).
+Let x = read_uint16(mem_0, shift_uint16(a_1, 3)).
+Let x_1 = read_uint16(mem_0, global(L_u16_3_62)).
+Let x_2 = read_uint16(mem_0, shift_uint16(a_1, 2)).
+Let x_3 = read_uint16(mem_0, global(L_u16_2_61)).
+Let x_4 = read_uint16(mem_0, shift_uint16(a_1, 1)).
+Let x_5 = read_uint16(mem_0, global(L_u16_1_60)).
+Let x_6 = read_uint16(mem_0, a_1).
+Let x_7 = read_uint16(mem_0, global(L_u16_0_59)).
+Let x_8 = read_uint32(mem_0, shift_uint32(a_1, 1)).
+Let x_9 = read_uint32(mem_0, global(L_u32_1_58)).
+Let x_10 = read_uint32(mem_0, a_1).
+Let x_11 = read_uint32(mem_0, global(L_u32_0_57)).
+Let x_12 = read_uint64(mem_0, a_1).
+Let x_13 = read_uint64(mem_0, global(L_u64_0_56)).
+Assume {
+  Type: is_uint16(x_7) /\ is_uint16(x_5) /\ is_uint16(x_3) /\
+      is_uint16(x_1) /\ is_uint32(x_11) /\ is_uint32(x_9) /\
+      is_uint64(x_13) /\ is_uint16(x_6) /\ is_uint32(x_10) /\
+      is_uint64(x_12) /\ is_uint16(x_4) /\ is_uint16(x_2) /\ is_uint16(x) /\
+      is_uint32(x_8).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_array_55 <- 8][L_u64_0_56 <- 8][L_u32_0_57 <- 4]
+                    [L_u32_1_58 <- 4][L_u16_0_59 <- 2][L_u16_1_60 <- 2]
+                    [L_u16_2_61 <- 2][L_u16_3_62 <- 2]).
+  (* Initializer *)
+  Init: read_uint8(mem_0, a_1) = 17.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 1)) = 34.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 2)) = 51.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 3)) = 68.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 4)) = 85.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 5)) = 102.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 6)) = 119.
+  (* Initializer *)
+  Init: read_uint8(mem_0, shift_uint8(a, 7)) = 136.
+  (* Initializer *)
+  Init: x_12 = x_13.
+  (* Initializer *)
+  Init: x_10 = x_11.
+  (* Initializer *)
+  Init: x_8 = x_9.
+  (* Initializer *)
+  Init: x_6 = x_7.
+  (* Initializer *)
+  Init: x_4 = x_5.
+  (* Initializer *)
+  Init: x_2 = x_3.
+  (* Initializer *)
+  Init: x = x_1.
+}
+Prove: x_1 = 34935.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function cast_unsigned_signed_neg
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 112):
+Let a = global(L_u64_50).
+Let a_1 = global(L_u16_51).
+Let m = write_uint16(write_uint64(mem_0, a, 9305056148684437384), a_1, 33154).
+Let x = read_sint64(m, a).
+Assume {
+  Type: is_sint8(read_sint8(m, shift_sint8(a_1, 1))) /\
+      is_sint16(read_sint16(m, a_1)) /\
+      is_sint32(read_sint32(m, shift_sint32(a, 1))) /\ is_sint64(x).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_50 <- 8][L_u16_51 <- 2][L_write_52 <- 4]).
+}
+Prove: (x = (-9141687925025114232)) /\ (x < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 113):
+Let a = global(L_u64_50).
+Let a_1 = global(L_u16_51).
+Let m = write_uint16(write_uint64(mem_0, a, 9305056148684437384), a_1, 33154).
+Let x = read_sint32(m, shift_sint32(a, 1)).
+Assume {
+  Type: is_sint8(read_sint8(m, shift_sint8(a_1, 1))) /\
+      is_sint16(read_sint16(m, a_1)) /\ is_sint32(x) /\
+      is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_50 <- 8][L_u16_51 <- 2][L_write_52 <- 4]).
+}
+Prove: (x = (-2128465084)) /\ (x < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 114):
+Let a = global(L_u64_50).
+Let a_1 = global(L_u16_51).
+Let m = write_uint16(write_uint64(mem_0, a, 9305056148684437384), a_1, 33154).
+Let x = read_sint16(m, a_1).
+Assume {
+  Type: is_sint8(read_sint8(m, shift_sint8(a_1, 1))) /\ is_sint16(x) /\
+      is_sint32(read_sint32(m, shift_sint32(a, 1))) /\
+      is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_50 <- 8][L_u16_51 <- 2][L_write_52 <- 4]).
+}
+Prove: (x = (-32382)) /\ (x < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 115):
+Let a = global(L_u64_50).
+Let a_1 = global(L_u16_51).
+Let m = write_uint16(write_uint64(mem_0, a, 9305056148684437384), a_1, 33154).
+Let x = read_sint8(m, shift_sint8(a_1, 1)).
+Assume {
+  Type: is_sint8(x) /\ is_sint16(read_sint16(m, a_1)) /\
+      is_sint32(read_sint32(m, shift_sint32(a, 1))) /\
+      is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_50 <- 8][L_u16_51 <- 2][L_write_52 <- 4]).
+}
+Prove: (x = (-127)) /\ (x < 0).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function cast_unsigned_signed_pos
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 98):
+Let a = global(L_u64_45).
+Let a_1 = global(L_u16_46).
+Let m = write_uint16(write_uint64(mem_0, a, 81684111829661576), a_1, 290).
+Let x = read_sint64(m, a).
+Assume {
+  Type: is_sint8(read_sint8(m, shift_sint8(a_1, 1))) /\
+      is_sint16(read_sint16(m, a_1)) /\
+      is_sint32(read_sint32(m, shift_sint32(a, 1))) /\ is_sint64(x).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_45 <- 8][L_u16_46 <- 2][L_write_47 <- 4]).
+}
+Prove: (x = 81684111829661576) /\ (0 < x).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 99):
+Let a = global(L_u64_45).
+Let a_1 = global(L_u16_46).
+Let m = write_uint16(write_uint64(mem_0, a, 81684111829661576), a_1, 290).
+Let x = read_sint32(m, shift_sint32(a, 1)).
+Assume {
+  Type: is_sint8(read_sint8(m, shift_sint8(a_1, 1))) /\
+      is_sint16(read_sint16(m, a_1)) /\ is_sint32(x) /\
+      is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_45 <- 8][L_u16_46 <- 2][L_write_47 <- 4]).
+}
+Prove: (x = 19018564) /\ (0 < x).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 100):
+Let a = global(L_u64_45).
+Let a_1 = global(L_u16_46).
+Let m = write_uint16(write_uint64(mem_0, a, 81684111829661576), a_1, 290).
+Let x = read_sint16(m, a_1).
+Assume {
+  Type: is_sint8(read_sint8(m, shift_sint8(a_1, 1))) /\ is_sint16(x) /\
+      is_sint32(read_sint32(m, shift_sint32(a, 1))) /\
+      is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_45 <- 8][L_u16_46 <- 2][L_write_47 <- 4]).
+}
+Prove: (x = 290) /\ (0 < x).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 101):
+Let a = global(L_u64_45).
+Let a_1 = global(L_u16_46).
+Let m = write_uint16(write_uint64(mem_0, a, 81684111829661576), a_1, 290).
+Let x = read_sint8(m, shift_sint8(a_1, 1)).
+Assume {
+  Type: is_sint8(x) /\ is_sint16(read_sint16(m, a_1)) /\
+      is_sint32(read_sint32(m, shift_sint32(a, 1))) /\
+      is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_45 <- 8][L_u16_46 <- 2][L_write_47 <- 4]).
+}
+Prove: (x = 1) /\ (0 < x).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function signed_neg
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 79):
+Let a = global(L_m64_38).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (read_init64(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              a, true),
+                                                            global(L_m32_39),
+                                                            true),
+                                               global(L_m16_40), true),
+                                   global(L_m8_41), true),
+                      global(L_write_42), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 80):
+Let a = global(L_m32_39).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (read_init32(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              global(L_m64_38),
+                                                              true), a, true),
+                                               global(L_m16_40), true),
+                                   global(L_m8_41), true),
+                      global(L_write_42), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 81):
+Let a = global(L_m16_40).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (read_init16(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              global(L_m64_38),
+                                                              true),
+                                                            global(L_m32_39),
+                                                            true), a, true),
+                                   global(L_m8_41), true),
+                      global(L_write_42), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 82):
+Let a = global(L_m8_41).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (read_init8(write_init32(write_init8(write_init16(write_init32(
+                                                           write_init64(init_0,
+                                                             global(L_m64_38),
+                                                             true),
+                                                           global(L_m32_39),
+                                                           true),
+                                              global(L_m16_40), true), a,
+                                  true), global(L_write_42), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 84):
+Let a = global(L_m64_38).
+Let a_1 = global(L_m32_39).
+Let a_2 = global(L_m16_40).
+Let a_3 = global(L_m8_41).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             -81684111829661576),
+                                                a_1, -19018564), a_2, -290),
+                       a_3, -1), global(L_write_42), 0).
+Let x = read_sint64(m, a).
+Assume {
+  Type: is_sint8(read_sint8(m, a_3)) /\ is_sint16(read_sint16(m, a_2)) /\
+      is_sint32(read_sint32(m, a_1)) /\ is_sint64(x).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (x = (-81684111829661576)) /\ (x < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 85):
+Let a = global(L_m64_38).
+Let a_1 = global(L_m32_39).
+Let a_2 = global(L_m16_40).
+Let a_3 = global(L_m8_41).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             -81684111829661576),
+                                                a_1, -19018564), a_2, -290),
+                       a_3, -1), global(L_write_42), 0).
+Let x = read_sint32(m, a_1).
+Assume {
+  Type: is_sint8(read_sint8(m, a_3)) /\ is_sint16(read_sint16(m, a_2)) /\
+      is_sint32(x) /\ is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (x = (-19018564)) /\ (x < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 86):
+Let a = global(L_m64_38).
+Let a_1 = global(L_m32_39).
+Let a_2 = global(L_m16_40).
+Let a_3 = global(L_m8_41).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             -81684111829661576),
+                                                a_1, -19018564), a_2, -290),
+                       a_3, -1), global(L_write_42), 0).
+Let x = read_sint16(m, a_2).
+Assume {
+  Type: is_sint8(read_sint8(m, a_3)) /\ is_sint16(x) /\
+      is_sint32(read_sint32(m, a_1)) /\ is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (x = (-290)) /\ (x < 0).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 87):
+Let a = global(L_m64_38).
+Let a_1 = global(L_m32_39).
+Let a_2 = global(L_m16_40).
+Let a_3 = global(L_m8_41).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             -81684111829661576),
+                                                a_1, -19018564), a_2, -290),
+                       a_3, -1), global(L_write_42), 0).
+Let x = read_sint8(m, a_3).
+Assume {
+  Type: is_sint8(x) /\ is_sint16(read_sint16(m, a_2)) /\
+      is_sint32(read_sint32(m, a_1)) /\ is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_m64_38 <- 8][L_m32_39 <- 4][L_m16_40 <- 2]
+                    [L_m8_41 <- 1][L_write_42 <- 4]).
+}
+Prove: (x = (-1)) /\ (x < 0).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function signed_pos
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 54):
+Let a = global(L_p64_31).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (read_init64(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              a, true),
+                                                            global(L_p32_32),
+                                                            true),
+                                               global(L_p16_33), true),
+                                   global(L_p8_34), true),
+                      global(L_write_35), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 55):
+Let a = global(L_p32_32).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (read_init32(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              global(L_p64_31),
+                                                              true), a, true),
+                                               global(L_p16_33), true),
+                                   global(L_p8_34), true),
+                      global(L_write_35), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 56):
+Let a = global(L_p16_33).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (read_init16(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              global(L_p64_31),
+                                                              true),
+                                                            global(L_p32_32),
+                                                            true), a, true),
+                                   global(L_p8_34), true),
+                      global(L_write_35), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 57):
+Let a = global(L_p8_34).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (read_init8(write_init32(write_init8(write_init16(write_init32(
+                                                           write_init64(init_0,
+                                                             global(L_p64_31),
+                                                             true),
+                                                           global(L_p32_32),
+                                                           true),
+                                              global(L_p16_33), true), a,
+                                  true), global(L_write_35), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 59):
+Let a = global(L_p64_31).
+Let a_1 = global(L_p32_32).
+Let a_2 = global(L_p16_33).
+Let a_3 = global(L_p8_34).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             81684111829661576),
+                                                a_1, 19018564), a_2, 290),
+                       a_3, 1), global(L_write_35), 0).
+Let x = read_sint64(m, a).
+Assume {
+  Type: is_sint8(read_sint8(m, a_3)) /\ is_sint16(read_sint16(m, a_2)) /\
+      is_sint32(read_sint32(m, a_1)) /\ is_sint64(x).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (x = 81684111829661576) /\ (0 < x).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 60):
+Let a = global(L_p64_31).
+Let a_1 = global(L_p32_32).
+Let a_2 = global(L_p16_33).
+Let a_3 = global(L_p8_34).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             81684111829661576),
+                                                a_1, 19018564), a_2, 290),
+                       a_3, 1), global(L_write_35), 0).
+Let x = read_sint32(m, a_1).
+Assume {
+  Type: is_sint8(read_sint8(m, a_3)) /\ is_sint16(read_sint16(m, a_2)) /\
+      is_sint32(x) /\ is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (x = 19018564) /\ (0 < x).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 61):
+Let a = global(L_p64_31).
+Let a_1 = global(L_p32_32).
+Let a_2 = global(L_p16_33).
+Let a_3 = global(L_p8_34).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             81684111829661576),
+                                                a_1, 19018564), a_2, 290),
+                       a_3, 1), global(L_write_35), 0).
+Let x = read_sint16(m, a_2).
+Assume {
+  Type: is_sint8(read_sint8(m, a_3)) /\ is_sint16(x) /\
+      is_sint32(read_sint32(m, a_1)) /\ is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (x = 290) /\ (0 < x).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 62):
+Let a = global(L_p64_31).
+Let a_1 = global(L_p32_32).
+Let a_2 = global(L_p16_33).
+Let a_3 = global(L_p8_34).
+Let m = write_uint32(write_sint8(write_sint16(write_sint32(write_sint64(mem_0,
+                                                             a,
+                                                             81684111829661576),
+                                                a_1, 19018564), a_2, 290),
+                       a_3, 1), global(L_write_35), 0).
+Let x = read_sint8(m, a_3).
+Assume {
+  Type: is_sint8(x) /\ is_sint16(read_sint16(m, a_2)) /\
+      is_sint32(read_sint32(m, a_1)) /\ is_sint64(read_sint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_p64_31 <- 8][L_p32_32 <- 4][L_p16_33 <- 2]
+                    [L_p8_34 <- 1][L_write_35 <- 4]).
+}
+Prove: (x = 1) /\ (0 < x).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function unsigned_
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 29):
+Let a = global(L_u64_22).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: (read_init64(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              a, true),
+                                                            global(L_u32_23),
+                                                            true),
+                                               global(L_u16_24), true),
+                                   global(L_u8_25), true),
+                      global(L_write_26), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 30):
+Let a = global(L_u32_23).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: (read_init32(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              global(L_u64_22),
+                                                              true), a, true),
+                                               global(L_u16_24), true),
+                                   global(L_u8_25), true),
+                      global(L_write_26), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 31):
+Let a = global(L_u16_24).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: (read_init16(write_init32(write_init8(write_init16(write_init32(
+                                                            write_init64(init_0,
+                                                              global(L_u64_22),
+                                                              true),
+                                                            global(L_u32_23),
+                                                            true), a, true),
+                                   global(L_u8_25), true),
+                      global(L_write_26), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 32):
+Let a = global(L_u8_25).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ cinits(init_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: (read_init8(write_init32(write_init8(write_init16(write_init32(
+                                                           write_init64(init_0,
+                                                             global(L_u64_22),
+                                                             true),
+                                                           global(L_u32_23),
+                                                           true),
+                                              global(L_u16_24), true), a,
+                                  true), global(L_write_26), true), a)=true).
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 34):
+Let a = global(L_u64_22).
+Let a_1 = global(L_u32_23).
+Let a_2 = global(L_u16_24).
+Let a_3 = global(L_u8_25).
+Let m = write_uint32(write_uint8(write_uint16(write_uint32(write_uint64(mem_0,
+                                                             a,
+                                                             1234605616436508552),
+                                                a_1, 287454020), a_2, 4386),
+                       a_3, 17), global(L_write_26), 0).
+Let x = read_uint64(m, a).
+Assume {
+  Type: is_uint8(read_uint8(m, a_3)) /\ is_uint16(read_uint16(m, a_2)) /\
+      is_uint32(read_uint32(m, a_1)) /\ is_uint64(x).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: x = 1234605616436508552.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 35):
+Let a = global(L_u64_22).
+Let a_1 = global(L_u32_23).
+Let a_2 = global(L_u16_24).
+Let a_3 = global(L_u8_25).
+Let m = write_uint32(write_uint8(write_uint16(write_uint32(write_uint64(mem_0,
+                                                             a,
+                                                             1234605616436508552),
+                                                a_1, 287454020), a_2, 4386),
+                       a_3, 17), global(L_write_26), 0).
+Let x = read_uint32(m, a_1).
+Assume {
+  Type: is_uint8(read_uint8(m, a_3)) /\ is_uint16(read_uint16(m, a_2)) /\
+      is_uint32(x) /\ is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: x = 287454020.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 36):
+Let a = global(L_u64_22).
+Let a_1 = global(L_u32_23).
+Let a_2 = global(L_u16_24).
+Let a_3 = global(L_u8_25).
+Let m = write_uint32(write_uint8(write_uint16(write_uint32(write_uint64(mem_0,
+                                                             a,
+                                                             1234605616436508552),
+                                                a_1, 287454020), a_2, 4386),
+                       a_3, 17), global(L_write_26), 0).
+Let x = read_uint16(m, a_2).
+Assume {
+  Type: is_uint8(read_uint8(m, a_3)) /\ is_uint16(x) /\
+      is_uint32(read_uint32(m, a_1)) /\ is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: x = 4386.
+
+------------------------------------------------------------
+
+Goal Check (file integers.i, line 37):
+Let a = global(L_u64_22).
+Let a_1 = global(L_u32_23).
+Let a_2 = global(L_u16_24).
+Let a_3 = global(L_u8_25).
+Let m = write_uint32(write_uint8(write_uint16(write_uint32(write_uint64(mem_0,
+                                                             a,
+                                                             1234605616436508552),
+                                                a_1, 287454020), a_2, 4386),
+                       a_3, 17), global(L_write_26), 0).
+Let x = read_uint8(m, a_3).
+Assume {
+  Type: is_uint8(x) /\ is_uint16(read_uint16(m, a_2)) /\
+      is_uint32(read_uint32(m, a_1)) /\ is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(alloc_0[L_u64_22 <- 8][L_u32_23 <- 4][L_u16_24 <- 2]
+                    [L_u8_25 <- 1][L_write_26 <- 4]).
+}
+Prove: x = 17.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle/pointers.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle/pointers.res.oracle
new file mode 100644
index 00000000000..09ddbf4e0d4
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle/pointers.res.oracle
@@ -0,0 +1,120 @@
+# frama-c -wp -wp-model 'Bytes' [...]
+[kernel] Parsing pointers.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal addr_formal_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_formal_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal addr_glob_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_glob_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal addr_local_ko_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_local_ko_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal addr_local_ok_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_local_ok_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal pointer_param_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal pointer_param_terminates (Cfg) (Trivial)
+------------------------------------------------------------
+  Function addr_formal
+------------------------------------------------------------
+
+Goal Check (file pointers.i, line 18):
+Let m = alloc_0[P_x_28 <- 4].
+Let m_1 = m[L_buffer_29 <- 8].
+Let a = shift_uint8(global(L_buffer_29), 0).
+Let a_1 = global(P_x_28).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Frame In *)
+  Have: wf_malloc(m).
+  (* Block In *)
+  Have: wf_malloc(m_1).
+}
+Prove: addr_of_int(m_1,
+         read_uint64(write_uint64(mem_0, a, int_of_addr(a_1)), a)) = a_1.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function addr_glob
+------------------------------------------------------------
+
+Goal Check (file pointers.i, line 10):
+Let m = alloc_0[L_buffer_23 <- 8].
+Let a = shift_uint8(global(L_buffer_23), 0).
+Let a_1 = global(G_x_20).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(m).
+}
+Prove: addr_of_int(m,
+         read_uint64(write_uint64(mem_0, a, int_of_addr(a_1)), a)) = a_1.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function addr_local_ko
+------------------------------------------------------------
+
+Goal Check (file pointers.i, line 40):
+Let m = alloc_0[L_buffer_39 <- 8].
+Let m_1 = m[L_x_41 <- 0].
+Let a = shift_uint8(global(L_buffer_39), 0).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(m).
+  (* Block In *)
+  Have: wf_malloc(m[L_x_41 <- 4]).
+  (* Block Out *)
+  Have: wf_malloc(m_1).
+}
+Prove: addr_of_int(m_1,
+         read_uint64(write_uint64(mem_0, a, int_of_addr(global(L_x_41))), a)) =
+    global(G_x_20).
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function addr_local_ok
+------------------------------------------------------------
+
+Goal Check 'P' (file pointers.i, line 28):
+Let a = global(L_x_34).
+Let m = alloc_0[L_x_34 <- 4][L_buffer_35 <- 8].
+Let a_1 = shift_uint8(global(L_buffer_35), 0).
+Assume {
+  (* Heap *)
+  Type: linked(alloc_0) /\ wf_malloc(alloc_0) /\ sconst(mem_0) /\
+      framed(alloc_0, mem_0).
+  (* Block In *)
+  Have: wf_malloc(m).
+  (* Initializer *)
+  Init: read_sint32(mem_0, a) = 0.
+}
+Prove: addr_of_int(m,
+         read_uint64(write_uint64(mem_0, a_1, int_of_addr(a)), a_1)) = a.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function pointer_param
+------------------------------------------------------------
+
+Goal Check (file pointers.i, line 49):
+Let m = alloc_0[L_buffer_47 <- 8].
+Let a = shift_uint8(global(L_buffer_47), 0).
+Assume {
+  (* Heap *)
+  Type: (region(f.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, f, 4).
+  (* Block In *)
+  Have: wf_malloc(m).
+}
+Prove: addr_of_int(m, read_uint64(write_uint64(mem_0, a, int_of_addr(f)), a)) =
+    f.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle/structs.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle/structs.res.oracle
new file mode 100644
index 00000000000..29d74ac5b4f
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle/structs.res.oracle
@@ -0,0 +1,46 @@
+# frama-c -wp -wp-model 'Bytes' [...]
+[kernel] Parsing structs.i (no preprocessing)
+[wp] Running WP plugin...
+[kernel:annot:missing-spec] structs.i:14: Warning: 
+  Neither code nor explicit exits and terminates for function callee,
+   generating default clauses. See -generated-spec-* options for more info
+[wp] Warning: Missing RTE guards
+------------------------------------------------------------
+  Function caller
+------------------------------------------------------------
+
+Goal Termination-condition (generated) in 'caller':
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Post-condition (file structs.i, line 18) in 'caller':
+Let a = Load_S2_Y(u, mem_0).
+Let a_1 = Load_S2_Y(u, havoc(mem_undef_0, mem_0, y, 32)).
+Assume {
+  Type: IsS2_Y(a) /\ IsS2_Y(a_1).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ (region(y.base) <= 0) /\ sconst(mem_0).
+  (* Pre-condition *)
+  Have: separated(u, 32, y, 32).
+}
+Prove: EqS2_Y(a_1, a).
+
+------------------------------------------------------------
+
+Goal Exit-condition (generated) in 'caller':
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Assigns (file structs.i, line 17) in 'caller':
+Call Effect at line 21
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Assigns (file structs.i, line 17) in 'caller':
+Call Effect at line 21
+Prove: true.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle/union.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle/union.res.oracle
new file mode 100644
index 00000000000..4f9fea319f3
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle/union.res.oracle
@@ -0,0 +1,424 @@
+# frama-c -wp -wp-model 'Bytes' [...]
+[kernel] Parsing union.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal union_1_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_1_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal union_2_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_2_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal union_3_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_3_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal union_4_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_4_terminates (Cfg) (Trivial)
+------------------------------------------------------------
+  Function union_1
+------------------------------------------------------------
+
+Goal Check (file union.i, line 23):
+Let m = write_uint64(mem_0, shiftfield_F2_U_u(u), 4294967295).
+Let a = shiftfield_F2_U_x(u).
+Let x = read_sint32(m, shiftfield_F1_X_i(a)).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\
+      is_uint32(read_uint32(m, shiftfield_F1_X_u(a))) /\ is_sint32(x).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 0.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 24):
+Let m = write_uint64(mem_0, shiftfield_F2_U_u(u), 4294967295).
+Let a = shiftfield_F2_U_x(u).
+Let x = read_uint32(m, shiftfield_F1_X_u(a)).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\ is_uint32(x) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 26):
+Let m = write_uint64(mem_0, shiftfield_F2_U_u(u), 4294967295).
+Let a = shiftfield_F2_U_x(u).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\
+      is_uint32(read_uint32(m, shiftfield_F1_X_u(a))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Goal *)
+  When: (0 <= i) /\ (i <= 3).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: read_uint8(m, shift_uint8(shiftfield_F2_U_a(u), i)) = 255.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 27):
+Let m = write_uint64(mem_0, shiftfield_F2_U_u(u), 4294967295).
+Let a = shiftfield_F2_U_x(u).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\
+      is_uint32(read_uint32(m, shiftfield_F1_X_u(a))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Goal *)
+  When: (4 <= i) /\ (i <= 7).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: read_uint8(m, shift_uint8(shiftfield_F2_U_a(u), i)) = 0.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 29):
+Let m = write_uint64(mem_0, shiftfield_F2_U_u(u), 4294967295).
+Let x = read_uint32(m, shiftfield_F2_U_s(u)).
+Let a = shiftfield_F2_U_x(u).
+Assume {
+  Type: is_uint32(x) /\ is_uint32(read_uint32(m, shiftfield_F1_X_u(a))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function union_2
+------------------------------------------------------------
+
+Goal Check (file union.i, line 43):
+Let a = shiftfield_F2_U_a(u).
+Let m = write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(
+                                                                    write_uint8(
+                                                                    write_uint8(mem_0,
+                                                                    shift_uint8(a,
+                                                                    0), 255),
+                                                                    shift_uint8(a,
+                                                                    1), 255),
+                                                                    shift_uint8(a,
+                                                                    2), 255),
+                                                          shift_uint8(a, 3),
+                                                          255),
+                                              shift_uint8(a, 4), 0),
+                                  shift_uint8(a, 5), 0), shift_uint8(a, 6),
+                      0), shift_uint8(a, 7), 0).
+Let a_1 = shiftfield_F2_U_x(u).
+Let x = read_uint64(m, shiftfield_F2_U_u(u)).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\
+      is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\ is_uint64(x).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 45):
+Let a = shiftfield_F2_U_a(u).
+Let m = write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(
+                                                                    write_uint8(
+                                                                    write_uint8(mem_0,
+                                                                    shift_uint8(a,
+                                                                    0), 255),
+                                                                    shift_uint8(a,
+                                                                    1), 255),
+                                                                    shift_uint8(a,
+                                                                    2), 255),
+                                                          shift_uint8(a, 3),
+                                                          255),
+                                              shift_uint8(a, 4), 0),
+                                  shift_uint8(a, 5), 0), shift_uint8(a, 6),
+                      0), shift_uint8(a, 7), 0).
+Let a_1 = shiftfield_F2_U_x(u).
+Let x = read_sint32(m, shiftfield_F1_X_i(a_1)).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\
+      is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\ is_sint32(x) /\
+      is_uint64(read_uint64(m, shiftfield_F2_U_u(u))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 0.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 46):
+Let a = shiftfield_F2_U_a(u).
+Let m = write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(
+                                                                    write_uint8(
+                                                                    write_uint8(mem_0,
+                                                                    shift_uint8(a,
+                                                                    0), 255),
+                                                                    shift_uint8(a,
+                                                                    1), 255),
+                                                                    shift_uint8(a,
+                                                                    2), 255),
+                                                          shift_uint8(a, 3),
+                                                          255),
+                                              shift_uint8(a, 4), 0),
+                                  shift_uint8(a, 5), 0), shift_uint8(a, 6),
+                      0), shift_uint8(a, 7), 0).
+Let a_1 = shiftfield_F2_U_x(u).
+Let x = read_uint32(m, shiftfield_F1_X_u(a_1)).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F2_U_s(u))) /\ is_uint32(x) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\
+      is_uint64(read_uint64(m, shiftfield_F2_U_u(u))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 48):
+Let a = shiftfield_F2_U_a(u).
+Let m = write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(write_uint8(
+                                                                    write_uint8(
+                                                                    write_uint8(mem_0,
+                                                                    shift_uint8(a,
+                                                                    0), 255),
+                                                                    shift_uint8(a,
+                                                                    1), 255),
+                                                                    shift_uint8(a,
+                                                                    2), 255),
+                                                          shift_uint8(a, 3),
+                                                          255),
+                                              shift_uint8(a, 4), 0),
+                                  shift_uint8(a, 5), 0), shift_uint8(a, 6),
+                      0), shift_uint8(a, 7), 0).
+Let x = read_uint32(m, shiftfield_F2_U_s(u)).
+Let a_1 = shiftfield_F2_U_x(u).
+Assume {
+  Type: is_uint32(x) /\ is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\
+      is_uint64(read_uint64(m, shiftfield_F2_U_u(u))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function union_3
+------------------------------------------------------------
+
+Goal Check (file union.i, line 56):
+Let a = shiftfield_F2_U_u(u).
+Let m = write_uint32(write_uint64(mem_0, a, 4294967295),
+          shiftfield_F2_U_s(u), 4294967295).
+Let a_1 = shiftfield_F2_U_x(u).
+Let x = read_uint64(m, a).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\ is_uint64(x).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 58):
+Let a = shiftfield_F2_U_u(u).
+Let m = write_uint32(write_uint64(mem_0, a, 4294967295),
+          shiftfield_F2_U_s(u), 4294967295).
+Let a_1 = shiftfield_F2_U_x(u).
+Let x = read_sint32(m, shiftfield_F1_X_i(a_1)).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\ is_sint32(x) /\
+      is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 0.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 59):
+Let a = shiftfield_F2_U_u(u).
+Let m = write_uint32(write_uint64(mem_0, a, 4294967295),
+          shiftfield_F2_U_s(u), 4294967295).
+Let a_1 = shiftfield_F2_U_x(u).
+Let x = read_uint32(m, shiftfield_F1_X_u(a_1)).
+Assume {
+  Type: is_uint32(x) /\ is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\
+      is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 61):
+Let a = shiftfield_F2_U_u(u).
+Let m = write_uint32(write_uint64(mem_0, a, 4294967295),
+          shiftfield_F2_U_s(u), 4294967295).
+Let a_1 = shiftfield_F2_U_x(u).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\
+      is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Goal *)
+  When: (0 <= i) /\ (i <= 3).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: read_uint8(m, shift_uint8(shiftfield_F2_U_a(u), i)) = 255.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 62):
+Let a = shiftfield_F2_U_u(u).
+Let m = write_uint32(write_uint64(mem_0, a, 4294967295),
+          shiftfield_F2_U_s(u), 4294967295).
+Let a_1 = shiftfield_F2_U_x(u).
+Assume {
+  Type: is_uint32(read_uint32(m, shiftfield_F1_X_u(a_1))) /\
+      is_sint32(read_sint32(m, shiftfield_F1_X_i(a_1))) /\
+      is_uint64(read_uint64(m, a)).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Goal *)
+  When: (4 <= i) /\ (i <= 7).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+}
+Prove: read_uint8(m, shift_uint8(shiftfield_F2_U_a(u), i)) = 0.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function union_4
+------------------------------------------------------------
+
+Goal Check (file union.i, line 70):
+Let a = shiftfield_F2_U_x(u).
+Let a_1 = havoc(mem_undef_0, mem_0, a, 8).
+Let x = read_uint64(a_1, shiftfield_F2_U_u(u)).
+Assume {
+  Type: is_uint32(read_uint32(a_1, shiftfield_F2_U_s(u))) /\ is_uint64(x).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+  (* Initializer *)
+  Init: read_uint32(a_1, shiftfield_F1_X_u(a)) = 4294967295.
+  (* Initializer *)
+  Init: read_sint32(a_1, shiftfield_F1_X_i(a)) = 0.
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 72):
+Let a = shiftfield_F2_U_x(u).
+Let a_1 = havoc(mem_undef_0, mem_0, a, 8).
+Assume {
+  Type: is_uint32(read_uint32(a_1, shiftfield_F2_U_s(u))) /\
+      is_uint64(read_uint64(a_1, shiftfield_F2_U_u(u))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Goal *)
+  When: (0 <= i) /\ (i <= 3).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+  (* Initializer *)
+  Init: read_uint32(a_1, shiftfield_F1_X_u(a)) = 4294967295.
+  (* Initializer *)
+  Init: read_sint32(a_1, shiftfield_F1_X_i(a)) = 0.
+}
+Prove: read_uint8(a_1, shift_uint8(shiftfield_F2_U_a(u), i)) = 255.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 73):
+Let a = shiftfield_F2_U_x(u).
+Let a_1 = havoc(mem_undef_0, mem_0, a, 8).
+Assume {
+  Type: is_uint32(read_uint32(a_1, shiftfield_F2_U_s(u))) /\
+      is_uint64(read_uint64(a_1, shiftfield_F2_U_u(u))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Goal *)
+  When: (4 <= i) /\ (i <= 7).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+  (* Initializer *)
+  Init: read_uint32(a_1, shiftfield_F1_X_u(a)) = 4294967295.
+  (* Initializer *)
+  Init: read_sint32(a_1, shiftfield_F1_X_i(a)) = 0.
+}
+Prove: read_uint8(a_1, shift_uint8(shiftfield_F2_U_a(u), i)) = 0.
+
+------------------------------------------------------------
+
+Goal Check (file union.i, line 75):
+Let a = shiftfield_F2_U_x(u).
+Let a_1 = havoc(mem_undef_0, mem_0, a, 8).
+Let x = read_uint32(a_1, shiftfield_F2_U_s(u)).
+Assume {
+  Type: is_uint32(x) /\ is_uint64(read_uint64(a_1, shiftfield_F2_U_u(u))).
+  (* Heap *)
+  Type: (region(u.base) <= 0) /\ linked(alloc_0) /\ wf_malloc(alloc_0) /\
+      sconst(mem_0) /\ framed(alloc_0, mem_0).
+  (* Pre-condition *)
+  Have: valid_rw(alloc_0, u, 8).
+  (* Initializer *)
+  Init: read_uint32(a_1, shiftfield_F1_X_u(a)) = 4294967295.
+  (* Initializer *)
+  Init: read_sint32(a_1, shiftfield_F1_X_i(a)) = 0.
+}
+Prove: x = 4294967295.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle_qualif/assigns_sep.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle_qualif/assigns_sep.res.oracle
new file mode 100644
index 00000000000..f8cf73fe311
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle_qualif/assigns_sep.res.oracle
@@ -0,0 +1,32 @@
+# frama-c -wp -wp-model 'Bytes' -wp-timeout 20 [...]
+[kernel] Parsing assigns_sep.i (no preprocessing)
+[wp] Running WP plugin...
+[kernel:annot:missing-spec] assigns_sep.i:13: Warning: 
+  Neither code nor explicit exits and terminates for function assigns,
+   generating default clauses. See -generated-spec-* options for more info
+[kernel:annot:missing-spec] assigns_sep.i:16: Warning: 
+  Neither code nor explicit exits and terminates for function assigns_r,
+   generating default clauses. See -generated-spec-* options for more info
+[kernel:annot:missing-spec] assigns_sep.i:19: Warning: 
+  Neither code nor explicit exits and terminates for function assigns_l2,
+   generating default clauses. See -generated-spec-* options for more info
+[wp] [Valid] Goal assignment_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal assignment_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] 5 goals scheduled
+[wp] [Valid] bytes_assignment_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_assigns_clause_terminates (Qed)
+[wp] [Valid] bytes_assigns_clause_exits (Qed)
+[wp] [Valid] bytes_assigns_clause_check (Alt-Ergo) (Cached)
+[wp] [Unsuccess] bytes_assigns_clause_check_2 (Alt-Ergo) (Cached)
+[wp] Proved goals:    6 / 7
+  Terminating:     1
+  Unreachable:     1
+  Qed:             2
+  Alt-Ergo:        2
+  Unsuccess:       1
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  assignment                -        1        1       100%
+  assigns_clause            2        1        4      75.0%
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle_qualif/floats.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle_qualif/floats.res.oracle
new file mode 100644
index 00000000000..b7d9a3d3cb4
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle_qualif/floats.res.oracle
@@ -0,0 +1,20 @@
+# frama-c -wp -wp-model 'Bytes' -wp-timeout 20 [...]
+[kernel] Parsing floats.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal double_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal double_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal float_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal float_terminates (Cfg) (Trivial)
+[wp] 2 goals scheduled
+[wp] [Valid] bytes_float_assert (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_double_assert (Alt-Ergo) (Cached)
+[wp] Proved goals:    6 / 6
+  Terminating:     2
+  Unreachable:     2
+  Alt-Ergo:        2
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  float_                    -        1        1       100%
+  double_                   -        1        1       100%
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle_qualif/integers.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle_qualif/integers.res.oracle
new file mode 100644
index 00000000000..c58a719e673
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle_qualif/integers.res.oracle
@@ -0,0 +1,90 @@
+# frama-c -wp -wp-model 'Bytes (Raw)' -wp-timeout 20 [...]
+[kernel] Parsing integers.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal cast_from_bytes_to_signed_neg_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_from_bytes_to_signed_neg_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal cast_from_bytes_to_signed_pos_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_from_bytes_to_signed_pos_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal cast_from_bytes_to_unsigned_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_from_bytes_to_unsigned_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal cast_unsigned_signed_neg_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_unsigned_signed_neg_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal cast_unsigned_signed_pos_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal cast_unsigned_signed_pos_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal signed_neg_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal signed_neg_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal signed_pos_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal signed_pos_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal unsigned_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal unsigned_terminates (Cfg) (Trivial)
+[wp] 53 goals scheduled
+[wp] [Valid] bytes_raw_unsigned_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_6 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_7 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_unsigned_check_8 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_6 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_7 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_pos_check_8 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_6 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_7 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_signed_neg_check_8 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_pos_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_pos_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_pos_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_pos_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_neg_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_neg_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_neg_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_unsigned_signed_neg_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check_6 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_unsigned_check_7 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check_6 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_pos_check_7 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_neg_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_neg_check_2 (Alt-Ergo) (Cached)
+[wp] [Unsuccess] bytes_raw_cast_from_bytes_to_signed_neg_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_neg_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_neg_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_neg_check_6 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_raw_cast_from_bytes_to_signed_neg_check_7 (Alt-Ergo) (Cached)
+[wp] Proved goals:   68 / 69
+  Terminating:     8
+  Unreachable:     8
+  Alt-Ergo:       52
+  Unsuccess:       1
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  unsigned_                 -        8        8       100%
+  signed_pos                -        8        8       100%
+  signed_neg                -        8        8       100%
+  cast_unsigned_signed_pos   -       4        4       100%
+  cast_unsigned_signed_neg   -       4        4       100%
+  cast_from_bytes_to_unsigned   -    7        7       100%
+  cast_from_bytes_to_signed_pos   -   7       7       100%
+  cast_from_bytes_to_signed_neg   -   6       7      85.7%
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle_qualif/pointers.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle_qualif/pointers.res.oracle
new file mode 100644
index 00000000000..282cb21da04
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle_qualif/pointers.res.oracle
@@ -0,0 +1,33 @@
+# frama-c -wp -wp-model 'Bytes' -wp-timeout 20 [...]
+[kernel] Parsing pointers.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal addr_formal_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_formal_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal addr_glob_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_glob_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal addr_local_ko_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_local_ko_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal addr_local_ok_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal addr_local_ok_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal pointer_param_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal pointer_param_terminates (Cfg) (Trivial)
+[wp] 5 goals scheduled
+[wp] [Valid] bytes_addr_glob_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_addr_formal_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_addr_local_ok_check_P (Alt-Ergo) (Cached)
+[wp] [Unsuccess] bytes_addr_local_ko_check (Alt-Ergo) (Cached)
+[wp] [Unsuccess] bytes_pointer_param_check (Alt-Ergo) (Cached)
+[wp] Proved goals:   13 / 15
+  Terminating:     5
+  Unreachable:     5
+  Alt-Ergo:        3
+  Unsuccess:       2
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  addr_glob                 -        1        1       100%
+  addr_formal               -        1        1       100%
+  addr_local_ok             -        1        1       100%
+  addr_local_ko             -        -        1       0.0%
+  pointer_param             -        -        1       0.0%
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle_qualif/structs.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle_qualif/structs.res.oracle
new file mode 100644
index 00000000000..cc3260b313a
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle_qualif/structs.res.oracle
@@ -0,0 +1,20 @@
+# frama-c -wp -wp-model 'Bytes' -wp-timeout 20 [...]
+[kernel] Parsing structs.i (no preprocessing)
+[wp] Running WP plugin...
+[kernel:annot:missing-spec] structs.i:14: Warning: 
+  Neither code nor explicit exits and terminates for function callee,
+   generating default clauses. See -generated-spec-* options for more info
+[wp] Warning: Missing RTE guards
+[wp] 5 goals scheduled
+[wp] [Valid] bytes_caller_terminates (Qed)
+[wp] [Valid] bytes_caller_ensures (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_caller_exits (Qed)
+[wp] [Valid] bytes_caller_assigns_exit (Qed)
+[wp] [Valid] bytes_caller_assigns_normal (Qed)
+[wp] Proved goals:    5 / 5
+  Qed:             4
+  Alt-Ergo:        1
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  caller                    4        1        5       100%
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/oracle_qualif/union.res.oracle b/src/plugins/wp/tests/wp_bytes/oracle_qualif/union.res.oracle
new file mode 100644
index 00000000000..a653dbd9983
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/oracle_qualif/union.res.oracle
@@ -0,0 +1,43 @@
+# frama-c -wp -wp-model 'Bytes' -wp-timeout 20 [...]
+[kernel] Parsing union.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] [Valid] Goal union_1_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_1_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
+[wp] [Valid] Goal union_2_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_2_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal union_3_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_3_terminates (Cfg) (Trivial)
+[wp] [Valid] Goal union_4_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal union_4_terminates (Cfg) (Trivial)
+[wp] 18 goals scheduled
+[wp] [Valid] bytes_union_1_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_1_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_1_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_1_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_1_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_2_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_2_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_2_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_2_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_3_check (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_3_check_2 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_3_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_3_check_4 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_3_check_5 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_4_check (Alt-Ergo) (Cached)
+[wp] [Unsuccess] bytes_union_4_check_2 (Alt-Ergo) (Cached)
+[wp] [Unsuccess] bytes_union_4_check_3 (Alt-Ergo) (Cached)
+[wp] [Valid] bytes_union_4_check_4 (Alt-Ergo) (Cached)
+[wp] Proved goals:   24 / 26
+  Terminating:     4
+  Unreachable:     4
+  Alt-Ergo:       16
+  Unsuccess:       2
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  union_1                   -        5        5       100%
+  union_2                   -        4        4       100%
+  union_3                   -        5        5       100%
+  union_4                   -        2        4      50.0%
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bytes/pointers.i b/src/plugins/wp/tests/wp_bytes/pointers.i
new file mode 100644
index 00000000000..eb7ca1de529
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/pointers.i
@@ -0,0 +1,50 @@
+typedef unsigned char      uint8 ;
+
+int x ;
+
+void addr_glob(void){
+  uint8 buffer[sizeof(int*)] ;
+  *((int**) buffer) = &x ;
+
+  int* r = *((int**) buffer) ;
+  //@ check r == &x ;
+}
+
+void addr_formal(int x){
+  uint8 buffer[sizeof(int*)] ;
+  *((int**) buffer) = &x ;
+  int* r = *((int**) buffer) ;
+
+  //@ check r == &x ;
+}
+
+void addr_local_ok(void){
+  int x = 0;
+
+  uint8 buffer[sizeof(int*)] ;
+  *((int**) buffer) = &x ;
+
+  int* r = *((int**) buffer) ;
+  //@ check P: r == &x ;
+}
+
+void addr_local_ko(void){
+  uint8 buffer[sizeof(int*)] ;
+
+  {
+    int x ;
+    *((int**) buffer) = &x ;
+  }
+
+  int* r = *((int**) buffer) ;
+  //@ check r == &x ;
+}
+
+//@ requires \valid(f);
+void pointer_param(int *f){
+  uint8 buffer[sizeof(int*)] ;
+  *((int**) buffer) = f ;
+
+  int* r = *((int**) buffer) ;
+  //@ check r == f ;
+}
diff --git a/src/plugins/wp/tests/wp_bytes/structs.i b/src/plugins/wp/tests/wp_bytes/structs.i
new file mode 100644
index 00000000000..6018ae03d83
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/structs.i
@@ -0,0 +1,22 @@
+struct X {
+  char  c ;
+  short s ;
+  int   i ;
+  int   a[5] ;
+} ;
+
+struct Y {
+  char c ;
+  struct X x ;
+} ;
+
+//@ assigns *y ;
+void callee(struct Y* y);
+
+/*@ requires \separated(u, y) ;
+    assigns  *y ;
+    ensures  *u == \old(*u) ;
+*/
+void caller(struct Y const* u, struct Y* y){
+  callee(y) ;
+}
diff --git a/src/plugins/wp/tests/wp_bytes/test_config b/src/plugins/wp/tests/wp_bytes/test_config
new file mode 100644
index 00000000000..3ef26ad2d95
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/test_config
@@ -0,0 +1 @@
+OPT: -wp-model bytes
diff --git a/src/plugins/wp/tests/wp_bytes/test_config_qualif b/src/plugins/wp/tests/wp_bytes/test_config_qualif
new file mode 100644
index 00000000000..b669ba76f90
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/test_config_qualif
@@ -0,0 +1 @@
+OPT: -wp-model bytes -wp-prover Alt-Ergo -wp-timeout 20
diff --git a/src/plugins/wp/tests/wp_bytes/union.i b/src/plugins/wp/tests/wp_bytes/union.i
new file mode 100644
index 00000000000..548d6b072a1
--- /dev/null
+++ b/src/plugins/wp/tests/wp_bytes/union.i
@@ -0,0 +1,76 @@
+typedef unsigned long long uint64 ;
+typedef unsigned           uint32 ;
+typedef unsigned char      uint8 ;
+
+typedef int                int32 ;
+
+struct X {
+  uint32 u ;
+  int32 i ;
+} ;
+
+union U {
+  struct X x ;
+  uint64   u ;
+  uint8    a[sizeof(struct X)] ;
+  uint32   s ;
+} ;
+
+//@ requires \valid(u) ;
+void union_1(union U* u){
+  u->u = 0x00000000FFFFFFFF ;
+
+  //@ check u->x.i == 0x00000000 ;
+  //@ check u->x.u == 0xFFFFFFFF ;
+
+  //@ check \forall integer i ; 0 <= i < 4 ==> u->a[i] == { 0xFF } ;
+  //@ check \forall integer i ; 4 <= i < 8 ==> u->a[i] == { 0x00 } ;
+
+  //@ check u->s == 0xFFFFFFFF ;
+}
+
+//@ requires \valid(u) ;
+void union_2(union U* u){
+  u->a[0] = 0xFF ;
+  u->a[1] = 0xFF ;
+  u->a[2] = 0xFF ;
+  u->a[3] = 0xFF ;
+  u->a[4] = 0x00 ;
+  u->a[5] = 0x00 ;
+  u->a[6] = 0x00 ;
+  u->a[7] = 0x00 ;
+
+  //@ check u->u == 0x00000000FFFFFFFF ;
+
+  //@ check u->x.i == 0x00000000 ;
+  //@ check u->x.u == 0xFFFFFFFF ;
+
+  //@ check u->s == 0xFFFFFFFF ;
+}
+
+//@ requires \valid(u) ;
+void union_3(union U* u){
+  u->u = 0x00000000FFFFFFFF ;
+  u->s = 0xFFFFFFFF ;
+
+  //@ check u->u == 0x00000000FFFFFFFF ;
+
+  //@ check u->x.i == 0x00000000 ;
+  //@ check u->x.u == 0xFFFFFFFF ;
+
+  //@ check \forall integer i ; 0 <= i < 4 ==> u->a[i] == { 0xFF } ;
+  //@ check \forall integer i ; 4 <= i < 8 ==> u->a[i] == { 0x00 } ;
+}
+
+//@ requires \valid(u) ;
+void union_4(union U* u){
+  struct X x = { .u = 0xFFFFFFFFu, .i = 0x00000000 } ;
+  u->x = x ;
+
+  //@ check u->u == 0x00000000FFFFFFFF ;
+
+  //@ check \forall integer i ; 0 <= i < 4 ==> u->a[i] == { 0xFF } ;
+  //@ check \forall integer i ; 4 <= i < 8 ==> u->a[i] == { 0x00 } ;
+
+  //@ check u->s == 0xFFFFFFFF ;
+}
-- 
GitLab