From 54185e9604642ec1a93f74b2165555afa67e7580 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Wed, 21 Feb 2024 14:07:39 +0100
Subject: [PATCH] [ACSL++] better char litteral translation

- no more casts inserted in front of the litteral
- use actual `'c'` value (or `L'c'` for wide char) instead of numerical one
---
 convert_acsl.ml                               | 25 ++++++++++-
 framaCIRGen_src/ACSLTermOrPredicate.cpp       | 14 +-----
 tests/basic/oracle/placement_new.res.oracle   | 45 +++++++++----------
 tests/basic/oracle/placement_newb.res.oracle  | 45 +++++++++----------
 tests/specs/oracle/basic.res.oracle           |  2 +-
 tests/specs/oracle/wchar_t.res.oracle         |  3 +-
 tests/stl/oracle/stl_algorithm.res.oracle     | 45 +++++++++----------
 tests/stl/oracle/stl_bool.res.oracle          | 45 +++++++++----------
 tests/stl/oracle/stl_functional.res.oracle    | 45 +++++++++----------
 tests/stl/oracle/stl_memory.res.oracle        | 45 +++++++++----------
 .../stl_shared_ptr_mistake10.res.oracle       | 45 +++++++++----------
 .../oracle/stl_shared_ptr_mistake5.res.oracle | 45 +++++++++----------
 .../oracle/stl_shared_ptr_mistake6.res.oracle | 45 +++++++++----------
 tests/stl/oracle/stl_system_error.res.oracle  | 45 +++++++++----------
 tests/stl/oracle/stl_typeinfo.res.oracle      | 45 +++++++++----------
 tests/stl/oracle/stl_unique_ptr.res.oracle    | 45 +++++++++----------
 16 files changed, 267 insertions(+), 317 deletions(-)

diff --git a/convert_acsl.ml b/convert_acsl.ml
index 8e0f9dcc..0e9ed0a6 100644
--- a/convert_acsl.ml
+++ b/convert_acsl.ml
@@ -66,13 +66,34 @@ let convert_fkind = function
   | FDouble -> Cil_types.FDouble
   | FLongDouble -> Cil_types.FLongDouble
 
+let int_to_char c =
+  let open Int64 in
+  let char_max = of_int 256 in
+  let mk_char c =
+    Char.unsafe_chr (Option.get (unsigned_to_int (unsigned_rem c char_max)))
+  in
+  let rec aux seq c =
+    let seq = Seq.cons (mk_char c) seq in
+    let c = unsigned_div c char_max in
+    if equal c zero then String.of_seq seq else aux seq c
+  in
+  (* NB: intermediate_format uses int there, but, at least for wide chars, it's
+     better to stick with int64, that allows for unsigned operations. The whole
+     thing would probably need a complete overhaul, though.
+  *)
+  aux Seq.empty (Int64.of_int c)
+
+let convert_char c = "'" ^ int_to_char c ^ "'"
+
+let convert_wchar c = "L'" ^ int_to_char c ^ "'"
+
 let convert_logic_constant = function
   | LCInt v -> IntConstant v
   | LStr s -> StringConstant s
   | LWStr _s ->
     Frama_Clang_option.not_yet_implemented "Wide string support in logic"
-  | LChr c -> IntConstant (string_of_int c)
-  | LWChr c -> IntConstant (string_of_int c)
+  | LChr c -> IntConstant (convert_char c)
+  | LWChr c -> IntConstant (convert_wchar c)
   | LCReal s -> FloatConstant s
   | LCEnum (v,_) -> IntConstant (Int64.to_string v)
     (* TODO: add support into ACSL for that? *)
diff --git a/framaCIRGen_src/ACSLTermOrPredicate.cpp b/framaCIRGen_src/ACSLTermOrPredicate.cpp
index 74a4653c..0a39763b 100644
--- a/framaCIRGen_src/ACSLTermOrPredicate.cpp
+++ b/framaCIRGen_src/ACSLTermOrPredicate.cpp
@@ -6323,21 +6323,11 @@ TermOrPredicate::readToken(Parser::State& state, Parser::Arguments& arguments) {
                   if (token.isChar()) {
                     constant = logic_constant_LChr(token.getChar());
                     valueType = logic_type_Lint(ICHAR);
-                    node =
-                      term_node_TCastE(
-                        logic_type_dup(valueType),
-                        term_cons(
-                          term_node_TConst(constant),
-                          arguments.newTokenLocation(), NULL));
+                    node = term_node_TConst(constant);
                   } else { //wide char
                     constant = logic_constant_LWChr(token.getWideChar());
                     valueType = logic_type_Lint(IWCHAR);
-                    node =
-                      term_node_TCastE(
-                        logic_type_dup(valueType),
-                        term_cons(
-                          term_node_TConst(constant),
-                          arguments.newTokenLocation(),NULL));
+                    node = term_node_TConst(constant);
                   }
                   break;
                 }
diff --git a/tests/basic/oracle/placement_new.res.oracle b/tests/basic/oracle/placement_new.res.oracle
index 19fb1e1c..eff921ab 100644
--- a/tests/basic/oracle/placement_new.res.oracle
+++ b/tests/basic/oracle/placement_new.res.oracle
@@ -161,33 +161,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -195,14 +195,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -295,33 +294,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -329,14 +325,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/basic/oracle/placement_newb.res.oracle b/tests/basic/oracle/placement_newb.res.oracle
index e5a02cc7..73fc88a9 100644
--- a/tests/basic/oracle/placement_newb.res.oracle
+++ b/tests/basic/oracle/placement_newb.res.oracle
@@ -130,33 +130,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -164,14 +164,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -264,33 +263,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -298,14 +294,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/specs/oracle/basic.res.oracle b/tests/specs/oracle/basic.res.oracle
index 2de5b3b9..a92d6f6d 100644
--- a/tests/specs/oracle/basic.res.oracle
+++ b/tests/specs/oracle/basic.res.oracle
@@ -1,6 +1,6 @@
 [kernel] Parsing basic.cpp (external front-end)
 Now output intermediate result
 /* Generated by Frama-C */
-/*@ lemma test_char: (char)0 ≢ (char)97;
+/*@ lemma test_char: '\000' ≢ 'a';
  */
 
diff --git a/tests/specs/oracle/wchar_t.res.oracle b/tests/specs/oracle/wchar_t.res.oracle
index adecf2ef..942aac0e 100644
--- a/tests/specs/oracle/wchar_t.res.oracle
+++ b/tests/specs/oracle/wchar_t.res.oracle
@@ -4,8 +4,7 @@ Now output intermediate result
 typedef long wchar_t;
 /*@ predicate is_normal_char(wchar_t c) = 0 ≤ c ≤ 255;
  */
-/*@
-predicate wchar_buff{L}(wchar_t *p, ℤ l) = \at(*(p + l) ≡ (wchar_t)0,L);
+/*@ predicate wchar_buff{L}(wchar_t *p, ℤ l) = \at(*(p + l) ≡ 0,L);
  */
 int freq[256];
 /*@ requires is_normal_char(c); */
diff --git a/tests/stl/oracle/stl_algorithm.res.oracle b/tests/stl/oracle/stl_algorithm.res.oracle
index 158a5df0..1eeeb04c 100644
--- a/tests/stl/oracle/stl_algorithm.res.oracle
+++ b/tests/stl/oracle/stl_algorithm.res.oracle
@@ -568,33 +568,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -602,14 +602,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -702,33 +701,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -736,14 +732,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_bool.res.oracle b/tests/stl/oracle/stl_bool.res.oracle
index 64160356..6a1f7bc5 100644
--- a/tests/stl/oracle/stl_bool.res.oracle
+++ b/tests/stl/oracle/stl_bool.res.oracle
@@ -216,33 +216,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -250,14 +250,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -350,33 +349,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -384,14 +380,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_functional.res.oracle b/tests/stl/oracle/stl_functional.res.oracle
index b4e115ee..b0b48095 100644
--- a/tests/stl/oracle/stl_functional.res.oracle
+++ b/tests/stl/oracle/stl_functional.res.oracle
@@ -376,33 +376,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -410,14 +410,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -510,33 +509,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -544,14 +540,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_memory.res.oracle b/tests/stl/oracle/stl_memory.res.oracle
index ce15968f..eb4496e1 100644
--- a/tests/stl/oracle/stl_memory.res.oracle
+++ b/tests/stl/oracle/stl_memory.res.oracle
@@ -382,33 +382,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -416,14 +416,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -516,33 +515,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -550,14 +546,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_shared_ptr_mistake10.res.oracle b/tests/stl/oracle/stl_shared_ptr_mistake10.res.oracle
index d8f78952..081aec94 100644
--- a/tests/stl/oracle/stl_shared_ptr_mistake10.res.oracle
+++ b/tests/stl/oracle/stl_shared_ptr_mistake10.res.oracle
@@ -350,33 +350,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -384,14 +384,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -484,33 +483,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -518,14 +514,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_shared_ptr_mistake5.res.oracle b/tests/stl/oracle/stl_shared_ptr_mistake5.res.oracle
index 014225c0..6da10dc3 100644
--- a/tests/stl/oracle/stl_shared_ptr_mistake5.res.oracle
+++ b/tests/stl/oracle/stl_shared_ptr_mistake5.res.oracle
@@ -331,33 +331,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -365,14 +365,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -465,33 +464,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -499,14 +495,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_shared_ptr_mistake6.res.oracle b/tests/stl/oracle/stl_shared_ptr_mistake6.res.oracle
index 1f306e33..76a56143 100644
--- a/tests/stl/oracle/stl_shared_ptr_mistake6.res.oracle
+++ b/tests/stl/oracle/stl_shared_ptr_mistake6.res.oracle
@@ -332,33 +332,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -366,14 +366,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -466,33 +465,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -500,14 +496,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_system_error.res.oracle b/tests/stl/oracle/stl_system_error.res.oracle
index 0cc69025..4638556b 100644
--- a/tests/stl/oracle/stl_system_error.res.oracle
+++ b/tests/stl/oracle/stl_system_error.res.oracle
@@ -294,33 +294,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -328,14 +328,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -428,33 +427,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -462,14 +458,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_typeinfo.res.oracle b/tests/stl/oracle/stl_typeinfo.res.oracle
index e61c0e41..168665b7 100644
--- a/tests/stl/oracle/stl_typeinfo.res.oracle
+++ b/tests/stl/oracle/stl_typeinfo.res.oracle
@@ -152,33 +152,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -186,14 +186,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -286,33 +285,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -320,14 +316,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
diff --git a/tests/stl/oracle/stl_unique_ptr.res.oracle b/tests/stl/oracle/stl_unique_ptr.res.oracle
index 51284e7d..8dd60c4b 100644
--- a/tests/stl/oracle/stl_unique_ptr.res.oracle
+++ b/tests/stl/oracle/stl_unique_ptr.res.oracle
@@ -875,33 +875,33 @@ axiomatic StrLen {
   axiom strlen_pos_or_null{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (char)0) ∧
-      *(s + i) ≡ (char)0 ⇒ strlen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ '\000') ∧
+      *(s + i) ≡ '\000' ⇒ strlen(s) ≡ i;
   
   axiom strlen_neg{L}:
     ∀ char *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (char)0) ⇒ strlen(s) < 0;
+      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ '\000') ⇒ strlen(s) < 0;
   
   axiom strlen_before_null{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ (char)0;
+    ∀ ℤ i; 0 ≤ i < strlen(s) ⇒ *(s + i) ≢ '\000';
   
   axiom strlen_at_null{L}:
-    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ (char)0;
+    ∀ char *s; 0 ≤ strlen(s) ⇒ *(s + strlen(s)) ≡ '\000';
   
   axiom strlen_not_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ (char)0 ⇒ i < strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≢ '\000' ⇒ i < strlen(s);
   
   axiom strlen_zero{L}:
     ∀ char *s;
     ∀ ℤ i;
-      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ (char)0 ⇒ i ≡ strlen(s);
+      0 ≤ i ≤ strlen(s) ∧ *(s + i) ≡ '\000' ⇒ i ≡ strlen(s);
   
   axiom strlen_sup{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_shift{L}:
     ∀ char *s;
@@ -909,14 +909,13 @@ axiomatic StrLen {
   
   axiom strlen_create{L}:
     ∀ char *s;
-    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ (char)0 ⇒ 0 ≤ strlen(s) ≤ i;
+    ∀ ℤ i; 0 ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s) ≤ i;
   
   axiom strlen_create_shift{L}:
     ∀ char *s;
     ∀ ℤ i;
     ∀ ℤ k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (char)0 ⇒
-      0 ≤ strlen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ '\000' ⇒ 0 ≤ strlen(s + k) ≤ i - k;
   
   axiom memcmp_strlen_left{L}:
     ∀ char *s1, char *s2;
@@ -1009,33 +1008,30 @@ axiomatic WcsLen {
   axiom wcslen_pos_or_null{L}:
     ∀ wchar_t *s;
     ∀ ℤ i;
-      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ (wchar_t)0) ∧
-      *(s + i) ≡ (wchar_t)0 ⇒ wcslen(s) ≡ i;
+      0 ≤ i ∧ (∀ ℤ j; 0 ≤ j < i ⇒ *(s + j) ≢ 0) ∧
+      *(s + i) ≡ 0 ⇒ wcslen(s) ≡ i;
   
   axiom wcslen_neg{L}:
-    ∀ wchar_t *s;
-      (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ (wchar_t)0) ⇒ wcslen(s) < 0;
+    ∀ wchar_t *s; (∀ ℤ i; 0 ≤ i ⇒ *(s + i) ≢ 0) ⇒ wcslen(s) < 0;
   
   axiom wcslen_before_null{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ (wchar_t)0;
+    ∀ int i; 0 ≤ i < wcslen(s) ⇒ *(s + i) ≢ 0;
   
   axiom wcslen_at_null{L}:
-    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ (wchar_t)0;
+    ∀ wchar_t *s; 0 ≤ wcslen(s) ⇒ *(s + wcslen(s)) ≡ 0;
   
   axiom wcslen_not_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ (wchar_t)0 ⇒ i < wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≢ 0 ⇒ i < wcslen(s);
   
   axiom wcslen_zero{L}:
     ∀ wchar_t *s;
-    ∀ int i;
-      0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ (wchar_t)0 ⇒ i ≡ wcslen(s);
+    ∀ int i; 0 ≤ i ≤ wcslen(s) ∧ *(s + i) ≡ 0 ⇒ i ≡ wcslen(s);
   
   axiom wcslen_sup{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_shift{L}:
     ∀ wchar_t *s;
@@ -1043,14 +1039,13 @@ axiomatic WcsLen {
   
   axiom wcslen_create{L}:
     ∀ wchar_t *s;
-    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒ 0 ≤ wcslen(s) ≤ i;
+    ∀ int i; 0 ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s) ≤ i;
   
   axiom wcslen_create_shift{L}:
     ∀ wchar_t *s;
     ∀ int i;
     ∀ int k;
-      0 ≤ k ≤ i ∧ *(s + i) ≡ (wchar_t)0 ⇒
-      0 ≤ wcslen(s + k) ≤ i - k;
+      0 ≤ k ≤ i ∧ *(s + i) ≡ 0 ⇒ 0 ≤ wcslen(s + k) ≤ i - k;
   
   }
  */
-- 
GitLab